版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 院 系: 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院</p><p> 班 級(jí): </p><p> 組 長: </p><p> 學(xué) 號(hào): </p><p> 指導(dǎo)教師: </p>
2、<p> 2017年 3 月 2日</p><p> 程序設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)任務(wù)書</p><p> 一、題目:貪吃蛇游戲系統(tǒng)</p><p><b> 二、設(shè)計(jì)要求</b></p><p> (1)自己組成課程設(shè)計(jì)小組。</p><p> ?。?)查閱相關(guān)資料,自學(xué)具體課題中
3、涉及到的新知識(shí)。</p><p> ?。?)采用結(jié)構(gòu)化、模塊化程序設(shè)計(jì)方法設(shè)計(jì),功能要完善,界面美觀。</p><p> ?。?)所設(shè)計(jì)的系統(tǒng)應(yīng)有菜單、動(dòng)畫。</p><p> ?。?)按要求寫出課程設(shè)計(jì)報(bào)告,并于設(shè)計(jì)結(jié)束后1周內(nèi)提交。其主要內(nèi)容包括:封皮、課程設(shè)計(jì)任務(wù)書,指導(dǎo)教師評(píng)語與成績、目錄、概述、軟件需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、程序的調(diào)試與測試、總結(jié)、結(jié)束
4、語、程序清單(帶中文注釋)、參考文獻(xiàn)等。課程設(shè)計(jì)報(bào)告一律用A4紙打印,并嚴(yán)格按照課程設(shè)計(jì)指導(dǎo)書中規(guī)定的畢業(yè)設(shè)計(jì)報(bào)告的撰寫規(guī)范進(jìn)行排版裝訂。</p><p><b> 三、課程設(shè)計(jì)工作量</b></p><p> 由于是設(shè)計(jì)小組團(tuán)結(jié)協(xié)作完成設(shè)計(jì)任務(wù),一般每人的程序量在200行有效程序行以上,必須有創(chuàng)新(如自己編的簡單動(dòng)畫和音樂),不得抄襲。</p>&
5、lt;p> 四、課程設(shè)計(jì)工作計(jì)劃</p><p> 2017年2月25前,指導(dǎo)教師講課;</p><p> 2017年2月26日,設(shè)計(jì)小組進(jìn)行總體方案設(shè)計(jì)和任務(wù)分工;</p><p> 2017年2月27日,每人完成自己承擔(dān)的程序模塊并通過獨(dú)立編譯; </p><p> 2017年2月28日~3月1日,分模塊集體解決核心問題;
6、</p><p> 2017年3月2日,將各模塊集成為一個(gè)完整的系統(tǒng),并錄入足夠的數(shù)據(jù)進(jìn)行調(diào)試運(yùn)行,數(shù)據(jù)必須存儲(chǔ)到磁盤文件中,以備驗(yàn)收;</p><p> 2017年3月2日,撰寫課程設(shè)計(jì)報(bào)告。</p><p> 2017年3月3日,進(jìn)行課程設(shè)計(jì)驗(yàn)收。</p><p> 指導(dǎo)教師簽章: </p>
7、<p> 教研室主任簽章 </p><p> 程序設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)指導(dǎo)教師評(píng)語與成績</p><p><b> 目錄</b></p><p> 一. 概 述1</p><p> 1.1研究的背景及意義1</p><p> 1.2課程設(shè)計(jì)
8、的目的1</p><p> 1.3課程設(shè)計(jì)的要求2</p><p> 1.4課程設(shè)計(jì)的任務(wù)和涉及的知識(shí)點(diǎn)2</p><p><b> 二.需求分析4</b></p><p><b> 2.1功能需求4</b></p><p> 2.2 操作方法(鍵盤操作)
9、4</p><p> 三. 總體方案設(shè)計(jì)5</p><p> 3.1模塊劃分:5</p><p> 3.2整體框圖:5</p><p> 四. 程序的調(diào)試與運(yùn)行結(jié)果說明6</p><p> 4.1圖形初始化失敗6</p><p><b> 4.2其他問題6&l
10、t;/b></p><p><b> 五.詳細(xì)設(shè)計(jì)7</b></p><p> 5.1主要模塊界面7</p><p> 5.2源程序代碼8</p><p><b> 六. 結(jié)論20</b></p><p><b> 七. 結(jié)束語21<
11、/b></p><p><b> 八.參考文獻(xiàn)22</b></p><p><b> 一. 概 述</b></p><p> 本課程設(shè)計(jì)以軟件工程方法為指導(dǎo),采用了結(jié)構(gòu)化,模塊化得課程設(shè)計(jì)方法,以C++技術(shù)為基礎(chǔ),使用vc為主要工具,總體設(shè)計(jì),詳細(xì)設(shè)計(jì),最終完成系統(tǒng)的實(shí)現(xiàn)與測試。</p>&
12、lt;p> 1.1研究的背景及意義</p><p> 隨著社會(huì)的發(fā)展,人們交友范圍越加廣泛,越來越多的人迫切的需要一種可以存儲(chǔ)聯(lián)系人信息的工具。因此設(shè)計(jì)一款隨時(shí)查詢聯(lián)系人信息的軟件成了很多人以及商家們的需要。</p><p> 此次課程設(shè)計(jì)完成的通訊錄管理系統(tǒng),正是為了滿足上訴需求設(shè)計(jì)出來的,希望能給人們帶來便利。</p><p> C++是國際上廣泛
13、流行的,很有發(fā)展前途的計(jì)算機(jī)高級(jí)語言。他適合作為系統(tǒng)秒速語言,既可用來編寫系統(tǒng)軟件,也可以用來編寫應(yīng)用軟件。</p><p> 對(duì)于計(jì)算機(jī)專業(yè)和相關(guān)學(xué)科的學(xué)生來說,“課程設(shè)計(jì)基礎(chǔ)”是一門非常重要的專業(yè)基礎(chǔ)課程,對(duì)其學(xué)習(xí)好壞,直接關(guān)系到后續(xù)課程的學(xué)習(xí)效果。</p><p> C++是一種面向過程的高級(jí)語言。要學(xué)好C++,不但要掌握C++的語法,更重要的是要掌握使用C++進(jìn)行結(jié)構(gòu)化、模塊化
14、程序設(shè)計(jì)的方法。有了較好的C++基礎(chǔ),就可以進(jìn)一步學(xué)好面向?qū)ο蟮某绦蛟O(shè)計(jì)語言和可視的編程語言如VC++6.0、C#等。對(duì)于面向?qū)ο蟮某绦蛟O(shè)計(jì),當(dāng)設(shè)計(jì)到具體實(shí)現(xiàn)部分的時(shí)候,也就是編寫一個(gè)對(duì)象中具體的方法(即外部服務(wù)函數(shù))時(shí),必然要使用結(jié)構(gòu)化得程序來實(shí)現(xiàn)。可見,結(jié)構(gòu)化、模塊化程序設(shè)計(jì)的方法是必然要學(xué)習(xí)的,而C++是結(jié)構(gòu)化程序設(shè)計(jì)思想中比較經(jīng)典的語言,不可不學(xué)好。學(xué)習(xí)結(jié)構(gòu)化、模塊化程序設(shè)計(jì)的思想和方法,可以掌握設(shè)計(jì)解決一個(gè)問題的過程,即如何對(duì)
15、問題進(jìn)行分解,劃分成各個(gè)功能模塊,每個(gè)模塊如何分步驟實(shí)施,通過什么樣的一個(gè)流程圖控制可以實(shí)現(xiàn)該模塊的功能,這也是學(xué)習(xí)這門課程的中心內(nèi)容。</p><p> 1.2課程設(shè)計(jì)的目的</p><p> 使學(xué)生更深入地理解和掌握該課程中的有關(guān)基本概念,程序設(shè)計(jì)的思想、技術(shù)和方法。</p><p> 培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí)獨(dú)立完成課題的能力。</p>&
16、lt;p> 培養(yǎng)學(xué)生勇于探索、嚴(yán)謹(jǐn)推理、實(shí)事求是、有過必改,用實(shí)踐來檢驗(yàn)理論,全方位考慮問題等科學(xué)人員應(yīng)具有的須素質(zhì)。</p><p> 提高學(xué)生對(duì)工作認(rèn)真負(fù)責(zé)、一絲不茍,對(duì)同學(xué)友愛團(tuán)結(jié),協(xié)作攻關(guān)的基本素質(zhì)。</p><p> 培養(yǎng)學(xué)生從資料文獻(xiàn)、科學(xué)實(shí)驗(yàn)中獲得新知識(shí)的能力,提高學(xué)生從別人經(jīng)驗(yàn)中找到解決問題的新途徑的悟性,初步培養(yǎng)工程意識(shí)和創(chuàng)新能力。</p>&l
17、t;p> 對(duì)學(xué)生掌握知識(shí)的深度、運(yùn)用理論去處理問題的能力、實(shí)驗(yàn)?zāi)芰?、課程設(shè)計(jì)能力、書面及口頭表達(dá)能力進(jìn)行考核。</p><p> 1.3課程設(shè)計(jì)的要求</p><p> 為實(shí)現(xiàn)上述目的,提出以下具體要求:</p><p> 以學(xué)生自由組織成課程設(shè)計(jì)游戲開發(fā)小組,可由指導(dǎo)教師確定每組的人數(shù),建議每組為3個(gè)人左右,并選1人擔(dān)任組長.指導(dǎo)教師可跟據(jù)各個(gè)開發(fā)小
18、組的試驗(yàn)情況進(jìn)行必要的調(diào)整</p><p> 每組選擇課程設(shè)計(jì)中的一個(gè)題目,即開發(fā)一個(gè)所選課題的"軟件系統(tǒng)",每組獨(dú)立完成。</p><p> 該系統(tǒng)要有主菜單,動(dòng)畫與音樂,且游戲功能上盡可能模擬操作系統(tǒng)中的貪吃蛇游戲,系統(tǒng)界面盡量美觀。</p><p> 進(jìn)一步掌握C++集成開發(fā)環(huán)境</p><p> 熟練掌握C
19、++的數(shù)據(jù)類型,三種基本結(jié)構(gòu),模塊化設(shè)計(jì),指針,結(jié)構(gòu)體,文件,鏈表等知識(shí)點(diǎn)。</p><p> 叢書或互聯(lián)網(wǎng)上查閱相關(guān)資料,自學(xué)具體課題中涉及到的知識(shí)。</p><p> 采用結(jié)構(gòu)化,模塊化程序設(shè)計(jì)方法進(jìn)行設(shè)計(jì),功能要完善,界面要美觀,應(yīng)具有一定創(chuàng)新。</p><p> 8軟件開發(fā)小組組長帶領(lǐng)本小組成員團(tuán)結(jié)協(xié)作,共同完成課題的設(shè)計(jì)任務(wù)。要求開發(fā)小組中每個(gè)組員都
20、有自己獨(dú)立的設(shè)計(jì)的若干模塊,每個(gè)人設(shè)計(jì)的有效源代碼應(yīng)在200行以上,同時(shí)要讀懂其他組員完成的內(nèi)容。</p><p> 1.4課程設(shè)計(jì)的任務(wù)和涉及的知識(shí)點(diǎn)</p><p> 1.課程設(shè)計(jì)的主要完成任務(wù)</p><p> ?。?)通過編寫“貪吃蛇游戲”程序,掌握結(jié)構(gòu)化、模塊化程序設(shè)計(jì)的思想,培養(yǎng)解決實(shí)際問題的能力。</p><p> ?。?)
21、設(shè)計(jì)數(shù)組元素與蛇、食物的對(duì)應(yīng)關(guān)系。</p><p> (3)隨機(jī)產(chǎn)生食物。</p><p> ?。?)有分?jǐn)?shù)統(tǒng)計(jì)、排行榜、分?jǐn)?shù)存儲(chǔ)等功能。</p><p> ?。?)有同步播放的動(dòng)畫、聲音效果。</p><p> 2. 課程設(shè)計(jì)中涉及的知識(shí)點(diǎn)</p><p><b> ?。?)數(shù)組的應(yīng)用。</b&g
22、t;</p><p> ?。?)全局變量的應(yīng)用。</p><p><b> ?。?)按鍵處理。</b></p><p> ?。?)結(jié)構(gòu)體的應(yīng)用。</p><p> ?。?)圖形 、音樂和動(dòng)畫的有關(guān)知識(shí)。</p><p> ?。?)隨機(jī)函數(shù)的使用。</p><p> ?。?)
23、文件的基本操作。</p><p> (8)結(jié)構(gòu)化 、模塊化的設(shè)計(jì)方法。</p><p><b> 二.需求分析</b></p><p> 貪吃蛇是大眾化的游戲,游戲簡單容易上手,但確能給玩家放松心情,身心得到娛樂,從而能更好地投入到學(xué)習(xí)或工作中?,F(xiàn)代人,無亂是工作的,或是學(xué)生都面臨的巨大壓力,而這一款簡單的游戲能讓每個(gè)人隨時(shí)隨地上手,令不
24、少玩家對(duì)它愛不釋手。</p><p> 對(duì)于繁忙的現(xiàn)代人,玩大型游戲是浪費(fèi)時(shí)間,然而這樣的小游戲,不僅可以隨時(shí)隨地娛樂,對(duì)硬件要求很低,可以不夸張地說,只要你有數(shù)碼產(chǎn)品,都可以玩。而且在為人們節(jié)省不少寶貴的時(shí)間的同時(shí),達(dá)到了身心娛樂的目的。</p><p><b> 2.1功能需求 </b></p><p> 進(jìn)入游戲前,可以觀看選擇觀看
25、小組成員的動(dòng)畫。按任意鍵進(jìn)入游戲。蛇在一個(gè)封閉的墻內(nèi)移動(dòng),遇到食物后,蛇身加長,分?jǐn)?shù)上升。要是碰到墻壁或者是蛇自己,即游戲結(jié)束。當(dāng)分?jǐn)?shù)上升到一定,蛇速度加快。</p><p> 2.2 操作方法(鍵盤操作)</p><p> ?。?)進(jìn)入游戲:回車鍵。</p><p> (2)游戲操作:在游戲中,通過鍵盤上下左右控制蛇的方向。</p><p&
26、gt;<b> 三. 總體方案設(shè)計(jì)</b></p><p> 特點(diǎn):為方便操作,加入了口令登錄、動(dòng)畫音樂、數(shù)據(jù)維護(hù)和系統(tǒng)幫助。</p><p> 算法的整體思路:隨機(jī)產(chǎn)生食物,按相應(yīng)的鍵執(zhí)行相應(yīng)的功能。</p><p><b> 3.1模塊劃分:</b></p><p><b>
27、?。ㄒ唬┯螒騽?dòng)畫 </b></p><p><b> (二)游戲菜單: </b></p><p><b> ?。ㄈ┯螒蜻^程: </b></p><p><b> (四)退出: </b></p><p><b> 3.2整體框圖:</b>
28、</p><p> 圖1 軟件總體模塊結(jié)構(gòu)圖</p><p> 四. 程序的調(diào)試與運(yùn)行結(jié)果說明</p><p> 4.1圖形初始化失敗</p><p> 預(yù)期效果:進(jìn)入動(dòng)畫能觀看所畫圖形。</p><p> 實(shí)際運(yùn)行效果:編譯成功,但無法進(jìn)入動(dòng)畫。</p><p> 圖4 圖形初始化
29、失敗</p><p> 錯(cuò)誤分析:未指定顯卡驅(qū)動(dòng)位置。</p><p> 修改:將顯卡驅(qū)動(dòng)文件Egavga.bgi復(fù)制到動(dòng)畫源程序目錄下。</p><p> 修改后程序運(yùn)行效果與預(yù)期效果一致。如圖5所示。</p><p><b> 圖5 動(dòng)畫</b></p><p><b>
30、4.2其他問題</b></p><p> 比如全局變量重命名、函數(shù)重復(fù)聲明或未聲明和主函數(shù)重定義等問題。</p><p><b> 如:</b></p><p> 圖10 重定義主函數(shù)main</p><p><b> 五.詳細(xì)設(shè)計(jì)</b></p><p>
31、;<b> 5.1主要模塊界面</b></p><p> 5.1.1 游戲動(dòng)畫</p><p> 5.1.2 菜單界面</p><p><b> 游戲界面</b></p><p><b> 輔助界面</b></p><p><b>
32、 游戲結(jié)束界面</b></p><p><b> 5.2源程序代碼</b></p><p> #include<stdio.h></p><p> #include<windows.h></p><p> #include<time.h></p>&
33、lt;p> #include<stdlib.h></p><p> #include<conio.h></p><p> void gotoxy(int x,int y);//移動(dòng)</p><p> void Loc(int, int);//定位函數(shù)</p><p> void Beginning();
34、//游戲開始</p><p> void CreatMap();//創(chuàng)建地圖</p><p> void GameInit();//初始化</p><p> void GameStart();//游戲開始</p><p> void DeadOrNo();//判斷是否和自身相撞</p><p> char D
35、eadOrNoByPos(int, int);//蛇的生命</p><p> void JudgeFood();//判斷食物是否和自身</p><p> void MakeFood();//制造食物</p><p> void ThroWall();//是否穿墻</p><p> void SnakeMove();//蛇的移動(dòng)<
36、/p><p> void MoveNo(struct Body *p_body,struct Body *nofood);//沒有食物時(shí)蛇的移動(dòng)</p><p> void MoveYes(struct Body *yesfood);//有食物時(shí)蛇的移動(dòng)</p><p> void DrawShank(char);//畫蛇</p><p>
37、 void Ending();//游戲結(jié)束</p><p> void HiSleep(int);</p><p> void snack()</p><p><b> {</b></p><p> printf(" $$$$$$\n");</p&g
38、t;<p> printf(" $$$__$$_$$ $\n");</p><p> printf(" $____$$___$ $ $ $\n");</p><p> printf(" $$$$________$ $ $ $\n"
39、;);</p><p> printf(" $$$$$$___$__$ $ $ $\n");</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(" $ $ $ $ $$$___$$ $ $ $ $ $ $\n");</p><p> printf("
42、 $ $ $ $ $ $$__$_$$ $ $ $ $ $\n");</p><p> printf(" $ $ $ $$$___$_$ $ $ $ $ $\n");</p><p> printf(" $ $ $$$___$_$$ $ $ $ $\n");</p&
43、gt;<p> printf(" $ $$____$_$ $ $ $ $\n");</p><p> printf(" $____$_$$ $ $\n");</p><p> printf(" $$___$__$$\n"
44、);</p><p> printf(" $$______$$ 按回車進(jìn)入游戲\n");</p><p> printf(" $______$$_$\n");</p><p> printf(" $$_____$$_
45、$$$______$$$$$$$$$$$\n");</p><p> printf(" $______$___$$$$$$$$___________$\n");</p><p> printf(" $$$$$_$$___$_$$____$$$$$$____$$$______$\n");</p&
46、gt;<p> printf(" $$$$____$$$$_$_$_$$$$$$$$____$$$$$$$$$$$__$\n");</p><p> printf(" $$____$____$$___$_$$______$$$$__________$$$$$\n");</p><p> printf(" $____
47、_$______$_$___$$_$$$$$____________$_____$$$\n");</p><p> printf("$______$$$$$$$$____$_$$$_________________$$_____$$\n");</p><p> printf("$______$$_____$_$____$$__________$$
48、$$$$$$$$______$\n");</p><p> printf("$$_______$$$$_$$_$$_$_$$_____$$$$$$_______$______$\n");</p><p> printf(" $$____________$$____$_$$$$$$$__________$$_______$\n");<
49、;/p><p> printf(" $$___________$_____$__$$$_______$$$$$$_______$$\n");</p><p> printf(" $$$$$_ ___$$$________$$$$$$$$$___________$$\n");</p><p> printf(&quo
50、t; $$$$$$$$$$_$$$________________________$$$\n");</p><p> printf(" $$$$__________________$$$$\n");</p><p> printf(" $$$$$$$$
51、$$$$$$$$$$$\n");</p><p> system("color b"); </p><p><b> }</b></p><p> struct Body</p><p><b> {</b></p><p> sh
52、ort x,y;</p><p> struct Body *next;//指向下一個(gè)蛇身的指針</p><p><b> }; </b></p><p> int length=sizeof(struct Body);//Body結(jié)構(gòu)體所占字節(jié)數(shù)</p><p> int Delay=500;</p>
53、;<p> short X=0,Y=0;</p><p> short food_x,food_y,food=0;</p><p> short life=1;</p><p> short score1=0;</p><p> char movdir='R';</p><p>
54、 short lockdelay=20;</p><p> struct node</p><p><b> {</b></p><p><b> int x,y;</b></p><p> struct node *next;</p><p><b>
55、 };</b></p><p> struct node *p;</p><p> struct Body *head;</p><p><b> int i,j;</b></p><p> void Loc(int x, int y)</p><p><b> {
56、</b></p><p> COORD pos = {x,y}; //調(diào)用windows庫里的函數(shù) 坐標(biāo)轉(zhuǎn)換 </p><p> HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//獲得輸出設(shè)備的句柄 </p><p> SetConsoleCursorPosition(hOut, pos);&l
57、t;/p><p><b> }</b></p><p> void gotoxy(int x, int y) </p><p><b> {</b></p><p> COORD loc = {x, y};</p><p> HANDLE hOut = GetStdH
58、andle(STD_OUTPUT_HANDLE);//獲得輸出設(shè)備的句柄</p><p> SetConsoleCursorPosition(hOut, loc); //光標(biāo)定位</p><p><b> }</b></p><p> void init() //游戲開始時(shí)蛇的位置 </p><p><b
59、> {</b></p><p> gotoxy(9,2);</p><p> p=(struct node*)malloc(sizeof(struct node));//將P指向一個(gè)新分配的struct node型指針地址 是鏈表()</p><p><b> p->x=9;</b></p><
60、;p><b> p->y=2;</b></p><p><b> }</b></p><p> void Beginning()//初始</p><p><b> {</b></p><p> void gotoxy(int x, int y);</
61、p><p> int initz=30,initx=14,inity=8,init=2;//下面printf字開始右移的初始位置,init代表左右方向</p><p> char ch1='\0';</p><p> gotoxy(38,18);</p><p> puts("王慧"); &
62、lt;/p><p> while(ch1!=13)</p><p><b> {</b></p><p> gotoxy(initz,inity-1);</p><p> printf(" 經(jīng)典小游戲 ");</p><p> gotoxy(initx,inity);&
63、lt;/p><p> printf(" 超級(jí)宇宙無敵無邊框貪吃蛇 按ENTER鍵 開始游戲 ");</p><p> Sleep(Delay);</p><p> gotoxy(initx,inity);</p><p> printf("
64、 ");</p><p> if(init>0&&initx>=30||initx==2&&init<0)</p><p><b> init*=-1;</b></p><p> initx+=init;</p><p> initz+=init;
65、</p><p> if(kbhit()) //有鍵盤輸入時(shí)接受若是13(ENTER)鍵結(jié)束循環(huán)</p><p> ch1=getch();</p><p><b> }</b></p><p> system("cls");</p><p><b>
66、}</b></p><p> void CreatMap()//創(chuàng)建外圍</p><p><b> {</b></p><p><b> int i;</b></p><p> for(i=0;i<=100;i+=2)</p><p><b&g
67、t; {</b></p><p><b> Loc(i,0);</b></p><p> printf("□");</p><p> Loc(i,28);</p><p> printf("□");</p><p><b>
68、 }</b></p><p> for(i=0;i<=28;i++)</p><p><b> {</b></p><p><b> Loc(0,i);</b></p><p> printf("□");</p><p> Lo
69、c(70,i);</p><p> printf("□");</p><p> Loc(100,i);</p><p> printf("□");</p><p><b> }</b></p><p><b> }</b>&l
70、t;/p><p> void GameInit() //開始游戲時(shí)</p><p><b> {</b></p><p> struct Body *p_cur,*p_new;//定義四個(gè)蛇身指針</p><p><b> int xh;</b></p><p> Cr
71、eatMap();</p><p> head=(struct Body *)malloc(length);</p><p> head->x=12;head->y=2;</p><p> p_cur=head;</p><p> p_cur->next=NULL;</p><p> for
72、(xh=0;xh<3;xh++)</p><p><b> {</b></p><p> p_new=(struct Body *)malloc(length);</p><p> p_cur->next=p_new;</p><p> p_new->x=p_cur->x-2;</p
73、><p> p_new->y=p_cur->y;</p><p> p_cur=p_new;</p><p> p_cur->next=NULL;</p><p><b> }</b></p><p> Delay=500;</p><p><
74、b> food=0;</b></p><p><b> life=1;</b></p><p><b> score1=0;</b></p><p> movdir='R'; </p><p> lockdelay=20;</p><p
75、> DrawShank(0);</p><p> Loc(80,3);</p><p> puts("每吃一個(gè)");</p><p> Loc(80,4);</p><p> puts("蛇會(huì)加速");</p><p> Loc(78,13);</p>
76、;<p> puts("控制鍵: ↑←↓→");</p><p><b> }</b></p><p> void GameStart()//游戲開始</p><p><b> {</b></p><p><b> while(1)</b&
77、gt;</p><p><b> {</b></p><p> DeadOrNo();</p><p> if(life==0)</p><p><b> break;</b></p><p> MakeFood();</p><p> i
78、f(GetAsyncKeyState(VK_UP)&&movdir!='D'&&movdir!='U')</p><p> movdir='U';</p><p> else if(GetAsyncKeyState(VK_DOWN)&&movdir!='U'&&
79、;movdir!='D')</p><p> movdir='D';</p><p> else if(GetAsyncKeyState(VK_LEFT)&&movdir!='R'&&movdir!='L')</p><p> movdir='L';
80、</p><p> else if(GetAsyncKeyState(VK_RIGHT)&&movdir!='L'&&movdir!='R')</p><p> movdir='R';</p><p> SnakeMove();</p><p> Loc(
81、80,7);</p><p> printf("1得分: %3d",score1);</p><p> Loc(80,10);</p><p> printf("速度: %5.1f",1000.0/(float)Delay);</p><p> HiSleep(Delay);</p>
82、<p><b> }</b></p><p><b> }</b></p><p> void DeadOrNo()//判斷是否死亡</p><p><b> {</b></p><p> struct Body *p_body=head;</p&
83、gt;<p> while(p_body->next!=NULL)//定位到最后一個(gè)蛇身</p><p><b> {</b></p><p> p_body=p_body->next;</p><p> if(p_body->x==head->x&&p_body->y==he
84、ad->y)</p><p><b> life=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> char DeadOrNoByPos(int x, int y)//判斷生命</p><
85、;p><b> {</b></p><p> struct Body *p_body=head;</p><p> while(p_body->next!=NULL)//定位到最后一個(gè)蛇身</p><p><b> {</b></p><p> if(p_body->x=
86、=x&&p_body->y==y)//如果有任何一個(gè)蛇身坐標(biāo)與蛇頭重合,蛇即死亡</p><p><b> return 1;</b></p><p> p_body=p_body->next; </p><p><b> }</b></p><p><b&
87、gt; return 0;</b></p><p><b> }</b></p><p> void JudgeFood()//判斷食物是否與蛇身重疊</p><p><b> {</b></p><p> struct Body *p_body=head;</p>
88、<p> while(p_body!=NULL)</p><p><b> {</b></p><p> if(food_x==p_body->x&&food_y==p_body->y)</p><p><b> {</b></p><p><
89、b> food=0;</b></p><p> Loc(62,8);</p><p> MakeFood();</p><p><b> }</b></p><p> p_body=p_body->next;</p><p><b> }</b&
90、gt;</p><p><b> }</b></p><p> void MakeFood()//制造食物</p><p><b> {</b></p><p> if(food==0)</p><p><b> {</b></p>
91、<p> food_x=rand()%53+2;</p><p> food_y=rand()%23+1;</p><p> if(food_x%2==1)</p><p><b> food_x++;</b></p><p><b> food=1;</b></p&g
92、t;<p> JudgeFood();</p><p><b> }</b></p><p><b> }</b></p><p> void ThroWall(struct Body *p)//是否穿墻</p><p><b> {</b></p
93、><p> if(p->x==69)</p><p><b> life=0;</b></p><p> if(p->x==1)</p><p><b> life=0;</b></p><p> if(p->y==1)</p><
94、p><b> life=0;</b></p><p> if(p->y==27)</p><p><b> life=0;</b></p><p><b> }</b></p><p> void SnakeMove()//蛇的移動(dòng)</p>
95、<p><b> {</b></p><p> struct Body *p_body;</p><p> struct Body *nofood;</p><p> struct Body *yesfood;</p><p> struct Body tmppos;</p><p
96、> switch(movdir)</p><p><b> {</b></p><p> case 'U':X=0;Y=-1;break;</p><p> case 'D':X=0;Y=1;break;</p><p> case 'L':X=-2;Y=0
97、;break;</p><p> case 'R':X=2;Y=0;break;</p><p><b> }</b></p><p> tmppos=*head;</p><p> tmppos.x+=X;</p><p> tmppos.y+=Y;</p>
98、<p> ThroWall(&tmppos);</p><p> if(DeadOrNoByPos(tmppos.x,tmppos.y))</p><p><b> {</b></p><p> if(lockdelay<=0)</p><p><b> life=0;&l
99、t;/b></p><p><b> else</b></p><p> lockdelay--;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b>
100、;</p><p> lockdelay=(1000/Delay)+1;</p><p> if(tmppos.x==food_x&&tmppos.y==food_y)</p><p> MoveYes(yesfood);</p><p><b> else</b></p><
101、p><b> {</b></p><p> nofood=(struct Body *)malloc(length);</p><p> MoveNo(p_body,nofood);</p><p><b> }</b></p><p><b> }</b>&l
102、t;/p><p> DrawShank(1);</p><p> Loc(food_x,food_y);</p><p> printf("★");</p><p><b> }</b></p><p> void MoveNo(struct Body *p_body,s
103、truct Body *nofood)//沒有吃到食物</p><p><b> {</b></p><p> nofood->x=head->x+X;</p><p> nofood->y=head->y+Y;</p><p> ThroWall(nofood);</p>
104、<p> nofood->next=head;</p><p> head=nofood;</p><p> p_body=head;</p><p> while((p_body->next)->next!=NULL)</p><p> p_body=p_body->next;</p>
105、<p> Loc((p_body->next)->x,(p_body->next)->y);</p><p> printf(" ");</p><p> free(p_body->next);</p><p> p_body->next=NULL;</p><p&g
106、t;<b> }</b></p><p> void MoveYes(struct Body *yesfood)//吃到食物</p><p><b> { </b></p><p> yesfood=(struct Body*)malloc(length);</p><p> yesfo
107、od->x=food_x;</p><p> yesfood->y=food_y;</p><p> yesfood->next=head;</p><p> head=yesfood;</p><p><b> food=0;</b></p><p> score1+
108、=1;</p><p> MakeFood();</p><p> if(Delay>200&&Delay<=500)Delay-=50;</p><p> else if(Delay>140&&Delay<=200)Delay-=5;</p><p> else if(Dela
109、y>100&&Delay<=140)Delay-=4;</p><p> else if(Delay>70&&Delay<=100)Delay-=3;</p><p> else if(Delay>50&&Delay<=70)Delay-=2;</p><p> else if
110、(Delay>40&&Delay<=50)Delay-=1;</p><p> else if(score1<100)Delay=Delay;</p><p> else if(score1<150)Delay=30;</p><p> else if(score1<200)Delay=20;</p>
111、<p> else Delay=5;</p><p><b> }</b></p><p> void DrawShank(char simple) //畫蛇 </p><p><b> {</b></p><p> int drawcount=0;</p>&
112、lt;p> struct Body *p_body=head;</p><p> while(p_body!=NULL)</p><p><b> {</b></p><p> Loc(p_body->x,p_body->y);</p><p> if(p_body==head)</p&
113、gt;<p> printf("□");</p><p><b> else</b></p><p> printf("■");</p><p> drawcount++;</p><p> p_body=p_body->next;</p>
114、<p> if(simple&&drawcount==2)</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> void Ending()//結(jié)束游
115、戲</p><p><b> {</b></p><p> int num=0;</p><p> char str[]={"Thank you for playing the snaKe game! "};</p><p> system("cls");</p>
116、;<p> Loc(32,9);printf("Game Over!!");</p><p> while(str[num]!='\0')</p><p><b> {</b></p><p> Loc(20+num,11);</p><p> putchar(
117、str[num]);</p><p><b> num++;</b></p><p><b> }</b></p><p> Loc(28,13);</p><p> puts("按ESC鍵退出");</p><p> Loc(30,15);&l
118、t;/p><p> puts("按任意鍵重來...");</p><p><b> }</b></p><p> void HiSleep(int ms)</p><p><b> {</b></p><p><b> int x;<
119、/b></p><p> x=clock();</p><p> while(clock()-x<ms); </p><p><b> Sleep(0);</b></p><p><b> }</b></p><p> int main()</p&
120、gt;<p><b> { </b></p><p> system("color 0c");</p><p> srand((unsigned int)time(NULL));</p><p><b> again:;</b></p><p> whil
121、e(!kbhit())</p><p><b> {</b></p><p><b> snack();</b></p><p> system("cls");</p><p> Sleep(300);</p><p><b> }&l
122、t;/b></p><p><b> getch();</b></p><p> Beginning();</p><p> GameInit();</p><p> GameStart();</p><p><b> Ending();</b></p&
123、gt;<p><b> while(1)</b></p><p><b> {</b></p><p> if(kbhit())</p><p><b> {</b></p><p><b> getch();</b></p&
124、gt;<p><b> }</b></p><p><b> else</b></p><p><b> break;</b></p><p><b> }</b></p><p> if(getch()!=27)</p>
125、;<p><b> {</b></p><p> goto again;</p><p><b> }</b></p><p> Loc(25,24);</p><p><b> return 0;</b></p><p><
126、;b> }</b></p><p><b> 六. 結(jié)論</b></p><p> 本程序基本達(dá)到了任務(wù)書上的要求。并且在游戲中增加生命值和選擇難度。</p><p> 程序特點(diǎn):游戲界面美觀,在要求的基礎(chǔ)上做了創(chuàng)新。</p><p> 困難:由于剛開始學(xué)習(xí)C++對(duì)一些知識(shí)理解的還不透徹,還不
127、能應(yīng)用自如,特別在有些地方編程時(shí)需要用到一些課本上沒接觸過的函數(shù),很難編出我們需要的正確程序,而且不能將各種不同的程序相互聯(lián)系在一起。編譯連接時(shí),時(shí)常出現(xiàn)重定義、圖形初始化失敗等問題。</p><p> 解決途徑:查閱指導(dǎo)書關(guān)于C庫函數(shù)的使用,同學(xué)間的交流,網(wǎng)上查詢,以及所學(xué)的關(guān)于函數(shù)知識(shí)和編程,參照以上的資料,依依解決問題,最終,在多次程序調(diào)試中,完成了此次課程設(shè)計(jì)。</p><p>
128、 不足之處:未能準(zhǔn)確畫出蛇頭、蛇身、蛇尾和食物,只用了一些簡單的心形和方塊代替了蛇與食物,登錄界面不美觀,以及未添加游戲背景音樂(BGM)和音效。</p><p> 設(shè)想:畫出惟妙惟肖的蛇與食物,美化登錄界面,添加BGM和音效。</p><p><b> 七. 結(jié)束語</b></p><p> 一周的課程設(shè)計(jì)很快就過去了,剛開始我一點(diǎn)也
129、摸不著頭緒,通過去圖書館或上網(wǎng)查資料對(duì)此課程才有了初步得了解,并開始試著利用所學(xué)的知識(shí)進(jìn)行編程。但由于自己的水平有限,考慮問題不十分全面,完成的程序仍存在一些不足之處,希望老師給予指正。通過這次課程設(shè)計(jì),不僅使我的C++有可很大的提高,同時(shí),設(shè)計(jì)中涉及到了許多新知識(shí),通過查閱許多課外的書籍及資料,學(xué)到了許多教材學(xué)不到的知識(shí)。</p><p> 轉(zhuǎn)眼間,一周的課程設(shè)計(jì)過去了,在這段日子里過得很忙碌但也很充實(shí),為此
130、我感到欣慰。在這里要非常感謝老師對(duì)我們的指導(dǎo),感謝同學(xué)對(duì)我的幫助,沒有你們的幫助我不可能完成這次設(shè)計(jì),為此,我衷心地對(duì)你們表示感謝。</p><p><b> 八.參考文獻(xiàn)</b></p><p> [1] 譚浩強(qiáng) 著. C程序設(shè)計(jì)題解與上機(jī)指導(dǎo)(第三版)[M]. 北京: 清華大學(xué)出版社. 2005.</p><p> [2] 譚浩強(qiáng) 著
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言貪吃蛇游戲課程設(shè)計(jì)
- c語言課程設(shè)計(jì)--貪吃蛇游戲
- java課程設(shè)計(jì)報(bào)告貪吃蛇游戲
- java貪吃蛇游戲 課程設(shè)計(jì)
- 貪吃蛇課程設(shè)計(jì)報(bào)告
- 貪吃蛇課程設(shè)計(jì)報(bào)告
- qt課程設(shè)計(jì)--貪吃蛇游戲設(shè)計(jì)
- 貪吃蛇課程設(shè)計(jì)報(bào)告
- c++課程設(shè)計(jì)----貪吃蛇
- c++貪吃蛇課程設(shè)計(jì)
- 貪吃蛇游戲的實(shí)現(xiàn)課程設(shè)計(jì)
- 基于c語言的貪吃蛇游戲
- 貪吃蛇課程設(shè)計(jì)報(bào)告
- c語言程序設(shè)計(jì)課程設(shè)計(jì)(論文)-貪吃蛇
- 嵌入式課程設(shè)計(jì)報(bào)告---貪吃蛇游戲
- 貪吃蛇課程設(shè)計(jì)
- java課程設(shè)計(jì)---java設(shè)計(jì)貪吃蛇游戲
- android貪吃蛇課程設(shè)計(jì)報(bào)告
- java貪吃蛇課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)--安卓手機(jī)游戲---貪吃蛇
評(píng)論
0/150
提交評(píng)論