



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、貪吃蛇游戲程序設計一、課程設計任務貪吃蛇小游戲程序設計二、設計要求通過游戲程序設計,提高編程興趣與編程思路,鞏固 C 語言中所學的知識,合理的運用資料,實現理論與實際相結合。( 1)收集資料,分析課題,分解問題,形成總體設計思路;( 2)對于設計中用到的關鍵函數,要學會通過查資料,弄懂其用法,要聯系問題進行具體介紹;( 3)上機調試,查錯,逐步分析不能正常運行的原因,確保所設計的程序正確,并且能正常運行;( 4)完成課程設計報告,并進行答辯三、需求分析3.1、程序功能貪吃蛇游戲是一個經典小游戲,一條蛇在封閉圍墻里,圍墻里隨機出現一個食物,通過按鍵盤四個光標鍵控制蛇向上下左右四個方向移動,蛇頭撞
2、倒食物,則食物被吃掉,蛇身體長一節,同時記 10 分,接著又出現食物,等待蛇來吃,如果蛇在移動中撞到墻或身體交叉蛇頭撞倒自己身體游戲結束。3.2、設計思想程序關鍵在于表示蛇的圖形及蛇的移動。用一個小矩形快表示蛇的一節身體,身體每長一節,增加一個矩形塊,蛇頭用倆節表示。移動時必須從蛇頭開始,所以蛇不能向相反的方向移動,如果不按任意鍵,蛇自行在當前方向上前移,但按下有效方向鍵后,蛇頭朝著該方向移動,一步移動一節身體,所以按下有效方向鍵后,先確定蛇頭的位置,而后蛇1的身體隨蛇頭移動,圖形的實現是從蛇頭新位置開始畫出蛇,這時,由于未清屏的原因,原來的蛇的位置和新蛇的位置差一個單位,所以看起來蛇多一節身
3、體,所以將蛇的最后一節用背景色覆蓋。食物的出現與消失也是畫矩形塊和覆蓋矩形塊。為了便于理解,定義兩個結構體:食物與蛇。3.3、流程圖開始初始化界面和蛇身游戲者按鍵選擇放置食物蛇開始運動蛇吃到食 ?NY蛇長大N蛇死亡 ?YY繼續 ?N退出界面2四、 設計的具體實現(1)函數定義函數定義是對各個基礎函數的定義, 并且設置需要運用的信息,便于調用#define N 200#define M 200int x;/食物的橫坐標#includegraphics.hint y;/食物的縱坐標#includeintyes;/判斷是否要出現食物的變量#includefood;/食物的結構體#includestr
4、uct Snake#include#includeint xM;#includeint yM;#include int node;/蛇的節數#define LEFT 97/Aint direction;/蛇的移動方向#define RIGHT 100/Dint life;/蛇的生命, 0 表示活著, 1#define DOWN 115/S表示死亡#define UP 119/Wsnake;#define Esc 0x011bvoid Init();/圖形驅動int i,key;void Close();/圖形結束int score=0;void DrawK();/開始畫面int gamespe
5、ed=250;/ 游戲速度可根據實void GamePlay();/玩游戲的具體過程際情況自行調整void GameOver();/游戲結束struct Foodvoid PrScore();/輸出成績( 2)主函數 main( )主函數是程序的主流程,首先定義使用到的常數、全局變量及函數原型說明,然后初始化圖形系統,調用函數DrawK() 畫出開始畫面,調用函數GamePlay(),即玩游戲的具體過程,游戲結束后調用Close() 關閉圖形系統,結束程序void main()/主函數Init();/圖形驅動DrawK();/開始畫面3GamePlay();/玩游戲的具體過程Close();/
6、圖形結束void Init()/圖形驅動int gd=DETECT,gm;initgraph(&gd,&gm, );/*此處為 turboc的路徑,讀者可以根據自己的電腦而改*/cleardevice();( 3) 畫界面函數 DrawK( )主界面是一個封閉的圍墻,用兩個循環語句分別在水平和垂直方向輸出連續的寬度和高度均的矩形方塊,表示圍墻,為了醒目,設置為白色。void DrawK()/ 開始畫面,左上角坐標為( 50, 40),右下角坐標為( 610,460)的圍墻 setbkcolor(GREEN);setcolor(LIGHTRED);setlinestyle(0,0,5);/設置線
7、型for(i=50;i=600;i+=10)/畫圍墻rectangle(i,40,i+10,49);/上邊rectangle(i,451,i+10,460);/下邊for(i=40;i0;i-)/蛇的每個環節往前移動,也就是貪吃蛇的關鍵算法snake.xi=snake.xi-1;snake.yi=snake.yi-1;switch(snake.direction)/1,2,3,4表示上下左右四個方向,通過這個判斷5來移動蛇頭case 1:snake.x0+=10;break;case 2:snake.x0-=10;break;case 3:snake.y0-=10;break;case 4:s
8、nake.y0+=10;break;for(i=3;isnake.node;i+)/從蛇的第四節開始判斷是否撞到自己了,因為蛇頭為兩節,第三節不可能拐過來if(snake.xi=snake.x0&snake.yi=snake.y0)GameOver();/ 顯示失敗snake.life=1;break;if(snake.x0595|snake.y0455)/蛇是否撞到墻壁GameOver();/ 本次游戲結束snake.life=1;/蛇死if(snake.life=1)/以上兩種判斷以后,如果蛇死就跳出內循環,重新開始break;if(snake.x0=food.x&snake.y0=foo
9、d.y)/吃到食物以后setcolor(0);/把畫面上的食物去掉rectangle(food.x,food.y,food.x+10,food.y-10);snake.xsnake.node=-20;snake.ysnake.node=-20;/新的一節先放在看不見得位置,下次循環就取前一節的位置6snake.node+;/蛇的身體長一節food.yes=1;score+=10;PrScore();/輸出新的得分setcolor(WHITE);/畫出蛇for(i=0;isnake.node;i+)rectangle(snake.xi,snake.yi,snake.xi+10,snake.yi-
10、10);Sleep(gamespeed);setcolor(0);/用黑色去除蛇的最后一節rectangle(snake.xsnake.node-1,snake.ysnake.node-1,snake.xsnake.node-1 +10,snake.ysnake.node-1-10);if(snake.life=1)/如果蛇死就跳出循環break;key=getchar();/接受案件if(key=Esc)/按 ESC鍵退出break;else if(key=UP&snake.direction!=4)snake.direction=3;else if(key=RIGHT&snake.dire
11、ction!=2)snake.direction=1;else if(key=LEFT&snake.direction!=1)snake.direction=2;else if(key=DOWN&snake.direction!=3)snake.direction=4;/endwhile(1)( 5)游戲結束函數 GameOver( )游戲結束,清除屏幕,輸出分數,顯示游戲結束信息。void GameOver()/游戲結束cleardevice();7PrScore();setcolor(RED);outtextxy(100,100,我會回來的 !);getch();void PrScore(
12、)/輸出成績char str10;setfillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(6);sprintf(str,score:%d,score);outtextxy(55,20,str);void Close()/圖形結束getch();closegraph();五、調試及解決方法可以按照程序運行的錯誤提示對原程序進行修改,在調試過程中有時也會遇到不懂的問題,我去圖書館或上網查閱一些資料或者是向老師請教也解決了對源程序一一修改直到運行成功。六、測試結果8910七、設計心得體會在設計這個程序中我主要學會了如何運用以下有關C語言和
13、 C+的知識1) 函數定義是要做到顧名思義是很重要的,它對讀程序的人正確認識程序十分重要,在修改這個程序的過程中也能很快找到程序各模塊的作用,大大增加了程序的可讀性。2) 分析函數先從 main() 函數入手。 Main() 函數是 C+源程序編譯時的開始,從 main() 函數開始讀函數可將其他函數的功能理解得更透徹。3) 在做程序的時候先列框架,將這個程序所要達到的目的(功能)分析出來,選擇正確的數據結構然后在將程序模塊化,按照模塊編寫函數更加簡單合理。4) 我還了解了很多的庫函數的作用,如字符串函數中有很多對字符串進行處理的函數,起功能我都有所了解。5)學會了有關頭文件的使用方法,及系統
14、調配問題的解決方法等。6 )了解到了注釋的重要性。八、附錄1、參考文獻:譚浩強,C+程序設計清華大學出版社郭翠英,C 語言課程設計案例精編 ,中國水利水電出版社,2004.3李麗娟, C語言程序設計教程人民郵電出版社林華聰, C語言程序設計思想與實踐冶金工業出版社2、源代碼#define M 200#include #includegraphics.h#define LEFT 97/A#include#define RIGHT 100/D#include#define DOWN 115/S#include#define UP 119/W#include#define Esc 0x011b#in
15、cludeint i,key;#includeint score=0;11int gamespeed=250;/游戲速度可根據實際情況Close();/圖形結束自行調整struct Foodvoid Init()/圖形驅動int x;/食物的橫坐標int gd=DETECT,gm;int y;/食物的縱坐標initgraph(&gd,&gm, );/*此處為 turbocint yes;/判斷是否要出現食物的變量的路徑,讀者可以根據自己的電腦而改*/food;/ 食物的結構體cleardevice();struct Snakevoid DrawK()/開始畫面,左上角坐標為(50,int xM
16、;40),右下角坐標為( 610, 460)的圍墻int yM;int node;/蛇的節數setbkcolor(GREEN);int direction;/蛇的移動方向setcolor(LIGHTRED);int life;/蛇的生命, 0 表示活著, 1 表示setlinestyle(0,0,5);/設置線型死亡for(i=50;i=600;i+=10)/畫圍墻snake;void Init();/圖形驅動rectangle(i,40,i+10,49);/上邊void Close();/圖形結束rectangle(i,451,i+10,460);/下邊void DrawK();/開始畫面v
17、oid GamePlay();/玩游戲的具體過程for(i=40;i0;i-)/while(1)/可重復玩游戲,按ESC鍵結束蛇的每個環節往前移動,也就是貪吃蛇的關鍵算法while(!kbhit()/在沒有按鍵的情況下,蛇自己移動身體snake.xi=snake.xi-1;snake.yi=snake.yi-1;if(food.yes=1)/需要出現新食物switch(snake.direction)/1,2,3,4表示上food.x=rand()%400+60;下左右四個方向,通過這個判斷來移動蛇頭food.y=rand()%350+60;while(food.x%10!=0)/食物case
18、 1:隨即出現后必須讓食物能夠在整格內,這樣才能snake.x0+=10;break;讓蛇遲到case 2:food.x+;snake.x0-=10;break;while(food.y%10!=0)case 3:food.y+;snake.y0-=10;break;food.yes=0;/畫面上有食物case 4:了snake.y0+=10;break;13setcolor(0);/把畫面上的食for(i=3;isnake.node;i+)/從物去掉蛇的第四節開始判斷是否撞到自己了,因為蛇頭為兩節,第三節不可能拐過來rectangle(food.x,food.y,food.x+10,food
19、.y-10);snake.xsnake.node=-20;if(snake.xi=snake.x0&snake.yi=snake.ysnake.node=-20;/=snake.y0)新的一節先放在看不見得位置,下次循環就取前一節的位置GameOver();/顯示失敗snake.node+;/蛇的身體長snake.life=1;一節break;food.yes=1;score+=10;PrScore();/輸出新的得分if(snake.x0595|snaksetcolor(WHITE);/畫出蛇e.y0455)/蛇是否撞到墻壁for(i=0;isnake.node;i+)GameOver();/本次游戲結束rectangle(snake.xi,snake.yi,snake.snake.life=1;/蛇死xi+10,snake.yi-10);Sleep(gamespeed);if(snake.life=1)/以上兩種判setcolor(0);/用黑色去除蛇的最斷以后,如果蛇死就跳出內循環,重新開始后一節break;rectangle(snake.xsnake.node-1,snake.if(snake.x0=food.x&sna
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 伊春市上甘嶺區2025屆四下數學期末學業水平測試模擬試題含解析
- 上海思博職業技術學院《數控技術及應用》2023-2024學年第二學期期末試卷
- 景德鎮陶瓷職業技術學院《建筑工程定額與預算》2023-2024學年第二學期期末試卷
- 昆明理工大學津橋學院《基礎日語(IV)》2023-2024學年第一學期期末試卷
- 石家莊工商職業學院《生物醫學產品標準及生產法規》2023-2024學年第一學期期末試卷
- 廈門東海職業技術學院《中學生物教育技術》2023-2024學年第二學期期末試卷
- 山東石油化工學院《中外文化概論》2023-2024學年第一學期期末試卷
- 江西婺源縣重點達標名校2025年初三下學期第二次質檢語文試題含解析
- 蘇州工業園區服務外包職業學院《DeutschIntensivⅡ》2023-2024學年第二學期期末試卷
- 四川省成都市青羊區部分校2024-2025學年中考模擬最后十套:語文試題(三)考前提分仿真卷含解析
- 《知不足而后進 望山遠而力行》期中家長會課件
- 《自由飛翔之鳥》教學課件-2024-2025學年嶺南美版(2024)初中美術七年級下冊
- 專題09 鄉村和城鎮-五年(2019-2023)高考地理真題分項匯編(解析版)
- 2025年第三屆天揚杯建筑業財稅知識競賽題庫附答案(201-300題)
- 2025-2030中國電動車行業發展分析及投資前景與戰略規劃研究報告
- 2025租賃合同(辦公室)中文版英文版
- 2025上海無固定期限勞動合同范本
- 城市道路養護雨季應對措施
- 中職高教版(2023)語文職業模塊-第五單元:走近大國工匠(一)展示國家工程-了解工匠貢獻【課件】
- 《食源性病原體》課件
- 2025年湖南懷化市城市管理和綜合執法局局屬事業單位招聘歷年高頻重點提升(共500題)附帶答案詳解
評論
0/150
提交評論