数据结构:循环队列(C中)

时间:2013-07-28 20:51:33

标签: c data-structures queue

我正在进行Uno Card游戏(在C中),我按照以下顺序拥有循环队列:

用户 - > player1 - > player2 - > player3

如果任何玩家在牌桌上放置一张改变游戏顺序的牌,则会反方向。

例如,如果用户放入“反向”牌,我将不得不将每个玩家队列出局,并将其排队:

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);

太可怕了,不是吗?就这样说吧,就像任何一个“if”一样。我知道当有人把“反向”牌放在第一件事就是让每个人都出名,但在那之后,有更好的方法可以按照上面的想法排队吗?

1 个答案:

答案 0 :(得分:0)

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

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

播放反向卡时,只需更改步骤的符号?

  • 开始:index = player1,step =顺时针(+1)
  • 重复
    • 播放器播放卡片...如果反向,则执行步骤=!步骤
    • 转到下一位玩家:index + = step
  • 直到结束

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