❶ 用c語言編寫多套撲克牌湊出幾幅完整的撲克牌
能不能提供完整的題目?
從第二行起,每四行。。。。。。。。為啥你提供的案例中,只有7行數據?
❷ 用c語言創建一個數組用來表示52張撲克牌,然後洗牌後輸出,要求每行輸出13張
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<ctime>
#include<cstdlib>;
usingnamespacestd;
inta[55];
voidpt(intid){//printacardbyid
//printcolor
if(id%4==0)printf("A-");
if(id%4==1)printf("B-");
if(id%4==2)printf("C-");
if(id%4==3)printf("D-");
//printnumber
if(id/4==0)printf("A");
elseif(id/4+1<=10)printf("%d",id/4+1);
if(id/4==10)printf("J");
if(id/4==11)printf("Q");
if(id/4==12)printf("K");
}
voidshuffle(){
for(inti=0;i<52;i++)
swap(a[i],a[rand()%(i+1)]);//randomshuffle
}
intmain(){
srand((unsignedint)time(NULL));
for(inti=0;i<52;i++)
a[i]=i;
shuffle();
for(inti=0;i<52;i++){
pt(a[i]);
if(i%13==12)printf(" ");
}
return0;
}
為每張牌定義id
隨機洗牌
❸ c語言程序設計撲克牌游戲
定義一個結構類型表示一張牌,結構包含3個成員,第一個成員char:取值2,3~K,A表示牌名字,第二個成員int:取值2~14表示牌真實大小。第三個成員:結構鏈表指針。
寫一個初始化函數,定義52大小的結構數組,成員值初值分別和牌對應,遍歷數組並將每個元素的鏈表指針依次指向下一個元素地址。這樣得到一個初始鏈表。(相當於一盒新牌)
所有涉及隨機數都用rand函數,洗牌分四份就是循環取隨機數m=1~n,n是隨循環自減,初值52,直到n變成0。每隨一次循環就從初始鏈表中遍歷取出對應第m個節點,並從初始鏈表中將這個節點斷開(既前一個節點指針直接指向後一個節點指針)。每取13張就組成一個新的鏈表。這樣獲得4個新鏈表分別表示4個玩家。
最後出牌就是分別遍歷自己的鏈表,利用循環取牌比較結構數值大小。(取出的牌要從鏈表斷開和上面一樣,你把取出節點寫成獨立函數就能反復使用)。
❹ 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語言程序設計課程設計撲克牌游戲,怎麼做
#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語言)
其實這是典型的利用鏈表求解的問題,但是此題用鏈表的話還需要應用一個長度為13的數組做輔助,所以我直接用數組來進行演示,將在手中的牌進行標記,將放到桌子上的牌進行賦值。
我在很小的時候我的姥爺就曾給我表演過這個魔術,當時我自己用撲克牌弄了將近兩個小時才終於知道了這13張牌的順序是什麼,有興趣的話你可以自己試一試,很有意思。
下面的代碼你可以進行調試來幫助理解整個過程
#include <stdio.h>
void main()
{
int poker[13];//十三張撲克牌
for(int i = 0;i<13;i++)//初始化
poker[i] = 0;//0代表牌還在手中,不為0代表放到了桌子上
int remain = 13;//手中剩餘的撲克數
int j = 12;//從最下邊開始抽牌
int order = 1;//當order為2時,將此時的牌放到桌子上
int number = 1;//從A開始
while(remain != 0)
{
if(j == -1)
{
j = 12;//返回最後一張牌
continue;
}
if(poker[j] != 0)//如果牌已不在手中,則到下一張牌
{
j--;
continue;
}
if(order == 2)
{
poker[j]= number++;//將撲克賦值
remain--;//手中剩餘的牌數減1
order = 1;
continue;
}
order++;
j--;
}
//輸出一開始小明手中撲克牌的順序
for(i = 0; i < 13;i++)
printf("%d ",poker[i]);
}
想要寫出一個程序重點在於理解這個過程,只有對這個過程熟悉了才有可能把它用代碼來演示出來。
❼ c語言 你的手裡有13張牌從a到k,現在將你手上的第一張牌放到桌子上,在將第二張牌放到最後
這題目有問題吧,還是我理解有誤?
比如一開始我的手牌是, 1,2,3..., 13
第一張放在桌面上,第二張放到最後是,
桌面上的牌1, 手上的牌是, 3, 4,5...,13, 2
第三張放桌面上?
那桌面上的牌是:1,3
怎麼可能是有順序的?
還是說一開始的手牌是無序的,這題就是求一開始手牌的順序?
❽ c語言編程題!!急求!! 關於撲克牌(要完整代碼最好有解釋)
#include<stdio.h>
int asc(char p[][3]);
intisError(char p1[][3],char p2[][3]);
void compare(char p3[][3],char p4[][3]);
int main()
{
char a[3][3],b[3][3],c;
int i,j,resulta,resultb,result,flag=0;
printf("請輸入A的撲克牌,撲克牌之間以空格隔開,然後按下回車:
");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
c=getchar();
if(c!=' '&&c!=10)
{
if(j==0)
{
if(c=='H'||c=='S'||c=='D'||c=='C')
;
else
{
printf("Input Error!
");
return 0;
}
}
if(j==1)
{
if(c=='J'||c=='Q'||c=='K'||c=='A'||(c>='1'&&c<='9'))
{
if(c=='J')
c=59;
if(c=='Q')
c=60;
if(c=='K')
c=61;
if(c=='A')
c=62;
if(c=='1')
flag=1;
}
else
{
printf("Input Error!
");
return 0;
}
}
if(j==2)
{
if(c!='0')
{
printf("Input Error!
");
return 0;
}else
{
flag=0;
c=58;
a[i][1]=c;
break;
}
}
a[i][j]=c;
}else
{
if(flag==1)
{
printf("Input Error!
");
return 0;
}
if(j==2)
break;
j--;
}
}
}
printf("請輸入B的撲克牌,撲克牌之間以空格隔開,然後按下回車:
");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
c=getchar();
if(c!=' '&&c!=10)
{
if(j==0)
{
if(c=='H'||c=='S'||c=='D'||c=='C')
;
else
{
printf("Input Error!
");
return 0;
}
}
if(j==1)
{
if(c=='J'||c=='Q'||c=='K'||c=='A'||(c>='1'&&c<='9'))
{
if(c=='J')
c=59;
if(c=='Q')
c=60;
if(c=='K')
c=61;
if(c=='A')
c=62;
if(c=='1')
flag=1;
}
else
{
printf("Input Error!
");
return 0;
}
}
if(j==2)
{
if(c!='0')
{
printf("Input Error!
");
return 0;
}else
{
flag=0;
c=58;
b[i][1]=c;
break;
}
}
b[i][j]=c;
}else
{
if(flag==1)
{
printf("Input Error!
");
return 0;
}
if(j==2)
break;
j--;
}
}
}
resulta=asc(a);
if(resulta==0)
return 0;
resultb=asc(b);
if(resultb==0)
return 0;
result=isError(a,b);
if(result==0)
return 0;
compare(a,b);
for(i=0;i<3;i++)
{
a[i][2]='