① 用c語言編寫一個52張撲克牌隨即洗牌的程序 並寫上注釋
定義一個int p[52],裡面的元素就是1~52,然後,直接 for循環i:1~52,每次隨機一個數 m=rand()%52 ,swap(p[i],p[m]),就ok了
② C語言程序設計 撲克牌發牌游戲
嗯嗯,清華北大的都不會
③ C語言:52張撲克牌問題
調試好,答案是7張
#include<stdio.h>
main()
{
int pk[53],i,j,count;
for(i=1;i<=52;i++)
pk[i]=0;/*0 up*/
for(i=2;i<=52;i++)
{
for(j=i;j<=52;j++)
if(j%i==0)
if(pk[j]==0)pk[j]=1;
else pk[j]=0;
}
count=0;
for(i=1;i<=52;i++)
if(pk[i]==0) count++;
printf("%d",count);
}
④ C語言編程,紙牌游戲
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <dos.h>
#include <graphics.h>
#include <conio.h>
#define ESC 0x1b
struct card
{
char color;
int number;
int signin;
}a[52]={{3,2,1},{3,3,1},{3,4,1},{3,5,1},{3,6,1},{3,7,1},{3,8,1},{3,9,1},{3,10,1},{3,74,1},{3,81,1},{3,75,1},{3,65,1},
{4,2,1},{4,3,1},{4,4,1},{4,5,1},{4,6,1},{4,7,1},{4,8,1},{4,9,1},{4,10,1},{4,74,1},{4,81,1},{4,75,1},{4,65,1},
{5,2,1},{5,3,1},{5,4,1},{5,5,1},{5,6,1},{5,7,1},{5,8,1},{5,9,1},{5,10,1},{5,74,1},{5,81,1},{5,75,1},{5,65,1},
{6,2,1},{6,3,1},{6,4,1},{6,5,1},{6,6,1},{6,7,1},{6,8,1},{6,9,1},{6,10,1},{6,74,1},{6,81,1},{6,75,1},{6,65,1}},b[52];
char s[10];
int d[52];
fan(int n)
{
if(a[n].signin==0)
a[n].signin=1;
else a[n].signin=0;
return;
}
suiji()
{
int t=0,j,i=0,struction;
for(i=0;i<=51;i++)
d[i]=-1;
i=0;
randomize();
while(i<52)
{
struction=random(52);
for(j=0;j<i;j++)
{
if(d[j]==struction)
{
t=1;
break;
}
}
if(t==0)
{
d[i]=struction;
i++;
}
else t=0;
}
return;
}
card(int n)
{
int y,x=n%13,x1=d[n]%13,y1;
char s1[2],r[2];
y=(n-x)/13;
setcolor(15);
line(49*x,80*y+42,49*x,80*y+117);
line(49*x+47,80*y+42,49*x+47,80*y+117);
line(49*x,80*y+42,49*x+47,80*y+42);
line(49*x,80*y+117,49*x+47,80*y+117);
for(y1=1;y1<75;y1++)
{
setcolor(15);
line(49*x+1,80*y+y1+42,49*x+45,80*y+y1+42);
}
if(a[n].signin==1)
{
setcolor(1);
if(a[d[n]].color==3||a[d[n]].color==4)
setcolor(RED);
sprintf(s1,"%c",a[d[n]].color);
outtextxy(49*x+3,80*y+45,s1);
if(x1<9)
sprintf(r,"%d",a[d[n]].number);
else sprintf(r,"%c",a[d[n]].number);
outtextxy(49*x+3,80*y+54,r);
}
else against(n);
setcolor(WHITE);
return;
}
against(int n)
{
int y,y1,x=n%13;
y=(n-x)/13;
for(y1=1;y1<75;y1++)
{
setcolor(BLUE);
line(49*x+1,80*y+y1+42,49*x+45,80*y+y1+42);
}
setcolor(15);
return;
}
draw(int n,int m)
{
int i4;
setcolor(YELLOW);
sprintf(s,"Base: %d",n);
outtextxy(150,420,s);
if(d[m-1]%13<9&&d[m-1]%13>=0)
sprintf(s,"Card: %c %d",a[d[m-1]].color,a[d[m-1]].number);
else sprintf(s,"Card: %c %c",a[d[m-1]].color,a[d[m-1]].number);
outtextxy(150,430,s);
setcolor(15);
for(i4=0;i4<52;i4++)
{
card(i4);
}
return;
}
frame(int n)
{
int y,x=n%13;
y=(n-x)/13;
setcolor(RED);
line(49*x,80*y+42,49*x,80*y+117);
line(49*x+47,80*y+42,49*x+47,80*y+117);
line(49*x,80*y+42,49*x+47,80*y+42);
line(49*x,80*y+117,49*x+47,80*y+117);
setcolor(15);
return;
}
huatu(int i,int j)
{
int n,m,i1=i,b,b2,j1=j,sign=0,tar=0,i2=2,k=1,p,sign1=0;
char u='',u1='',c[7][8],chh;
setbkcolor(3);
while(1)
{
loop:
sprintf(c[0],"File");
sprintf(c[1],"Option");
sprintf(c[2],"Help");
sprintf(c[3],"New");
sprintf(c[4],"Exit");
sprintf(c[5],"Auto");
sprintf(c[6],"Manual");
while(i2<=52)
{
k=1;
while(i2*k<=52)
{
setcolor(9);
for(n=0;n<=18;n++)
line(0,n,639,n);
setcolor(15);
outtextxy(290,10,"Card Game");
setcolor(YELLOW);
for(n=19;n<=40;n++)
line(0,n,639,n);
for(m=0;m<=2;m++)
{
setcolor(0);
line(58*m+3,22,58*m+3,38);
line(58*m+3,38,58*m+58,38);
line(58*m+58,22,58*m+58,38);
line(58*m+3,22,58*m+58,22);
outtextxy(8+58*m,27,c[m]);
if(m==i1)
{
setcolor(0);
for(n=0;n<=16;n++)
line(58*m+3,22+n,58*m+58,22+n);
setcolor(YELLOW);
outtextxy(8+58*m,27,c[m]);
}
if(kbhit())
{
chh=getch();
if(chh==0x1b)
{
u='';
u1='';
goto loop;
}
}
}
if(u!='N')
{
sign1=1;
break;
}
if(u=='N')
{
if(u1!='A'&&u1!='M')
{
p=i2*k;
draw(i2,p);
sign1=1;
break;
}
if(u1=='A'||u1=='M')
{
p=i2*k;
draw(i2,p);
sign1=0;
fan(i2*k-1);
frame(i2*k-1);
if(u1=='M')
{
outtextxy(150,440,"Press any key to continue!");
getch();
}
cleardevice();
k++;
}
}
}
if(sign1==1)break;
i2++;
}
if(i2>=52)
{
setcolor(9);
for(n=0;n<=18;n++)
line(0,n,639,n);
setcolor(15);
outtextxy(290,10,"Card Game");
setcolor(YELLOW);
for(n=19;n<=40;n++)
line(0,n,639,n);
outtextxy(150,420,"Press any key to continue!");
for(m=0;m<=2;m++)
{
setcolor(0);
line(58*m+3,22,58*m+3,38);
line(58*m+3,38,58*m+58,38);
line(58*m+58,22,58*m+58,38);
line(58*m+3,22,58*m+58,22);
outtextxy(8+58*m,27,c[m]);
if(m==i1)
{
for(n=0;n<=16;n++)
line(58*m+3,22+n,58*m+58,22+n);
setcolor(YELLOW);
outtextxy(8+58*m,27,c[m]);
}
} /*列印一級菜單*/
getch();
cleardevice();
setcolor(9);
for(n=0;n<=18;n++)
line(0,n,639,n);
setcolor(15);
outtextxy(290,10,"Card Game");
setcolor(YELLOW);
for(n=19;n<=40;n++)
line(0,n,639,n);
for(m=0;m<=2;m++)
{
setcolor(0);
line(58*m+3,22,58*m+3,38);
line(58*m+3,38,58*m+58,38);
line(58*m+58,22,58*m+58,38);
line(58*m+3,22,58*m+58,22);
if(m==i1)
{
for(n=0;n<=16;n++)
line(58*m+3,22+n,58*m+58,22+n);
setcolor(YELLOW);
}
outtextxy(8+58*m,27,c[m]);
}
draw(52,52);
}
if(u1=='M'||u1=='A')
{
u1='';
u='';
}
b=getch();
while(1)
{
if(b==100)
{
i1=(i1+1)%3;
break;
}
if(b==97)
{
if(i1==0)
{
i1=2;
break;
}
else
{
i1=i1-1;
break;
}
}
/* if(b==0x1b)
{
closegraph();
exit(1);
} */
if(b==13)
{
while(1)
{
if(i1!=2)
{
if(sign!=1)
{
setcolor(YELLOW);
for(m=1;m<=2;m++)
{
line(58*i1+3,38+15*(m-1),58*i1+3,53+15*(m-1));
line(58*i1+3,53+15*(m-1),58*i1+58,53+15*(m-1));
line(58*i1+58,38+15*(m-1),58*i1+58,53+15*(m-1));
line(58*i1+3,38+15*(m-1),58*i1+58,38+15*(m-1));
setcolor(3);
for(n=0;n<=13;n++)
{
line(58*i1+4,39+15*(m-1)+n,58*i1+57,39+15*(m-1)+n);
}
if(m==j1+1)
{
setcolor(3);
for(n=0;n<=13;n++)
{
line(58*i1+4,39+15*(tar)+n,58*i1+57,39+15*(tar)+n);
}
setcolor(BLUE);
for(n=0;n<=13;n++)
{
line(58*i1+4,39+15*(j1)+n,58*i1+57,39+15*(j1)+n);
}
tar=j1;
}
setcolor(YELLOW);
}
setcolor(YELLOW);
if(i1==0)
{
outtextxy(8+58*i1,43,c[i1+3]);
outtextxy(8+58*i1,58,c[i1+4]);
}
else
{
outtextxy(8+58*i1,43,c[i1+4]);
outtextxy(8+58*i1,58,c[i1+5]);
}
}
if(sign==1)break;
setcolor(YELLOW);
while(1)
{
b2=getch();
if(b2==115)
{
j1=(j1+1)%2;
break;
}
if(b2==119)
{
if(j1==1)
{
j1=0; break;
}
if(j1==0)
{
j1=1; break;
}
}
if(b2==0x1b)
{
sign=1;
j1=0;
break;
}
if(b2==13)
{
if(i1==0&&j1==1)
{
closegraph();
exit(1);
}
if(i1==0&&j1==0)
{
u='N';
suiji();
for(n=0;n<52;n++)
{
a[n].signin=1;
}
n=0;
}
if(i1==1&&j1==0)
{
u1='A';
if(u!='N') u1='';
}
if(i1==1&&j1==1)
{
u1='M';
if(u!='N') u1='';
}
sign=1;
j1=0;
break;
}
else continue;
}
}
else
{
sign=1;
outtextxy(100,100,"Copyright");
circle(180,104,5);
outtextxy(177,101,"C");
getch();
break;
}
}
}
else break;
if(sign==1)
{
sign=0;
break;
}
}
cleardevice();
i2=2;
k=1;
}
}
main()
{
int k,gm=2,gd=9;
initgraph(&gd,&gm,"");
huatu(0,0);
getch();
}
⑤ C語言程序設計課程設計撲克牌游戲,怎麼做
#include<conio.h>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
int jisuan(int);
int comptotal;
char s1[]="A234567890JQK";
//char s2[4][5]={"紅桃","黑桃","草花","方塊"};
char s2[4]={3,4,5,6};
int poke[52];
int ch;
int win=0;
int computer[5],user[5];
int usertotal;
int users;
int k;
int main()
{ void xipai(int poke[]);
void ai();
int i,j;
////////////////////////////////////////////////////////上面是變數和聲明
printf("\n這是簡單的廿一點游戲:\n");
for(i=0;i<52;i++)
{
if(i%13==0)putchar('\n');
poke[i]=i;
printf("%c%c%c ",s2[i/13],s1[i%13]=='0'?'1':' ',s1[i%13]);
}
putchar('\n');
/////////////////////////////////////////////////////////主代碼
k=0;
xipai(poke);
while(ch!=27)
{ comptotal=0;
usertotal=0;
if(k>=42)
{
printf("\n剩餘牌數不足十張,重新洗牌");
xipai(poke);
k=0;
}
printf("\n\n\n\n\n\n\n\n新局開始:\n");
printf("現在共有牌%2d張\n",52-k);
if(win==0)
{
computer[0]=k++;
user[0]=k++;
printf("\n電腦做莊,要牌:");
ai();
}
else
{
printf("\n玩家做莊,要牌:\n\t回車要牌\n\t空格過牌");
user[0]=k++;
computer[0]=k++;
}
printf("\n玩家開始要牌:\n");
usertotal=jisuan(poke[user[0]]);
printf("%c%c%c 共%2d點\t",s2[poke[user[0]]/13],s1[poke[user[0]]%13]=='0'?'1':' ',s1[poke[user[0]]%13],usertotal);
users=0;
ch=1;
while(ch!=32&&users<4)
{
ch=getch();
switch(ch)
{
case 27:
goto end;
break;
case 32:
break;
case 13:
user[++users]=k;
usertotal+=jisuan(poke[user[users]]);
printf("\b\b\b\b\b\b\b\b\b%c%c%c 共%2d點\t",s2[poke[k]/13],s1[poke[k]%13]=='0'?'1':' ',s1[poke[k]%13],usertotal);
k++;
if(usertotal>=21)ch=32;
break;
default:
break;
}
}
if(win==1)
{
printf("\n電腦開始要牌:\n");
ai();
}
printf("\n\n\n玩家的點數是%2d",usertotal);
printf("\n電腦的點數是%2d",comptotal);
printf("\n\n本局結算:");
if(comptotal>21&&usertotal<=21)
{
printf("\n\n電腦爆牌了");
win=1;
printf("\n恭喜,你贏了");
}
if(usertotal>21&&comptotal<=21)
{
printf("\n\n你爆牌了");
printf("\n下次小心點");
win=0;
}
if(usertotal>21&&comptotal>21)
{
printf("\n\n你們兩個,怎麼都這么不小心啊,都撐死了還要嗎");
}
if(usertotal<=21&&comptotal<=21)
{
if(usertotal>comptotal)
{
win=1;
printf("\n\n不錯,你贏了");
}
else if(usertotal<comptotal)
{
win=0;
printf("\n\n撐死膽大的,餓死膽小的,沒膽子,輸了吧");
}
else
printf("\n\n平了,算你走運");
}
getch();
}
end:
return 0;
}
void xipai(int poke[])
{
int y,tmp,i,j;
for(j=0;j<7;j++)
for(i=0;i<52;i++)
{
srand(time(0));
y=rand()%10;
tmp=poke[i];
poke[i]=poke[(y*i*i)%52];
poke[(y*i*i)%52]=tmp;
}
}
///////////////////////////////////////////////子函數
void ai()
{
int i;
comptotal=jisuan(poke[computer[0]]);
printf("\n%c%c%c 共%2d點\t",s2[poke[computer[0]]/13],s1[poke[computer[0]]%13]=='0'?'1':' ',s1[poke[computer[0]]%13],comptotal);
for(i=0;i<4;i++)
{
if(comptotal<17)
{
computer[i+1]=k++;
comptotal+=jisuan(poke[computer[i+1]]);
printf("\b\b\b\b\b\b\b\b\b%c%c%c 共%2d點\t",s2[poke[computer[i+1]]/13],s1[poke[computer[i+1]]%13]=='0'?'1':' ',s1[poke[computer[i+1]]%13],comptotal);
}
}
}
int jisuan(int i)
{int dian;
switch(i%13)
{
case 0:
case 10:
case 11:
case 12:
dian=1;
break;
default:
dian=i%13+1;
}
return dian;
}
⑥ C語言實現紙牌游戲(將不含有大小王的紙牌進行隨機發派給兩個人並對紙牌進行比較)
居然都沒分數獎勵的啊。。
用一個數組 A[52] 紅桃 黑桃 梅花 方片 倍數分別為0,1,2,3 則黑桃 1 為 1*13 +0 =A[13] 方片2數值為 3*13 + 1 = A[40] 這樣從A[0] -A[51]表示這52張牌。
然後A[10] = 0,1,2 初始化全為 0 表示還沒發,每次 用隨機數除以當前總數 取余 來隨機拍一張牌,例如隨機0-52的數字 比如 48表示A[47]發出去,發給甲 A[47]=1 乙為2,以後每次隨機一個0-52的數字 用加法,當當前牌的屬性為0時加1否則不加,加到隨機數為止,這樣可以相當於一直在沒有發出去的牌做隨機,加的和超過52取余
做52次發牌操作後結束,每次從值為1 和2的中隨機一個序列號用序列號除以13取余比大小。
思路全說了,代碼天天上班寫就懶得給你寫了
⑦ 用C語言編寫一個翻牌游戲
編寫程序:題目:紙牌游戲 編號為1~52的牌,正面向上,從第2張開始,以2根據題意的翻牌規則 即求約數的過程 一個數的約數如果去掉1 包含自身的個數
⑧ 五十二張撲克牌隨機發給倆個人各三張,根據點數比較大小,輸出誰贏誰輸,用c語言編寫
定義一個13位的一維數組list,初值為0,然後用隨機數輸出i,1<=i<=13,同時判斷list[i]是否大於4,是的話就再取一次隨機值,否的話list[i]加1,循環三次,將三次輸出的值累加
⑨ c語言程序設計撲克牌游戲
定義一個結構類型表示一張牌,結構包含3個成員,第一個成員char:取值2,3~K,A表示牌名字,第二個成員int:取值2~14表示牌真實大小。第三個成員:結構鏈表指針。
寫一個初始化函數,定義52大小的結構數組,成員值初值分別和牌對應,遍歷數組並將每個元素的鏈表指針依次指向下一個元素地址。這樣得到一個初始鏈表。(相當於一盒新牌)
所有涉及隨機數都用rand函數,洗牌分四份就是循環取隨機數m=1~n,n是隨循環自減,初值52,直到n變成0。每隨一次循環就從初始鏈表中遍歷取出對應第m個節點,並從初始鏈表中將這個節點斷開(既前一個節點指針直接指向後一個節點指針)。每取13張就組成一個新的鏈表。這樣獲得4個新鏈表分別表示4個玩家。
最後出牌就是分別遍歷自己的鏈表,利用循環取牌比較結構數值大小。(取出的牌要從鏈表斷開和上面一樣,你把取出節點寫成獨立函數就能反復使用)。
⑩ C程序 52張撲克牌每個花色4張,每個人隨機四張,比較手中最大的牌,如果數字相同比花色,很緊急
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct card
{
int num;//A 1~10 J Q K
int clr;//0黑桃,1.紅桃,2.梅花3.方塊
}Crd;
static int count=0;//申明一個全局靜態變數,當一副牌發完4次以後,重新洗牌。
char clr[4][5]={"黑桃","紅桃","梅花","方塊"};
char person[3][3]={"甲","乙","丙"};
void sub1(int a[4][13],Crd array[3][4])
{
int i,j;
if(count%4==0)
{
for(i=0;i<4;i++)//重新洗牌,一副牌玩完了(enum card::color)
{
for(j=0;j<13;j++)
a[i][j]=0;
}
}
srand((unsigned int)time(NULL));
//發牌
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
int m,n;
while(a[m=rand()%4][n=rand()%13]);
a[m][n]=1;
array[i][j].num =n+1;
array[i][j].clr =m;
}
}
system("cls");
for(i=0;i<3;i++)
{
printf("%s : ",person[i]);
for(j=0;j<4;j++)
{
char temp[3]={0};
if(array[i][j].num==1)
temp[0]='A';
else if(array[i][j].num==11)
temp[0]='J';
else if(array[i][j].num==12)
temp[0]='Q';
else if(array[i][j].num==13)
temp[0]='K';
else if(array[i][j].num==10)
{
temp[0]='1';
temp[1]='0';
}
else
temp[0]=array[i][j].num +'0';
printf("%s %2s ",clr[array[i][j].clr],temp);
}
printf("\n");
}
printf("\n隨機生成牌點成功完成!");
count++;
system("pause");
}
//比較大小,因為是一副牌,不會出現相等的情況
void sub2(Crd array[3][4])
{
int i,j,k;
Crd t;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
for(k=j+1;k<4;k++)
{
if(array[i][j].num<array[i][k].num ||
array[i][j].num==array[i][k].num &&
array[i][j].clr>array[i][k].clr)
{
t = array[i][j];
array[i][j] = array[i][k];
array[i][k] = t;
}
}
}
}
/*
for(i=0;i<3;i++)
{
printf("%s : ",person[i]);
for(j=0;j<4;j++)
{
char temp[3]={0};
if(array[i][j].num==1)
temp[0]='A';
else if(array[i][j].num==11)
temp[0]='J';
else if(array[i][j].num==12)
temp[0]='Q';
else if(array[i][j].num==13)
temp[0]='K';
else if(array[i][j].num==10)
{
temp[0]='1';
temp[1]='0';
}
else
temp[0]=array[i][j].num +'0';
printf("%s %2s ",clr[array[i][j].clr],temp);
}
printf("\n");
}
*/
if(array[0][0].num>array[1][0].num || array[0][0].num==array[1][0].num&&
array[1][0].clr < array[1][0].clr)
{
if(array[0][0].num>array[2][0].num || array[0][0].num==array[2][0].num&&
array[0][0].clr < array[2][0].clr)
{
if(array[1][0].num>array[2][0].num || array[1][0].num==array[2][0].num&&
array[1][0].clr < array[2][0].clr)
{
printf("\n第一:甲\n第二:乙\n第三:丙");
}
else
printf("\n第一:甲\n第二:丙\n第三:乙");
}
else
{
printf("\n第一:丙\n第二:甲\n第三:乙");
}
}
else
{
if(array[1][0].num>array[2][0].num || array[1][0].num==array[2][0].num&&
array[1][0].clr < array[2][0].clr)
{
if(array[0][0].num>array[2][0].num || array[0][0].num==array[2][0].num&&
array[0][0].clr < array[2][0].clr)
{
printf("\n第一:乙\n第二:甲\n第三:丙");
}
else
printf("\n第一:乙\n第二:丙\n第三:甲");
}
else
{
printf("\n第一:丙\n第二:乙\n第三:甲");
}
}
printf("\n贏家排序完成!(按#號字元退出遊戲,按其他任意鍵繼續游戲!)\n");
}
void main()
{
int a[4][13]={0};
Crd array[3][4];
do
{
sub1(a,array);
sub2(array);
}while(getchar()!='#');
}