游戏规则:双人游戏,将纸牌平均分成两份,每人拿一份。两人轮流出牌,每次出牌放到上一张出的牌上,若桌面上有与他打出 的牌相同的牌,则把这两张牌及中间所有的牌都拿走,并放到自己手牌的末尾,若有人把牌打完,则另一人胜利;
#include <stdio.h>
struct stacks //设置一个栈,用来模拟桌上的牌
{
int top;
int date[10];
};
struct queue //设置一个队列,用来模拟两人的手牌
{
int head;
int tail;
int date[1000];
};
int main(void)
{
int i,t;
int book[10]={0}; //book用于记录桌上的牌以及点数,用于判断赢牌
struct stacks stack;
struct queue q1,q2; //q1,q2分别为两人手牌
//准备阶段
stack.top=0;
q1.head=0;
q1.tail=0;
q2.head=0;
q2.tail=0; //初始化,开始桌面和手中均没有牌
for(i=0;i<6;++i)
{
scanf("%d",&q1.date[q1.tail++]); //第一个人先拿6张牌,即入队操作
}
for(i=0;i<6;++i)
{
scanf("%d",&q2.date[q2.tail++]);
}
//游戏开始
while(q1.head<q1.tail && q2.head<q2.tail) //两人手中都有手牌才进行游戏
{
t=q1.date[q1.head++]; //出牌相当于出对t暂存出的牌,然后判断桌上是否有相同点数牌
if(1==book[t]) //发现桌上有相同点数的牌
{
q1.date[q1.tail++]=t; //首先,将这张牌拿回来
while(stack.date[stack.top]!=t) //再那桌上的牌
{
book[stack.date[stack.top]]=0;
q1.date[q1.tail++]=stack.date[stack.top--];
}
q1.date[q1.tail++]=stack.date[stack.top--];
book[t]=0;
}
else //若没有相同的牌
{
stack.date[++stack.top]=t; //相当于出队,入栈操作
book[t]=1;
}
if(q1.head==q1.tail) //第一个人牌若打完,游戏结束
break;
//第一个人的操作模拟完成,接下来写第二个人的
t=q2.date[q2.head++];
if(1==book[t])
{
q2.date[q2.tail++]=t;
while(stack.date[stack.top]!=t)
{
book[stack.date[stack.top]]=0;
q2.date[q2.tail++]=stack.date[stack.top--];
}
q2.date[q2.tail++]=stack.date[stack.top--];
book[t]=0;
}
else
{
stack.date[++stack.top]=t;
book[t]=1;
}
if(q2.head==q2.tail)
break;
}
if(q1.head==q1.tail)
{
printf("第二个人获得游戏胜利\n");
printf("他手中的排是:");
for(i=q2.head;i<q2.tail;++i)
printf("%d ",q2.date[i]);
printf("\n");
if(stack.top>0)
{
printf("桌上的牌是:");
while(stack.top>0)
{
printf("%d ",stack.date[stack.top--]);
}
}
else
printf("桌上没有牌");
}
else
{
printf("第一个人获得游戏胜利\n");
printf("他手中的排是:");
for(i=q1.head;i<q1.tail;++i)
printf("%d ",q1.date[i]);
printf("\n");
if(stack.top>0)
{
printf("桌上的牌是:");
while(stack.top>0)
{
printf("%d ",stack.date[stack.top--]);
}
}
else
printf("桌上没有牌");
}
return 0;
}