首页 > 试题

海南大学怎么样

更新时间:2023-01-28 17:45:38 阅读: 评论:0

理科班女生感受-你是我眼中的苹果


2023年1月28日发(作者:grass的复数)

C语言贪吃蛇游戏

课程设计报告

姓名:***

学号:**********

专业:计算机科学与技术

指导教师:***

海南大学三亚学院

2011-8-1

贪吃蛇游戏《课程设计报告》

海南大学三亚学院,2011

Page2of13

目录

【摘要】...............................................................................................................................................3

第1章游戏概述..................................................................................................................................4

1.1实现的目标................................................................................................................................4

1.2实现的方案................................................................................................................................4

1.3实现的环境................................................................................................................................4

1.4具体的开发方法...............................................................4

第2章游戏设计..................................................................................................................................5

2.1功能的设计................................................................................................................................5

2.2数据的设计................................................................................................................................5

2.3界面的设计................................................................................................................................7

第3章游戏实现..................................................................................................................................8

参考文献..........................................................................................................................................13

贪吃蛇游戏《课程设计报告》

海南大学三亚学院,2011

Page3of13

【摘要】

【C语言游戏贪吃蛇】

本次课程设计的任务是设计有关贪吃蛇游戏的程序,通过这次游戏程序的设计,巩固和加

深对C语言课程的基本知识的理解和掌握,简单掌握了C语言编程和程序调试的基本技能,使

我能够利用C语言进行基本的软件设计,能够利用所学的基本知识和技能,解决简单的程序设计

问题,进而掌握书写程序设计说明文档的能力。

刚开始看到题目,可以说是一头雾水,根本无法下手,尤其对于我这样一个新手,更加困

难重重。为此,我上网查阅了很多资料,逐渐理清丝路,程序的关键点在于表示蛇的图形及蛇

的移动,因此我想到可以用一个小矩形块表示蛇的一节身体,身体每长一节,增加一个矩形块,

再定义两个结构体:食物和蛇。具体实现过程可以说是非常艰难,无数次按照程序运行的错误

提示,对原程序进行修改,在调试过程中有时也会遇到不懂的问题,只能上网查阅一些资料,

一一修改,直到运行成功。

通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,

要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上

还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还

有对函数调用的正确使用不够熟悉,对C语言中经常出现的错误也不了解,通过实践的学习,

我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计

算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地

学好计算机。在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,

懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上

的不良情绪。

贪吃蛇游戏《课程设计报告》

海南大学三亚学院,2011

Page4of13

第1章游戏概述

1.1实现的目标

设计一个贪吃蛇游戏程序。游戏时,一条蛇在密闭的围墙内,围墙内会随机出

现一个食物通过键盘上的awsd键控制蛇向上下左右4个方向移动,蛇头接到食

物,则表示食物被蛇吃掉,这时蛇的身体加长一节,同时计10分。接着又出现食物

等待被蛇吃掉。如果蛇在移动过程中,撞到墙壁或身体交叉(蛇头撞到自己的身体),

则游戏结束。

1.2实现的方案

这个程序的关键点在于表示蛇的图形及蛇的移动。用一个小矩形块表示蛇的一

节身体,身体每长一节,增加一个矩形块。移动时必须从蛇头开始,所以蛇不能向

相反的方向移动,也就是蛇尾不能改作蛇头。如果不按任意键,蛇自行在当前方向

上前移,但按下有效方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所

以当按下有效方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实

现是从蛇头新位置开始画出蛇,这时,由于没有清屏的原因,原来的蛇的位置和新

蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆

盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义了两个结

构体:食物和蛇。

1.3实现的环境

(1)操作系统:Windows7

(2)应用软件:MicrosoftVisualC++6.0

1.4具体的开发方法

(1)通过随机函数产生随机数,控制游戏过程食物的出现;

(2)定义键盘操作,控制游戏过程蛇的移动方向;

(3)画出边界,并判断游戏是否结束;

(4)统计游戏过程蛇吃的食物数量,计算并输出游戏成绩。

贪吃蛇游戏《课程设计报告》

海南大学三亚学院,2011

Page5of13

第2章游戏设计

2.1功能的设计

开始

初始化界面和蛇身

放置食物

蛇开始运动

蛇吃到食物?

蛇变长

蛇死亡?

继续?

退出界面

N

N

Y

N

Y

游戏者按键选择

Y

贪吃蛇游戏《课程设计报告》

海南大学三亚学院,2011

Page6of13

()主函数

主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,

然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数GamePlay(),即

玩游戏的具体过程,游戏结束后调用Clo()关闭图形系统,结束程序。

