C语言实现纸牌游戏--小猫钓鱼
程序员文章站
2022-04-21 20:13:20
C语言使用队列和栈实现纸牌游戏–小猫钓鱼C语言://纸牌游戏--小猫钓鱼--队列 栈--(所谓的拉火车) #include struct queue //队列 {int data[1000];int head;int tail;}; struct stack //栈 {int data[10];int top;};int main(void){struct queue q1, q2; //小...
C语言使用队列和栈实现纸牌游戏–小猫钓鱼
C语言:
//纸牌游戏--小猫钓鱼--队列 栈--(所谓的拉火车)
#include <stdio.h>
struct queue //队列
{
int data[1000];
int head;
int tail;
};
struct stack //栈
{
int data[10];
int top;
};
int main(void)
{
struct queue q1, q2; //小哼 q1 和小哈 q2 的队列
struct stack s; //栈
int book[10]; //记录,判断是否第二次出现
int i, t;
q1.head = 1, q1.tail = 1; //初始化队列
q2.head = 1, q2.tail = 1;
s.top = 0; //初始化栈
for(i = 1;i <= 9;i++) //初始化出现次数为 0
book[i] = 0;
for(i = 1; i <= 6; i++) { //这里给定一个人 6 张牌
scanf("%d", &q1.data[q1.tail]);
q1.tail++;
}
for(i = 1;i <= 6;i++) {
scanf("%d", &q2.data[q2.tail]);
q2.tail++;
}
while(q1.head < q1.tail && q2.head < q2.tail ) { //当队列不为空的时候执行循环
t = q1.data[q1.head]; //小哼(先)出牌
if(book[t] == 0){ //当桌上无此牌时
q1.head++; //将此牌出队
//s.top++;
s.data[++s.top] = t; //将打出的牌入栈
book[t] = 1; //标记此牌桌上已有
}else{ //此牌桌上已有,小哼能赢
q1.head++; //将打出的此牌出队
q1.data[q1.tail] = t; //将此牌入队尾
q1.tail++;
while(s.data[s.top] != t) { //把桌子上赢的牌收回去, 此处没有收最后一根牌 t
book[s.data[s.top]] = 0; //取消标记
q1.data[q1.tail] = s.data[s.top]; //依次放在队尾
q1.tail++;
s.top--; //栈中少了一张牌,所以- 1
}
//收回桌上的 t 牌
book[t] = 0;
q1.data[q1.tail] = t;
q1.tail++;
s.top--;
}
if(q1.head == q1.tail ) //如果小哼牌打完了,游戏结束
break;
//轮到小哈出牌了,和小哼一样判断
t = q2.data[q2.head];
if(book[t] == 0) {
q2.head++;
s.top++;
s.data[s.top] = t;
book[t] = 1;
}
else {
q2.head++;
q2.data[q2.tail] = t;
q2.tail++;
while(s.data[s.top] != t) {
book[s.data[s.top]] = 0;
q2.data[q2.tail] = s.data[s.top];
q2.tail++;
s.top--;
}
book[t] = 0;
q2.data[q2.tail] = t;
q2.tail++;
s.top--;
}
}
if(q2.head == q2.tail ) {
printf("小哼 win \n");
printf("小哼当前手中的牌是 ");
for(i = q1.head;i < q1.tail;i++)
printf(" %d",q1.data[i]);
if(s.top) { //如果桌子上有牌的话
printf("\n桌子的牌是");
for(i = 1;i <= s.top;i++)
printf(" %d",s.data[i]);
printf("\n");
}
else
printf("\n桌子上已经没有牌了");
} else {
printf("小哈 win \n");
printf("小哈当前手中的牌是 ");
for(i = q2.head;i <= q2.tail-1;i++)
printf(" %d", q2.data[i]);
if(s.top) { //如果桌子上有牌的话
printf("\n桌子的牌是");
for(i = 1;i <= s.top;i++)
printf(" %d",s.data[i]);
printf("\n");
} else
printf("\n桌子上已经没有牌了");
}
return 0;
}
/*Code Running Results
1 2 3 4 5 6
3 2 1 5 2 6
小哈 win
小哈当前手中的牌是 5 6 2 3 1 3 2 5 2
桌子的牌是 4 6 1
*/
该程序使用队列来实现玩家的手中的牌(玩家的牌只能前面出牌,赢得牌依次放后面),用栈实现桌子上的牌(出牌放在末端,赢牌也是从末端拿走)。
本文地址:https://blog.csdn.net/qq_45772965/article/details/108986543