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