2.画界面函数DrawK()

主界面就是一个密封的围墙,用两个循环语句分别在水平方向和垂直方向输出

连续的宽度和高度均为10个单位的矩形小方块,围成密闭图形,表示围墙,为了醒

目,设置为淡青颜色,用函数tlinestyle(SOLID_LINE,0,THICK_WIDTH)设置线型

宽度为3个像素。设置3个像素的围墙线,蛇在贴墙走的时候,会擦掉部分围墙线,

使线变细图形变得不好看,如果不想这种情况出现,则将线型宽度设置为1个像素。

3.游戏具体过程函数GamePlay()

这个函数是游戏的主要部分,难点在表示蛇的新位置并消除前一次的图形。采

用的方法是每次移动的时候从最后一节开始到倒数第二节(因蛇头为两节),将前一

节的坐标赋值给后一节的坐标,移动后只要把最后一节用背景色去除即可,因为新

位置0到n-1节还是要出现在画面上的。然后蛇头按照方向键来更改位置。

另外,食物的随机出现要确保它的位置在10的倍数位置上,因为蛇的坐标都是

以10为模的,这样的话就可以让蛇吃到,蛇吃到食物的判断是蛇头的坐标和食物的

坐标相等。

其算法过程为:

(1)设置初始值。为防止食物出现在一个位置上,要设置随机数发生器,真正

产生随机数。初始时,蛇只有蛇头,设定一个开始的方向。

(2)循环执行直到按Esc键退出

1)没有按键的情况下,循环执行。

如果没有食物,随机出现食物;如果有食物,则显示食物蛇移动身体根据蛇的

方向改变坐标值,并判断蛇是否撞到了墙或自己吃了自己,如果出现这两种情况之

一,则蛇死调用游戏结束函数GameOver(),结束本次游戏,重新开始。

如果蛇吃到了食物,蛇身体长一节,数组元素增加一个,身体节数,分数都进

行相应的改变。

在新位置画出蛇。

2)如果有按键,则识别键值。如果按键为Esc键则结束游戏,程序运行结束;

如果所按键为方向键,则根据该键改变代表蛇方向的变量direction的值,要考虑

相反方向键无效。

4.游戏结束函数GameOver()

游戏结束,清除屏幕,输出分数,显示游戏结束信息。

e()输出分数

在指定位置利用sprintf()将整数转换为字符串,用outtextxy()输出,bar()

函数的应用是为了覆盖原来的值。

()图形结束

在显示游戏结束信息的画面时,按任意键关闭图形系统,程序结束。

贪吃蛇游戏《课程设计报告》

海南大学三亚学院,2011

Page7of13

2.2数据的设计

表示食物和蛇的矩形块都设计为10*10个像素单位,食物的基本数据域为它所出

现的位置,用x和y坐标表示,则矩形块用函数rectangle(x,y,x+10,y+10)或

rectangle(x,y,x+10,y-10)可以画出。由于每次只出现一个食物,而食物被吃掉后,

才出现下一个食物,所以设定yes表示是否要出现食物的变量。蛇的一节身体为一个

矩形块,这样表示每个矩形块只需起点坐标x和y。身体是不断增长的,所以用数组

存放每一节的坐标,最大设定为N=200,node表示当前节数。另外还需要保存蛇移动

方向的变量direction和表示生命的变量life,一但life为1,则蛇死,游戏结束。

所以程序功能的实现就是数组的操作。

#defineN200

structFood

{

intx;//食物的横坐标inty;//食物的纵坐标

intyes;//判断是否要出现食物的变量

}food;//食物的结构体

structSnake

{

intx[N];inty[N];intnode;/*蛇的节数*/

intdirection;/*蛇移动方向*/intlife;/*蛇的生命,0活着,1死亡*/

}snake;

2.3界面的设计

程序运行时的游戏界面如图所示,边框表示围墙,红色矩形块代表蛇,绿色小

方块代表食物。

贪吃蛇游戏《课程设计报告》

海南大学三亚学院,2011

Page8of13

第3章游戏实现

#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;/*蛇的生命,0活着,1死亡*/

}snake;

voidInit(void);/*图形驱动*/

voidClo(void);/*图形结束*/

voidDrawK(void);/*开始画面*/

voidGameOver(void);/*结束游戏*/

voidGamePlay(void);/*玩游戏具体过程*/

voidPrScore(void);/*输出成绩*/

/*主函数*/

voidmain(void)

{

Init();/*图形驱动*/

DrawK();/*开始画面*/

贪吃蛇游戏《课程设计报告》

海南大学三亚学院,2011

Page9of13

GamePlay();/*玩游戏具体过程*/

Clo();/*图形结束*/

}

