版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計報告</b></p><p> 設計題目:模擬人工洗牌</p><p><b> 學生姓名:</b></p><p><b> 專業(yè): </b></p><p><b> 班級: </b></
2、p><p><b> 學號: </b></p><p> 完成日期:2012年7月</p><p> 一:需求和規(guī)格說明:</p><p><b> ?。ㄒ唬╊}目要求:</b></p><p> 擬要求編寫一個人工洗牌的程序,將洗好的牌分別發(fā)給四個人。而且要求用結構
3、card來描述一張牌的花色和數(shù)字(suit,num),利用C++的隨機函數(shù)void srand(unsigned seed)和int rand(void)來模擬人工洗牌的過程,最后將洗好的52張牌按順序分別發(fā)給四個人。而且對每個人的牌要按橋牌的規(guī)則輸出。即一個人的牌要先按牌的花色(順序依次為梅花,方塊,紅心和黑桃)進行分類,同一類牌的內(nèi)部要再按A,K,Q,J,…,3,2牌的大小順序排列。另外發(fā)牌應按四個人的順序依次分發(fā)。</p&g
4、t;<p><b> ?。ǘ┰O計:</b></p><p><b> ?。保涸O計思想:</b></p><p> 第一:根據(jù)題目要求,設置一個結構體card,因為一張牌有花色和數(shù)字的不同,所以結構體card包括了suit和num兩個成員,其中suit通過取0,1,2,3來分別表示梅花,方塊,紅心和黑桃四種花色;num取值2-10
5、、J(11)、Q(12)、K(13)、A(14)來表示牌上的數(shù)字。因此一張牌可以由suit和num的組合來唯一確定。</p><p> 第二:洗牌(shuffle)。由于洗牌時牌的順序是隨機的,所以用到了void srand(unsigned seed)和int rand(void)函數(shù)。通過srand函數(shù)設置rand函數(shù)所用得到隨機數(shù)產(chǎn)生算法的種子值來不斷改變rand函數(shù)的隨機數(shù)的啟動種子值,以產(chǎn)生最佳的隨機
6、數(shù)。又由于相同的種子后面的rand()函數(shù)會出現(xiàn)一樣的隨機數(shù)。所以為了防止隨機數(shù)每次重復常常使用系統(tǒng)時間來初始化,即使用time函數(shù)來獲得系統(tǒng)的時間,將time_t型數(shù)據(jù)轉化為(unsigned)型再傳給srand函數(shù),即srand((unsigned)time(&t));而在這里所用的則是srand(time(NULL)),直接傳入一個空指針。用0到51的整數(shù)分別對應52張牌 隨機產(chǎn)生0到51之間的一個整數(shù),將該整數(shù)所對應的那
7、張牌與0對應的那張牌交換,然后隨機產(chǎn)生1到51之間的一個整數(shù),重復該過程,每次隨機數(shù)的最大范圍減1,直到洗牌完畢。</p><p> 第三:排序(sort)。排序包括按花色排序和按大小排序 。在按花色排序中,利用sort函數(shù),根據(jù)冒泡排序法,從第一張牌開始依次與其后面的牌比較suit的大小,若第一張牌的suit大于后面的,則兩者交換,否則繼續(xù)。同理:在按照大小排序時,按照冒泡排序法,大的值在前,小的在后。而在花
8、色排好之后,只需要在某種花色的內(nèi)部進行大小排序即可。即函數(shù)sortNum().</p><p> 第四:牌的顯示(show())。牌的顯示包括花色和數(shù)字?;ㄉ胹witch函數(shù)分為四種情況分別輸出。數(shù)字則直接定義一個字符型數(shù)組,通過數(shù)組nums來表示輸出即可。</p><p> 第五:主函數(shù):(1)設置四個數(shù)組A[u], B[u], C[u], D[u]來反別表示四個人的牌。然后模擬出
9、52張牌。(2)洗牌。(3)發(fā)牌:發(fā)牌時是根據(jù)memcpy函數(shù)隨機將牌發(fā)給四個人。</p><p> ?。?)排序。將牌發(fā)好之后再根據(jù)排序函數(shù)分別對四個人的牌進行花色和大小的排序。(5)輸出。即用show函數(shù)將牌輸出。</p><p><b> 結束!</b></p><p> 系統(tǒng)程序設計結構圖:</p><p>
10、<b> 屬性和類型定義:</b></p><p> ?。ㄈ┯脩羰謨?無。</p><p> ?。ㄋ模┱{(diào)試及測試 程序驗證結果如下截圖。</p><p> 為說明是隨機的發(fā)牌,故用三個結果來證明。</p><p><b> ?。ㄎ澹?lt;/b></p><p><
11、b> 源代碼:</b></p><p> #include <iostream.h></p><p> #include <memory.h></p><p> #include <stdlib.h></p><p> #include <time.h></p&
12、gt;<p> const int Num = 52;</p><p> const int u = 13; </p><p> enum CardType {SUIT, NUM}; </p><p> typedef struct </p><p><b> {</b></p>
13、<p> int suit; </p><p><b> int num; </b></p><p><b> } Card;</b></p><p> void shuffle(Card *card) </p><p><b> {</b><
14、/p><p> int i, n;</p><p><b> Card c;</b></p><p> srand(time(NULL));</p><p> for (i = 0; i < Num; i++)</p><p><b> {</b></p&
15、gt;<p> n = rand() % Num;</p><p> if (i!= n)</p><p><b> {</b></p><p> memcpy(&c, &card[n], sizeof(Card)); //sizeof(Card)=8</p><p> memcp
16、y(&card[n], &card[i], sizeof(Card));</p><p> memcpy(&card[i], &c, sizeof(Card));</p><p><b> }</b></p><p><b> }</b></p><p><
17、;b> }</b></p><p> void sort(Card *card, int size, CardType stype) </p><p><b> {</b></p><p> int i, j, k;</p><p><b> Card t;</b>&l
18、t;/p><p> for (i = 0; i < size-1; ++i)</p><p><b> {</b></p><p><b> k = i;</b></p><p> for (j = i + 1; j < size; ++j) {</p><p&
19、gt; if ((stype == SUIT) && (card[k].suit > card[j].suit)) </p><p><b> k = j;</b></p><p> else if ((stype == NUM) && card[k].num < card[j].num) </p>
20、<p><b> k = j;</b></p><p><b> }</b></p><p> if (k != i)</p><p><b> {</b></p><p> memcpy(&t, &card[i], sizeof(Car
21、d));</p><p> memcpy(&card[i], &card[k], sizeof(Card));</p><p> memcpy(&card[k], &t, sizeof(Card));</p><p><b> }</b></p><p><b> }&l
22、t;/b></p><p><b> }</b></p><p> void sortNum(Card *card)</p><p><b> { </b></p><p> int A[4] = {0, 0, 0, 0};</p><p><b>
23、 int i; </b></p><p> for (i = 0; i <=12; i++)</p><p> ++A[card[i].suit];</p><p> int j = 0;</p><p> for (i = 0; i <=3; i++)</p><p><b&
24、gt; {</b></p><p> sort(card + j, A[i],NUM);</p><p> j =j+ A[i];</p><p><b> }</b></p><p><b> }</b></p><p> void show(int
25、 suit, int num)</p><p><b> {</b></p><p> static char nums[] = {'2', '3', '4', '5', '6', '7', '8', '9', '10',
26、 'J', 'Q', 'K', 'A'};</p><p> switch (suit)</p><p><b> {</b></p><p><b> case 0:</b></p><p> cout << &q
27、uot;梅花 ";</p><p><b> break;</b></p><p><b> case 1:</b></p><p> cout << "方塊 ";</p><p><b> break;</b></p&g
28、t;<p><b> case 2:</b></p><p> cout << "紅心 ";</p><p><b> break;</b></p><p><b> case 3:</b></p><p> cout &
29、lt;< "黑桃 ";</p><p><b> break;</b></p><p><b> }</b></p><p> if (num == 10)</p><p> cout << "10";</p><
30、p><b> else</b></p><p> cout << nums[num-2];</p><p> cout << "\t\t"; </p><p><b> }</b></p><p> void main()</p>
31、;<p><b> {</b></p><p> Card card[Num];</p><p> Card A[u], B[u], C[u], D[u];</p><p> int i, s = 0,n = 2;</p><p> for (i = 0; i < Num; ++i)<
32、;/p><p><b> { </b></p><p> card[i].suit = s;</p><p> card[i].num = n;</p><p><b> ++n;</b></p><p> if ((i+1) % 13 == 0)</p>
33、<p><b> {</b></p><p><b> ++s;</b></p><p><b> n= 2;</b></p><p><b> }</b></p><p><b> }</b></p>
34、;<p> shuffle(card);</p><p> int j = 0;</p><p> for (i = 0; i < Num; i += 4)</p><p><b> {</b></p><p> memcpy(&A[j], &card[i], sizeof(
35、Card));</p><p> memcpy(&B[j], &card[i+1], sizeof(Card));</p><p> memcpy(&C[j], &card[i+2], sizeof(Card));</p><p> memcpy(&D[j], &card[i+3], sizeof(Card));
36、</p><p><b> ++j;</b></p><p><b> }</b></p><p> sort(A, u, SUIT);</p><p> sortNum(A);</p><p> sort(B, u, SUIT);</p><p
37、> sortNum(B);</p><p> sort(C, u, SUIT);</p><p> sortNum(C);</p><p> sort(D, u, SUIT);</p><p> sortNum(D);</p><p> cout<<"
38、 人工洗牌游戲 "<<endl<<endl;</p><p> cout << "Player 1" << "\t" << "Player 2" << "\t";</p><p> cout << &
39、quot;Player 3" << "\t" << "Player 4" << endl;</p><p> for (i = 0; i < u; ++i)</p><p><b> {</b></p><p> show(A[i].suit, A
40、[i].num);</p><p> show(B[i].suit, B[i].num);</p><p> show(C[i].suit, C[i].num);</p><p> show(D[i].suit, D[i].num);</p><p> cout << endl;</p><p>&
41、lt;b> }</b></p><p><b> }</b></p><p><b> (六)</b></p><p><b> 進一步改進:</b></p><p> 由于程序中僅僅包含了52張牌,而且不包括大小王。對于實際中的玩牌方式有很多種,我
42、們還可以根據(jù)實際的需要添加多種玩牌的方法。在原程序的基礎上在加以改進,通過添加其他的函數(shù)來完成。讓用戶在使用時可以根據(jù)自己的需要來選擇。此外,對于個別函數(shù)的應用可能回有更簡便的算法,也可以考慮一下。</p><p><b> ?。ㄆ撸?lt;/b></p><p><b> 反思與體會:</b></p><p> 對于這種題
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 撲克牌洗牌發(fā)牌過程模擬課程設計
- 船企洗牌在即
- led照明“后洗牌時代”
- 人工濕地課程設計
- 國際航運市場加速洗牌
- 企業(yè)重組并購面臨重新洗牌
- 人工智能課程設計
- 2010藝術權力榜,重新洗牌
- 人工智能課程設計
- 中國最具潛力城市強勢洗牌的秘密
- 海淘新政“滿月”跨境電商洗牌
- 人工挖孔樁課程設計
- 終端洗牌4s店遭遇尷尬
- 深度洗牌 微晶玻璃盼行業(yè)創(chuàng)新
- 雷曼迷你債券促資產(chǎn)管理業(yè)洗牌
- 從嚴監(jiān)管私募進入洗牌通道范文
- 人工智能掃雷課程設計報告
- 廚電行業(yè)洗牌加劇 新興品類放量增長
- 奶粉“注冊制”將至 價格戰(zhàn)加速洗牌
- 刷單技巧-刷單行業(yè)格局重新洗牌
評論
0/150
提交評論