贪吃蛇论文(5)

2019-03-11 13:47

南京工程学院毕业设计说明书(论文)

ptemp->next = head; ptemp->pre = NULL; head = ptemp;

if (eat = Eated(head, fd))

{

CreatFood(fd,head);

score += grade; /*吃到了,就加分*/ scorelimit += grade;

if (scorelimit / 50 && grade <= 10) /*这个用来增加等级。*/

{ /*每过一次50分,等级

增加一次,10级是上限 */

GotoRood(START_X, START_Y - 1); printf(\ scorelimit = score % 50; }

GotoRood(START_X + 10, START_Y - 1);

printf(\ }

if (GameOver(head)) /*游戏是否结束....*/ {

BuildSnk(head); /*留下最后的英姿。。。吃货该死..*/ GotoRood(START_X + SCREEN_WIDTH / 2, START_Y + SCREEN_LENGTH

/ 2);

puts(\小菜鸟,你输了\\n\ return; }

CollisionTest(head); /*碰撞测试*/ BuildSnk(head);

Sleep((10 - grade) * 50); /*延时...程序会暂停(10 - grade)*50ms 的

时间, windows.h里的函数*/

}

- 18 -

南京工程学院毕业设计说明书(论文)

} 程序分析:

gaming()函数是游戏的主要部分,难点在表示蛇的新位置并消除前一次的图形。采用的方法是每次移动的时候从最后一节开始到倒数第二节(因蛇头为两节),将前一节的坐标赋值给后一节的坐标,移动后只要把最后一节用背景色去除即可,因为新位置0到n-l节还是要出现在画面上的。然后蛇头按照方向键来更改位置。

另外,食物的随机出现要确保它的位置在10的倍数位置上,因为蛇的坐标都是以10为模的,这样的话就可以让蛇吃到,蛇吃到食物的判断是蛇头的坐标和食物的坐标相等。 其算法过程为:

(1)设置初始值。为防止食物总出现在一个位置上,要设置随机数发生器,真正产生随机数。初始时,蛇只有蛇头,设定一个开始的方向。

(2)循环执行,直到按Esc键退出。 (3)没有按键的情况下,循环执行。

如果没有食物,随机出现食物;如果有食物,则显示食物,蛇移动身体,根据蛇的方向改变坐标值,并判断蛇是否自己吃了自己,如果出现这种情况,则蛇死,调用游戏结束函数GameOver(),结束本次游戏,重新开始。如果蛇吃到了食物,蛇身体长一节,数组元素增加一个,身体节数、分数都进行相应的改变。在新位置画出蛇。

(4)如果有按键,则识别键值。如果按键为Esc键则结束游戏,程序运行结束;如果所按键为方向键,则根据该键改变代表蛇方向的变量direction的值,要考虑相反方向键无效。

4.4其他函数的代码: 4.4.1 构建蛇身

void BuildSnk(SNAKE *head) /*构造蛇身*/ {

SNAKE *p = head;

- 19 -

南京工程学院毕业设计说明书(论文)

}

while (p != NULL) {

GotoRood(p->x, p->y); printf(\ p = p->next; }

4.4.2蛇的移动方向函数

void Move(int *d) /*移动方向。。。 上下左右 上:72 下:80 左:75 右:77*/

{

char ch; while(_kbhit()) {

ch = getch(); if (ch == 72) {

if ((*d == left || *d == right) && *d != down) *d = up; }

else if (ch == 80)

{

if ((*d == left || *d == right) && *d != up)

*d = down;

}

else if (ch == 75) {

if ((*d == up || *d == down) && *d != right) *d = left;

- 20 -

}

南京工程学院毕业设计说明书(论文)

else if (ch == 77)

{

if ((*d == up || *d == down) && *d != left)

}

*d = right;

}

程序分析:

这里我们首先要明确一个函数kbhit()函数(VC++6.0下为_kbhit()),该函数的功能及返回值为:检查当前是否有键盘输入,若有则返回一个非0值,否则返回0。那么接下来所有的问题便可迎刃而解了

这里用到的是C语言当中的if语句和复合运算符,例如 if (ch == 72)

{

if ((*d == left || *d == right) && *d != down) *d = up; }

其中,ch == 72 和(*d == left || *d == right) && *d != down为真的意思是说,如果贪吃蛇之前的运动为向左或者向右但是绝对不会是向下时,那么贪吃蛇接下来的运动只会是向上。同理,贪吃蛇向左、向右、向下的实现也是一样的。

第五章 结 论

我做的是贪吃蛇游戏。简单的一个,但对我一个初学者来说却是一个很大的困难。更加是第一次做毕业设计,所以在后期编写程序时老是停滞不前,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。特别是结构体,指针的部分,几乎是一片空白。不过经过几天的努力,大体上把课本上的知识点看了一遍,知识点也都基

- 21 -

南京工程学院毕业设计说明书(论文)

本是撑握了,所以下一步就是开始正式的编写程序了。不过毕竟是个新手,还是不知如何下手,于是就在网上下了一篇类似的程序,经过仔细的研究,终于读懂了C语言编程的基本过程和方法。 经过一波三折,终于开始正式编程。

编程是一件很枯燥很无聊的事情,但是出于完成作业,得到学分的压力,还必须强破自己坚持下去,按照老师所说的模块化思想,分部分的进行编写。而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。所以认真仔细就是非常重要的了。开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,终于把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。

虽然说,设计的过程是艰苦的,但是其中所带给我的快乐却是不言而喻的。但看到贪吃蛇游戏活灵活现地呈现在屏幕上时,给我的感觉是皇天不负苦心人,台上十分钟,台下十年功啊!!

- 22 -


贪吃蛇论文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:弗兰克尔的意义治疗学的内容

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: