贪吃蛇游戏开发文档(最终).doc_第1页
贪吃蛇游戏开发文档(最终).doc_第2页
贪吃蛇游戏开发文档(最终).doc_第3页
贪吃蛇游戏开发文档(最终).doc_第4页
贪吃蛇游戏开发文档(最终).doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

贪吃蛇游戏开发文档本文档为稻草人于暑假开发C语言版本之链表学习的贪吃蛇游戏文档!一:游戏分为两个大模块:一:界面开发(UI):1:菜单界面;2:游戏界面;3:积分板块;二:游戏开发:1:界面的控制;2 : 成长的规则;(1300升中级,2500升高级)3:碰撞检测/本游戏采用全局使用键盘控制,以及使用了多线程,所以使用了WINDOWS API函数,/运行系统:Windos/7/8/10/XP二:本项目所用到的头文件:1:库头文件:#include#include#include#include2:自写头文件:#includetools.h#includeSnake.h三:头文件介绍:Snake.h头文件为:游戏的核心文件,里面包含了游戏界面的绘制函数,游戏的成长机制,游戏的碰撞检测等。Snake.h;typedef struct Snakedint x;int y;/蛇身体的坐标char Content3;Snaked *pNext;/指向下一个结构体Snaked *pHead;/指向上一个结构体Snakedd;/定义蛇身体的结构体void GameWord(void);/绘制游戏界面void ConsoleControl(void);/控制台显示格式控制void MenuControl(void);/菜单控制中心Snakedd *ProduceSnake(int iCnt); /产生蛇的身体,iCnt代表的是蛇的身体有几节。void PrintList(Snakedd *pHead);/打印出链表(蛇身)void DeleteList(Snakedd *pHead);/销毁链表void RandomCoordinate();/产生一个随机坐标,并且打印出食物/多线程函数:DWORD WINAPI MobileSnake(LPVOID lpChandle); /移动蛇(未实现)DWORD WINAPI KeyboardControl(LPVOID lpChandle);/键盘控制。DWORD WINAPI LostGameTime(LPVOID lpChandle);/已经用去的时间/后续函数占位:Tools.h头文件为:辅助头文件,它里面包含了对控制台的一些控制Tools.h:void HideCursor(bool Switch);/光标显示与隐藏函数;true;显示光标;false:隐藏光标void gotoxy(int x,int y);void Block(int x,int y,int Wide,int Hight);/绘制方框函数 x,y代表方框起始的左上角坐标;Wide:输出方框的长; Hight:输出方框的高int Menu(char* MenuTxt,int Lenght,int Wide,int Hight,int x,int y);/菜单选项绘制; MenuTxt:代表要绘制出的菜单选项; Lenght:代表选项的总项目数;x,y代表方框起始的左上角坐标;Wide:输出方框的长; Hight:输出方框的高;返回值;-1 代表左键 ;其他值代表右键四:函数的实现:Tools.h头文件:*第一次完成函数:*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;/光标的位置HANDLE hHand;/句柄变量hHand=GetStdHandle(STD_OUTPUT_HANDLE);/获取输出的句柄xy.X=x;xy.Y=y;SetConsoleCursorPosition(hHand,xy);/设置控制台光标的位置*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);/打印出菜单内容for(i=0;i);/箭头动态设置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函数END*Snake.h:/全局变量,用于控制蛇的方向int Coloum;/Y坐标的变量/方向控制: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;/难度等级/全局变量,用于控制蛇的方向char Name20=;/最高纪录的名字int iMark=0; /记录的成绩Snakedd *pSnake=NULL;/存储蛇的头节点地址Snakedd *pFooted = NULL;/消失的蛇身的节点int iFooted_x=0;int iFooted_y=0;/新增蛇体的位置CRITICAL_SECTION hade;/用于线程锁 /*第一次完成函数:*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); /游戏区域绘制 /printf(游戏开始!); 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);/当前游戏难度 gotoxy(52+x,y+10); printf(游戏难度:); gotoxy(52+x,y+11); printf( 高);/当前得分 gotoxy(52+x,y+15); printf(当前游戏得分:); gotoxy(52+x,y+16); printf( 7777);/当前时间 gotoxy(52+x,y+20); printf(已玩游戏时间:); CreateThread(NULL,0,LostGameTime,NULL,0,NULL); /提示 gotoxy(0,30); printf( t温馨提示:控制方向,空格暂停游戏和继续游戏!);*END*void MenuControl(void)*void MenuControl(void)int i=0;char *s4=开始游戏,游戏难度,更多游戏,退出游戏;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(该功能尚未开发!);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;/用于循环变量Snakedd *pResult = NULL;/头节点,同时作为函数的返回值Snakedd *pTemp = NULL;Snakedd *pFoot = NULL;/变量节点,用于存放中途产生的结构体地址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;/如果这是第一个结构体,把它赋值给头指针pFoot-pNext = pTemp;pTemp-pHead = pFoot;pFoot = pTemp;/把新生的结构体接上链表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);/时间种子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:新增两个功能:读取和存档功能:读取:游戏开始时会自动去读取本机游戏的最高分,并且显示出来存档:游戏结束时会自动用你的分和最高分进行比较如果高于最高分会要求你输入名字,并且存入文件。void WriteInformation()/存档功能if (iIntegral iMark)gotoxy(36, 15);printf(恭喜你!新纪录!);gotoxy(36, 16);printf(请输入你的名字:);gotoxy(38, 17);HideCursor(true);scanf(%s,Name);FILE *fWrite=NULL;if (fWrite = fopen(Grade.dat, wb)=NULL)gotoxy(36, 17);printf(文件读取错误!存档失败!);fprintf(fWrite, %

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论