注意:我按照ajrwhite的答案来编写javascript代码。希望它能帮到别人。 链接:http://codepen.io/eMineiro/pen/EKrNBe 打开codepen控制台以查看示例是否正常工作。
在扑克中,我们根据经销商来定义玩家的位置。如下所示:

蓝色:小盲和大盲位置
绿色:迟到及交易商/迟交职位
黄色:中间位置
粉红:早期职位
因此,假设这两个数组:
players:[1,2,3,4,5,6,7,8,9,10];
positions:["bb","sb","btn","late","medium","medium","medium","early","early","early"];在这种情况下,"player1“是”大盲“,"player2”是“小盲”,"player3“是”按钮“……
当调用changePositions(经销商)时,我想对播放器数组进行排序。示例:
changePosition(10); //means that "player10" now is the new Dealer其结果应该是:
players:[2,1,10,9,8,7,6,5,4,3];
positions:["bb","sb","btn","late","medium","medium","medium","early","early","early"];在比赛中,球员可能会被淘汰。因此,我有一个函数,排除“位置数组”中的“最后位置”,并排除玩家。然后我需要再次调用changePosition(X),其中X是"player10“(实际交易商)左边的下一个未淘汰的玩家。
例如,删除了"player 1",新的数组应该是:
players:[2,10,9,8,7,6,5,4,3];
positions:["bb","sb","btn","late","medium","medium","medium","early","early"];我需要再次调用changePosition(X)来确定新的头寸,在本例中是X=2,因为"player2“位于实际交易商"player10”的左边。
changePosition(2);并应产生以下结果:
players:[4,3,2,10,9,8,7,6,5];
positions:["bb","sb","btn","late","medium","medium","medium","early","early"];,当玩家被淘汰时,我怎样才能找到新的经销商?
注意:我创建了一个名为changeNextDealer().的函数负指数不是问题,因为下一个交易商是顺时针方向的。在代码笔链接中。
dealerArrayPosition-1; //But if bigBlind and smallBlind was eliminated simultaneously I get a negative position.如何将负指数映射为-1,到最后一个位置.或者-2到最后一个位置-1?有快速的方法吗?
注:这一问题仍未得到解答,但不是本次讨论的主要问题。我想A会在一个分开的岗位上问。
我该如何做changePosition(经销商)函数?
我试过这么多,但不知道怎么做。
注意:我创建了一个名为changePosition().的函数在密码链接里。
发布于 2016-05-07 17:53:29
让我们假设玩家总是被编号为1-10。我们不需要两个数据结构来存储玩家的位置和状态。我们只需要一个索引数据结构来存储播放器状态:
状态1
positions:["btn","sb","bb","early","early","early","medium","medium","medium","late"];状态2
positions: ["late","btn","sb","bb","early","early","early","medium","medium","medium"]状态3
positions: ["eliminated","late","btn","sb","bb","early","early","early","medium","medium"];这存储了与两个数组相同的信息量,并且更加一致。您只需访问positions[0],查看玩家1的状态是什么,或者10玩家的positions[9]是什么。
现在,有了这种更一致的结构,在每一轮结束时应该更容易处理状态更改。
消除玩家
每轮结束后,将被淘汰的球员的状态更改为"eliminated"。此时您可能需要一个临时数组,这样您就可以检查上一轮中发生了什么,仍然会更新下一轮的信息。
如何将数组视为圆环
将交易商芯片"btn"移动到(currentPositionOfBtn+1)%10 --这意味着按钮从1移动到2移动到3,等等,但是通过使用剩余的操作符和玩家总数,我们确保从位置9(玩家10)的移动回到0(播放器1)。
如果currentPositionOfBtn+1)%10中的播放器已经被淘汰,那么检查currentPositionOfBtn+2)%10等等--这是一个很容易实现的循环。
重新计算位置
现在,鉴于位置的描述随着球员被淘汰而改变(在结束时你没有“早”或“中”),我建议在每一轮结束时重新计算交易商的位置,跳过任何标记为“已被淘汰”的球员。
https://stackoverflow.com/questions/37091503
复制相似问题