腾讯课堂客服电话:牌类程序编写

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/01 02:35:49
小女子急需编写一个简单的牌类程序,哪位高手知晓这个方面的,请指教

给点建议,用1到13个数字表示是什么牌。

同样花色也用1,2,3,4来表示,

查找牌是否同花色就是比较 1,2,3,4
看牌是不是一对就是比较 1到13 个数字。
同样其他规则也是这样实现的,我以前都做了个,不知道扔到哪里去了。

牌的图像随便找个网络游戏比如QQ的纸牌游戏,
安装之后都可以从他那里获得。

我曾经用c语言写了一个,不过还不够完善,你可以看下。
牌的规则是:由大及小:7 王 5 2 3 A K Q J 10 9 8 6 4 黑桃>梅花>红桃>方块,
/*扑克游戏之七王五二三*/
/*作者:翁家祥*/
/*日期:2005/04/02*/
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
struct CARD
{
char suit;
char face[10];
int flag;/*用来标志牌的大小及是否已出*/
};
typedef struct CARD puke;
puke card[54],a[5],b[5];
int point=0,tag=3;/*前者标记牌已抽了几张;后者标记出一局后谁大*/
int s1=0,s2=0;/*判断输赢*/
void riffle(void)
{
char Suit[4]={"\4\3\5\6"};
char *Face[]={"4","6","8","9","10","Jack","Queen","King","A","3","2","5","7"};
int i,j;
puke temp;
strcpy(card[53].face,"BigJoke");
card[53].suit=' ';
strcpy(card[52].face,"SmallJoke");
card[52].suit=' ';
card[52].flag=49;
card[53].flag=50;
for(i=0;i<52;i++)
{
card[i].suit=Suit[i%4];
strcpy(card[i].face,Face[i/4]);
if(i<48)
card[i].flag=i+1;
else
card[i].flag=i+3;
}
srand(time(NULL));
for(i=0;i<54;i++)
{
j=rand()%54;
temp=card[i];
card[i]=card[j];
card[j]=temp;
}
}
void display(void)
{
int i,j,counter=1;
if(point==0)
{
for(i=0;i<10;i++)
{
if((i%2)==0)
a[i/2]=card[point++];
else
b[(i-1)/2]=card[point++];
}
}
if(point>0)
{
if(tag==0) /*表示playeer大,故先抽牌*/
{
for(j=0;j<5&&point<54;j++)
if(a[j].flag==0)
a[j]=card[point++];
for(i=0;i<5&&point<54;i++)
if(b[i].flag==0)
b[i]=card[point++];
}
else if(tag==1) /*表示computer大,故先抽牌*/
{
for(i=0;i<5&&point<54;i++)
if(b[i].flag==0)
b[i]=card[point++];
for(j=0;j<5&&point<54;j++)
if(a[j].flag==0)
a[j]=card[point++];
}
}
for(i=0;i<5;i++)
{
if(a[i].flag==0)
continue;
else
{
printf("%c%10s%30d\n",a[i].suit,a[i].face,i+1);
}
}
if(point<11)
printf("The five cards above are yours.\n");

}
int finger_guess(void)
{
char ch;
char artificial;
int random;
int p=0;
while (p==0)
{
srand(time(NULL));
printf("Please input one case you want to put:\n(A/a:stone;B/b:cloth;C/c:forfex)\n");
artificial=getch();

if(artificial!='A'&&artificial!='B'&&artificial!='C'&&artificial!='a'&&artificial!='b'&&artificial!='c')
continue;
if(artificial=='A'||artificial=='a')
printf("You put out stone.\n");
if(artificial=='B'||artificial=='b')
printf("You put out cloth.\n");
if(artificial=='C'||artificial=='c')
printf("You put out forfex.\n");
random=rand()%3+1;
switch(random)
{
case 1:
printf("I put out stone.\n");
if(artificial=='A'||artificial=='a')
{
printf("Ah,We are the same.\n");
continue;
}
if(artificial=='B'||artificial=='b')
{
p=1;
return 1;
}
if(artificial=='C'||artificial=='c')
{
p=1;
return 0;
}

case 2:
printf("I put out cloth.\n");
if(artificial=='B'||artificial=='b')
{
printf("Ah,We are the same.\n");
continue;
}
if(artificial=='C'||artificial=='c')
{
p=1;
return 1;
}
if(artificial=='A'||artificial=='a')
{
p=1;
return 0;
}
case 3:
printf("I put out forfex.\n");
if(artificial=='C'||artificial=='c')
{
printf("Ah,We are the same.\n");
continue;
}
if(artificial=='B'||artificial=='b')
{
p=1;
return 0;
}
if(artificial=='A'||artificial=='a')
{
p=1;
return 1;
}
}

}
}
void EXIT(void)
{
if(s1==5)
printf("Ha!I have won!");
if(s2==5)
printf("Oh!You are perfect!");
getch();
exit(0);
}

