數(shù)據(jù)結(jié)構(gòu)撲克牌發(fā)牌問題_第1頁
數(shù)據(jù)結(jié)構(gòu)撲克牌發(fā)牌問題_第2頁
數(shù)據(jù)結(jié)構(gòu)撲克牌發(fā)牌問題_第3頁
數(shù)據(jù)結(jié)構(gòu)撲克牌發(fā)牌問題_第4頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、內(nèi)容:?jiǎn)栴}重述:設(shè)計(jì)一個(gè)四個(gè)人玩的紙牌游戲的程序, 一共有五十四張牌, 要發(fā)給四個(gè)人,并且每次發(fā)出的牌都不一樣。并且符合紙牌的規(guī)則(可以是橋牌、升級(jí)、紅四、斗地主等,但是必須說明規(guī)則) 。并且程序能按照設(shè)定的游戲規(guī)則從小到大進(jìn)行排序, 如果有底牌的話要說明底牌的情況。 最后要驗(yàn)證每次發(fā)牌是否合法。該程序紙牌的玩法:在一副牌中,去除大小王,然后 2 最大其次是 A ,然后按順序從大到小一次減小。所用到的具體算法:冒泡法,線性表刪除元素操作;具體做法為:先將一副撲克牌中的大小王拿掉,還會(huì)剩下 52 張牌,在進(jìn)行隨機(jī)的洗牌,將所有的排順序打亂, 然后在打亂后一定的順序情況下, 按照規(guī)則平均分發(fā)給四個(gè)

2、人,每人會(huì)得到十三張牌,最后將每人手里的牌按照 3、4、5、6、7、8、9、10、J、 Q、K 、A 、2 的順序進(jìn)行排列,在排列過程中會(huì)出現(xiàn)花色的前后順序排列。再將四個(gè)人手里的拍驗(yàn)證, 檢驗(yàn)是否每張牌是否都出現(xiàn)并且只出現(xiàn)一次。如果出現(xiàn)并且只出現(xiàn)一次,說明程序成功,否則程序失敗,則需要重新進(jìn)行程序的檢驗(yàn),修改。流程圖大致情況 :設(shè)計(jì)的結(jié)構(gòu)體變量說明:char CardColor是存儲(chǔ)花色的變量char CardNumber2是存儲(chǔ)撲克牌的面值變量int flag;/ 判斷標(biāo)志struct pukepai Card52用 char 類型存儲(chǔ) 52 張撲克牌 int card52用 int 類型形

3、式并且,我們?cè)谝婚_始定義每張牌的變量每張牌現(xiàn)在我們給予賦值, 例如 108 代表方塊 8,212 代表紅桃 Q,其中三位數(shù)中第一為代表花色: 1 代表方塊, 2 代表紅桃, 3 代表梅花, 4 代表黑桃。 01 代表 A ,02 代表 2,依次類推, 11 代表 J,12代表 Q,13 代表 K。具體的函數(shù)說明均在程序中標(biāo)注,不再重復(fù)說明。程序執(zhí)行結(jié)果為:1.2.3.結(jié)論:通過以上多次程序運(yùn)行, 滿足了多次結(jié)果不相同, 并保證每次都會(huì)有所有的排出現(xiàn)且僅出現(xiàn)一次。遇到的問題 :對(duì)一些代碼的含義不太清楚,用起來不太熟練。解決方法是,通過學(xué)習(xí)書上的知識(shí),了解代碼含義,多訓(xùn)練慢慢熟練。附錄運(yùn)行程序?yàn)椋?/p>

4、#include<stdio.h>#include<stdlib.h>#include<time.h>#include<string.h>/*/這是一個(gè)模仿五十K 的發(fā)牌游戲/定義一個(gè)結(jié)構(gòu)體,然后定義一個(gè)該結(jié)構(gòu)體的數(shù)組Card52( 大寫的),存儲(chǔ)撲克牌(這個(gè)存儲(chǔ)的是字符串)/定義一個(gè)int類型的card52 (小寫的),來表示撲克牌,比如105, 1代表花色(方塊) ,05 代表面值5/再比如 313,就是梅花K , 401 就是黑桃A桃,方塊,梅花,黑桃。將他們減去2 就代表百位的數(shù)值)(ASCII表中3,4,5,6分別表示紅/再說一下排序,

