




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录一功能描述二基本原理三、设计的具体实现(1)函数定义(2)主函数main( )(3)画界面函数DrawK( )(4)游戏具体过程函数GamePlay( )(5)游戏结束函数GameOver( )四、调试及解决方法五、测试结果六、设计心得体会七、参考文献八、源代码一功能描述基本功能:开始蛇向右方移动。按键盘上定义的上下左右键,蛇改变游动的方向,可以上下左右游动。蛇不能碰到图中的灰色栅栏,如碰到游戏结束。若蛇碰到图中一粒豆子,则豆子被蛇吃掉,图中的豆子消失,蛇身变长。最终所有的豆子都被吃掉,游戏结束。增强要求:(1) 必须改进游戏的界面,增加显示相关的统计信息。左边的显示区保持不变,右边动态显示积分和总时间统计信息,其中积分栏目显示当前已经吃下的豆子数目,总时间显示本局游戏从开始到现在经过的时间。(2) 优化主程序,注意CPU和内存的使用效率。(3) 考虑一个合理的得分算法,得分值应该取决于吃下去的豆子和游戏持续的时间。(4) 得分可以在发光二极管上显示出来。二基本原理游戏开始后进入游戏界面.首先初始化蛇的坐标,食物的坐标.线程基本流程:判断是否是暂停阶段,是否有有退出按键,游戏是否有结束,如果都没有就执行, 如果游戏结束了就重新游戏或者退出。开启键盘功能,实现通过方向键来控制蛇的移动方向; 开启数码管功能,实现蛇吃到食物后能够更新和显示分数; 利用变量,实现吃了6个食物后,游戏能够结束,并能通过增加蛇的移动速度来增加游戏的难度。三、设计的具体实现(1)函数定义 函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用#define N 200#define M 200#includegraphics.h#include#include#include#include#include#include#include #define LEFT 97/A#define RIGHT 100/D#define DOWN 115/S#define UP 119/W#define Esc 0x011bint i,key;int score=0;int gamespeed=250;/游戏速度可根据实际情况自行调整struct Foodint x;/食物的横坐标int y;/食物的纵坐标int yes;/判断是否要出现食物的变量food;/食物的结构体struct Snakeint xM;int yM;int node;/蛇的节数int direction;/蛇的移动方向int life;/蛇的生命,0表示活着,1表示死亡snake;void Init();/图形驱动void Close();/图形结束void DrawK();/开始画面void GamePlay();/玩游戏的具体过程void GameOver();/游戏结束void PrScore();/输出成绩(2)主函数main( )主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数GamePlay(),即玩游戏的具体过程,游戏结束后调用Close()关闭图形系统,结束程序void main()/主函数 Init();/图形驱动DrawK();/开始画面GamePlay();/玩游戏的具体过程Close();/图形结束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);/设置线型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表示上下左右四个方向,通过这个判断来移动蛇头case 1:snake.x0+=10;break;case 2:snake.x0-=10;break;case 3:snake.y0-=10;break;case 4:snake.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=food.y)/吃到食物以后setcolor(0);/把画面上的食物去掉rectangle(food.x,food.y,food.x+10,food.y-10);snake.xsnake.node=-20;snake.ysnake.node=-20;/新的一节先放在看不见得位置,下次循环就取前一节的位置snake.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);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.direction!=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();PrScore();setcolor(RED);outtextxy(100,100,我会回来的!);getch();void PrScore()/输出成绩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();四、调试及解决方法可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。五、测试结果六、设计心得体会在设计这个程序中我主要学会了如何运用以下有关C语言和C+的知识1) 函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序 十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增加了程序的可读性。2) 分析函数先从main()函数入手。Main()函数是C+源程序编译时的开始, 从main()函数开始读函数可将其他函数的功能理解得更透彻。3) 在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出 来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。4) 我还了解了很多的库函数的作用,如字符串函数中有很多对字符串进行 处理的函数,起功能我都有所了解。5)学会了有关头文件的使用方法,及系统调配问题的解决方法等。 6)了解到了注释的重要性。七、参考文献:谭浩强,C+程序设计 清华大学出版社郭翠英,C语言课程设计案例精编,中国水利水电出版社,2004.3李丽娟,C语言程序设计教程 人民邮电出版社林华聪,C语言程序设计思想与实践 冶金工业出版社八、源代码#define M 200#includegraphics.h#include#include#include#include#include#include#include #define LEFT 97/A#define RIGHT 100/D#define DOWN 115/S#define UP 119/W#define Esc 0x011bint i,key;int score=0;int gamespeed=250;/游戏速度可根据实际情况自行调整struct Foodint x;/食物的横坐标int y;/食物的纵坐标int yes;/判断是否要出现食物的变量food;/食物的结构体struct Snakeint xM;int yM;int node;/蛇的节数int direction;/蛇的移动方向int life;/蛇的生命,0表示活着,1表示死亡snake;void Init();/图形驱动void Close();/图形结束void DrawK();/开始画面void GamePlay();/玩游戏的具体过程void GameOver();/游戏结束void PrScore();/输出成绩void main()/主函数 Init();/图形驱动DrawK();/开始画面GamePlay();/玩游戏的具体过程Close();/图形结束void Init()/图形驱动int gd=DETECT,gm;initgraph(&gd,&gm, );/*此处为turboc的路径,读者可以根据自己的电脑而改*/cleardevice();void DrawK()/开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙setbkcolor(GREEN);setcolor(LIGHTRED);setlinestyle(0,0,5);/设置线型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表示上下左右四个方向,通过这个判断来移动蛇头case 1:snake.x0+=10;break;case 2:snake.x0-=10;break;case 3:snake.y0-=10;break;case 4:snake.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=food.y)/吃到食物以后setcolor(0);/把画面上的食物去掉rectangle(food.x,food.y,food.x+10,food.y-10);snake.xsnake.node=-20;snake.ysnake.node=-20;/新的一节先放在看不见得位置,下次循环就取前一节的位置snake.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);Sleep(gamespeed);setcolor(0);/用黑色去除蛇的最后一节rectangle(snake.xsnake.node-1,snake.ysnak
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工厂车间干燥管理制度
- 墙面防撞处理方案(3篇)
- 小区勘测现场管理制度
- 彩绘门头改造方案(3篇)
- 肇事赔偿方案(3篇)
- 建筑施工防暑演练方案(3篇)
- 地质雷达监测方案(3篇)
- 水系围栏维修方案(3篇)
- 厂房楼层规划方案(3篇)
- 工程计划方案(3篇)
- 2025年“国资赣将”赣州旅游投资集团第一批社会公开招聘【46人】笔试参考题库附带答案详解析
- 给饭店供货协议书
- 修理厂清洁合同协议书
- 2025年河北省启光二模语文
- 2025-2030沉香木行业市场深度调研及前景趋势与投资研究报告
- 安徽省黄山市区县2025届七年级生物第二学期期末联考试题含解析
- 2025国开电大《管理英语1》综合测试形考任务答案
- 2024年湖南省高考生物试卷真题(含答案解析)
- 2024年江苏盐城燕舞集团有限公司招聘笔试参考题库含答案解析
- SPC整理培训资料课件
- 河北工业大学C++终极题库
评论
0/150
提交评论