搜索
查看: 3471|回复: 14
打印 上一主题 下一主题

纸牌游戏小猫钓鱼有问题求教!

[复制链接]
楼主
发表于 2019-10-26 16:28:45 | 显示全部楼层
#include"stdio.h" struct queue {   //定义队列     int data[1000];     int head;     int tail; }; struct stack {     //定义栈     int data[10];     int top; }; int main() {     struct queue q1,q2;//分别模拟小哼、小哈     struct stack s;//模拟桌子     int i,t,book[10]={0};     //初始化队列     q1.head=1;q1.tail=1;     q2.head=1;q2.tail=1;     //初始化栈     s.top=0;     //给小哼发牌     for(i=1;i<=6;i++)     {         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.data[++s.top]=t;//打出的牌入栈             book[t]=1;//记下桌子上小哼打出的牌         }         else//小哼发现打出的牌与桌子上某一张一样,则说明赢牌         {             q1.head++;//打出的牌出列             q1.data[q1.tail]=t;//打出的牌入列             q1.tail++;             //小哼收下两张一样的牌中间的牌,并将它们放到手牌后面             while(s.data[s.top]!=t)             {                 book[s.data[s.top]]=0;//每收下一张牌取消标记                 q1.data[q1.tail]=s.data[s.top];                 q1.tail++;                 s.top--;             }             //收下另一张与打出的牌相同的牌,并将它们放到手牌后面             q1.data[q1.tail]=s.data[s.top];             q1.tail++;             s.top--;             book[t]=0;//此时小哼打出的牌在桌子上的出现次数归零         }         if(q1.head==q1.tail)    break;//如果小哼打完手中牌,则游戏结束         //小哈出牌阶段         t=q2.data[q2.head];//标记小哈打出的牌         if(book[t]==0)//小哈打出的牌没有和桌子上一致,则没有赢牌         {             q2.head++;//打出的牌出列             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--;             }             //小哈收下与打出的牌相同的牌             q2.data[q2.tail]=s.data[s.top];             q2.tail++;             s.top--;             book[t]=0;//此时小哈打出的牌在桌子上在桌子上的出现次数归零         }     }     if(q1.head==q1.tail)     {         printf("小哈win\n小哈当前手中的牌是:");         for(i=q2.head;i<q2.tail;i++)             printf(" %d",q2.data[i]);//依次输出小哈手上的牌         printf("\n");         if(s.top==0)//判断栈顶是否为0,从而判断桌子是否还有牌             printf("桌子上没有牌了\n");         else{             printf("桌子上的牌是:");             for(i=1;i<=s.top;i++)                 printf(" %d",s.data[i]);//依次输出桌子上的牌             printf("\n");         }     }     else     {        printf("小哼win\n小哼当前手中的牌是:");         for(i=q1.head;i<q1.tail;i++)             printf(" %d",q1.data[i]);//依次输出小哼手上的牌         printf("\n");         if(s.top==0)//判断栈顶是否为0,从而判断桌子是否还有牌             printf("桌子上没有牌了\n");         else{             printf("桌子上的牌是:");             for(i=1;i<=s.top;i++)                 printf(" %d",s.data[i]);//依次输出桌子上的牌             printf("\n");         }     }     return 0; } 运行结果:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表