Ⅰ c语言编程 扑克发牌
头文件:
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
初始化 洗牌 发牌 程序没有声明
int b,c,i,q=0,a[52];
int chu();
int xipai();
int fapai(int);
int型函数没有返回值。添加return(0)。
发牌次序不合实际。
做了一点改动。fapai的参数减少了一个,只剩下p作为总牌数。
q定义为全局变量,作为计数当前发牌人序号。
发牌程序更改,i每次增加4,实现跳序发牌。末尾增加q++。
fapai(int p)
{
for(i=q;i<p;i=i+4)
{
b=(a[i]-1)/13;
c=a[i]-b*13;
switch(b)
{
case 0 :printf("%c%d ",3,c);break;
case 1 :printf("%c%d ",4,c);break;
case 2 :printf("%c%d ",5,c);break;
case 3 :printf("%c%d ",6,c);break;
default:printf("error\n");
return(0);
}
}
q++;
}//发牌程序
主函数调用fapai函数时,p值赋52即扑克总数。
void main()
{
chu(); //调用赋初值程序
xipai(); //调用洗牌程序
printf("第一位的牌是:\n");
fapai(52); //调用发牌程序,给第一位发牌
printf("\n第二位的牌是:\n");
fapai(52); //调用发牌程序,给第二位发牌
printf("\n第三位的牌是:\n");
fapai(52); //调用发牌程序,给第三位发牌
printf("\n第四位的牌是:\n");
fapai(52); //调用发牌程序,给第四位发牌
printf("\n");
}
个人意见,欢迎交流。
Ⅱ 如何用c语言编写纸牌发牌程序
发牌原程序见我的空间(http://hi..com/crazycola/blog/item/52402bd4b3f68705a08bb746.html),可选是否包含大小王,可选发牌列数。
以下为改过的版本,不包含大小王(即总数52张),只能发4堆。
另外附加了用户菜单,原程序中不含菜单部分。
代码如下:
---------------------------------------
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
int menu()
{
int choice;
printf("1 发牌/0 退出:");
scanf("%d",&choice);
return choice;
}
void main( void )
{
int i1, j, total;
int *iArr;
int tag = 0;
char* pok_C[] = { "黑桃", "红桃", "梅花", "方块" };
char* pok_N[] = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
if(!menu()) exit(0);
total = 52;
srand( (unsigned)time( NULL ) );
iArr = (int*)malloc(total*sizeof(int));
for( i1=0; i1<total; i1++ )
{
iArr[i1]=rand()%total;
if( i1==0 ) continue;
do {
tag = 0;
for( j=0; j<i1; j++ )
if( iArr[j] == iArr[i1] )
{
iArr[i1]=rand()%total;
tag = 1;
}
} while( tag==1 );
}
for( i1=0; i1<total; i1++ )
{
printf("%s%s\t",pok_C[iArr[i1]%4],pok_N[iArr[i1]%13]);
if(i1%4==3) printf("\n");
}
free(iArr);
}
Ⅲ C语言斗地主发牌程序,急求,谢谢
这是以随机的形式发牌的。希望能帮到你。
int main(){ int a[60]; int b[60]; int w = 0; int wi,wj,wii; int i,j,index,x=0,m; for(i=0;i<54;i++) a[i]=i+1; srand((unsigned)time(0)); for(i=0;i<54;) { index=rand()%54; if(a[index]!=0) { b[i]=a[index]; //printf("%d ",b[i]); a[index]=0; ++i; } } printf("\n说明:\n"); printf("*******************\n"); printf("** 红桃 %c ",3); printf("**\n"); printf("** 方块 %c ",4); printf("**\n"); printf("** 梅花 %c ",5); printf("**\n"); printf("** 黑桃 %c ",6); printf("**\n"); printf("** 大王 A **\n** 小王 a **\n"); printf("*******************\n"); printf("\n请输入打牌人数:\n"); scanf("%d",&w); wi = 54/w; wj = 54%w; //printf("%d,%d",wi,wj); for (j = 0;j < w;j++) { m = 0; printf("\n\n第%d个人的牌\n",j+1); wj --; if (wj>=0) wii = wi + 1; else wii = wi; //红桃 printf("红桃 %c ",3); printf(":"); for(i = j*wii;i<(j+1)*wii;i++) { if (b[i]<=13&&b[i]>0) { m++; if (b[i]==11) printf("J "); else if (b[i]==12) printf("Q "); else if (b[i]==13) printf("K "); else printf("%d ",b[i]); } } //方块 printf("\n方块 %c ",4); printf(":"); for(i = j*wii;i<(j+1)*wii;i++) { if (b[i]<=26&&b[i]>13) { m++; b[i] = b[i]-13; if (b[i]==11) printf("J "); else if (b[i]==12) printf("Q "); else if (b[i]==13) printf("K "); else printf("%d ",b[i]); } } //梅花 printf("\n梅花 %c ",5); printf(":"); for(i = j*wii;i<(j+1)*wii;i++) { if (b[i]<=39&&b[i]>26) { m++; b[i] = b[i]-26; if (b[i]==11) printf("J "); else if (b[i]==12) printf("Q "); else if (b[i]==13) printf("K "); else printf("%d ",b[i]); } } //黑桃 printf("\n黑桃 %c ",6); printf(":"); for(i = j*wii;i<(j+1)*wii;i++) { if (b[i]<=52&&b[i]>39) { m++; b[i] = b[i]-39; if (b[i]==11) printf("J "); else if (b[i]==12) printf("Q "); else if (b[i]==13) printf("K "); else printf("%d ",b[i]); } } //大小王 printf("\n大小王 A or a :"); for(i = j*wii;i<=(j+1)*wii;i++) { if (b[i]==53) { m++; printf("A "); } if (b[i]==54) { m++; printf("a "); } } printf("\n总共:%d张牌!!!",m); } }
Ⅳ c语言纸牌发牌程序源代码(附注释)
其实发牌问题里有个随机的问题,就是模拟洗牌的问题,我来尝试下这个程序吧(每个花色的代码分别是:红桃 \x3,方块\x4,梅花\x5,黑桃\x6
#include <stdio.h>
#include <time.h>
char hua_se[4]={'\x3','\x4','\x5','\x6'}; //定义一个数组来存放花色
char *dight[14]={"Ace","two","three","four","five","six","seven","eight","nine","ten","jack","queen","king"};//定义一个指针型的数组来存放数字
int fa_pai[4][13]={0};//定义一个二维数组来发牌
void move(int fa_pai[4][13]);
void deal(int fa_pai[4][13],char huase[4],char *dight[4][13]);
int main(void){srand(time(NULL));
move(fa_pai);
deal(hua_se,dight,fa_pai);
printf("你是否想结束发牌?Y/N");
getch();return 0;}void move(int fa_pai[4][13]){int r,card,row,column;
for(card=1;card<=52;card++)
{
r=rand();
row=r%4;
r=rand();
column=r%13;
while(fa_pai[4][13]!=0)
{
r=rand();
row=r%4;
r=rand();
column=r%13;
}
fa_pai[row][column]=card;
}
}
void deal(int fapai[4][13],char hua_se[3],char *dight[13])
{
char c;int card,row,column;
for(card=1;card<=52;card++)
{
for(row=0;row<=3;row++)
{
for(column=0;column<=12;column++)
{
if(fapai[row][column]==card)
{
if(card%3=0)c='\n';
elsec='\t';
printf("%5sof%-8s%c",hua_se[row],dight[column],c);
}
}
}
}
}
Ⅳ C语言编程——发牌洗牌模拟,求帮助
实现了2副牌的发牌,和每个人的牌和底牌
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
struct CARD //牌
{
char suit[10]; /*花色*/
char face[10]; /*牌面*/
};
enum { posA, posB, posC, posD};//定义好每个人的位置
struct Postion
{
struct CARD getcard[25];//每人获得的牌
};
struct Postion postion[4];//分配四个位置
struct CARD leftCard[8]; //底牌
struct CARD card[54]; //54张牌
char *suit[]={"Spades","Hearts","Clubs","Diamonds"};
char *face[] = {"A","2","3","4","5","6","7","8","9",
"10","jack","Queen","King"};
/* 函数功能:将52张牌的顺序打乱,
函数参数:结构体数组wCard,表示52张牌
函数返回值:无
*/
void Shuffle(struct CARD *wCard)
{
int i,j;
struct CARD temp;
for (i=0; i<54; i++)
{
j=rand()%54;
temp=wCard[i];
wCard[i]=wCard[j];
wCard[j]=temp;
}
}
/*函数功能:发牌结果
函数参数:结构体数组wCard,表示有54张牌
函数返回值:无
*/
void Deal(struct CARD *wCard)
{
int i,aidx=0,bidx=0,cidx=0,didx=0;
Shuffle(card);//将牌打乱
/*************发第一副牌,只发50张,分别分给A,B,C,D四个位置 4张留底**************/
// 第一次发完50张后,A,B多一张,所以下面第二次让C,D排在前面,两次发完刚好各40张 */
for (i=0; i<50; i++)//发牌数
{
// printf("%10s %5s\n", wCard[i].suit, wCard[i].face);
if(i%4==0)
postion[posA].getcard[aidx++]=wCard[i];
else if(i%4==1)
postion[posB].getcard[bidx++]=wCard[i];
else if(i%4==2)
postion[posC].getcard[cidx++]=wCard[i];
else if(i%4==3)
postion[posD].getcard[didx++]=wCard[i];
}
/**********剩下的四张作为底牌*********/
leftCard[0]=wCard[i++];
leftCard[1]=wCard[i++];
leftCard[2]=wCard[i++];
leftCard[3]=wCard[i++];
Shuffle(card);//再次将牌打乱
/*************发第二副牌,也只发50张,分别分给A,B,C,D四个位置,4张留底,一共8张底**************/
for (i=0; i<50; i++)//发牌数
{
// printf("%10s %5s\n", wCard[i].suit, wCard[i].face);
if(i%4==0)
postion[posC].getcard[cidx++]=wCard[i];
else if(i%4==1)
postion[posD].getcard[didx++]=wCard[i];
else if(i%4==2)
postion[posA].getcard[aidx++]=wCard[i];
else if(i%4==3)
postion[posB].getcard[bidx++]=wCard[i];
}
/**********剩下的四张作为底牌,这样就一共为8张底牌*********/
leftCard[4]=wCard[i++];
leftCard[5]=wCard[i++];
leftCard[6]=wCard[i++];
leftCard[7]=wCard[i++];
}
/* 函数功能:将52张牌按黑桃、红桃、草花、方块花色顺序,面值按A~K顺序排列
函数参数:结构体数组wCard,表示不同花色和面值的52张牌
指针数组wFace,指向面值字符串
指针数组wSuit,指向花色字符串
函数返回值:无
*/
void FillCard(struct CARD wCard[],char *wSuit[], char *wFace[])
{
int i;
for (i=0; i<52; i++)
{
strcpy(wCard[i].suit, wSuit[i/13]);
strcpy(wCard[i].face, wFace[i%13]);
}
// wCard[53].face="Big"; //大小王
strcpy(wCard[52].suit, "Small");
strcpy(wCard[52].face, "ghost");
strcpy(wCard[53].suit, "Big");
strcpy(wCard[53].face, "ghost");
}
void print(char ch)//输出牌
{
int i;
switch(ch)
{
case 'A': for(i=0; i<25; i++)
{
printf("%10s %5s\n", postion[posA].getcard[i].suit, postion[posA].getcard[i].face);
}
break;
case 'B': for(i=0; i<25; i++)
{
printf("%10s %5s\n", postion[posB].getcard[i].suit, postion[posB].getcard[i].face);
}
break;
case 'C': for(i=0; i<25; i++)
{
printf("%10s %5s\n", postion[posC].getcard[i].suit, postion[posC].getcard[i].face);
}
break;
case 'D': for(i=0; i<25; i++)
{
printf("%10s %5s\n", postion[posD].getcard[i].suit, postion[posD].getcard[i].face);
}
break;
}
}
void outputLeftCard()//输出底牌
{
int i;
for(i=0; i<8; i++)
printf("%10s %5s\n", leftCard[i].suit, leftCard[i].face);
}
int main()
{
char pos;
srand(time(NULL));
FillCard(card,suit,face);
//Shuffle(card);
Deal(card);
printf("Please choose your position(A、B、C、D):");
scanf("%c", &pos);
print(pos);//输出你所在位置的牌
/**********下面输出的是,除了你之外其他人的牌**********/
if(pos !='A')
{
printf("A:\n");
print('A');
}
if(pos !='B')
{
printf("B:\n");
print('B');
}
if(pos !='C')
{
printf("C:\n");
print('C');
}
if(pos !='D')
{
printf("D:\n");
print('D');
}
printf("底牌为:\n");
outputLeftCard();//输出底牌
return 0;
}
Ⅵ 求C语言 发牌程序及讲解
enum paise//黑桃,红桃,梅花,方块
{
spade,hearts,club,diamonds,daxigui
};
paise Game::paicol(int dd) //确定是画的那一张牌,红桃,梅花,方块,黑桃, 并不重复不
{
if(dd<=51)
{
dd=dd/13;
if (dd==0)
{
return spade;
}
if (dd==1)
{
return hearts;
}
if (dd==2)
{
return club;
}
if (dd==3)
{
return diamonds;
}
}
return daxigui;
}
void Game::xipai()
{
for (int i=0;i<54;i++)
{
zpai[i]=i;
}
for(int ii=0;ii<500;ii++) //洗了五十次牌 ii
{
int huan=(rand()%53+1);
int tem=zpai[0];
zpai[0]=zpai[huan];
zpai[huan]=tem;
}
}
void Game::setfapai() //dizhu为是那个的地主,先发那个人的牌
{
//发到第几个人(如斗地主)
int ge[3]={};
paise bb;
for (int t=0;t<54;t++)
{
if (t<51)
{
if (zpai[t]==52||zpai[t]==53) //排除大小鬼
{
dase[t%3].da=zpai[t];
}
else
{
dase[t%3].da=zpai[t]%13;
}
bb=paicol(zpai[t]);
dase[t%3].col=bb;
ge[t%3]++;
}else
{
if (zpai[t]==52||zpai[t]==53) //排除大小鬼
{
dase[3].da=zpai[t];
}
else
{
dase[3].da=zpai[t]%13; //大小
}
bb=paicol(zpai[t]); //颜色
dase[3].col=bb;
}
}
}