Javascript 基于布尔值将数组中的元素顺时针分配给容器

Javascript 基于布尔值将数组中的元素顺时针分配给容器,javascript,arrays,algorithm,javascript-objects,Javascript,Arrays,Algorithm,Javascript Objects,我正在制作一个可视纸牌游戏,需要让玩家坐在桌子周围。 同时将布尔值“pov”设置为“true”的玩家ID应始终分配给底部容器(在座位中)。之后,球员ID应顺时针围绕桌子排列 此外,该游戏可由2至4名玩家玩,从而减少了座位和桌上的不同设置: 2名玩家:座椅底部,座椅左侧 3名玩家:座椅底部、座椅左侧、座椅右侧 4名玩家:座椅底部、座椅左侧、座椅顶部、座椅右侧 我提出了一个可行的解决方案,但它非常长,并且使用了许多嵌套语句。我怎样才能写得更好?非常感谢 这是在函数中传递的玩家数组: let play

我正在制作一个可视纸牌游戏,需要让玩家坐在桌子周围。 同时将布尔值“pov”设置为“true”的玩家ID应始终分配给底部容器(在座位中)。之后,球员ID应顺时针围绕桌子排列

此外,该游戏可由2至4名玩家玩,从而减少了座位和桌上的不同设置:

2名玩家:座椅底部,座椅左侧
3名玩家:座椅底部、座椅左侧、座椅右侧
4名玩家:座椅底部、座椅左侧、座椅顶部、座椅右侧

我提出了一个可行的解决方案,但它非常长,并且使用了许多嵌套语句。我怎样才能写得更好?非常感谢

这是在函数中传递的玩家数组:

let players =
    [{ name: "Player2", id: 1, admin: false, pov: false, curDealer: false, },
    { name: "Player3", id: 2, admin: false, pov: false, curDealer: false, },
    { name: "Player4", id: 3, admin: false, pov: false, curDealer: false, },
    { name: "Player1", id: 4, admin: true, pov: true, curDealer: false, }]

此对象保存指定玩家Id的最终位置

    _seats = {
        bottom: 0,
        left: 0,
        top: 0,
        right: 0
    };

这是我的工作解决方案:

 renderPlayersAtTable(arr) {

        var seatCount = arr.length;

        arr.forEach(player => {
            if (player.pov === true) {
                this._seats.bottom = player.id

                if (seatCount === 4) {

                    switch (player.id) {
                        case 4:
                            this._seats.right = 3;
                            this._seats.top = 2;
                            this._seats.left = 1;
                            break;
                        case 3:
                            this._seats.right = 2;
                            this._seats.top = 1;
                            this._seats.left = 4;
                            break;
                        case 2:
                            this._seats.right = 1;
                            this._seats.top = 4;
                            this._seats.left = 3;
                            break;
                        case 1:
                            this._seats.right = 4;
                            this._seats.top = 3;
                            this._seats.left = 2;
                            break;
                    }
                }

                if (seatCount === 3) {

                    switch (player.id) {

                        case 3:
                            this._seats.right = 2;
                            this._seats.left = 1;
                            break;
                        case 2:
                            this._seats.right = 1;
                            this._seats.left = 3;
                            break;
                        case 1:
                            this._seats.right = 3;
                            this._seats.left = 2;
                            break;
                    }
                }

                if (seatCount === 2) {

                    switch (player.id) {

                        case 2:
                            this._seats.left = 1
                            break;
                        case 1:
                            this._seats.left = 2
                            break;
                    }
                }

            }
        })



    }

始终尽可能地将内容放入数据结构和对象中。。。为此,添加了
座位表
,以表示基于玩家数量的座位变化。由于数组在javascript中是以零为基础的,因此
seatingChart
中代表0名玩家的第一个列表是空的

另一个关键因素是通过模索引引入阵列旋转。若要遍历整个数组,但从某个中间开始,则需要将数组从0循环到数组的长度,但添加起始元素,然后应用数组长度的模。例如,假设一个由0-4个元素组成的数组,您希望从元素3开始。然后,利用模,我们可以计算出所需的指数,从而

  • i=0,索引=(i+3)%5,即3%5=3
  • i=1,指数=(i+3)%5,即4%5=4
  • i=2,指数=(i+3)%5,即5%5=0
  • i=3,指数=(i+3)%5,即6%5=1
  • i=4,指数=(i+3)%5,即7%5=2
注意
索引
值序列是如何
3,4,0,1,2
的,它遍历整个数组,但从3开始

这个基本概念在下面的
for
循环中使用,从POV播放器开始,将该播放器对齐在第一个座位上(在
座位图
中始终是
底部
),并继续在播放器阵列中行走,以相应地放置剩余的播放器

let player=[
{name:“Player1”,id:1,admin:false,pov:false,curDealer:false,},
{name:“Player2”,id:2,admin:false,pov:false,curDealer:false,},
{name:“Player3”,id:3,admin:false,pov:false,curDealer:false,},
{name:“Player4”,id:4,admin:true,pov:true,curDealer:false,}
];
座位图=[
[],
[“底部”],
[‘底部’、‘顶部’],
[“底部”、“左侧”、“右侧”],
[‘底部’、‘左侧’、‘顶部’、‘右侧’]
];
设_seating={};
让povPlayerIndex=players.findIndex(p=>p.pov);
for(设i=0;i控制台日志(座位)这太棒了!是的,我的版本可能可读,但我知道从功能的角度看,这是一场噩梦。此刻我想到的就是这些:)非常感谢!