贪吃蛇程序设计报告.docx
- 文档编号:7248025
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:11
- 大小:62.09KB
贪吃蛇程序设计报告.docx
《贪吃蛇程序设计报告.docx》由会员分享,可在线阅读,更多相关《贪吃蛇程序设计报告.docx(11页珍藏版)》请在冰豆网上搜索。
贪吃蛇程序设计报告
学号
10210411108
武汉理工大学华夏学院
课程设计
课程名称C语言课程设计
题目贪吃蛇游戏的设计
专业_计算机科学与技术________________
班级__计算机1班_______________
姓名______程浩___________
成绩_________________
指导教师__黄启荃_______________
2012年2月13日至2012年2月17日
课程设计任务书
学生姓名:
程浩专业班级:
计算机1班
指导教师:
黄启荃工作单位:
计算机室
设计题目:
贪吃蛇游戏的设计
要求完成的主要任务:
1.任务描述
贪吃蛇游戏是一个经典小游戏,本设计分为3个等级。
一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时等级为1计1分,等级为2计2分,等级为3计3分。
接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体,游戏结束。
2.本课程涉及的知识点
变量的定义、输入和输出函数、图形函数、产生随机数函数、if语句、循环语句、转义字符的使用等等。
3.要求完成的任务
完成整个规定任务的设计及调试,且一定要画出程序流程图,最后得出正确结果,并经教师检查及答辩;
写出规范的课程设计说明书;
课程设计结束后交设计说明书等文档和设计内容:
从2月14日起,学生每天至少要到设计教室半天以上;
设计报告撰写格式要求:
设计报告的主要内容是详细写出在设计过程中所用到的主要技术或方法;
课程设计报告按国际通用格式书写,具体格式要求请见资料:
“课程设计说明书的书写内容与格式”
时间安排:
第一天:
学生先在实验室集中,由指导教师介绍课程设计的目的、布置任务后选题;
第二天-第四天:
学生在实验室完成设计,经教师检查并回答提问,确认设计完成;
第五天:
教师在计算机上先检查设计报告、学生修改后打印提交
指导教师签字:
2012年2月13日
系主任签字:
2012年2月13日
一、课程设计任务
贪吃蛇小游戏程序设计
二、设计过程
目的“通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。
(1).收集资料,分析课题,分解问题,形成总体设计思路;
(2).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;
(3).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;
(4).完成课程设计报告,并进行答辩
三、自己分析
3.1、程序功能
一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。
3.2、设计思想
程序关键在于表示蛇的图形及蛇的移动。
用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。
移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。
食物的出现与消失也是画矩形块和覆盖矩形块。
为了便于理解,定义两个结构体:
食物与蛇。
3.3,流程图
3.4,程序
#defineN200
#include
#include
#include
#defineLEFT0x4b00
#defineRIGHT0x4d00
#defineDOWN0x5000
#defineUP0x4800
#defineESC0x011b
inti,key;
intscore=0;
intgamespeed=50000;
structFood
{
intx;
inty;
intyes;
}food;
structSnake
{
intx[N];
inty[N];
intnode;
intdirection;
intlife;
}snake;
voidInit(void);/
voidClose(void);
voidDrawK(void);
voidGameOver(void);
voidGamePlay(void);
voidPrScore(void);
voidmain(void)
{
Init();
DrawK();
GamePlay();
Close();
}
voidInit(void)
{
intgd=DETECT,gm;
registerbgidriver(EGAVGA_driver);
initgraph(&gd,&gm,"c:
\\programfiles\\winyes\\tc20h\\bgi");
cleardevice();
}
voidDrawK(void)
{
/*setbkcolor(LIGHTGREEN);*/
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
for(i=50;i<=600;i+=10)
{
rectangle(i,40,i+10,49);
rectangle(i,451,i+10,460);
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10);
rectangle(601,i,610,i+10);
}
}
voidGamePlay(void)
{
randomize();
food.yes=1;/*
snake.life=0;
snake.direction=1;
snake.x[0]=100;snake.y[0]=100;
snake.x[1]=110;snake.y[1]=100;
snake.node=2;
PrScore();
while
(1)
{
while(!
kbhit())
{
if(food.yes==1)
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!
=0)
food.x++;
while(food.y%10!
=0)
food.y++;
food.yes=0;
}
if(food.yes==0)
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
}
for(i=snake.node-1;i>0;i--){
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
switch(snake.direction)
{
case1:
snake.x[0]+=10;break;
case2:
snake.x[0]-=10;break;
case3:
snake.y[0]-=10;break;
case4:
snake.y[0]+=10;break;
}
for(i=3;i if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) { GameOver(); snake.life=1; break; } } if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55|| snake.y[0]>455) { GameOver(); snake.life=1; } if(snake.life==1)break; if(snake.x[0]==food.x&&snake.y[0]==food.y) { setcolor(0);rectangle(food.x,food.y,food.x+10,food.y-10); snake.x[snake.node]=-20;snake.y[snake.node]=-20; snake.node++;food.yes=1;score+=10; PrScore();} setcolor(4); for(i=0;i rectangle(snake.x[i],snake.y[i],snake.x[i]+10, snake.y[i]-10); delay(gamespeed); setcolor(0);rectangle(snake.x[snake.node-1],snake.y[snake.node-1], snake.x[snake.node-1]+10,snake.y[snake.node-1]-10); }/*endwhile(! kbhit)*/ if(snake.life==1) break; key=bioskey(0); if(key==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)*/ } voidGameOver(void) { cleardevice(); PrScore(); setcolor(RED); settextstyle(0,0,4); outtextxy(200,200,"GAMEOVER"); getch(); } voidPrScore(void) { charstr[10]; setfillstyle(SOLID_FILL,YELLOW); bar(50,15,220,35); setcolor(6); settextstyle(0,0,2); sprintf(str,"score: %d",score); outtextxy(55,20,str); } voidClose(void) { getch(); closegraph(); } 第3章课程设计总结 开学了,我又来到华夏学院,又坐在与去年同一个地方,又是做报告。 过了这一个月,我发现我的这门课学得真的学的不咋的。 这次课程设计我选的是一个小游戏,可当我拿到这个题时我发现横多我不懂的,这个程序需要用到图形函数,可我没学过,我查了资料才知道点,我又在上早自习时复习了下C语言。 我做的是做贪吃蛇游戏。 对我一个初学者来说是一个很大的困难。 第二天上午在机房做了一个下午却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。 可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。 特别是结构体,指针的部分,几乎是一片空白。 不过经过几天的努力,大体上把课本上的知识点看了一遍,知识点也都基本是撑握了,所以一下一步就是开始正式的编程序了。 不过毕竟是个新手,还是不知如何下手,于是就在网上下了一篇类似的程序,经过仔细的研究,终于读懂了C语言编程的基本过程和方法。 我不太喜欢编程,但是出于完成作业,得到学分的压力,还必须强破自己坚持下去,经过几天的努力,终于把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很高兴的。 无论如何是自己的劳动成果,是自己经过努力得到的成绩。 这次编成后,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行视实践操作。 同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,……我现在才知道上课的重要性。 在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的道理。 学习就要认真。 认真才能成功。 设计过程中现场提问(或答辩)记载: 指导教师评语: 成绩评定等级: 指导教师(签名): 2012年2月17日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪吃 程序设计 报告