C語(yǔ)言實(shí)戰(zhàn)之紙牌游戲_第1頁(yè)
C語(yǔ)言實(shí)戰(zhàn)之紙牌游戲_第2頁(yè)
C語(yǔ)言實(shí)戰(zhàn)之紙牌游戲_第3頁(yè)
C語(yǔ)言實(shí)戰(zhàn)之紙牌游戲_第4頁(yè)
C語(yǔ)言實(shí)戰(zhàn)之紙牌游戲_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第C語(yǔ)言實(shí)戰(zhàn)之紙牌游戲目錄1.基本要求2.運(yùn)行界面3.代碼解釋

1.基本要求

一副沒有花牌(J、Q、K、A、大小王)的撲克牌,兩個(gè)人進(jìn)行紙牌游戲,其中一個(gè)人為用戶,另一個(gè)人為計(jì)算機(jī);

每輪每人各發(fā)5張牌,各自以這5張牌建立二叉排序樹;

由用戶先出,輪流出牌,每次只能出一張并且要比別人出的大,如:用戶出3,計(jì)算機(jī)則要出比3大的牌,沒有則選擇不出;

最先出完的人獲勝。

2.運(yùn)行界面

1.首頁(yè)面

2.游戲說(shuō)明

3.開始游戲

4.開始出牌

5.游戲結(jié)束

3.代碼解釋

#includestdio.h

#includestdlib.h

#includewindows.h

#includetime.h

intcard[5][2];//分別標(biāo)記玩家和用戶已經(jīng)出過的牌

intplayercard[5];//玩家的手牌

intcomputercard[5];//電腦的手牌

charbhuase[5];

charchuase[5];

typedefstructnode

intdata;

structnode*LChild;

structnode*RChild;

}node;

typedefstructtree

intdata;

structnode*LChild;

structnode*RChild;

}tree;

//游戲說(shuō)明

voidPlayingCardsyxsm()

printf("每輪每人各發(fā)5張牌,各自以五張牌建立二叉樹,由用戶先出,輪流出牌,\n");

printf("每次只能出一張并且要比別人出的大,\n");

printf("如:用戶出3,計(jì)算機(jī)則要算出比3大的牌,沒有則選擇不出;\n");

printf("最先出完的人獲勝。\n");

//發(fā)牌

voidPlayingCardsfp()

intplayer;

intcomputer;

//玩家和電腦各發(fā)五張牌

