人工洗牌課程設(shè)計-模擬人工洗牌_第1頁
人工洗牌課程設(shè)計-模擬人工洗牌_第2頁
人工洗牌課程設(shè)計-模擬人工洗牌_第3頁
人工洗牌課程設(shè)計-模擬人工洗牌_第4頁
人工洗牌課程設(shè)計-模擬人工洗牌_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、 ,牌的大小順序排列。另外發(fā)牌應(yīng)按四個人的順序依次分發(fā)。(二) 設(shè)計:,:設(shè)計思想:第一:根據(jù)題目要求,設(shè)置一個結(jié)構(gòu)體card,因為一張牌有花色和數(shù)字的不 同,所以結(jié)構(gòu)體card包括了 suit和num兩個成員,其中suit通過取0, 1, 2, 3來 分別表示梅花,方塊,紅心和黑桃四種花色;num取值2-10. J(ll)、Q(12)、 K(、A(14)來表示牌上的數(shù)字。因此一張牌可以由suit和num的組合來唯一確 定。笫二:洗牌(shuffle) o山于洗牌時牌的順序是隨機的,所以用到了 void srand(unsignedseed)和int rand (void)函數(shù)。通過srand

3、函數(shù)設(shè)置“nd函數(shù)所用得到隨機數(shù) 產(chǎn)生算法的種子值來不斷改變rand函數(shù)的隨機數(shù)的啟動種子值,以產(chǎn)生最佳的隨 機數(shù)。乂曲于相同的種子后面的“ndO函數(shù)會出現(xiàn)一樣的隨機數(shù)。所以為了防止 隨機數(shù)每次重復(fù)常常使用系統(tǒng)時間來初始化,即使用time函數(shù)來獲得系統(tǒng)的時 間,將time_t型數(shù)據(jù)轉(zhuǎn)化為(unsigned)型再傳給srand函數(shù),即srand(unsigned) time (&t);而在這里所用的則是 srand(time (NULL),直接傳入 一個空指針。用0到51的整數(shù)分別對應(yīng)52張牌 隨機產(chǎn)生0到51之間的一個整 數(shù),將該整數(shù)所對應(yīng)的那張牌與0對應(yīng)的那張牌交換,然后隨機產(chǎn)生1到51之間

4、 的一個整數(shù),重復(fù)該過程,每次隨機數(shù)的最大范圍減1,直到洗牌完畢。第三:排序(sort) 排序包括按花色排序和按大小排序。在按花色排序中,利 用sort函數(shù),根據(jù)冒泡排序法,從第一張牌開始依次與其后面的牌比較suit的大 小,若第一張牌的suit大于后面的,則兩者交換,否則繼續(xù)。同理:在按照大小排 序時,按照冒泡排序法,大的值在前,小的在后。而在花色排好之后,只需要在某 種花色的內(nèi)部進行大小排序即可。即函數(shù)sortNumO.第四:牌的顯示(show()o牌的顯示包括花色和數(shù)字?;ㄉ胹witch函數(shù)分為 四種情況分別輸出。數(shù)字則直接定義一個字符型數(shù)組,通過數(shù)組nums來表示輸出 即可。第五:主

5、函數(shù):(1)設(shè)置四個數(shù)組Au, Bu, Cu,嘰u來反別表示四個人的 牌。然后模擬出52張牌。(2)洗牌。(3)發(fā)牌:發(fā)牌時是根據(jù)memcpy函數(shù)隨機將牌 發(fā)給四個人。(4)排序。將牌發(fā)好之后再根據(jù)排序函數(shù)分別對四個人的牌進行花色 和大小的排序。(5)輸出。即用s how函數(shù)將牌輸出。結(jié)束Struct card系統(tǒng)程序設(shè)計結(jié)構(gòu)圖:int suit ;int num;int i , j , k ; int i ;int j=0; Void show int i , n ;card t ; int (int suit, Card c;A4=0, 0, 0, 0 int num) void shuf

6、flevoid sort void sortNum switch char (Card *card)(Card*card, int size, (Card *card) nums: Srand (time(NULL)CardType stype) void switvh suit; int rand(void)memcpy(void*u, void*v, sort(Card*card, memcpy(void *u, void *v,Unsigned int n) int size, Num) unsigned int n)屬性和類型定義:類型成員名描述類名成員類別花色int suit表示四種

7、花色;當(dāng)取0, 1, 2, 3是分別表示梅花,方塊,紅心,黑桃Cardint num表示牌上的數(shù)字;取值為:2, 3, 4, 5, 6, 7,&9,10,J(ll), Q數(shù)字(12), K(13), A(14)成員類型類型成員名類名描述const int num 一副牌的總數(shù)52const int u每個玩家的牌數(shù)enum CardType表示一張牌的兩個屬性(suit, num)屬性void int s代表花色(從0到3表示四種花色)main()int n代表牌上的數(shù)字(2-10, J(U), Q(12), K(13), A(14)inti表示牌的數(shù)U (0-51)void shuffle洗

8、牌程序void sort排序程序方法sortNum排序程序voidvoid show顯示牌的花色和數(shù)字(三)用戶手冊無。(四)調(diào)試及測試程序驗證結(jié)果如下截圖。為說明是隨機的發(fā)牌,故用三個結(jié)果來證明。Ci.Progra Files-XBlcrosoft Visual StudioRyProjectsVsFaniii?.F layer* A9唸紅心9!rJ 1 9ST* J-C:M*rogr3i t n esRicrosoft Visual Slu.*Jgh43”7a93nTalnOntFl薯可.,紅紅蚤史黑c|*丄 6ZQ&AS4INKJ&4Sv1212f;JrKM松也杯上方roKLO/L3貳X

9、汩游潘海I&郵口 二 psgrga nl*:nnr9s0?*2-.J?=s&VN%3ra7tfMgfs0bEgw- ss.nobclslcc(35)ttinclude iostream h include mentory h tJinclude stdlib h include timehconst i nt Num 32- const int u H 13 - enum CardType (SUIT- NUMr typedef structint suit-int num-)carlvoid shuffleoard 氓card) 宀intr-IrCard 3srand (time (NULL

10、)- for (i H.i Num- i+)n H rando % Num-if (i!= n)memcpy(&c, &cardn, sizeof(Card); /sizeof(Card)=8memcpy(&cardtn, &cardLi., sizeof(Card);memcpy(&card LiJ, &c, sizeof(Card);void sort(Card *card, int size, CardType stype)int i, j, k;Card t;for (i = 0; i size-1: +i)k = i;for (j = i + 1; j cardj. suit) k

11、= j;else if (stype = NUM) & cardkJ. num cardtj, num) k = j;if (k != i)memcpy(&t, &cardi, sizeof(Card);memcpy(&cardi, &cardk, sizeof(Card);memcpy(&cardtk, &t, sizeof(Card);void sortNum(Card *card)int A4 = 0, 0, 0, 0;int i;for (i = 0; i =12; i+)+Acardi. suit;int j = 0;for (i = 0; i =3; i卄)sort(card +

12、j, Ai j, NUM);j =j+ Ai;void show(int suit, int num)static char nums = 2, 3, 4, 5, 6, 7, 8, 9, 10,J, Q, K,A;switch (suit)case 0:cout 梅花”;break;case 1:cout 方塊”;break;case 2:cout 紅心;break;case 3:cout 黑桃 ”、break;if (num = 10)cout 10;elsecout nums num-2:cout void main()Card cardNum;Card Au, Bu, Cu, Du;in

13、t i, s = 0, n = 2;for (i = 0; i Num; +i)cardi suit = s; cardi num = n;+n;if (i+1) % 13 = 0)+s;n= 2;shuffle(card);int j = 0;for (i = 0; i Num; i +二 4)memcpy&cardlij, sizeof(Card);sizeof (Card);sizeof (Card);memcpy(&Bj, &cardi+l,memcpy(&Cj, &cardi+2,memcpy&cardi+3Z,sizeof (Card);+j;sort(A, u, SUIT);so

14、rtNum(A);sort (B, u, SUIT):sortNum(B);sort(C, u, SUIT);sortNum(C);sort(D, u, SUIT);sortNum(D);coutz/ 人匸洗牌游戲 z,endlendl;cout Player 1 t Player 2 t;cout Player 3 t Player 4 endl; for (i = 0; i u; +i)show (A i suit,A:L num);show(Bi suit,B匸 num);show(Ci suit,Ci num);show(Di. suit,Di num);cout endl;(六)進一步改進:由于程序中僅僅包含了 52張牌,而且不包括大小王。對于實際中的玩牌方式 有很多種,我們還可以根據(jù)實際的需要添加多種玩牌的方法。在原程序的基礎(chǔ)上在 加以改進,通過添加其他的函數(shù)來完成。讓用戶在使用時可以根據(jù)自己的需要來選 擇。此外,對于個別函數(shù)的應(yīng)用

溫馨提示

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

評論

0/150

提交評論