-2

我正在做一个 Uno Card 游戏(在 C 中),我有一个循环队列,顺序如下:

用户->播放器1->播放器2->播放器3

如果任何玩家在桌子上放一张改变游戏顺序的牌,将是相反的方向。

例如,如果用户放了“反向”卡,我将不得不让每个玩家出队,然后像这样入队:

enqueue(player3);
enqueue(player2);
enqueue(player1);
enqueue(user);

如果 player1,让每个人都出队,然后:

enqueue(user);
enqueue(player3);
enqueue(player2);
enqueue(player1);

如果 player2,让每个人都出队,然后:

enqueue(player1);
enqueue(user);
enqueue(player3);
enqueue(player2);

如果 player3,让每个人都出队,然后:

enqueue(player2);
enqueue(player1);
enqueue(user);
enqueue(player3);

太可怕了,不是吗?以这种方式说,就像任何情况下的一个“如果”。我知道当有人放“反向”卡时,首先要做的就是让每个人都出队,但在那之后,有没有更好的方法来按照上面的想法入队?

4

1 回答 1

0

你不能用一个简单的索引和一个步骤(+1 或 -1)来做到这一点吗?

index = { player1, player2, player3, user } step = { 顺时针, 逆时针}

打出反转牌时,只改变步的符号?

  • 开始:index=player1,step=顺时针(+1)
  • 重复
    • 玩家出牌...如果反向,step = !step
    • 移动到下一个玩家:index += step
  • 直到结束

    显然,索引需要边界检查等,但你得到了本金

于 2013-07-28T21:00:09.147 回答