void put_cards(void)
{
int wanna_put,i,j,tag2,guess;
int q,p;/*标记牌小于牌temp的个数,若p或q等于5,则表示没有*/
int r,s;/*分别用来标记玩家和电脑牌还剩多少张*/
puke temp2,temp;
if(point<11)
{
guess=finger_guess(); /*调用猜拳函数决定谁先出牌*/
if(guess==1) /*如果玩家赢拳,则标记tag=0,表示玩家先出*/
tag2=0;
else /*如果电脑赢拳,则标记tag=1,表示电脑先出*/
tag2=1;
}
if(tag==3&&tag2==0)
{
while(1)
{
scanf("%d",&wanna_put);
if(a[wanna_put-1].flag==0)
{
printf("Wrong!\nInput again.");
continue;
}
else
{
printf(" player: %c%10s\n",a[wanna_put-1].suit,a[wanna_put-1].face);
temp=a[wanna_put-1];
a[wanna_put-1].flag=0;
tag2=2;/*表示该computer出牌了*/
break;
}
}
}
if(tag==3&&tag2==1)
{
for(j=0;j<5;j++)
if(b[j].flag!=0)
{
temp=b[j];
break;
}
for(i=1;i<5;i++)
if(b[i].flag>0&&temp.flag>b[i].flag)
temp=b[i];
for(j=0;j<5;j++)
if(temp.flag==b[j].flag)
b[j].flag=0;
printf("computer: %c%10s\n",temp.suit,temp.face);
tag2=3;/*表示该玩家出牌*/
}
while(tag!=0&&tag!=1)/*即当tag等于3的时候为入口。tag为0时玩家大,为1时电脑大*/
{
if(tag2==2) /*如果是该电脑出牌*/
{
p=0;
s=0;
for (i=0;i<5;i++)
{
if((b[i].flag>0)&&(b[i].flag<temp.flag))
{
p++;
continue;
}
else if(b[i].flag>temp.flag)
{
temp2=temp;
temp=b[i];
break;
}
}

for(j=0;j<5;j++)
{
if(b[j].flag!=0)
s++;
}
if(p<s)
{
for(j=i;j<5;j++)
if(b[j].flag>0&&b[j].flag<temp.flag&&b[j].flag>temp2.flag)
temp=b[j];
printf("computer: %c%10s\n",temp.suit,temp.face);

tag2=3; /*表示该玩家出牌*/

for(j=0;j<5;j++)
if(temp.flag==b[j].flag)
b[j].flag=0;
if(point==54)
{
s1=0;
for(i=0;i<5;i++)
if(b[i].flag==0)
s1++; /*用来标记电脑是否已经赢牌*/
if(s1==5)
EXIT();/*如果赢牌,则程序结束,跳到末尾*/
}
}
if(p==s) /*表示没有,退出循环*/
{
tag=0;
tag2=0;
temp.flag=0;
printf("The card is so high.I can't put down.\n");
}

}

if(tag2==3)
{
q=0;
r=0;
for (i=0;i<5;i++)
{
if((a[i].flag>0)&&(a[i].flag<temp.flag))
q++;
}
for(j=0;j<5;j++)
{
if(a[j].flag!=0)
r++;
}
if(q==r)
{
printf("Sorry.The card is so high.You have to give up!\nLet's take new cards.\n");
temp.flag=0;
tag=1;/*表示电脑这局大*/
tag2=1;/*表示下次开牌由电脑先出*/
}

while (q<r)
{
scanf("%d",&wanna_put);
if(wanna_put>6||(wanna_put<6&&a[wanna_put-1].flag<=temp.flag)||a[wanna_put-1].flag==0) /*错误:电脑如果没有,而我又出牌导致temp是前一次的牌。*/
{
printf("Wrong!Input again!");
continue;
}
else if(wanna_put==6)
{
tag=1;
tag2=1;
printf("You give up!\n");
break;
}
else
{
temp=a[wanna_put-1];
a[wanna_put-1].flag=0;
printf(" player: %c%10s\n",temp.suit,temp.face);
if(point==54)
{
s2=0;
for(i=0;i<5;i++)
if(a[i].flag==0)
s2++;
if(s2==5) /*表示玩家已经赢牌*/
EXIT();
}
tag2=2;
break;
}

}
}
}

}

main()
{
riffle();
while (1)
{
display();
tag=3;
put_cards();

}
}

这里有你要的答案:http://cndzz.com/bbs/?u=16374