/*图形驱动*/

voidInit(void)

{

intgd=DETECT,gm;

registerbgidriver(EGAVGA_driver);

initgraph(&gd,&gm,"c:programfileswinyestc20hbgi");

cleardevice();

}

/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/

voidDrawK(void)

{

/*tbkcolor(LIGHTGREEN);*/

tcolor(11);

tlinestyle(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();/*随机数发生器*/

=1;/*1表示需要出现新食物,0表示已经存在食物*/

=0;/*活着*/

ion=1;/*方向往右*/

snake.x[0]=100;snake.y[0]=100;/*蛇头*/

snake.x[1]=110;snake.y[1]=100;

=2;/*节数*/

PrScore();/*输出得分*/

while(1)/*可以重复玩游戏,压ESC键结束*/

贪吃蛇游戏《课程设计报告》

海南大学三亚学院,2011

Page10of13

{

while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/

{

if(==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++;

=0;/*画面上有食物了*/

}

if(==0)/*画面上有食物了就要显示*/

{

tcolor(GREEN);

rectangle(food.x,food.y,food.x+10,food.y-10);

}

for(i=-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇

的关键算法*/

{

snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1];

}

/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/

switch(ion)

{

ca1:snake.x[0]+=10;break;

ca2:snake.x[0]-=10;break;

ca3:snake.y[0]-=10;break;

ca4:snake.y[0]+=10;break;

}

for(i=3;i<;i++)/*从蛇的第四节开始判断是否撞到自己了,因为

蛇头为两节,第三节不可能拐过来*/

{

if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])

{

GameOver();/*显示失败*/

=1;

贪吃蛇游戏《课程设计报告》

海南大学三亚学院,2011

Page11of13

break;

}

}

if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||

snake.y[0]>455)/*蛇是否撞到墙壁*/

{

GameOver();/*本次游戏结束*/

=1;/*蛇死*/

}

if(==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/

break;

if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/

{

tcolor(0);/*把画面上的食物东西去掉*/

rectangle(food.x,food.y,food.x+10,food.y-10);

snake.x[]=-20;snake.y[]=-20;

/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/

++;/*蛇的身体长一节*/

=1;/*画面上需要出现新的食物*/

score+=10;

PrScore();/*输出新得分*/

}

tcolor(4);/*画出蛇*/

for(i=0;i<;i++)

rectangle(snake.x[i],snake.y[i],snake.x[i]+10,

snake.y[i]-10);

delay(gamespeed);

tcolor(0);/*用黑色去除蛇的的最后一节*/

rectangle(snake.x[-1],snake.y[-1],

snake.x[-1]+10,snake.y[-1]-10);

}/*endwhile(!kbhit)*/

if(==1)/*如果蛇死就跳出循环*/

break;

key=bioskey(0);/*接收按键*/

if(key==ESC)/*按ESC键退出*/

break;

el

if(key==UP&&ion!=4)

/*判断是否往相反的方向移动*/

ion=3;

贪吃蛇游戏《课程设计报告》

海南大学三亚学院,2011

Page12of13

el

if(key==RIGHT&&ion!=2)

ion=1;

el

if(key==LEFT&&ion!=1)

ion=2;

el

if(key==DOWN&&ion!=3)

ion=4;

}/*endwhile(1)*/

}

/*游戏结束*/

voidGameOver(void)

{

cleardevice();

PrScore();

tcolor(RED);

ttextstyle(0,0,4);

outtextxy(200,200,"GAMEOVER");

getch();

}

/*输出成绩*/

voidPrScore(void)

{

charstr[10];

tfillstyle(SOLID_FILL,YELLOW);

bar(50,15,220,35);

tcolor(6);

ttextstyle(0,0,2);

sprintf(str,"score:%d",score);

outtextxy(55,20,str);

}

/*图形结束*/

voidClo(void)

{

getch();

clograph();

}

贪吃蛇游戏《课程设计报告》

海南大学三亚学院,2011

Page13of13

参考文献

[1]谭浩强,C语言程序设计,北京清华大学出版社,1999.12

[2]杨开城,C语言教程实验与练习,北京人民邮电出版社,2002.8

[3]浦滨,C游戏编程从入门到精通,北京北京希望电子出版社,2002.5

[4]张翔,C语言函数大全,北京电子工业出版社,2002.4

[5]江汉秀,C语言实用程序荟萃,西安西安电子科技大学出版社,1993.2

本文发布于:2023-01-28 17:45:38,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/88/152731.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:除权判决
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图