gpt4 book ai didi

c - 一堆纸牌和 war 游戏

转载 作者:行者123 更新时间:2023-11-30 15:53:21 25 4
gpt4 key购买 nike

所以我正在制作一个名为War的卡牌游戏,规则如下:

  1. 玩家 1 和玩家 2 各自有一个名为 q1 和 q2 的纸牌队列。两个都队列不为空。玩家的战斗堆栈也为空 s1和s2。
  2. 每个玩家从队列前面取出一张牌并将其放入在他们的堆栈顶部
  3. 如果牌面值相等,就会发生 war 。
  4. 每位玩家将 3 张额外的牌从队列中移至堆叠中并再次检查他们最上面的牌的面值。这可能会发生几次。再次转到3。
  5. 如果卡牌的值不相等,则战斗结束,并且可以确定。

我必须编写的函数称为start_battle.c,我提出的逻辑如下:queue_frontqueue_emptystack_top 函数已经写好了。所以我的伪代码如下:

function start_battle(q1, q2, s1, s2, logfile)

warc=0
move front card of q1 to the top of s1
move front card of q2 to the top of s2
while (top cards of s1 and s2 have equal value
and both q1 and q2 are not empty)
for i=1 to 3
if q1 is not empty
move front card of q1 to the top of s1
endif
done
for i=1 to 3
if q2 is not empty
move front card of q2 to the top of s2
endif
done
done
return warc

我的代码如下:

#include "libcardlist.h"
int start_battle(queue *q1, queue *q2, stack *s1, stack *s2, FILE *logfile){
int warc =0;
int i;
stack_push(s1, queue_front(q1));
stack_push(s2, queue_front(q2));
card c1 = stack_top(s1);
card c2 = stack_top(s2);
while (c1.face==c2.face&& queue_empty(q1)==0 && queue_empty(q2)==0) {
warc++;
for (i=0; i<3; i++) {
if(queue_empty(q1)==0){
stack_push(s1, queue_front(q1));
}
}
for (i=0; i<3; i++) {
if (queue_empty(q2)==0){
stack_push(s2, queue_front(q2));
}
}
}
return warc;
}

哦还有

typedef struct {
int face; /* 2-14 */
char suit; /* C H S D */
} card;

当我测试它时,我的代码卡在 while 循环中,有人可以帮我修复它吗?

最佳答案

我在您的算法中适当的位置添加了queue_pop()。将卡从队列复制到堆栈(通过推送)后,您需要将其从堆栈中删除。事实上,这应该是游戏主要玩法的一部分,而不是介绍(它是一样的,但你最终会明白这一点),并且你需要移动两堆一旦宣布特定回合的获胜者,卡片就会被放入适当的队列中。

无论如何,把你的流行音乐放在那里。

int start_battle(queue *q1, queue *q2, stack *s1, stack *s2, FILE *logfile){    
int warc =0;
int i;
stack_push(s1, queue_front(q1));
queue_pop(q1); // no longer in this queue.
stack_push(s2, queue_front(q2));
queue_pop(q2); // no longer in this queue.
card c1 = stack_top(s1);
card c2 = stack_top(s2);
while (c1.face==c2.face && queue_empty(q1)==0 && queue_empty(q2)==0) {
warc++;
for (i=0; i<3; i++) {
if(queue_empty(q1)==0){
stack_push(s1, queue_front(q1));
queue_pop(q1);
}
}
for (i=0; i<3; i++) {
if (queue_empty(q2)==0){
stack_push(s2, queue_front(q2));
queue_pop(q2);
}
}
}

return warc;
}

关于c - 一堆纸牌和 war 游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13714284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com