




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C語言項目設(shè)計報告 貪吃蛇游戲課程:標準C語言指導(dǎo)老師:XXX項目:貪吃蛇游戲班級:XXXX班組員:XXX、XXX、XXX、XXX姓名:XXX學號:XXXXXXX日期:2012/7/7目錄一項目開發(fā)文檔(3)1 項目基本分析(3) 1.1項目目標(4) 1.2功能描述(4) 1.3小組分工(7)2 總體設(shè)計報告(8) 2.1 函數(shù)分塊(9) 2.2 接口設(shè)計(9)3 詳細設(shè)計報告(14) 3.1 程序結(jié)構(gòu)(14) 3.2 算法流程(17)4 操作指南(29) 4.1 運行及結(jié)果截圖(29)5 項目總結(jié)(32) 5.1 優(yōu)點與不足(32) 5.2 我的收獲與總結(jié)()(33)二項目代碼(36) 貪
2、吃蛇游戲一 項目開發(fā)文檔 1 項目基本分析在我進行編寫貪吃蛇游戲之前,我所做的必須是可行性分析,因為一旦進行貪吃蛇游戲項目的開發(fā),就必須保證自己在規(guī)定的時間內(nèi)能夠獨立的完整整個程序的所有功能,而且必須是最優(yōu)的,因此,在開發(fā)貪吃蛇游戲之前,我必須要做的是可行性分析。通過查找相關(guān)文檔和技術(shù)支持,了解了VS環(huán)境下的開發(fā)過程,熟悉了C語言的開發(fā)技巧,通過以下幾個方面,進行可行性分析:1. 參考文獻 :貪吃蛇游戲用戶描述文檔、在網(wǎng)上找了相關(guān)源代碼,確定自己能夠在自己能力范圍內(nèi)開發(fā)出這個貪吃蛇游戲項目。2. 功能要求:在進行整個項目開發(fā)之前,我必須要做的就是確定貪吃蛇游戲的主要功能,必須明確貪吃蛇游戲的功
3、能,因為要進行游戲功能可行性分析,經(jīng)過自己的查閱相關(guān)資料,我確定了貪吃蛇游戲的具體功能,詳見后續(xù)部分詳細設(shè)計。3. 性能需求:必須保證自己開發(fā)的貪吃蛇游戲能夠整體盡可能做到高效快速,不占用大量的使用資源,因為我做的是一個應(yīng)用窗體控制臺的游戲開發(fā)項目,必須要考慮資源使用情況,要求盡可能少用資源,在有限的資源范圍內(nèi)實現(xiàn)最大的可利用價值。4. 運行環(huán)境:VS2010上編寫并進行調(diào)試,經(jīng)過安裝軟件,確定可以進行項目程序的編寫。5. 界面要求:采用Win7應(yīng)用窗體標準界面,只需要使用鍵盤。6. 完成期限,一個學期完成整個系統(tǒng),包括程序的編寫以及最終的調(diào)試,測試階段。1.1 項目目標1 熟悉函數(shù)的調(diào)用與程
4、序的模塊化設(shè)計,加深對所學知識的理解2 加強自學能力,遇到不了解的函數(shù)或者方法,通過圖書及網(wǎng)絡(luò)資源學習,提高學習能力3 完成貪吃蛇游戲,通過小項目來檢驗一學期的學習效果,增加學習興趣1.2 功能描述該游戲在繼承傳統(tǒng)同類游戲規(guī)則的基礎(chǔ)上,我們添加了我們自己的想法與功能,設(shè)計如下:游戲規(guī)則包括蛇的運動范圍、蛇的生命周期問題、分數(shù)統(tǒng)計、關(guān)卡判斷。其中蛇的運動范圍是一個15*15的數(shù)組呢,蛇運動的地圖抽象成為一個15*15的二維整形數(shù)組,每個數(shù)組值代表一個小方塊的坐標值,這樣,蛇只能在規(guī)定好的二維數(shù)組內(nèi)運動當蛇遇到數(shù)組左右邊界值(我們在這里抽象成為上、下、左、右四個邊界,其中上邊界坐標值中縱坐標都是0
5、,橫坐標任意,下邊界為縱坐標是15,同理橫坐標不變,左邊界為橫坐標為0,縱坐標任意,同理右邊界為橫坐標為15,縱坐標任意)時,宣告蛇生命周期結(jié)束(上下邊界不限定),貪吃蛇死亡,這個是第一個規(guī)則;另外,當蛇自己吃到自己身體的某一部分時,也宣告游戲結(jié)束,在程序里通過循環(huán)判斷蛇頭下一個前進方向的節(jié)點是不是蛇身上的某一部分節(jié)點即可,如果是那么蛇死亡,否則繼續(xù)運行游戲。 分數(shù)統(tǒng)計算法的思想是每次蛇吃到一個果實時,相加的分數(shù)為一個定值10來記錄分數(shù),這樣可以隨著游戲難度的增加,分數(shù)值也隨之增多。關(guān)卡功能設(shè)置通過與分數(shù)相關(guān)聯(lián)而體現(xiàn)的,初始化游戲分數(shù)為0,關(guān)卡障礙物選擇由玩家鍵入,當玩家玩到一定的分數(shù)時(例如
6、是100)關(guān)卡加一,變?yōu)榈诙P(guān),同時,蛇前進速度相應(yīng)增加一個等級,障礙物的設(shè)置也變化,這樣就實現(xiàn)了不同關(guān)卡,不同速度的貪吃蛇,從而增加了游戲的難度。 蛇: 1、能夠?qū)崿F(xiàn)貪吃蛇自動前線移動,也就是貪吃蛇能夠“活動”的外觀效果,根據(jù)相同的時間間隔,每一次將貪吃蛇自身的蛇頭向前移動一個小格子,同時蛇尾向前移動一個小格子,移動方向為貪吃蛇行走的方向。2、每當一個食物時,蛇長度增加一格3、蛇頭碰到自身時則游戲結(jié)束4、通過鍵盤來控制蛇的移動食物:1、 每當蛇吃到食物時,重置食物2、 吃到特定食物時,蛇的長度能夠縮短邊界和障礙物:1、 遇到邊界和障礙物則游戲終止成績統(tǒng)計:1、當貪吃蛇吃到果實時,玩家的分數(shù)就
7、應(yīng)該隨著吃到的果實而增加,增加的規(guī)則就是每一個吃到一個食物則乘以10得到分數(shù)。2、能夠與歷史成績進行比較,顯示高分排行榜輸入與輸出:1、 通過鍵盤選擇障礙物關(guān)卡數(shù)2、 通過鍵盤選擇蛇的速度3、 顯示游戲指南4、 能夠即時顯示當次游戲的關(guān)卡數(shù)及游戲分數(shù)5、 顯示游戲界面貪吃蛇的總體功能圖1.3小組成員分工小組成員XXXXXXXXXXXX功能分析小組討論,確定項目題目和基本方案,組員提出想實現(xiàn)的功能,分析可行性討論建議整理方案分工安排接口實現(xiàn)成績,特效蛇的基本功能障礙物功能邊界問題關(guān)卡遞進最初源代碼添加注釋基本功能添加邊界成績存檔食物重置特殊效果障礙物關(guān)卡功能 匯總整理測試改進2 總體設(shè)計報告考慮
8、到要實現(xiàn)的功能太多,所以宜采用模塊化設(shè)計,把功能分塊(在介紹功能時已經(jīng)按這個方式介紹了),然后設(shè)計各個模塊之間參數(shù)的傳遞,銜接起來,最后實現(xiàn)每個功能的算法。首先我們定義了所需要的數(shù)據(jù)類型1. Node(結(jié)點)型定義用來作為蛇的頭,身,尾的數(shù)據(jù)類型以及障礙物的數(shù)據(jù)類型每個成員的設(shè)計已在注釋中注明,其中蛇和障礙物均用鏈表結(jié)構(gòu)表示struct Node int x; /*蛇某一節(jié)的橫坐標*/ int y; /*蛇某一節(jié)的縱坐標*/ struct Node *pre; /*蛇某一節(jié)的前驅(qū)結(jié)點*/ struct Node *next; /*蛇某一節(jié)的后繼結(jié)點*/; 2Food(食物)型定義 用來儲存食物
9、的橫縱坐標及顯示的字母3.Player(玩家)型定義儲存玩家的姓名和成績2.1函數(shù)分塊 總的來說,我們把所有功能分成了以下幾個大塊: main snake food barrier and block grade共五個大塊,分別實現(xiàn)相應(yīng)功能,見名知意,各塊的功能顯而易見,依次實現(xiàn)主要的運行(main),蛇的控制、移動、增減(snake),食物的重置(food),障礙物的設(shè)置及邊界的判斷(barrier and block),成績的統(tǒng)計與存檔(grade)每個模塊均存在一個CPP中,截圖如下:2.2接口設(shè)計下面分別介紹每個大塊的內(nèi)部函數(shù)接口設(shè)計main: 主函數(shù):int main()其中main
10、函數(shù)里定義了游戲必須的一些變量輸入函數(shù):int input(char*pname,int*barrierkind)第一個形參為char*類型,用來接收main函數(shù)里面的玩家名字,便于輸入賦值,因為要進行寫操作修改其值,所以定義成一級指針;第二個形參為障礙物類型,即初始化的障礙物分布,同樣要在input里賦值,所以用int*型。返回值為速度值,是一個整數(shù),游戲通過這個數(shù)來控制蛇前進的速度,所以定義為int屏幕顯示函數(shù):void screenshow(int score,int stage,Node*head,Node*firstbar,Food*food)要顯示當前的分數(shù)和關(guān)卡,所以傳兩個整型參
11、數(shù)score和stage;又要通過二位數(shù)組掃描,根據(jù)橫縱坐標來看輸出“”(空格)還是蛇“ ”,或障礙物“”,或食物,所以要傳結(jié)構(gòu)體參數(shù)Node*和FoodSnake:蛇的初始化函數(shù):void initalsnake(int*grade,Node*head,Node*rear)順便把成績也初始化,所以傳了個int型參數(shù)grade;然后由于要修改main函數(shù)中Node*head目標空間的的橫縱坐標,所以這里用了一個二級指針,否則,若設(shè)計成Node*型,則形參改的值只在該函數(shù)有效,對main函數(shù)里的head無影響(此處曾調(diào)試很久,在5.2.2心得體會里在詳細說明)方向輸入函數(shù):char direct
12、ioninput(char c)由鍵盤鍵入一個值,傳回有效值,故返回值類型為char, 由主函數(shù)傳過來而不內(nèi)部定義時避免輸入無效值時出錯,所以此處相當于輸入無效值則還是原值(內(nèi)部最后一句為return c)。蛇移動函數(shù):void snakeheadmove(char c,Node*head)傳前進的方向,為字母值,用char,頭要移動,需要改值,所以用二級指針添加和刪除結(jié)點函數(shù):void addpoint(Node*head,Node*rear)void deletepoint(Node*head,Node*rear)由于用的是雙向鏈表,所以要傳頭尾兩個參數(shù),需改值,故用二級指針Food:食物
13、重置函數(shù):void foodreset(char c,Food*food,Node*head,Node*firstbar)當玩到最后蛇身較長時,重置多次可能還不行,所以會內(nèi)定為在蛇前進方向的前兩個出食物,所以要傳前進方向,用char;需改變食物的橫縱坐標及顯示字母,故第二個參數(shù)用一級指針;要判斷食物是否重置到蛇身或障礙物上,所以傳二者參數(shù),由于只是判斷不需要改值,所以一級指針即可barrier and block:障礙物初始化函數(shù):void initalbarrier(int barrierkind,Node*firstbar,Node*lastbar)要調(diào)用障礙物重置函數(shù)void barri
14、erset(int barrierkind,Node*firstbar,Node*lastbar),需要主函數(shù)里的實參,所以第一個參數(shù)用int,便于內(nèi)部傳值調(diào)用其他函數(shù);要修改主函數(shù)中firstbar和lastbar的目標空間的值,所以用二級指針;判斷出界函數(shù)int Block(Node *head)看頭部的坐標是否出界,所以只需Node*即可;對判斷結(jié)果進行記錄,返回0或1,所以用int;障礙物重置函數(shù)void barrierset(int barrierkind,Node*firstbar,Node*lastbar)接收關(guān)卡數(shù),故第一個參數(shù)定義為int; 要修改主函數(shù)中firstbar和l
15、astbar的目標空間的值,所以用二級指針;判斷游戲結(jié)束函數(shù):int Gameover(Node*head,Node*firstbar)需要判斷頭是否觸到障礙物,所以傳參數(shù)Node*;對判斷結(jié)果進行記錄,返回0或1,所以用int;Grade:成績插入函數(shù):void scorecompare(Player*top,Player*player)把該次的成績與原來的前十名成績進行比較,需要記錄名字,所以傳結(jié)構(gòu)體Player*;歷史成績復(fù)制函數(shù):void fileinital(Player*topplayer)由于要把文件中的歷史成績賦值給主函數(shù)的結(jié)構(gòu)體數(shù)組,所以傳一級指針Player*成績存檔函數(shù):
16、void file(Player*top)把排序后的新的TOP10的成績寫入文檔,由于是一維數(shù)組,所以只能傳指針;參數(shù)傳遞圖: main grade snakebolck fileinitalInputinitalsnakeinitalbarrierderectioninputBlocksnakemovemainbarriersetaddpointgameoverdeletepointscorecomparefilescreenshow注明:單項箭頭的指向為參數(shù)傳遞的方向; 雙向箭頭說明有傳遞返回值; 主要采取指針參數(shù)改動值,所以很少有返回值;3 詳細設(shè)計報告3.1程序結(jié)構(gòu)程序流程圖3.1.1
17、各種宏定義以及說明#define boundary 15 /* 邊界定義為15*15 */#define N 10 /* 只存取和展示前10名玩家 */3.1.2主要函數(shù)聲明如下int input(char*,int*);顯示最初的提示界面,實現(xiàn)難度和關(guān)卡的選擇輸入;void foodreset(char c,Food*food,Node*head,Node*firstbar);實現(xiàn)食物的隨機重置;void initalsnake(int*,Node*,Node*);給蛇頭動態(tài)分配空間,順便初始化成績;void initalbarrier(int,Node*,Node*);給障礙物初始化空間,
18、同時調(diào)用食物重置函數(shù);void barrierset(int,Node*,Node*);根據(jù)現(xiàn)在的關(guān)卡信息重置障礙物;int Block(Node*head) ;判斷頭是否出界char directioninput(char);方向控制鍵入函數(shù);從鍵盤過去鍵入值;void snakeheadmove(char,Node*);根據(jù)鍵入的值執(zhí)行蛇頭移動;void addpoint(Node*,Node*);吃到食物時增加結(jié)點,蛇身增長;void deletepoint(Node*,Node*);吃到特定食物蛇身變短;int Gameover(Node*,Node*);判斷游戲是否終止;void s
19、creenshow(int,int,Node*,Node*,Food*);顯示游戲界面;void scorecompare(struct Player*,struct Player*);每個玩家游戲結(jié)束即時排序插入高分榜;void fileinital(Player*);文件初始化;void file(Player*);成績存檔;3.2算法流程3.2.1 main模塊的函數(shù)算法:int main()/初始化信息,調(diào)用文件初始化函數(shù);while(1) /玩家循環(huán)(外循環(huán)) 定義必要的變量; 初始化該玩家信息(姓名“XXX”,0分); 清屏; 調(diào)用輸入函數(shù),返回速度值; 調(diào)用蛇和障礙物的初始化函數(shù)
20、; 利用time函數(shù)產(chǎn)生隨機數(shù); While(1) /游戲的進程循環(huán)(內(nèi)循環(huán)) if(蛇頭吃到食物)(字母“o”)?(減短):(增長);調(diào)用食物重置函數(shù);玩家成績增加; if(有鍵盤輸入) 調(diào)用方向輸入函數(shù);pt=rear;while(pt不指向蛇頭)將蛇頭后面的結(jié)點分別等于前驅(qū)結(jié)點;/相當于前移調(diào)用蛇頭移動函數(shù);if(游戲過關(guān)) 速度延時減(20毫秒*關(guān)卡等級),直到為零; 釋放障礙物空間; 重置障礙物;if(游戲結(jié)束) 輸出鼓勵的話; 跳出本次循環(huán);調(diào)用屏幕顯示函數(shù);調(diào)用Sleep函數(shù)延時;/內(nèi)循環(huán)結(jié)束釋放蛇頭空間;釋放障礙物空間;調(diào)用分數(shù)插入函數(shù);調(diào)用文件存檔函數(shù);延時一秒;清屏;顯示英
21、雄榜;判斷繼續(xù)游戲還是退出; /外循環(huán)結(jié)束return 0;int input(char*pname,int*barrierkind) 定義速度變量; printf(歡迎來到貪吃蛇游戲); printf(請輸入名字); scanf(%s,pname); (后面是類似的輸入障礙物類型和難度) return speed*50;void screenshow(int score,int stage,Node*head,Node*firstbar,Food*food) 定義要用的變量; 清屏; 輸出提示游戲規(guī)則的話; for(i=1;iboundary;i+) printf(); printf(n);
22、/上邊界輸出 for(i=0;iboundary;i+) printf(|);for(j=1;jboundary;j+) if(是蛇的坐標) 是蛇頭,printf(); 是蛇身,printf();if(障礙物坐標) printf();if(食物坐標)顯示食物的字母;都不是則printf(“ ”); /j循環(huán)完printf(|); putchar(n); /i的循環(huán)完 printf( ); for(i=1;iy+=1;if(*head)-y=boundary) (*head)-y-=boundary;break; (后面幾個同理)void addpoint(Node*head,Node*rear
23、) struct Node *pt,*p; p=(struct Node *)malloc(sizeof(struct Node); pt=*head; /*分配結(jié)點p的地址空間并將其指向蛇頭結(jié)點*/ while(pt-next!=NULL) pt=pt-next ; /*當p的next域不為空時將p指向下一個結(jié)點*/ p-pre= pt; pt-next = p; p-next=NULL; *rear=p; /*將p結(jié)點插到蛇鏈表的末尾,后插法*/void deletepoint(Node*head,Node*rear)(*head)-next=*rear; (*rear)-pre=*hea
24、d; /刪除所有節(jié)點,只留首尾3.2.3 food模塊的函數(shù)算法:void foodreset(char c,Food*food,Node*head,Node*firstbar) 定義變量; 重置食物; for(t=0,flag=1;flag=1;t+) for(pt=head;pt!=NULL;pt=pt-next)if(食物坐標等于蛇身坐標) 重置食物; break; for(pt=firstbar;pt!=NULL;pt=pt-next) if(食物坐標等于蛇身坐標) 重置食物; break; if(t5) /*當5次重置,食物坐標均等于蛇的坐標,則將食物置于蛇的前進方向的前一格*/ s
25、witch(c) case d:food-x=head-x+1; food-y=head-y; if(food-x=boundary) food-x-=boundary; break; (后面的選項類似) 3.2.4 block and barrier模塊函數(shù)算法:void initalbarrier(int barrierkind,Node*firstbar,Node*lastbar) *firstbar=new Node5; /用new運算動態(tài)分配空間 (*firstbar)-x=10; /設(shè)置初始坐標 (*firstbar)-y=10; (*firstbar)-pre=NULL; (*f
26、irstbar)-next=NULL; *lastbar=*firstbar; barrierset(barrierkind,firstbar,lastbar); /調(diào)用障礙物設(shè)置函數(shù)int Block(Node *head) if(蛇頭坐標出界)return 1; else return 0;void barrierset(int barrierkind,Node*firstbar,Node*lastbar)定義變量; for(i=0;inext!=NULL) pt=pt-next ; p-pre= pt; pt-next = p; p-next=NULL; *lastbar=p; swit
27、ch(barrierkind) /給障礙物賦坐標值 case 1: (*lastbar)-x=(*lastbar)-pre-x-1; (*lastbar)-y=(*lastbar)-pre-y; break; case 2: (*lastbar)-x=(*lastbar)-pre-x; (*lastbar)-y=(*lastbar)-pre-y-1; break; default: (*lastbar)-x=(*lastbar)-pre-x-1; (*lastbar)-y=(*lastbar)-pre-y-1; int Gameover(Node*head,Node*firstbar)定義變量
28、;for(pt=head-next;pt!=NULL;pt=pt-next) if(蛇頭坐標等于蛇身的坐標) return 1; for(pt=firstbar;pt!=NULL;pt=pt-next) if(蛇頭坐標等于障礙物坐標) return 1; if (Block(head) /調(diào)用Block函數(shù) return 1; return 0;3.2.5 grade模塊函數(shù)的算法:void scorecompare(Player*top,Player*player) 定義變量; 遍歷top數(shù)組比較大小,標記下player的成績的位置; 從后往前遍歷,把player的信息插入到標記的位置;(詳
29、細代碼見源代碼,此處只寫算法和思路)void fileinital(Player*topplayer)FILE*fp; /定義結(jié)構(gòu)體FILE型的指針if(打開的只讀文件為空) if(打開的只寫文件為空) /此處一般不為空,因為打開只寫沒有的話會自動創(chuàng)建 提示運行錯誤; exit(0);Player initalN; /定義結(jié)構(gòu)體Pint i;for(i=0;ix=rand()%(boundary);看似不錯,但有0這個隱患,直接加1的話又會超出上界,最后我想出了這樣處理: food-x=rand()%(boundary-2)+1;即余數(shù)的最大值比原來小二,而加一的話下屆又加一了,所以不會出現(xiàn)食
30、物BUG了。這是最后一天調(diào)試出來了,很幸運。5.2.3 總結(jié)這次項目我真的學到了很多東西,很多功能我基本自己獨立編寫的,大大提高了我的C語言編寫能力,而且我還學習了鏈表和文件儲存。其實有個小秘密就是,這個代碼我們改了很久,分幾個階段。1. 找到源代碼時什么附加功能都沒有,而且一個主函數(shù)包羅所有信息,很龐雜,于是我花了一個晚上把找的代碼看懂并根據(jù)功能剝離出各個函數(shù); 2. 當時對參數(shù)掌握的不是特別好,所以就把那幾個結(jié)構(gòu)體指針的變量全部定義為外部全局變量;在各分CPP里面用extern來說明;同時,策劃并添加我們自己設(shè)計的一些功能,如關(guān)卡,障礙物,吃“o”變短,成績統(tǒng)計等。3. 后來覺得全局變量影
31、響了函數(shù)的獨立性,所以我又一個個把函數(shù)根據(jù)功能重新設(shè)計接口,從而去掉了全局變量,感覺改的比較成功。備注:閃屏問題我們還沒解決,我覺得只能通過圖形界面來實現(xiàn),我暑假會盡量自學圖形界面,盡量實現(xiàn)。(完)特別鳴謝老師一學期來的無私敬業(yè)!二 項目代碼附原代碼:頭文件:game.h#include stdafx.h#include #include #include #include #include #define boundary 15#define N 10struct Node int x; /*蛇某一節(jié)的橫坐標*/ int y; /*蛇某一節(jié)的縱坐標*/ struct Node *pre; /
32、*蛇某一節(jié)的前驅(qū)結(jié)點*/ struct Node *next; /*蛇某一節(jié)的后繼結(jié)點*/; /*蛇的某一節(jié)*/struct Food int x; /*食物的橫坐標*/ int y; /*食物的縱坐標*/ char c; /*用字母表示食物*/; /*食物*/struct Playerchar name20; /*玩家姓名*/int grade; /*成績*/;int input(char*,int*);/輸入 void foodreset(char,Food*food,Node*head,Node*firstbar);/食物重置void initalsnake(int*,Node*,Nod
33、e*);/蛇頭重置void initalbarrier(int,Node*,Node*);/障礙物初始化空間int Block(Node*head) ;/判斷出界 char directioninput(char);/方向輸入void snakeheadmove(char,Node*);/蛇頭移動void addpoint(Node*,Node*);/增加結(jié)點int Gameover(Node*,Node*);/游戲結(jié)束條件void screenshow(int,int,Node*,Node*,Food*);/屏幕顯示void scorecompare(struct Player*,struc
34、t Player*);/成績排序void fileinital(Player*);/初始化文件及提取成績void file(Player*);/文件儲存成績void barrierset(int,Node*,Node*);/障礙物重置void deletepoint(Node*,Node*);/刪除結(jié)點 /頭尾和臨時結(jié)點的結(jié)構(gòu)體指針源文件:main.cpp#include stdafx.h#include game.hint main()struct Node *firstbar=NULL,*lastbar=NULL,*pb; /* 障礙物的首尾結(jié)點,為Node*型 */ struct Foo
35、d food=2,2,A; /*食物,為Food型 */ struct Node *head=NULL,*p,*rear=NULL,*pt; /*蛇的頭尾,為Node*型*/ int aboundaryboundary=0; int number=0,speed=0; structPlayertopplayerN; fileinital(topplayer); while(1) char c=d; /*d為蛇右進的控制鍵,即默認為向右前進*/int gameover=0,STAGE=1,flag=0; /定義游戲結(jié)束,關(guān)卡,標記符變量int barrierkind=0; /定義障礙物選擇變量s
36、truct Player player=xxx,0; /初始化此次玩家信息 system(cls); /清屏 speed=input(,&barrierkind);/調(diào)用輸入函數(shù),返回速度值initalsnake(&player.grade,&head,&rear); /調(diào)用蛇初始化函數(shù) initalbarrier(barrierkind,&firstbar,&lastbar); /初始化障礙物 srand(unsigned)time(NULL); /*利用time函數(shù)產(chǎn)生隨機數(shù)*/ while(1) if(food.x=head-x) & (food.y=head-y)
37、 /*當蛇頭吃到食物*/ if(food.c=O)deletepoint(&head,&rear);else; addpoint(&head,&rear); foodreset(c,&food,head,firstbar); /*調(diào)用食物重置*/ player.grade+=STAGE*10; if(kbhit() /*用kbhit()函數(shù)判斷是否有鍵盤輸入*/ c=directioninput(c); /*調(diào)用方向輸入函數(shù)*/ pt=rear; /*將pt指向蛇尾結(jié)點*/ while(pt!=head ) /*當pt不指向蛇頭時,將蛇頭后面的結(jié)點坐標分別等于前驅(qū)結(jié)點,相當于蛇向前移一格*/ pt-x=pt-pre-x; pt-y=pt-pre-y; pt=pt-pre; snakeheadmove(c,&head); /*改變蛇頭坐標*/ /*判斷游戲過關(guān)或失敗*/int tempSTAGE=STAGE; /如果升級,增加難度STAGE=player.grade/100+1;if(tempSTAGE-STAGE)speed=(speed-STAGE*10)0?(speed-STAGE*10):0;delete firstbar; initalbarrier(STAGE,&firstbar,&lastbar); else;
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年四川省稅務(wù)系統(tǒng)遴選面試真題附詳解含答案
- 內(nèi)科疾病診療成本控制分析
- 化妝品衛(wèi)生知識培訓(xùn)考核試題(含答案)
- 遼師大版(三起)小升初考試英語試卷
- 2025年上海市高級技工學校招聘考試筆試試題(含答案)
- 基因疾病的探究與治療方法
- 老師愛崗敬業(yè)課件
- 服裝品牌代理經(jīng)銷合同范本
- 專業(yè)市場場地租賃履約保證金合同
- 拆除工程風險規(guī)避與免責合同
- 浙江杭州市2024-2025學年高一下學期6月期末考試英語試題及答案
- 喘息性支氣管肺炎的護理查房
- 新型電極材料成本控制-洞察及研究
- 2025年初中數(shù)學知識點測試題及答案
- 小學生集體活動安全課件
- 2025-2030年中國高爾夫產(chǎn)品行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 成都市2022級(2025屆)高中畢業(yè)班摸底測試(零診)數(shù)學試卷(含答案)
- 冰淇淋行業(yè)招商策劃
- 酒店住宿水單模板
- 【教學】第五講-化學戰(zhàn)劑的種類與性質(zhì)
- 阿貝折射儀使用說明書(
評論
0/150
提交評論