當前位置:首頁 » 編程語言 » c語言發牌

c語言發牌

發布時間: 2022-06-20 17:56:39

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語言,撲克牌發牌程序。要求運用結構體。多謝幫忙^o^

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
structPOKE
{
intnum;//小王-1,大王-2,A:1,J:11,Q:12,K:13
intcolor;//黑1,紅2,梅3,方4,小王5,大王6
}s[54];

intmain()
{
inti,num,color;
memset(s,0,sizeof(structPOKE)*54);
srand((unsigned)time(0));
i=rand()%54;
s[i].num=-1;//小王
s[i].color=5;
while(1)
{
i=rand()%54;
if(s[i].num==0)
{
s[i].num=-2;//大王
s[i].color=6;
break;
}
}
intcount=2;
while(1)
{
num=rand()%13+1;
color=rand()%4+1;
i=rand()%54;
if(s[i].num==0)
{
s[i].num=num;
s[i].color=color;
count++;
if(count>=54)
{
break;
}
}
}
printf(" 順序為: ");
for(i=0;i<54;i++)
{
switch(s[i].num)
{
case-1:putchar(1);break;
case-2:putchar(2);break;
case1:putchar('A');break;
case11:putchar('J');break;
case12:putchar('Q');break;
case13:putchar('K');break;
default:printf("%d",s[i].num);
}
switch(s[i].color)
{
case1: putchar(6);break;
case2:putchar(3);break;
case3:putchar(5);break;
case4:putchar(4);break;
default:printf("");
}
printf("");
}
return0;
}

❸ 初學c語言,求一個自動發牌的程序。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
intcard[52];
voidDisplay(inti)//將0~51之間的數映射成牌號和花色
{
switch(i%4)
{
case0:printf("紅桃");break;
case1:printf("黑桃");break;
case2:printf("梅花");break;
case3:printf("方塊");break;
}
if(i/4+1<11)
printf("%d ",i/4+1);
elseif(i/4+1==11)
printf("%c ",'J');
elseif(i/4+1==12)
printf("%c ",'Q');
elseif(i/4+1==13)
printf("%c ",'K');
}
voidInitCard()
{
inti,j,temp;
srand((int)time(0));
for(i=0;i<52;i++)//隨機生成52個數
{
temp=rand()%52;
for(j=0;j<i;j++)
{
if(card[j]==temp)break;
}
if(j==i)card[i]=temp;
elsei--;
}

for(i=0;i<52;i++)//初始化輸出
{
if(i%5==0&&i!=0)printf(" ");
Display(card[i]);
}
}
voiddeal()
{
inti,j,temp;
srand((int)time(0));
for(i=0;i<52;i++)
{
temp=rand()%52;
for(j=0;j<i;j++)
{
if(card[j]==temp)break;
}
if(j==i)card[i]=temp;
elsei--;
}

for(i=0;i<52;i++)//發牌輸出
{

if(i%5==0&&i!=0)printf(" ");
if(i%13==0&&i!=0)printf(" ");
if(i%13==0)
printf("第%d個玩家的牌: ",i/13+1);

Display(card[i]);
}
}
intmain(void)
{
intkey=0;
printf("================主菜單============== ");//菜單
printf("=============1、初始化撲克========= ");
printf("=============2、洗牌、發牌========= ");
printf("=============3、退出============== ");

while(key!=3)//選擇菜單
{
printf("請輸入菜單功能編號:");
scanf("%d",&key);

switch(key)
{
case1:InitCard();break;//初始化
case2:deal();//發牌
default:break;
}

printf(" ");
}
return0;
}

代碼如上,測試結果:

基本思想就是,只要隨機生成的數,發給誰都一樣;所以初始化和發牌時候先隨機生成52個不同的數0~51,初始化時,直接輸出就可以了。發牌時按13一組一次分給一個人就可以了。

❹ 關於發牌程序怎麼寫使用c語言!

#include<stdio.h> #include<math.h> #include<time.h> /*定義輸出與數組下標不一致的排符*/void print(int t){int a=t%13;switch(a){case 1:printf("2 ");break; case 2:printf("A ");break; case 3:printf("K ");break; case 4:printf("Q ");break; case 5:printf("J ");break; case 6:printf("10 ");break; case 0:printf("3 ");break; default :printf("%d ",16-a);}}void main(){/*定義存儲每張牌的點數和花色*/ struct zhangxiao { int p;int r;int flag; }pai[52],num; int i,j,k; char a[4]={'\005','\004','\006','\003'}; srand((unsigned)time(NULL)); for(i=0;i<=51;i++) {pai[i].p=i+1;pai[i].r=rand();pai[i].flag=0;} /*根據點數排序*/ for(i=0;i<=51;i++) for(j=i+1;j<=51;j++) if(pai[i].r > pai[j].r) {num=pai[i];pai[i]=pai[j];pai[j]=num;} /*根據花色排序*/ for(i=0;i<=3;i++) for(j=i*13;j<=i*13+12;j++) for(k=j+1;k<=i*13+12;k++) if(pai[j].p > pai[k].p) {num=pai[k];pai[k]=pai[j];pai[j]=num;} /*控制輸出對齊*/ printf("\n"); printf(" "); for(i=0;i<=3;i++) { for(k=1;k<=4;k++) { printf("%c",a[k-1]); for(j=i*13;j<=i*13+12;j++) if(pai[j].p >= (k-1)*13+1 && pai[j].p <= (k-1)*13+12+1 && pai[j].flag==0) {print(pai[j].p);pai[j].flag=1;} } if(i==0)printf("\n\n\n"); if(i==1)printf(" "); if(i==2){printf("\n\n\n");printf(" ");} if(i==3)printf("\n"); }}

