人工洗牌課程設(shè)計(jì)---模擬人工洗牌

人工洗牌課程設(shè)計(jì)---模擬人工洗牌

ID:12448777

大小:136.00 KB

頁(yè)數(shù):11頁(yè)

時(shí)間:2018-07-17

人工洗牌課程設(shè)計(jì)---模擬人工洗牌_第1頁(yè)
人工洗牌課程設(shè)計(jì)---模擬人工洗牌_第2頁(yè)
人工洗牌課程設(shè)計(jì)---模擬人工洗牌_第3頁(yè)
人工洗牌課程設(shè)計(jì)---模擬人工洗牌_第4頁(yè)
人工洗牌課程設(shè)計(jì)---模擬人工洗牌_第5頁(yè)
資源描述:

《人工洗牌課程設(shè)計(jì)---模擬人工洗牌》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。

1、課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目:模擬人工洗牌學(xué)生姓名:專業(yè):班級(jí):學(xué)號(hào):完成日期:2012年7月一:需求和規(guī)格說(shuō)明:(一)題目要求:擬要求編寫一個(gè)人工洗牌的程序,將洗好的牌分別發(fā)給四個(gè)人。而且要求用結(jié)構(gòu)card來(lái)描述一張牌的花色和數(shù)字(suit,num),利用C++的隨機(jī)函數(shù)voidsrand(unsignedseed)和intrand(void)來(lái)模擬人工洗牌的過(guò)程,最后將洗好的52張牌按順序分別發(fā)給四個(gè)人。而且對(duì)每個(gè)人的牌要按橋牌的規(guī)則輸出。即一個(gè)人的牌要先按牌的花色(順序依次為梅花,方塊,紅心和黑桃)進(jìn)行分類

2、,同一類牌的內(nèi)部要再按A,K,Q,J,…,3,2牌的大小順序排列。另外發(fā)牌應(yīng)按四個(gè)人的順序依次分發(fā)。(二)設(shè)計(jì):1:設(shè)計(jì)思想:第一:根據(jù)題目要求,設(shè)置一個(gè)結(jié)構(gòu)體card,因?yàn)橐粡埮朴谢ㄉ蛿?shù)字的不同,所以結(jié)構(gòu)體card包括了suit和num兩個(gè)成員,其中suit通過(guò)取0,1,2,3來(lái)分別表示梅花,方塊,紅心和黑桃四種花色;num取值2-10、J(11)、Q(12)、K(13)、A(14)來(lái)表示牌上的數(shù)字。因此一張牌可以由suit和num的組合來(lái)唯一確定。第二:洗牌(shuffle)。由于洗牌時(shí)牌的順序是隨

3、機(jī)的,所以用到了voidsrand(unsignedseed)和intrand(void)函數(shù)。通過(guò)srand函數(shù)設(shè)置rand函數(shù)所用得到隨機(jī)數(shù)產(chǎn)生算法的種子值來(lái)不斷改變r(jià)and函數(shù)的隨機(jī)數(shù)的啟動(dòng)種子值,以產(chǎn)生最佳的隨機(jī)數(shù)。又由于相同的種子后面的rand()函數(shù)會(huì)出現(xiàn)一樣的隨機(jī)數(shù)。所以為了防止隨機(jī)數(shù)每次重復(fù)常常使用系統(tǒng)時(shí)間來(lái)初始化,即使用time函數(shù)來(lái)獲得系統(tǒng)的時(shí)間,將time_t型數(shù)據(jù)轉(zhuǎn)化為(unsigned)型再傳給srand函數(shù),即srand((unsigned)time(&t));而在這里所用的則

4、是srand(time(NULL)),直接傳入一個(gè)空指針。用0到51的整數(shù)分別對(duì)應(yīng)52張牌隨機(jī)產(chǎn)生0到51之間的一個(gè)整數(shù),將該整數(shù)所對(duì)應(yīng)的那張牌與0對(duì)應(yīng)的那張牌交換,然后隨機(jī)產(chǎn)生1到51之間的一個(gè)整數(shù),重復(fù)該過(guò)程,每次隨機(jī)數(shù)的最大范圍減1,直到洗牌完畢。第三:排序(sort)。排序包括按花色排序和按大小排序。在按花色排序中,利用sort函數(shù),根據(jù)冒泡排序法,從第一張牌開(kāi)始依次與其后面的牌比較suit的大小,若第一張牌的suit大于后面的,則兩者交換,否則繼續(xù)。同理:在按照大小排序時(shí),按照冒泡排序法,大的值

5、在前,小的在后。而在花色排好之后,只需要在某種花色的內(nèi)部進(jìn)行大小排序即可。即函數(shù)sortNum().第四:牌的顯示(show())。牌的顯示包括花色和數(shù)字。花色用switch函數(shù)分為四種情況分別輸出。數(shù)字則直接定義一個(gè)字符型數(shù)組,通過(guò)數(shù)組nums來(lái)表示輸出即可。第五:主函數(shù):(1)設(shè)置四個(gè)數(shù)組A[u],B[u],C[u],D[u]來(lái)反別表示四個(gè)人的牌。然后模擬出52張牌。(2)洗牌。(3)發(fā)牌:發(fā)牌時(shí)是根據(jù)memcpy函數(shù)隨機(jī)將牌發(fā)給四個(gè)人。(4)排序。將牌發(fā)好之后再根據(jù)排序函數(shù)分別對(duì)四個(gè)人的牌進(jìn)行花色和

6、大小的排序。(5)輸出。即用show函數(shù)將牌輸出。結(jié)束!Structcardintsuit;intnum;系統(tǒng)程序設(shè)計(jì)結(jié)構(gòu)圖:inti,n;Cardc;voidshuffle(Card*card)Srand(time(NULL))intrand(void)memcpy(void*u,void*v,unsignedintn)inti,j,k;cardt;voidsort(Card*card,intsize,CardTypestype)memcpy(void*u,void*v,Unsignedintn)int

7、i;intj=0;intA[4={0,0,0,0}voidsortNum(Card*card)voidsort(Card*card,intsize,Num)Voidshow(intsuit,intnum)switchcharnums[];switvhsuit;屬性和類型定義:類名成員類別類型成員名描述Card花色intsuit表示四種花色;當(dāng)取0,1,2,3是分別表示梅花,方塊,紅心,黑桃數(shù)字intnum表示牌上的數(shù)字;取值為:2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13),A(

8、14)類名成員類型類型成員名描述voidmain()屬性constintnum一副牌的總數(shù)52constintu每個(gè)玩家的牌數(shù)enumCardType表示一張牌的兩個(gè)屬性(suit,num)ints代表花色(從0到3表示四種花色)intn代表牌上的數(shù)字(2-10,J(11),Q(12),K(13),A(14))inti表示牌的數(shù)目(0-51)方法voidshuffle洗牌程序voidsort排序程序voidsortNum排序程

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。