我正在做一个 Uno Card 游戏(C 语言),并且我有一个按以下顺序排列的循环队列:
用户 -> 玩家1 -> 玩家2 -> 玩家3
如果任何玩家在牌 table 上放入一张改变游戏顺序的牌,则方向相反。
例如,如果用户放置“反向”卡,我就必须使每个玩家出队并像这样入队:
enqueue(player3);
enqueue(player2);
enqueue(player1);
enqueue(user);
如果玩家1,则将所有人出队,然后:
enqueue(user);
enqueue(player3);
enqueue(player2);
enqueue(player1);
如果玩家2,则将所有人出队,然后:
enqueue(player1);
enqueue(user);
enqueue(player3);
enqueue(player2);
如果是player3,则将所有人出队,然后:
enqueue(player2);
enqueue(player1);
enqueue(user);
enqueue(player3);
太可怕了,不是吗?可以这样说,就像对任何情况都有一个“如果”。我知道,当有人放置“反向”卡时,首先要做的就是让所有人出队,但之后,是否有更好的方法按照上述想法进行入队?
最佳答案
你不能用一个简单的索引和一个步长(+1或-1)来做到这一点吗?
索引 = { 玩家 1, 玩家 2, 玩家 3, 用户 } 步骤= {顺时针,逆时针}
当打出反向牌时,只需改变步骤的符号即可?
- 开始:index=player1,step=顺时针(+1)
- 重复
- 玩家打牌...如果相反,step = !step
- 移至下一个玩家:索引 += 步骤
直到结束
显然,索引需要边界检查等,但你得到了主体
关于c - 数据结构: Circular Queue (in C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17912770/