5、就是設(shè)置一個(gè)標(biāo)志位,標(biāo)識(shí)牌的面值的大小3->0 , 4->1 , 5->2 ,., J->8 ,Q->9 , K->10 , A->11 , 2->12/然后就是card52 排序,再轉(zhuǎn)換一下到結(jié)構(gòu)體數(shù)組Card52 就行了./*/定義結(jié)構(gòu)體 ,存儲(chǔ)撲克牌struct pukepaichar CardColor;/ 存儲(chǔ)花色char CardNumber2;/ 存儲(chǔ)撲克牌的面值intflag;/ 判 斷 標(biāo) 志 , 如 果 按 照card52 排 序 , 那 么 牌 由 小 到 大 就是:A,2,3,4,5,6,7,8,9,10,J,Q,K/而我

6、們需要由小到大排序是:3,4,5,6,7,8,9,10,J,Q,K,A,2;struct pukepai Card52;/ 用 char 類型存儲(chǔ)52 張撲克牌int card52;/ 用 int 類型形式/*/洗牌函數(shù):將牌打亂void xipai()int i,j,k,temp;srand(time(0);for( i=0;i<4;i+)for(j=0;j<13;j+)cardi*13+j=(i+1)*100+j+1;/printf("how many times for card:");/scanf("%d",&count);/

7、for(j=1;j<=count;j+)/洗牌for(i=0;i<52;i+)k=rand()%(51-i+1)+i;temp=cardi;cardi=cardk;cardk=temp;printf("n");/*/轉(zhuǎn)換函數(shù): card52->Card52, 將牌的存儲(chǔ)由int 類型轉(zhuǎn)換為char 類型void zhuanhuan()int i,temp;/將數(shù)字轉(zhuǎn)換為牌for(i=0;i<52;i+)Cardi.CardColor=cardi/100+2;temp=cardi%100;if(temp=1)Cardi.CardNumber0='

8、;A'Cardi.CardNumber1='0'continue;if(temp=10)Cardi.CardNumber0='1'Cardi.CardNumber1='0'continue;if(temp=11)Cardi.CardNumber0='J'Cardi.CardNumber1='0'continue;if(temp=12)Cardi.CardNumber0='Q'Cardi.CardNumber1='0'continue;if(temp=13)Cardi.Card

9、Number0='K'Cardi.CardNumber1='0'continue;Cardi.CardNumber0=temp+48;Cardi.CardNumber1='0'/設(shè)置標(biāo)志位,用來判斷牌的面值大小for(i=0;i<52;i+)Cardi.CardColor=cardi/100+2;temp=cardi%100;/一律將面值減3 作為標(biāo)志位Cardi.flag=temp-3;/如果是A 或者是2,那么標(biāo)志加上13if(temp=1|temp=2)Cardi.flag+=13;/*/排序:對(duì) void paixu() char5

10、2 進(jìn)行排序(不管花色,只看牌的面值)int i,j,k;struct pukepai temp;for(i=0;i<4;i+)for(j=0;j<13;j+)for(k=0;k<12;k+)/不管花色,只看牌的面值,所以要對(duì) if(Cardi*13+k.flag>Cardi*13+k+1.flag) 100 求余,然后再比較temp=Cardi*13+k;Cardi*13+k=Cardi*13+k+1;Cardi*13+k+1=temp;/輸出函數(shù):輸出四個(gè)玩家的撲克牌void output()int i;for(i=0;i<52;i+)if(i%13=0)printf(" 第 %d 個(gè)玩家的牌為 :",i/13+1);printf("%c%c%c",Cardi.CardColor,Cardi.CardNumber0,Cardi.CardNumber1);if(i%13=12)printf("n");printf("n");/驗(yàn)證函數(shù):驗(yàn)證是否有重復(fù)的牌void yanzheng()int flag=0;int i,j;for(i=0;i<52;i+)for(j=0;j<52;j+)if(i!=j)/如果有重復(fù)的牌,那么就讓flag=1if(cardi=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論