ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:21.30KB ,
资源ID:4521040      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4521040.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(贪吃蛇游戏程序设计一课程设.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

贪吃蛇游戏程序设计一课程设.docx

1、贪吃蛇游戏程序设计一课程设贪吃蛇游戏程序设计_一、课程设.txt同志们:别炒股,风险太大了,还是做豆腐最安全!做硬了是豆腐干,做稀了是豆腐脑,做薄了是豆腐皮,做没了是豆浆,放臭了是臭豆腐!稳赚不亏呀!贪吃蛇游戏程序设计一、课程设计任务 贪吃蛇小游戏程序设计二、设计要求通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。(1)收集资料,分析课题,分解问题,形成总体设计思路;(2)对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;(3)上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;

2、(4)完成课程设计报告,并进行答辩三、需求分析3.1、程序功能 贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。3.2、设计思想程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身

3、体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。3.3、流程图开始 初始化界面和蛇身 放置食物 蛇开始运动 蛇吃到食? 蛇长大 蛇死亡? 继续? 退出界面 N N Y N Y 游戏者按键选择 Y 四、设计的具体实现(1)函数定义 函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用#define N 200#define M 20

4、0#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 Food int x;/食物的横坐标 int y;/食物的纵坐标 int yes;/判断是否要出现食物的变量food;/食物的结构体struct

5、Snake int 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(),

6、即玩游戏的具体过程,游戏结束后调用Close()关闭图形系统,结束程序void main()/主函数 Init();/图形驱动DrawK();/开始画面GamePlay();/玩游戏的具体过程Close();/图形结束void Init()/图形驱动int gd=DETECT,gm;initgraph(&gd,&gm, );/*此处为turboc的路径,读者可以根据自己的电脑而改*/cleardevice();(3) 画界面函数DrawK( ) 主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。void DrawK()/

7、开始画面,左上角坐标为(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表

8、示上下左右四个方向,通过这个判断来移动蛇头 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)/

9、蛇是否撞到墙壁 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+;/蛇的身体长一节 f

10、ood.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)/如果蛇

11、死就跳出循环 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)游

12、戏结束函数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()/图形

13、结束 getch(); closegraph();五、调试及解决方法可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。六、测试结果 七、设计心得体会在设计这个程序中我主要学会了如何运用以下有关C语言和C+的知识1) 函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序 十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增加了程序的可读性。2) 分析函数先从main()函数入手。Main()函数是C+源程序编译时的开始, 从main()函数开始读函数可将其他函

14、数的功能理解得更透彻。3) 在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出 来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。4) 我还了解了很多的库函数的作用,如字符串函数中有很多对字符串进行 处理的函数,起功能我都有所了解。5)学会了有关头文件的使用方法,及系统调配问题的解决方法等。 6)了解到了注释的重要性。八、附录1、参考文献:谭浩强,C+程序设计 清华大学出版社郭翠英,C语言课程设计案例精编,中国水利水电出版社,2004.3李丽娟,C语言程序设计教程 人民邮电出版社林华聪,C语言程序设计思想与实践 冶金工业出版社2、源代码#define M 20

15、0#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 Food int x;/食物的横坐标 int y;/食物的纵坐标 int yes;/判断是否要出现食物的变量food;/食物的结构体struct

16、Snake int 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()/图

17、形驱动 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;

18、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(sn

19、ake.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

20、-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.x

21、snake.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.dire

22、ction!=1) snake.direction=2; else if(key=DOWN&snake.direction!=3) snake.direction=4; /endwhile(1)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();_

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1