❺ 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語言編程——發牌洗牌模擬,求幫助

實現了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語言編程用撲克牌洗牌和發牌

程序就不寫了,寫下大致流程

//定義一個數組,或者列表,鏈表什麼的隨你
//共52個元素 記作card[52]
//card代表撲克牌的類,有花色(color 枚舉,0,1,2,3),點數(枚舉 A~K)等屬性

card tmp;
for(int i=0;i<52;i++)
{
//計算一個0到52之間的隨機數x
tmp=card[i];
card[i]=card[x];
card[x]=tmp;//其實就是交換兩張牌
}
//循環下來肯定每張牌都被交換過,有它自己的新位置,也有可能湊巧還在原來的位置

//最後按下標順序分四堆

❽ 如何求C語言撲克牌洗牌發牌,發的牌要從大到小排序,每個部分都要用

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 52 //牌張總數
#define M 13 //每花色張數
char hs[4]={5,4,3,6}; //花色數組:梅花、紅心、方塊、黑桃字元對應的ASCII碼
char hx[]={"JQKA"}; // 對應11,12,13,14共四張大於10的牌符號
//生成順序撲克牌數組: 1~52,梅花1~13,紅心14~26,方塊27~39,黑桃40~52

void newDeck(int *a) { int i; for ( i=0;i<N;i++ ) a[i]=i+1; }
//洗牌,將花色和順序打亂
void Shuffle(int *a) { int s,i,j,t;
srand((unsigned int)time(NULL)); //利用當前時間生成隨機數種子
s=rand()%11+5; printf("隨機洗牌%d遍\n",s); //第1個隨機數當成洗牌次數, 洗牌次數大於等於5,小於等於15
for ( i=0;i<s;i++ ) {
for ( j=0;j<N;j++ ) {
s=rand()%52; //隨機數范圍0~51,對應a數組下標
t=a[j]; a[j]=a[s]; a[s]=t; //第j張牌和第s張牌交換
}
}
}
//發牌並顯示
void Deal(int a[N],int b[4][M]) { int i,j;
for ( i=0;i<4;i++ ) for ( j=0;j<M;j++ ) b[i][j]=a[i*M+j];
}
//理牌
void Collating(int a[4][M]) { int i,j,k,h;
for ( h=0;h<4;h++ )
for ( i=0;i<M-1;i++ )
for ( j=i+1;j<M;j++ )
if ( a[h][i]<a[h][j] ) {
k=a[h][i]; a[h][i]=a[h][j]; a[h][j]=k;
}
}
//顯示
void Display(int a[4][M]) { int i,j,s;
for ( i=0;i<4;i++ ) {
for ( j=0;j<M;j++ ) {
s=a[i][j]-1; printf("%c",hs[s/M]);
s%=M; if ( s<9 ) printf("%d ",s+2); else printf("%c ",hx[s-9]);
}
printf("\n");
}
}
void main() { int Deck[N],hands[4][M];
newDeck(Deck); //新撲克牌
Shuffle(Deck); //洗牌
Deal(Deck,hands); //發牌
Collating(hands); //理牌
Display(hands); //顯示
printf("\n\n"); system("pause");

}

❾ 如何用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語言紙牌發牌程序源代碼(附註釋)

其實發牌問題里有個隨機的問題,就是模擬洗牌的問題,我來嘗試下這個程序吧(每個花色的代碼分別是:紅桃 \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語言中的void是什麼意思 發布:2025-02-06 04:05:26 瀏覽:233
加密狗是啥 發布:2025-02-06 03:48:03 瀏覽:552
phpcopy文件 發布:2025-02-06 03:41:26 瀏覽:410
系統配置頁面怎麼設置 發布:2025-02-06 03:36:34 瀏覽:693
家庭電腦搭建流媒體伺服器 發布:2025-02-06 03:19:02 瀏覽:342
matlab稀疏矩陣存儲 發布:2025-02-06 03:07:54 瀏覽:838
國際服2b2t伺服器地址 發布:2025-02-06 03:06:28 瀏覽:390
c語言輸出b 發布:2025-02-06 03:06:27 瀏覽:31
普通火車wifi密碼多少 發布:2025-02-06 03:04:20 瀏覽:436
可編程監控 發布:2025-02-06 03:03:33 瀏覽:645