版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)</b></p><p> 題 目: 紙牌游戲的設(shè)計(jì)與實(shí)現(xiàn) </p><p> 院 (系): </p><p> 年級(jí)專業(yè): </p><p> 姓 名:
2、 </p><p> 學(xué) 號(hào): </p><p> 指導(dǎo)教師: </p><p><b> 課程設(shè)計(jì)任務(wù)書</b></p><p> 注:任務(wù)書由指導(dǎo)教師填寫。
3、</p><p> 課程設(shè)計(jì)(論文)指導(dǎo)教師成績(jī)?cè)u(píng)定表</p><p><b> 摘 要</b></p><p> 紙牌游戲是數(shù)據(jù)結(jié)構(gòu)大作業(yè)中比較經(jīng)典的一個(gè)大作業(yè),通過(guò)此課程設(shè)計(jì)能夠啟發(fā)我們的思維,對(duì)數(shù)據(jù)結(jié)構(gòu)中的函數(shù)有更加清楚的認(rèn)識(shí),建立我們對(duì)數(shù)據(jù)結(jié)構(gòu)的興趣,通過(guò)此課程設(shè)計(jì)設(shè)同時(shí)也能夠使我們對(duì)各方面的知識(shí)有了更加全面的認(rèn)識(shí)與了解,豐富了
4、我們的知識(shí)面,擴(kuò)展了我們的思維。通過(guò)課程設(shè)計(jì)的實(shí)踐,我們可以在程序設(shè)計(jì)方法、上機(jī)操作等基本技能和科學(xué)作風(fēng)方面受到比較系統(tǒng)和嚴(yán)格的訓(xùn)練。</p><p> 當(dāng)前計(jì)算機(jī)軟件技術(shù)和網(wǎng)絡(luò)技術(shù)正飛速發(fā)展,軟件系統(tǒng)日趨大型化、復(fù)雜化,軟件對(duì)于一個(gè)計(jì)算機(jī)系統(tǒng)是至關(guān)重要的。因此社會(huì)對(duì)軟件開發(fā)者提出了比以往更高的要求,相應(yīng)的系統(tǒng)要求也有了很大的提高。本系統(tǒng)用C++作為程序語(yǔ)言,設(shè)計(jì)出的系統(tǒng)功能強(qiáng)大,操作方便靈活。</p&g
5、t;<p> 關(guān)鍵詞 紙牌游戲,數(shù)據(jù)結(jié)構(gòu),軟件,系統(tǒng)</p><p><b> -Ⅰ-</b></p><p><b> 目 錄</b></p><p> 摘 要…………………………………………………………………………………………Ⅰ</p><p> 1需求分析…………
6、……………………………………………………………………………1</p><p> 1.1需求來(lái)源……………………………………………………………………………………1</p><p> 1.2設(shè)計(jì)目的……………………………………………………………………………………1</p><p> 1.3設(shè)計(jì)要求……………………………………………………………………………………1
7、</p><p> 2 功能需求描述…………………………………………………………………………………1</p><p> 3 總體設(shè)計(jì)………………………………………………………………………………………1</p><p> 3.1 設(shè)計(jì)思想…………………………………………………………………………………1</p><p> 3.2 系統(tǒng)模塊
8、結(jié)構(gòu)……………………………………………………………………………2</p><p> 3.3 系統(tǒng)總設(shè)計(jì)流程圖………………………………………………………………………2</p><p> 4 概要設(shè)計(jì)………………………………………………………………………………………4</p><p> 4.1抽象數(shù)據(jù)類型定義…………………………………………………………………………
9、4</p><p> 4.2本程序所包含模塊…………………………………………………………………………5</p><p> 4.3系統(tǒng)功能的實(shí)現(xiàn)…………………………………………………………………………5</p><p> 5 模塊設(shè)計(jì)………………………………………………………………………………………6</p><p> 5.1洗牌模塊…
10、……………………………………………………………………………6</p><p> 5.2翻牌模塊…………………………………………………………………………6</p><p> 6 運(yùn)行與分析……………………………………………………………………………………6</p><p> 6.1運(yùn)行結(jié)果……………………………………………………………………………………6</
11、p><p> 6.2結(jié)果分析……………………………………………………………………………………7</p><p> 致謝……………………………………………………………………………………8</p><p> 參考文獻(xiàn)………………………………………………………………………………………9</p><p> 源程序……………………………………………
12、………………………………………10</p><p><b> 1 需求分析</b></p><p><b> 1.1需求來(lái)源</b></p><p> 在本系統(tǒng)的需求分析環(huán)節(jié)中,會(huì)對(duì)軟件開發(fā)的意圖、開發(fā)的目標(biāo)、作用范圍和有關(guān)該軟件開的背景材料進(jìn)行詳細(xì)的分析。紙牌游戲作為一個(gè)用來(lái)娛樂(lè)的應(yīng)用軟件,在對(duì)其進(jìn)行需求分析的過(guò)
13、程中,需用要充分考慮系統(tǒng)的可用性和簡(jiǎn)單易用性,聯(lián)系實(shí)際娛樂(lè)需要,從而得到合理的需求分析結(jié)論。</p><p><b> 1.2設(shè)計(jì)目的</b></p><p> 該軟件為用戶提供一個(gè)在Windows系統(tǒng)上運(yùn)行的紙牌游戲小系統(tǒng)。應(yīng)達(dá)到的目的是:編號(hào)為1-52張牌,正面向上,從第2張開始,以2為基數(shù),是2的倍數(shù)的牌翻一次,直到最后一張牌;然后,從第3張開始,以3為基數(shù)
14、,是3的倍數(shù)的牌翻一次,直到最后一張牌;然后…從第4張開始,以4為基數(shù),是4的倍數(shù)的牌翻一次,直到最后一張牌;...再依次5的倍數(shù)的牌翻一次,6的,7的直到以52為基數(shù)的翻過(guò)。</p><p><b> 1.3設(shè)計(jì)要求</b></p><p> 任意輸出一組牌,輸出最后正面向上的牌。</p><p><b> 2 功能需求描述
15、</b></p><p> 紙牌游戲是一個(gè)用來(lái)娛樂(lè)的系統(tǒng)軟件,此軟件操作簡(jiǎn)單,每個(gè)新手都可以直接使用,不需要登陸注冊(cè),按游戲規(guī)則游戲即可。</p><p> 游戲使用者主要功能需求如下:</p><p> 系統(tǒng)洗牌后,猜測(cè)正面向上的牌,然后系統(tǒng)按設(shè)計(jì)的規(guī)則進(jìn)行翻牌。洗牌后,使用者就可以看到自己猜得正面向上的牌是否與系統(tǒng)一樣了。若一樣,則勝利,否則失
16、敗。游戲很簡(jiǎn)單,使用者只要掌握好游戲規(guī)則就很容易取勝。</p><p><b> 3 總體設(shè)計(jì)</b></p><p><b> 3.1設(shè)計(jì)思想</b></p><p> 在對(duì)紙牌游戲進(jìn)行合理的需求分析之后,對(duì)整個(gè)系統(tǒng)進(jìn)行總體設(shè)計(jì)。首先確定開發(fā)與設(shè)計(jì)的總體思想,在此基礎(chǔ)上,用圖表的方式給出系統(tǒng)總體的設(shè)計(jì)架構(gòu),繪制系
17、統(tǒng)模型結(jié)構(gòu)圖,并且通過(guò)模塊功能圖對(duì)每個(gè)模塊進(jìn)行總體設(shè)計(jì)。</p><p> 開發(fā)本設(shè)計(jì)的總體思想:紙牌游戲是一個(gè)簡(jiǎn)易的游戲系統(tǒng)。開發(fā)設(shè)計(jì)的重點(diǎn)在于對(duì)紙牌的洗牌和翻牌按設(shè)計(jì)要求進(jìn)行設(shè)計(jì),不得出錯(cuò)。</p><p> 紙牌小游戲是供大眾娛樂(lè)的小游戲,所以無(wú)需考慮安全問(wèn)題。</p><p> 對(duì)于洗牌翻牌這兩環(huán)節(jié)要用到程序設(shè)計(jì)思想中的循環(huán)結(jié)構(gòu)。 </p>
18、<p> 系統(tǒng)采用結(jié)構(gòu)化的設(shè)計(jì)方法進(jìn)行設(shè)計(jì),采用C語(yǔ)言進(jìn)行開發(fā)。</p><p><b> 3.2系統(tǒng)模塊結(jié)構(gòu)</b></p><p> 依據(jù)需求分析結(jié)果,紙牌游戲總體上說(shuō)就一個(gè)模塊:翻牌。詳細(xì)一點(diǎn)可分為2個(gè)模塊:洗牌模塊、翻牌模塊。其中翻牌模塊就是洗牌的最后一個(gè)步驟,即屏幕上顯示得最后幾張牌。也是用戶應(yīng)該猜得最后結(jié)果。系統(tǒng)模塊結(jié)構(gòu)如下圖:<
19、/p><p><b> 圖3-2-1</b></p><p> 3.3系統(tǒng)總設(shè)計(jì)流程圖</p><p> 牌的張數(shù)自減牌的張數(shù)自減</p><p><b> 圖3-3-1</b></p><p><b> 4 概要設(shè)計(jì)</b></p>
20、<p> 4.1抽象數(shù)據(jù)類型定義</p><p> ?、艑?duì)紙牌進(jìn)行按規(guī)則翻牌</p><p> AllCards* RandArrange()</p><p><b> { }</b></p><p> void Turn_Over(AllCards* C)</p><p>
21、;<b> { }</b></p><p> ?、撇樵兎剖O碌淖詈?張牌</p><p> void Search(AllCards* C)</p><p><b> { }</b></p><p><b> ⑶主函數(shù)</b></p><p&g
22、t; void main()</p><p><b> { } </b></p><p> 根據(jù)設(shè)計(jì)要求,我們知道設(shè)計(jì)中所有用到的數(shù)據(jù)記錄有紙牌翻轉(zhuǎn)信息,因此要定義相關(guān)的數(shù)據(jù)類型:紙牌最大個(gè)數(shù)定義為CARDNUM 52,翻轉(zhuǎn)狀態(tài)存儲(chǔ)在bool isup中,紙牌放在數(shù)組Cards[CARDNUM+1]中等。</p><p> 4.2本
23、程序包含模塊</p><p><b> ?、胖鞒绦蚰K</b></p><p> ?、?define CARDNUM 52 給數(shù)組定義一個(gè)空間</p><p> ?、趖ypedef struct</p><p> { }Indexcode; 紙牌的信息</p><p> ③typedef s
24、truct</p><p> { }PreCard; 翻轉(zhuǎn)紙牌</p><p> ?、躷ypedef struct</p><p> { }AllCards;存儲(chǔ)紙牌的數(shù)組</p><p><b> ?、葡磁颇K</b></p><p> ?、羌埮品D(zhuǎn)模塊——翻轉(zhuǎn)紙牌</p>&
25、lt;p><b> 各模塊關(guān)系如下:</b></p><p><b> 圖4-2-1</b></p><p> 4.3系統(tǒng)功能的實(shí)現(xiàn)</p><p> 要實(shí)現(xiàn)紙牌按此要求翻轉(zhuǎn),首先要將52張紙牌序號(hào)i為1到52,定義正面朝上的狀態(tài)Cards[i].isup為true;對(duì)52張牌(序號(hào)放在i里)對(duì)2,3
26、3;··52(放在j里 )按i+1是否是j的倍數(shù)進(jìn)行狀態(tài)翻轉(zhuǎn)。如果對(duì)序號(hào)從1到52的牌,對(duì)翻轉(zhuǎn)處理后狀態(tài)仍然是正面的將其輸出,一直進(jìn)行下去,直到以52的基礎(chǔ)翻過(guò)。</p><p><b> 5 模塊設(shè)計(jì)</b></p><p><b> 5.1洗牌模塊</b></p><p> 該模塊案設(shè)計(jì)要求
27、洗牌,是用戶進(jìn)行游戲的前提。該模塊主要是按要求進(jìn)行循環(huán)翻牌的過(guò)程,要求為:“從第2張開始,以2為基數(shù),是2的倍數(shù)的牌翻一次,直到最后一張牌;然后,從第3張開始,以3為基數(shù),是3的倍數(shù)的牌翻一次,直到最后一張牌;然后…從第4張開始,以4為基數(shù),是4的倍數(shù)的牌翻一次, 直到最后一張牌;...再依次5的倍數(shù)的牌翻一次,6的,7的,直到以52為基數(shù)的翻過(guò),輸出”。</p><p><b> 5.2翻牌模塊&l
28、t;/b></p><p> 翻牌模塊其實(shí)就是洗牌模塊得最后一個(gè)步驟。該模塊就是為了顯示出最后</p><p> 結(jié)果,讓用戶比較一下自己的結(jié)果和系統(tǒng)輸出得結(jié)果有什么不同。 </p><p><b> 6 運(yùn)行與分析</b></p><p><b> 6.1運(yùn)行結(jié)果</b><
29、;/p><p><b> 6.2結(jié)果分析</b></p><p> 該游戲很簡(jiǎn)單,只需按規(guī)則一步步地進(jìn)行翻牌,然后將自己所猜的結(jié)果與屏幕上的結(jié)果對(duì)比,在每輪游戲結(jié)束后,都可繼續(xù)游戲。</p><p><b> 致謝</b></p><p> 通過(guò)這次設(shè)計(jì),使我在數(shù)據(jù)結(jié)構(gòu)的邏輯特性和物理表示、數(shù)據(jù)
30、結(jié)構(gòu)的選擇應(yīng)用、算法的設(shè)計(jì)及其實(shí)現(xiàn)等方面加深了對(duì)課程基本內(nèi)容的理解。同時(shí),在程序設(shè)計(jì)方法以及上機(jī)操作等基本技能和科學(xué)作風(fēng)方面受到比較系統(tǒng)和嚴(yán)格的訓(xùn)練。</p><p> 在此之前,我腦袋里面沒有數(shù)據(jù)結(jié)構(gòu)的思想,什么數(shù)據(jù)結(jié)構(gòu)對(duì)我而言就是一張空白的紙。當(dāng)時(shí)就感覺自己什么都不會(huì)做,什么也不能做,但是真正接觸后并沒有想象的那么難,有什么不懂的上網(wǎng)去搜索,這是一個(gè)信息橫流的世界,有g(shù)oogle,baidu就沒有不能解決的
31、知識(shí)難題。在網(wǎng)上搜索點(diǎn)有關(guān)的資料后,然后再利用自己在課堂上所學(xué)的知識(shí),將所有內(nèi)容連接起來(lái),所有問(wèn)題就迎刃而解。課程設(shè)計(jì)是以學(xué)生自學(xué)為主、指導(dǎo)教師指導(dǎo)為輔,認(rèn)真、獨(dú)立地完成課程設(shè)計(jì)的任務(wù),有問(wèn)題就要及時(shí)主動(dòng)與指導(dǎo)教師溝通。在老師的悉心指導(dǎo)下和同學(xué)們的幫助下,使我順利地完成了此次課程設(shè)計(jì)。所以,要特別感謝指導(dǎo)老師和各位同學(xué),我相信這短短五天的課程設(shè)計(jì)將會(huì)是我以后不管是工作還是學(xué)習(xí)不可多得的經(jīng)驗(yàn)。</p><p>&l
32、t;b> 參 考 文 獻(xiàn)</b></p><p> [1] 嚴(yán)蔚敏.《數(shù)據(jù)結(jié)構(gòu) C語(yǔ)言》.清華大學(xué)出版社</p><p> [2] 譚浩強(qiáng).《c語(yǔ)言程序設(shè)計(jì)》.清華大學(xué)出版社</p><p> [3]《數(shù)據(jù)結(jié)構(gòu)》.高教出版社 </p><p> [4] 李春保.《數(shù)據(jù)結(jié)構(gòu)習(xí)題》.清華大學(xué)出版社</p>
33、<p> [5] 嚴(yán)蔚敏.《數(shù)據(jù)結(jié)構(gòu)習(xí)題》.清華大學(xué)出版社</p><p> [6] 王立柱.《c語(yǔ)言與數(shù)據(jù)結(jié)構(gòu)》.清華大學(xué)出版社</p><p> [7] 李春葆.《數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言篇)習(xí)題與解析》.清華大學(xué)出版社</p><p> [8]徐孝凱.《數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)明教程》,清華大學(xué)出版社</p><p> [9]陳文博,朱
34、青.《數(shù)據(jù)結(jié)構(gòu)與算法》,機(jī)械工業(yè)出版社</p><p> [10]晉良潁.《數(shù)據(jù)結(jié)構(gòu)》,人民郵電出版社</p><p> [11]趙文靜,祁飛等.《數(shù)據(jù)結(jié)構(gòu)與算法》,科學(xué)出版社</p><p><b> 源程序:</b></p><p> #define CARDNUM 52</p><p&g
35、t; #include<stdio.h></p><p> #include<iomanip></p><p> #include<iostream></p><p> typedef struct{</p><p> int* elem;</p><p> int le
36、ngth;</p><p> }Indexcode;</p><p> typedef struct{</p><p><b> int code;</b></p><p> bool isup;</p><p><b> }PreCard;</b></p&g
37、t;<p> typedef struct{</p><p> PreCard Cards[CARDNUM];</p><p> }AllCards;</p><p> AllCards* RandArrange(); </p><p> void Turn_Over(AllCards*);</p>&l
38、t;p> void Search(AllCards*);</p><p> void main(){</p><p> system("color 1a");</p><p> AllCards* cards;</p><p><b> char c;</b></p>&
39、lt;p><b> int i=0;</b></p><p> printf(" *****************************************\n");</p><p> printf(" *..................................
40、.....*\n");</p><p> printf(" *...............紙牌游戲................*\n");</p><p> printf(" *.......................................*\n");
41、 </p><p> printf(" *****************************************\n");</p><p> printf("這是一個(gè)很easy的紙牌游戲,下面我們....\n");</p><p><b> while(1){</b>
42、</p><p> if(!(i++)) printf("開始第1輪游戲:\n");</p><p> else {printf("\n和你猜的結(jié)果一樣嗎,不一樣的話,就再接再厲吧!");</p><p> printf("繼續(xù)嗎?(Y/N)");</p><p> scan
43、f("%c",&c);</p><p> if(c=='N'||c=='n'){</p><p> printf(" ****************************結(jié)束*************************** \n");</p><p><b>
44、 return;</b></p><p><b> }</b></p><p> else printf("\n第%d輪游戲:\n",i);</p><p><b> }</b></p><p> printf("洗牌中......\n"
45、);</p><p> cards=RandArrange();</p><p> printf("\n按規(guī)則翻面中......\n");</p><p> Turn_Over(cards);</p><p> Search(cards);</p><p><b> }</
46、b></p><p><b> }</b></p><p> AllCards* RandArrange()</p><p><b> {</b></p><p><b> int j,k;</b></p><p> AllCards*
47、C=(AllCards*)malloc(sizeof(AllCards));</p><p> int c[CARDNUM+1];</p><p> Indexcode icode;</p><p> icode.elem=c;</p><p> icode.length=CARDNUM;</p><p>
48、for(int i=1;i<=CARDNUM;i++){</p><p> icode.elem[i]=i;</p><p><b> }</b></p><p> for(i=1;i<=CARDNUM;i++){</p><p> if(!icode.length)break;</p>
49、<p> j=(rand()%icode.length)+1;</p><p> C->Cards[i].code=icode.elem[j];</p><p> for(k=j;k<icode.length;k++)</p><p> icode.elem[k]=icode.elem[k+1];</p><p&g
50、t; icode.length--;</p><p> C->Cards[i].isup=true;</p><p><b> }</b></p><p> for(i=1;i<=CARDNUM;i++)</p><p> printf("%4d",(C->Cards+i)
51、->code);</p><p> printf("\n");</p><p><b> return C;</b></p><p><b> }</b></p><p> void Turn_Over(AllCards* C)</p><p&g
52、t;<b> {</b></p><p><b> int i,j;</b></p><p> for(i=2;i<=CARDNUM;i++){</p><p> for(j=2;j<=CARDNUM;j++)</p><p> if(C->Cards[j].code%i
53、==0)</p><p> {if(C->Cards[j].isup!=true)</p><p> C->Cards[j].isup=true;</p><p> else C->Cards[j].isup=false;}</p><p><b> }</b></p><p
54、><b> }</b></p><p> void Search(AllCards* C)</p><p><b> {</b></p><p> printf("正面向上的有: \n");</p><p> for(int i=1;i<=CARDNUM;
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 紙牌游戲課程設(shè)計(jì)
- 紙牌游戲-課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)——蜘蛛紙牌游戲
- java課程設(shè)計(jì)-蜘蛛紙牌游戲設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告--- 蜘蛛紙牌游戲
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——紙牌游戲
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-紙牌游戲
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)“紙牌游戲”
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--紙牌游戲
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-紙牌游戲
- 紙牌游戲課程設(shè)計(jì)說(shuō)明書
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 猴子選大王+ joseph環(huán)+紙牌游戲
- java課程設(shè)計(jì)報(bào)告——蜘蛛紙牌
- java課程設(shè)計(jì)報(bào)告—蜘蛛紙牌
- 剪刀游戲課程設(shè)計(jì)
- 賽車游戲課程設(shè)計(jì)
- java課程設(shè)計(jì)-猜數(shù)游戲課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)--手機(jī)游戲
- 約瑟夫生死游戲課程設(shè)計(jì)
- 推箱子游戲課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論