




已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
貪吃蛇游戲開(kāi)發(fā)文檔本文檔為稻草人于暑假開(kāi)發(fā)C語(yǔ)言版本之鏈表學(xué)習(xí)的貪吃蛇游戲文檔!一:游戲分為兩個(gè)大模塊:一:界面開(kāi)發(fā)(UI):1:菜單界面;2:游戲界面;3:積分板塊;二:游戲開(kāi)發(fā):1:界面的控制;2 : 成長(zhǎng)的規(guī)則;(1300升中級(jí),2500升高級(jí))3:碰撞檢測(cè)/本游戲采用全局使用鍵盤(pán)控制,以及使用了多線程,所以使用了WINDOWS API函數(shù),/運(yùn)行系統(tǒng):Windos/7/8/10/XP二:本項(xiàng)目所用到的頭文件:1:庫(kù)頭文件:#include#include#include#include2:自寫(xiě)頭文件:#includetools.h#includeSnake.h三:頭文件介紹:Snake.h頭文件為:游戲的核心文件,里面包含了游戲界面的繪制函數(shù),游戲的成長(zhǎng)機(jī)制,游戲的碰撞檢測(cè)等。Snake.h;typedef struct Snakedint x;int y;/蛇身體的坐標(biāo)char Content3;Snaked *pNext;/指向下一個(gè)結(jié)構(gòu)體Snaked *pHead;/指向上一個(gè)結(jié)構(gòu)體Snakedd;/定義蛇身體的結(jié)構(gòu)體void GameWord(void);/繪制游戲界面void ConsoleControl(void);/控制臺(tái)顯示格式控制void MenuControl(void);/菜單控制中心Snakedd *ProduceSnake(int iCnt); /產(chǎn)生蛇的身體,iCnt代表的是蛇的身體有幾節(jié)。void PrintList(Snakedd *pHead);/打印出鏈表(蛇身)void DeleteList(Snakedd *pHead);/銷毀鏈表void RandomCoordinate();/產(chǎn)生一個(gè)隨機(jī)坐標(biāo),并且打印出食物/多線程函數(shù):DWORD WINAPI MobileSnake(LPVOID lpChandle); /移動(dòng)蛇(未實(shí)現(xiàn))DWORD WINAPI KeyboardControl(LPVOID lpChandle);/鍵盤(pán)控制。DWORD WINAPI LostGameTime(LPVOID lpChandle);/已經(jīng)用去的時(shí)間/后續(xù)函數(shù)占位:Tools.h頭文件為:輔助頭文件,它里面包含了對(duì)控制臺(tái)的一些控制Tools.h:void HideCursor(bool Switch);/光標(biāo)顯示與隱藏函數(shù);true;顯示光標(biāo);false:隱藏光標(biāo)void gotoxy(int x,int y);void Block(int x,int y,int Wide,int Hight);/繪制方框函數(shù) x,y代表方框起始的左上角坐標(biāo);Wide:輸出方框的長(zhǎng); Hight:輸出方框的高int Menu(char* MenuTxt,int Lenght,int Wide,int Hight,int x,int y);/菜單選項(xiàng)繪制; MenuTxt:代表要繪制出的菜單選項(xiàng); Lenght:代表選項(xiàng)的總項(xiàng)目數(shù);x,y代表方框起始的左上角坐標(biāo);Wide:輸出方框的長(zhǎng); Hight:輸出方框的高;返回值;-1 代表左鍵 ;其他值代表右鍵四:函數(shù)的實(shí)現(xiàn):Tools.h頭文件:*第一次完成函數(shù):*void HideCursor(bool Switch);*void HideCursor(bool Switch) int iCnt=0;if(Switch=true)iCnt=1;elseiCnt=0;CONSOLE_CURSOR_INFO cursor_info = 1, iCnt; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);*END*void gotoxy(int x,int y)*void gotoxy(int x,int y)COORD xy;/光標(biāo)的位置HANDLE hHand;/句柄變量hHand=GetStdHandle(STD_OUTPUT_HANDLE);/獲取輸出的句柄xy.X=x;xy.Y=y;SetConsoleCursorPosition(hHand,xy);/設(shè)置控制臺(tái)光標(biāo)的位置*END*void Block(int x,int y,int Wide,int Hight)*void Block(int x,int y,int Wide,int Hight) int i=0;/上邊框gotoxy(x,y);printf();for(i=0;iWide-1;i+)printf();printf();/下邊框gotoxy(x,y+Hight-1);printf();for(i=0;iWide-1;i+)printf();printf();/左邊框,右邊框for(i=0;iHight-2;i+)gotoxy(x,y+i+1);printf();gotoxy(x+2*Wide,y+i+1);printf();*END*START*int Menu(char* MenuTxt,int Lenght,int Wide,int Hight,int x,int y) *START*int Menu(char* MenuTxt,int Lenght,int Wide,int Hight,int x,int y)int i=0;int iCnt=0;int iRow=0;int iColoum=0;int iResult=0;/繪制出菜單的邊框Block(x,y,Wide,Hight);/打印出菜單內(nèi)容for(i=0;i);/箭頭動(dòng)態(tài)設(shè)置iRow=x+3;iColoum=y+3;i=0;while(1)fflush(stdin);/清除緩存iCnt=getch();if(iCnt=13)break;iCnt=getch();switch(iCnt)case 72:i=-2;iResult-;if(iResult=Lenght)iResult=0;break;case 75:i=-1;break;case 77:i= 1;break;if(i=2 | i=-2)printf(bbb );iColoum=iColoum+i;if(iColoumy+3+2*Lenght-2)iColoum=y+3;gotoxy(iRow,iColoum);printf(-);if(i=-1)return -1;if(i=1)break;return iResult;*END*Tools.h函數(shù)END*Snake.h:/全局變量,用于控制蛇的方向int Coloum;/Y坐標(biāo)的變量/方向控制:int Row_x=2;int Coloum_y=0;/食物位置:int iFood_x;int iFood_y;bool Space=true;/空格用于暫停bool Thread = true;int iIntegral = 0;/積分int iGrade = 0;/難度等級(jí)/全局變量,用于控制蛇的方向char Name20=;/最高紀(jì)錄的名字int iMark=0; /記錄的成績(jī)Snakedd *pSnake=NULL;/存儲(chǔ)蛇的頭節(jié)點(diǎn)地址Snakedd *pFooted = NULL;/消失的蛇身的節(jié)點(diǎn)int iFooted_x=0;int iFooted_y=0;/新增蛇體的位置CRITICAL_SECTION hade;/用于線程鎖 /*第一次完成函數(shù):*void GameWord(void)*void GameWord(void) int x=5; int y=3; int i=0; system(cls); Block(0,0,25,30); Block(52,0,10,30); gotoxy(10,12); /游戲區(qū)域繪制 /printf(游戲開(kāi)始!); Snakedd *pResult = ProduceSnake(7); PrintList(pResult); DeleteList(pResult); RandomCoordinate(); /積分板信息控制/用戶信息 gotoxy(52+x,y); printf(用戶名:); gotoxy(52+x,y+1); printf( 彭輕松);/游戲最高分 gotoxy(52+x,y+5); printf(游戲最高分:); gotoxy(52+x,y+6); printf( 88888);/當(dāng)前游戲難度 gotoxy(52+x,y+10); printf(游戲難度:); gotoxy(52+x,y+11); printf( 高);/當(dāng)前得分 gotoxy(52+x,y+15); printf(當(dāng)前游戲得分:); gotoxy(52+x,y+16); printf( 7777);/當(dāng)前時(shí)間 gotoxy(52+x,y+20); printf(已玩游戲時(shí)間:); CreateThread(NULL,0,LostGameTime,NULL,0,NULL); /提示 gotoxy(0,30); printf( t溫馨提示:控制方向,空格暫停游戲和繼續(xù)游戲!);*END*void MenuControl(void)*void MenuControl(void)int i=0;char *s4=開(kāi)始游戲,游戲難度,更多游戲,退出游戲;l1:i=Menu(s,4,10,12,25,10);gotoxy(0,0);if(i=-1)printf(你選擇的是返回上一層);if(i=0)GameWord();if(i=1)system(cls);Block(25,10,15,12);gotoxy(28,13);printf(該功能尚未開(kāi)發(fā)!);if(i=2)system(start );system(cls);goto l1;if(i=3)exit(0);*END*void ConsoleControl(void)*void ConsoleControl(void)system(mode con cols=75 lines=32);HideCursor(false);system(title 貪吃蛇-稻草人);system(color A);*END*Snakedd *ProduceSnake(int iCnt)*Snakedd *ProduceSnake(int iCnt)int i = 0;/用于循環(huán)變量Snakedd *pResult = NULL;/頭節(jié)點(diǎn),同時(shí)作為函數(shù)的返回值Snakedd *pTemp = NULL;Snakedd *pFoot = NULL;/變量節(jié)點(diǎn),用于存放中途產(chǎn)生的結(jié)構(gòu)體地址if (iCnt = 0)return NULL;/判斷生成鏈表的有效性for (i = 0; i x = 10 + i*2;pTemp-y = 10;strcpy( pTemp-Content,);pTemp-pNext = NULL;if (pResult = NULL)pResult = pTemp;pFoot = pTemp;pTemp-pHead = NULL;continue;/如果這是第一個(gè)結(jié)構(gòu)體,把它賦值給頭指針pFoot-pNext = pTemp;pTemp-pHead = pFoot;pFoot = pTemp;/把新生的結(jié)構(gòu)體接上鏈表return pResult;*END*void PrintList(Snakedd *pHead)*void PrintList(Snakedd *pHead)while (pHead)gotoxy(pHead-x,pHead-y);printf(%s,pHead-Content);pHead = pHead-pNext;*END*void DeleteList(Snakedd *pHead)*void DeleteList(Snakedd *pHead)Snakedd *pTemp = pHead-pNext;while (pTemp)delete(pHead);pHead = pTemp;pTemp = pTemp-pNext;delete(pHead);*END*void RandomCoordinate()*void RandomCoordinate()int x;int y;srand(unsigned)time(0);/時(shí)間種子x = rand() % 24 + 1;y = rand() % 24 + 1;gotoxy(x,y);printf();*END* DWORD WINAPI KeyboardControl(LPVOID lpChandle)*DWORD WINAPI KeyboardControl(LPVOID lpChandle)int iCnt = 0;while (1)fflush(stdin);/清除緩存iCnt = getch();if (iCnt = 33)if (Space = true)Space = false;elseSpace = true;/用于判斷空格鍵iCnt = getch();switch (iCnt)case 72:/上if(Coloum_y0)break;Row_x = 0;Coloum_y = -1;break;case 80:/下if (Coloum_y0)break;Row_x = -2;Coloum_y = 0;break;case 77:/右if (Row_xx - iFood_x y = iFood_y | pTemp-x - iFood_x = -2 & pTemp-y = iFood_y)iCnt+;iFood_x = (iFood_x + 2) % 22 + 2;iFood_y = (iFood_y + 1) % 23 + 1;pTemp = pSnake;if (iCnt = 20)goto R_1;continue;pTemp = pTemp-pNext;gotoxy(iFood_x, iFood_y);printf();gotoxy(57, 6);2:新增兩個(gè)功能:讀取和存檔功能:讀取:游戲開(kāi)始時(shí)會(huì)自動(dòng)去讀取本機(jī)游戲的最高分,并且顯示出來(lái)存檔:游戲結(jié)束時(shí)會(huì)自動(dòng)用你的分和最高分進(jìn)行比較如果高于最高分會(huì)要求你輸入名字,并且存入文件。void WriteInformation()/存檔功能if (iIntegral iMark)gotoxy(36, 15);printf(恭喜你!新紀(jì)錄!);gotoxy(36, 16);printf(請(qǐng)輸入你的名字:);gotoxy(38, 17);HideCursor(true);scanf(%s,Name);FILE *fWrite=NULL;if (fWrite = fopen(Grade.dat, wb)=NULL)gotoxy(36, 17);printf(文件讀取錯(cuò)誤!存檔失敗!);fprintf(fWrite, %
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 節(jié)拍訓(xùn)練中的獨(dú)特技巧樂(lè)理試題及答案
- 物理實(shí)效轉(zhuǎn)化2025年試題及答案
- 如何解讀創(chuàng)業(yè)扶持政策的新規(guī)試題及答案
- 綠色供應(yīng)鏈在制造業(yè)中的綠色產(chǎn)品市場(chǎng)推廣團(tuán)隊(duì)協(xié)作能力培養(yǎng)策略研究報(bào)告
- 河北單招全套試題及答案
- 教育直播平臺(tái)2025年運(yùn)營(yíng)挑戰(zhàn)與教育資源共享策略研究報(bào)告
- 農(nóng)業(yè)灌溉用水高效利用與現(xiàn)代農(nóng)業(yè)節(jié)水技術(shù)政策研究報(bào)告
- 量子通信技術(shù)在工業(yè)互聯(lián)網(wǎng)平臺(tái)中的數(shù)據(jù)加密與隱私保護(hù)預(yù)研報(bào)告
- 廣東ps考證試題及答案解析
- 節(jié)水灌溉技術(shù)在農(nóng)業(yè)中的應(yīng)用成果鑒定報(bào)告2025
- GB/T 17554.1-2006識(shí)別卡測(cè)試方法第1部分:一般特性測(cè)試
- GB/T 1401-1998化學(xué)試劑乙二胺四乙酸二鈉
- 中小企業(yè)服務(wù)中心企業(yè)走訪工作表格企業(yè)服務(wù)信息登記表
- 中歐班列簡(jiǎn)介(英文版)
- 交通駕駛員安全培訓(xùn)課件
- 成語(yǔ)使用課件
- 2023年版勞動(dòng)實(shí)踐河北科學(xué)技術(shù)出版社一年級(jí)下冊(cè)全冊(cè)教案
- 人教版三年級(jí)科學(xué)(下)第二單元綜合測(cè)試卷種鳳仙花(二)含答案
- 小兒手足口病課件
- 發(fā)展少數(shù)民族醫(yī)藥實(shí)施方案
- 五年級(jí)下冊(cè)熱帶雨林探險(xiǎn)之旅(優(yōu)秀5篇)
評(píng)論
0/150
提交評(píng)論