贪吃蛇程序报告.docx

上传人:b****6 文档编号:6171977 上传时间:2023-01-04 格式:DOCX 页数:16 大小:518.76KB
下载 相关 举报
贪吃蛇程序报告.docx_第1页
第1页 / 共16页
贪吃蛇程序报告.docx_第2页
第2页 / 共16页
贪吃蛇程序报告.docx_第3页
第3页 / 共16页
贪吃蛇程序报告.docx_第4页
第4页 / 共16页
贪吃蛇程序报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

贪吃蛇程序报告.docx

《贪吃蛇程序报告.docx》由会员分享,可在线阅读,更多相关《贪吃蛇程序报告.docx(16页珍藏版)》请在冰豆网上搜索。

贪吃蛇程序报告.docx

贪吃蛇程序报告

学号

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).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;

三、自己分析

3.1、程序功能

一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。

3.2、设计思想

程序关键在于表示蛇的图形及蛇的移动。

用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。

移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。

食物的出现与消失也是画矩形块和覆盖矩形块。

为了便于理解,定义两个结构体:

食物与蛇。

3.3,流程图

4、程序流程图

4.1、图形驱动

 

4.2、开始画面

4.3、显示食物

 

4.4、蛇向前移动

 

4.5、判蛇死

 

4.6吃到食物后处理

4.6、判蛇反向移动

 

4.7、游戏结束

4.8、图形结束

 

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日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

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

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