




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.课 程 设 计 报 告 课程名称:面向对象程序设计C+ 设计题目: 贪吃蛇 专 业:计算机科学与技术 姓 名: 学 号: 指导教师:李 晓 虹 2015 年 12 月 25 日1、 系统需求分析贪吃蛇游戏是一款娱乐性很高的游戏,而且简单。可以放松精神而且风格多样,并且程序简单易懂。在语言的使用方面,大多数人喜欢用C语言来实现,该课程要求用C+来拿实现,所以我的目标是用C+来实现简单易学的贪吃蛇游戏。C+语言很好的结合了C语言的优势,C+是一门面向对象的编程语言,用C+来实现人机交互方便快捷。C+具有了其他语言所不具备的很多优势。比如:(1)C+是一门面向对象的语言,相对于C语言而言,C语言更
2、面向的是过程。C+的运行速度会比C语言更快,这也是为什么很多程序员选择用C+来开发游戏的原因。(2)C+语言的层次结构,逻辑结构明确,类的封装,继承和实现等都是面向对象的有力证明。2、 总体设计 2.1程序的运行(1)打开作业文件,后缀名为.cpp,并且运行该程序(2)程序运行后,将出现黑色面板和贪吃蛇活动区域,在游戏开始前会有对玩家相应的提示,例如提示玩家按任意键开始游戏,按指定键对贪吃蛇进行移动等。(3)按任意键开始后,用四个键来控制贪吃蛇的移动,并且在面板的右侧显示玩家的当前分数,如果碰到墙和与自己相交,游戏自动结束 (4)空格键暂停,o键加速,p键进行减速3、详细设计3.1开始界面设计
3、 图3-13.2游戏进行界面图3-23.3游戏结束显示界面图3-3总体上的游戏界面简洁明了,分为三个区域。贪吃蛇活动范围区域,玩家友情提示区域,和游戏状态显示区域。其中主要涵盖的思想:对象蛇和食物应该作为全局变量出现在程序里面,蛇的方向的操控和食物是否被吃等判断。其中涵盖的具体游戏的实现,准则是蛇撞到墙就算游戏失败,或者贪吃蛇与自身相交游戏失败。3.4、游戏的框架 流程图如下图所示,分为开始游戏,游戏进行和游戏终止,其中的玩家友情提示界面和游戏得分状态界面始终在整个游戏进程中,玩家开始游戏,进行游戏,游戏结束三个进程中,程序会给出不同的友情提示。得分状态和食物状态将随着游戏的进行的状态的不同而
4、不同。草图如下所示图3-44、系统调试#include<stdio.h>#include<process.h>#include<windows.h>#include<conio.h>#include<time.h>-à该include使用当前的时间作为种子#include<stdlib.h>以上为引入的文件。#define WIDTH 40-à定义宽度40#define HEIGH 12->定义高度12以上为定义的宽度和高度的变量。enum directionLEFT,/左RIGHT,/右UP,/
5、上DOWN/下;设置方向为枚举变量,并且定义贪吃蛇的移动方向为上下左右。struct Food/食物int x;int y;/*Node进行蛇身的绘制,通过变量x,和y来进行绘制*/struct Node/画蛇身int x;int y;struct Node *next;/next为下一个指针;/*接下来是对贪吃蛇的属性的描述包括贪吃蛇的长度和蛇所要前进的方向*/struct Snake/蛇属性int lenth;/长度enum direction dir;/方向;struct Food *food; /食物struct Snake *snake;/蛇属性struct Node *snode,
6、*tail;/蛇身int SPEECH=200;int score=0;/分数int smark=0;/吃食物标记int times=0;int STOP=0;void Initfood();/产生食物void Initsnake();/构造snakevoid Eatfood();/头部前进void Addnode(int x, int y);/增加蛇身void display(struct Node *shead);/显示蛇身坐标void move();/蛇移动void draw();/画蛇void Homepage();/主页void keybordhit();/监控键盘按键void Ad
7、dtail();/吃到食物/*接下来是对游戏中蛇所对应的光标的定位光标的显示应该是在蛇的左下方所以光标横坐标要在蛇本身横坐标的基础上-1纵坐标要在蛇本身的纵坐标基础上-1*/void gotoxy(int x, int y)/定位光标 COORD pos; pos.X = x - 1; pos.Y = y - 1; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); /*接下来是构造snake贪吃蛇*/void Initsnake()/构造snakeint i;snake=(struct Snake*)malloc(si
8、zeof(struct Snake);tail=(struct Node*)malloc(sizeof(struct Node);food = (struct Food*)malloc(sizeof(struct Food);snake->lenth=5;/初始长度 5snake->dir=RIGHT;/初始蛇头方向 右for(i=2;i<=snake->lenth+2;i+)/增加 5 个结点Addnode(i,2);/*对所产生的食物的定义然后以时间为种子产生随机数来分别获得食物横纵坐标x和y*/void Initfood()/产生食物struct Node *p=
9、snode;int mark=1;srand(unsigned)time(NULL);/以时间为种子产生随机数while(1)food->x=rand()%(WIDTH-2)+2;/食物X坐标food->y=rand()%(HEIGH-2)+2;/食物Y坐标while(p!=NULL)if(food->x=p->x)&&(food->y=p->y)/如果食物产生在蛇身上/则重新生成食物mark=0;/食物生成无效break;p=p->next;if(mark=1)/如果食物不在蛇身上,生成食物,否则重新生成食物gotoxy(food-&
10、gt;x,food->y);printf("%c",3);/打印输出break;mark=1;p=snode;/*接下来是对贪吃蛇移动效果的定义*/void move()/移动struct Node *q, *p=snode;if(snake->dir=RIGHT)/如果贪吃蛇向上移动,则相应的横坐标增加Addnode(p->x+1,p->y);if(smark=0)while(p->next!=NULL)/若下一次移动不为空q=p;p=p->next;q->next=NULL;free(p);if(snake->dir=LE
11、FT)/如果贪吃蛇向左移动,则相应的横坐标减去1Addnode(p->x-1,p->y);if(smark=0)while(p->next!=NULL)/若下一次移动不为空q=p;p=p->next;q->next=NULL;free(p);if(snake->dir=UP)/如果贪吃蛇向上移动则相应的纵坐标减去一Addnode(p->x,p->y-1);if(smark=0)while(p->next!=NULL)/若下一次移动不为空q=p;p=p->next;q->next=NULL;free(p);if(snake->
12、;dir=DOWN)/如果贪吃蛇向下移动则相应的纵坐标增加1Addnode(p->x,p->y+1);if(smark=0)while(p->next!=NULL)/若下一次移动不为空q=p;p=p->next;q->next=NULL;free(p);void Addnode(int x, int y)/增加蛇身struct Node *newnode=(struct Node *)malloc(sizeof(struct Node);struct Node *p=snode;newnode->next=snode;newnode->x=x;newn
13、ode->y=y;snode=newnode;/结点加到蛇头if(x<2|x>=WIDTH|y<2|y>=HEIGH)/碰到边界STOP=1;gotoxy(10,19);printf("撞墙,游戏结束,任意键退出!n");/失败_getch();free(snode);/释放内存free(snake);exit(0);while(p!=NULL)/碰到自身if(p->next!=NULL)if(p->x=x)&&(p->y=y)STOP=1;gotoxy(10,19);printf("撞到自身,游戏结
14、束,任意键退出!n");/失败_getch();free(snode);/释放内存free(snake);exit(0);p=p->next;void Eatfood()/吃到食物Addtail();score+;void Addtail()/增加蛇尾struct Node *newnode=(struct Node *)malloc(sizeof(struct Node);struct Node *p=snode;tail->next=newnode;newnode->x=50;newnode->y=20;newnode->next=NULL;/结点加
15、到蛇头tail=newnode;/新的蛇尾void draw()/画蛇struct Node *p=snode;int i,j;while(p!=NULL)gotoxy(p->x,p->y);printf("%c",2);tail=p;p=p->next;if(snode->x=food->x&&snode->y=food->y)/蛇头坐标等于食物坐标smark=1;Eatfood();/增加结点Initfood();/产生食物if(smark=0)gotoxy(tail->x,tail->y);/没吃到
16、食物清除之前的尾结点printf("%c",' ');/如果吃到食物,不清楚尾结点elsetimes=1;if(smark=1)&&(times=1)gotoxy(tail->x,tail->y);/没吃到食物清除之前的尾结点printf("%c",' ');/如果吃到食物,不清楚尾结点smark=0;/*接下来是对游戏得分的描述*/gotoxy(50,12);printf("食物: %d,%d",food->x,food->y);gotoxy(50,5);pri
17、ntf("分数: %d",score);gotoxy(50,7);printf("速度: %d",SPEECH);gotoxy(15,14);printf("按o键加速");/输出o键加速提示gotoxy(15,15);printf("按p键减速");/输出p键减速提示gotoxy(15,16);printf("按空格键暂停");/输出空格暂停提示void HideCursor()/隐藏光标 CONSOLE_CURSOR_INFO cursor_info = 1, 0; SetConsoleCu
18、rsorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);void Homepage()/绘主页int x,y;HideCursor();/隐藏光标printf("-n");printf("|tttt |n");printf("|tttt |n");printf("|tttt |n");printf("|tttt |n");printf("|tttt |n");printf("|tttt |n"
19、);printf("|tttt |n");printf("|tttt |n");printf("|tttt |n");printf("|tttt |n");printf("-n");gotoxy(5,13);printf("任意键开始游戏!按W.A.S.D控制方向");_getch();Initsnake();Initfood();gotoxy(5,13);printf(" ");/*接下来是对玩家通过操控键盘来控制贪吃蛇移动的指定*/void keybo
20、rdhit()/监控键盘char ch;if(_kbhit()ch=getch();switch(ch)case 'W':/如果按键wcase 'w':if(snake->dir=DOWN)/如果本来方向是下,而按相反方向无效 break;elsesnake->dir=UP;break;case 'A':/如果按键A则反方向无效case 'a':if(snake->dir=RIGHT)/如果本来方向是右,而按相反方向无效 break;elsesnake->dir=LEFT;break;case 'S
21、':/如果按键S则反方向无效case 's':if(snake->dir=UP)/如果本来方向是上,而按相反方向无效 break;elsesnake->dir=DOWN;break;case 'D':/如果按键D则反方向无效case 'd':if(snake->dir=LEFT)/如果本来方向是左,而按相反方向无效 break;elsesnake->dir=RIGHT;break;case 'O':case 'o':/按键O加速贪吃蛇的移动if(SPEECH>=150)/速度加快SPEECH=SPEECH-50;break;case 'P':/按键P减速贪吃蛇的移动case 'p':if(SPEECH<=400)/速度减慢SPEECH=SPEECH+50;brea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年规范个人贷款协议模板
- 跨行业合作中的风险识别与管控
- 高效施工技术在现代人防工程中的应用
- 事业单位房屋环境优化与舒适性提升方案
- 智能化技术在事业单位房屋管理中的应用
- 2025年公务员考试行测言语理解排序题卷:经典题型解析与训练
- 提升牦牛养殖水平的面临的问题、机遇与挑战
- 智能诊断技术的发展趋势与未来展望
- 老旧市政供水管网更新改造项目要素保障分析
- 家校共育的背景意义及必要性
- -高考体育单招真题现代文专项阅读汇编(含答案)-备战2023届高考体育单招语文一轮复习之现代文阅读复习之一
- GB/T 3733.1-1983卡套式端直通管接头
- GB/T 21709.8-2008针灸技术操作规范第8部分:皮内针
- GB/T 1689-1998硫化橡胶耐磨性能的测定(用阿克隆磨耗机)
- GB/T 16823.3-2010紧固件扭矩-夹紧力试验
- GA/T 954-2011法庭科学工具痕迹中凹陷痕迹的检验规范
- 第六章恶意代码分析与防范培训课件
- 净化工程施工组织设计方案方案
- CNAS实验室评审不符合项整改报告
- 入网安评基线核查常用检查项
- 静脉输液操作流程及评分标准
评论
0/150
提交评论