贪吃蛇总结报告.docx

上传人:b****3 文档编号:2844294 上传时间:2022-11-15 格式:DOCX 页数:19 大小:25.75KB
下载 相关 举报
贪吃蛇总结报告.docx_第1页
第1页 / 共19页
贪吃蛇总结报告.docx_第2页
第2页 / 共19页
贪吃蛇总结报告.docx_第3页
第3页 / 共19页
贪吃蛇总结报告.docx_第4页
第4页 / 共19页
贪吃蛇总结报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

贪吃蛇总结报告.docx

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

贪吃蛇总结报告.docx

贪吃蛇总结报告

 

贪吃蛇设计综合实验总结报告

 

课程名称:

程序设计实践

选题名称:

贪吃蛇

小组长姓名:

方娟200911211056

小组成员姓名:

邹甜200911211004

杜家萱200911211066

任课老师:

伊乾

报告递交时间:

2009.6.9

一系统功能说明

贪食蛇游戏是一个深受人们喜爱的游戏:

一条蛇在密闭的围墙内,在围墙内出现食物,通过按键控制蛇向上下左右四个方向移动,蛇撞到食物,则食物被吃掉,蛇的身体增加一节。

如果蛇在移动的过程中,撞到墙壁或身体的交叉(蛇头撞到自己的身体)游戏结束。

现要求利用TurboC2.0来实现该游戏。

功能要求如下:

一、基本功能

1.提供一个图形模式下的界面。

2.开始游戏:

空格键或回车键;退出游戏:

Esc键。

3.支持用键盘的方向键来控制蛇的移动,蛇可以向上、下、左、右四个方向移动。

4.当蛇头碰到食物时,食物被吃掉,蛇的身体增长一节。

5.初始场景内随即出现1个食物,当食物被吃掉时,再随机出现一个食物。

6.要有记分机制,没吃掉一个食物,增加相应的分数。

7.蛇碰到墙壁或是自己身体的一部分则游戏结束。

二、高级功能

1.暂停功能:

能随时通过按键来暂停游戏,再按一次则继续游戏。

2.速度调节功能:

当分数达到某个值后,对蛇的移动速度进行一定的提升,但会有一个速度上限。

3.奖励机制:

增加另一种的奖励食物,蛇吃到该种食物后蛇的身体减少一节(最短不能少于2节),但不增加分数。

该种食物的颜色要区别与普通食物的颜色。

奖励食物有时间限制,在一定时间内没有吃掉则会消失。

4.音效功能:

在游戏开始、吃掉食物、撞墙、撞到自己时提供不同的音效。

二程序结构

初始化图形模式

(1)程序结构说明

开始游戏

处理和实现游戏进行过程中

的各种事件和功能

结束游戏并关闭图形模式

(2)重要数据说明

基本思路:

首先设计主界面,主界面是一个密封的围墙,并在屏幕最右面留一部分用来显示分数、计时等其他信息。

围墙直接画一个矩形来表示,四面围成密闭的矩形来作为围墙。

接着是初始化蛇与食物的位置并将他们用图形表示出来。

然后进行一个循环,将蛇按当前的方向移动,并处理键盘的方向按键信息,调整蛇的移动方向。

蛇头如果碰到食物,则食物消失,蛇身增长一节,更新分数,并在另外的地方又随机出现食物;如果碰到围墙或是自己的身体,则游戏结束,关闭图形系统。

1)游戏场景用一个二维坐标表示

移动方向利用定义16位制键值

如#defineLEFTox40b00

2)在函数中利用switch函数进行控制方向

3)利用结构体来表示蛇,定义两个二维数组分别表示蛇的身体的每一节,记录其横纵坐标

structSnake/*定义蛇的结构体*/

{

intx[N];

inty[N];

intnode;

intdirection;/*蛇移动方向*/

intlife;/*蛇的生命,0活着,1死亡*/

}snake;

利用两个一维数组来控制蛇本身的横纵坐标

4)食物的表示是一个结构体

structFood{

a)intx;

b)inty;

c)intdie;/*判断是否出现食物*/

d)intbonus;/*判断是否要出现食物的变量*/}

(3)函数清单

文件名

函数原型

函数功能

处理描述

draw.c

voidInit(void)

初始化图形模式

调用initgraph()切换到图形模式

voidDraw(void)

初始化贪吃蛇界面

调用rectangle()画围墙

voidClose(void)

关闭图形

调用closegraph()关闭图形

timer.c

voidinterrupt(*oldtimer)(void)

指向原来的时钟中断处理过程入口中的中断处理函数指针(句柄)

voidinterruptnewtimer(void)

新的时钟中断处理过程

调用(*oldtimer)()函数句柄,计时器自动加1

voidSetTimer(voidinterrupt(*IntProc)(void))