for(inti=0;ii++){

player=rand()%9+2;

printf("玩家發(fā)到的牌:%d\n",player);

playercard[i]=player;

computer=rand()%9+2;

printf("電腦發(fā)到的牌:%d\n",computer);

computercard[i]=computer;

//出牌

voidPlayingCardscp()

intplayer=0;//玩家當(dāng)前回合出的牌

intcomputer=0;//電腦當(dāng)前回合出的牌

intplayercount=0;//玩家的出牌數(shù)

intcomputercount=0;//電腦的出牌數(shù)

boolflag=false;

//當(dāng)每次都出現(xiàn)最大值時(shí),游戲同樣最多進(jìn)行5回合

for(intm=0;mm++)

//在雙方都有牌出的時(shí)候,一共最多進(jìn)行5回合出牌

for(intk=0;kk++)

for(intj=0;jj++)

//確定當(dāng)前牌可以出,大于對(duì)方的出牌,且自己沒有出過這張牌

if(playercard[j]computercard[j][0]==0)

printf("玩家出牌%c%d\n",bhuase[j],playercard[j]);

playercount++;//玩家出牌數(shù)+1

//標(biāo)記玩家已經(jīng)出過這張牌了

card[j][0]=1;

player=playercard[j];

Sleep(800);//在頭函數(shù)#includewindows.h中,起到休眠程序的作用

break;

//若果玩家已經(jīng)出完5張牌,則玩家獲勝,退出循環(huán)

if(playercount==5)

printf("玩家贏了!");

flag=true;

break;

for(intj=0;jj++)

//確定當(dāng)前牌可以出,大于對(duì)方的出牌,且自己沒有出過這張牌

if(computercard[j]playercard[j][1]==0)

printf("電腦出牌%c%d\n",chuase[j],computercard[j]);

computercount++;//電腦出牌數(shù)+1

//標(biāo)記電腦已經(jīng)出過這張牌了

card[j][1]=1;

computer=computercard[j];

Sleep(800);

break;

//若果電腦已經(jīng)出完5張牌,則電腦獲勝,退出循環(huán)

if(computercount==5)

printf("電腦贏了!");

flag=true;

break;

//如果玩家的牌大于電腦的最大牌后,將電腦當(dāng)前回合的牌值重置為0,繼續(xù)進(jìn)行下一回合

if(playercomputer)computer=0;

//如果電腦的牌大于玩家的最大牌后,將玩家當(dāng)前回合的牌值重置為0,繼續(xù)進(jìn)行下一回合

if(computerplayer)player=0;

if(flag)break;

//發(fā)完牌后玩家的手牌

voidPlayingCardsxswj()

printf("玩家\n");

printf("%d%d%d%d%d\n",playercard[0],playercard[1],playercard[2],playercard[3],playercard[4],playercard[5]);

//發(fā)完牌后電腦的手牌

voidPlayingCardsxsdn()

printf("電腦\n");

printf("%d%d%d%d%d\n",computercard[0],computercard[1],computercard[2],computercard[3],computercard[4],computercard[5]);

//初始化樹的頭結(jié)點(diǎn)為空

voidtreechushihua(node*t)

t=NULL;

//建立平衡二叉樹

node*treecharu(node*t,intkey)

//如果頭結(jié)點(diǎn)為空,就將當(dāng)前節(jié)點(diǎn)設(shè)置為根節(jié)點(diǎn)

if(t==NULL)

node*p;

p=(node*)malloc(sizeof(node));

p-data=key;

p-LChild=NULL;

p-RChild=NULL;

t=p;

//如果頭結(jié)點(diǎn)不為空,則進(jìn)行平衡二叉樹的插入操作

else

//插入結(jié)點(diǎn)的值小于根節(jié)點(diǎn),則插入左子樹

if(keyt-data)

t-LChild=treecharu(t-LChild,key);

//插入結(jié)點(diǎn)的值大于等于根節(jié)點(diǎn),則插入右子樹

else

t-RChild=treecharu(t-RChild,key);

returnt;

//將玩家手牌存儲(chǔ)到平衡二叉樹中

node*jianlib(node*t)

inti,key;

for(i=0;ii++)

key=playercard[i];

t=treecharu(t,key);

returnt;

//將電腦手牌存儲(chǔ)到平衡二叉樹中

node*jianlic(node*t)

inti,key;

for(i=0;ii++)

key=computercard[i];

t=treecharu(t,key);

returnt;

//順序輸出玩家或電腦手牌

voidtreepaixu1(node*t)

if(t!=NULL)

treepaixu1(t-LChild);

printf("%d",t-data);

treepaixu1(t-RChild);

//先序遍歷玩家平衡二叉樹

voidtreepaixu2(node*t,int*p)

if(t==NULL)return;

else

//先序遍歷,將玩家手牌有序化

treepaixu2(t-LChild,p);

playercard[(*p)++]=t-data;

treepaixu2(t-RChild,p);

//先序遍歷電腦平衡二叉樹

voidtreepaixu3(node*t,int*p)

if(t==NULL)return;

else

//先序遍歷,將電腦手牌有序化

treepaixu3(t-LChild,p);

computercard[(*p)++]=t-data;

treepaixu3(t-RChild,p);

//主函數(shù)

intmain()

intk=0;

//隨機(jī)函數(shù),通過時(shí)間種子來(lái)獲取隨機(jī)數(shù)種子,獲得隨機(jī)數(shù)

srand((unsigned)time(NULL));

intn=0;

//選擇菜單

while(k!=-1)

puts("");

puts("");

puts("");

printf("\t\t\t****紙牌游戲****\n");

printf("\t\t\t****1.游戲說(shuō)明****\n");

printf("\t\t\t****2.開始游戲****\n");

printf("\t\t\t****3.開始出牌****\n");

printf("\t\t\t****4.游戲結(jié)束****\n");

printf("\t\t\t******************\n");

puts("");

printf("\t\t**********************************\n");

printf("\t\t**********************************\n");

puts("");

printf("\t\t\t請(qǐng)輸入(1、2、3、4):\n");

scanf("%d",

switch(k){

//游戲說(shuō)明

case1:PlayingCardsyxsm();break;

//發(fā)牌階段

case2:{

//發(fā)牌

PlayingCardsfp();

//建立玩家二叉樹

node*t1=NULL;

t1=jianlib(t1);

printf("玩家手牌為:");

treepaixu1(t1);

//建立電腦二叉樹

node*t2=NULL;

t2=jianlic(t2);

puts("");

printf("電腦手牌為:");

treepaixu1(t2);

//玩家手牌有序化

n=0;

treepaixu2(t1,

//電腦手牌有序化

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論