设置新的时钟中断处理过程

调用setvect()设置新的时钟中断处理过程

voidKillTimer()

恢复原有的时钟中断处理过程

调用setvect()恢复原有的时钟中断处理过程

play.c

voidGamePlay(void)

游戏实现的过程

如何画出蛇蛇如何移动蛇的身体怎样增加怎样吃食物怎样控制奖励

voidGameOver(void)

游戏结束后退出游戏

如果蛇死,则退出游戏

voidPrScore(void)

打印出游戏得分

在游戏界面的适当位置打印出游戏得分

voidIsBonus(void)

判断是否产生奖励

游戏的分数每增加100分,产生一个奖励

voidEatfood(void)

判断是否吃食物

判断蛇头的位置和食物的位置是否相同

voidEatbonus(void)

判断是否吃奖励

判断奖励的位置和蛇头的位置是否相同

voidNotbonus(void)

到时间后奖励没被吃掉则奖励消失

到达设定的时间后,若奖励没被吃则消失

(4)重要函数算法分析

整个贪吃蛇游戏由5个源文件组成,分别是snake.h、timer.c、draw.c、play.c、main.c、snake.h文件

Snake.h

该文件包括贪吃蛇程序设计中所需要的系统头文件、宏定义、外部全局变量申明和函数原型说明等组成,使构成的贪吃蛇的各个C源文件只需要引用该头文件即可。

#ifndefSNAKE_H

#defineSNAKE_H/*防止函数重定义*/

#defineN200

#include

#include

#include/*系统头文件*/

#defineLEFT0x4b00/*定义上下左右的键值*/

#defineRIGHT0x4d00

#defineDOWN0x5000

#defineUP0x4800

#defineESC0x011b

#defineENTER0x1c0d

#defineSPACE0x3920

#defineTIMER0x1c/*定义时钟中断号*/

unsignedintTimerCounter=0;/*计时变量*/

inti,key;

intscore=0;

intgamespeed=50000000;

structFood/*定义食物和奖励的结构体*/

{

intx;

inty;

intdie;

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

}food,good;

structSnake/*定义蛇的结构体*/

{

intx[N];

inty[N];

intnode;

intdirection;/*蛇移动方向*/

intlife;/*蛇的生命,0活着,1死亡*/

}snake;

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

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

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

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

voidGamePlay(void);/*游戏实现的过程*/

voidPrScore(void);/*打印游戏得分*/

voidIsBonus(void);/*判断是否产生奖励*/

voidEatfood(void);/*判断是否吃食物*/

voidEatbonus(void);/*判断是否吃奖励*/

voidNotbonus(void);/*到时间后奖励没被吃掉则奖励消失*/

voidinterruptnewtimer(void);/*指向原来的时钟中断处理过程入口中的中断处理函数指针(句柄)*/

voidinterruptnewtimer1(void);/*新的时钟中断处理过程*/

voidSetTimer1(voidinterrupt(*IntProc)(void));/*设置新的时钟中断处理过程*/

voidSetTimer(voidinterrupt(*IntProc)(void));/*恢复原有的时钟中断处理过程*/

voidKillTimer();/**/

#endif

源代码

Timer.c文件

时钟中断处理源程序文件,主要包括原先的时钟中断处理函数句柄、新的时钟中断处理函数、设置新的时钟中断处理过程、恢复原有的时钟中断处理过程的四个函数。

#include“snake.h”

UnsignedintTimerCounter=0;/*计时变量,每秒钟增加18*/

/****************************************************/

*函数原型:

voidinterrupt(*oldtimer)(void);

*传入参数:

*返回值:

*函数功能:

指向原来的时钟中断处理过程入口的中断处理函数指针(句柄)

/*****************************************************************/

voidinterrupt(*oldtimer)(void);

/*****************************************************************/

*函数原型:

voidinterruptnewtimer(void);

*传入参数:

*返回值:

*函数功能:

新的时钟中断处理函数

/**********************************************************************/

voidinterruptnewtimer(void)

{

(*oldtimer)();

TimerCounter++;

}

/*****************************************************************/

*函数原型:

voidSetTimer(voidinterrupt(*IntProc)(void))

*传入参数:

*返回值:

*函数功能:

设置新的时钟中断处理函数

/********************************************************************/

voidSetTimer(voidinterrupt(*IntProc)(void))

{

oldtimer=getvect(TIMER);

disable();

setvect(TIMER,IntProc);

enable();

}

/*****************************************************************/

*函数原型:

voidKillTimer()

*传入参数:

*返回值:

*函数功能:

恢复原先的时钟中断处理函数

/*****************************************************************/

voidKillTimer()

{

disable();

setvect(TIMER,oldtimer);

enabl

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

当前位置:首页 > 经管营销 > 经济市场

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

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