贪吃蛇总结报告

更新时间:2023-06-19 21:16:47 阅读: 评论:0

贪吃蛇设计综合实验总结报告
课程名称:程序设计实践
选题名称:贪吃蛇
小组长姓名:  方娟 200911211056
小组成员姓名:邹甜 200911211004 
杜家萱 200911211066
任课老师:伊乾书法大家
报告递交时间:2009.6.9
一  系统功能说明
贪食蛇游戏是一个深受人们喜爱的游戏:一条蛇在密闭的围墙内,在围墙内出现食物,通过按键控制蛇向上下左右四个方向移动,蛇撞到食物,则食物被吃掉,蛇的身体增加一节。如
果蛇在移动的过程中,撞到墙壁或身体的交叉(蛇头撞到自己的身体)游戏结束。现要求利用Turbo C2.0来实现该游戏。功能要求如下:
一、基本功能
1.提供一个图形模式下的界面。
2.开始游戏:空格键或回车键;退出游戏:Esc键。
3.支持用键盘的方向键来控制蛇的移动,蛇可以向上、下、左、右四个方向移动。
4.当蛇头碰到食物时,食物被吃掉,蛇的身体增长一节。
5.初始场景内随即出现1个食物,当食物被吃掉时,再随机出现一个食物。
6.要有记分机制,没吃掉一个食物,增加相应的分数。
7.蛇碰到墙壁或是自己身体的一部分则游戏结束。
二、高级功能
1.暂停功能:能随时通过按键来暂停游戏,再按一次则继续游戏。
2.速度调节功能:当分数达到某个值后,对蛇的移动速度进行一定的提升,但会有一个速度上限。
3.奖励机制:增加另一种的奖励食物,蛇吃到该种食物后蛇的身体减少一节(最短不能少于2节),但不增加分数。该种食物的颜色要区别与普通食物的颜色。奖励食物有时间限制,在一定时间内没有吃掉则会消失。
4.音效功能:在游戏开始、吃掉食物、撞墙、撞到自己时提供不同的音效。
二 程序结构
初始化图形模式
(1)程序结构说明
开始游戏
处理和实现游戏进行过程中
的各种事件和功能
结束游戏并关闭图形模式
(2)重要数据说明
基本思路:
首先设计主界面,主界面是一个密封的围墙,并在屏幕最右面留一部分用来显示分数、计时等其他信息。围墙直接画一个矩形来表示,四面围成密闭的矩形来作为围墙。接着是初始化蛇与食物的位置并将他们用图形表示出来。然后进行一个循环,将蛇按当前的方向移动,并处理键盘的方向按键信息,调整蛇的移动方向。蛇头如果碰到食物,则食物消失,蛇身增长一节,更新分数,并在另外的地方又随机出现食物;如果碰到围墙或是自己的身体,则游戏结束,关闭图形系统。
1)游戏场景用一个二维坐标表示
移动方向利用定义16位制键值
如#define LEFT ox40b00
2)在函数中利用switch函数进行控制方向
3)利用结构体来表示蛇,定义两个二维数组分别表示蛇的身体的每一节,记录其横纵坐标
struct Snake  /*定义蛇的结构体*/
{
  int x[N];
  int y[N];
  int node;
  int direction;/*蛇移动方向*/
  int life;/* 蛇的生命,0活着,1死亡*/
}snake;
利用两个一维数组来控制蛇本身的横纵坐标
4)食物的表示是一个结构体
struct Food{
a)int x;
b)int y;
c)int die;/*判断是否出现食物*/
d)int bonus;/*判断是否要出现食物的变量*/}
(3)函数清单
文件名
函数原型
函数功能
处理描述
draw.c
void Init(void)
初始化图形模式
调用initgraph()切换到图形模式
void Draw(void)
归园田居翻译初始化贪吃蛇界面
调用rectangle()画围墙
void Clo(void)
关闭图形
调用clograph()关闭图形
timer.c
成本加成法void interrupt(*oldtimer)(void)
指向原来的时钟中断处理过程入口中的中断处理函数指针(句柄)
void interrupt newtimer(void)
新的时钟中断处理过程
调用(*oldtimer)()函数句柄,计时器自动加1
void SetTimer(void interrupt(*IntProc)(void))
设置新的时钟中断处理过程
调用tvect()设置新的时钟中断处理过程
void KillTimer()
恢复原有的时钟中断处理过程
调用tvect()恢复原有的时钟中断处理过程
play.c
void GamePlay(void)
游戏实现的过程
如何画出蛇 蛇如何移动 蛇的身体怎样增加 怎样吃食物 怎样控制奖励
void GameOver(void)
游戏结束后退出游戏
如果蛇死,则退出游戏
void PrScore(void)
打印出游戏得分
在游戏界面的适当位置打印出游戏得分
void IsBonus(void)
判断是否产生奖励
游戏的分数每增加100分,产生一个奖励
void Eatfood(void)
判断是否吃食物
判断蛇头的位置和食物的位置是否相同
void Eatbonus(void)
判断是否吃奖励
判断奖励的位置和蛇头的位置是否相同
void Notbonus(void)
到时间后奖励没被吃掉则奖励消失
到达设定的时间后,若奖励没被吃则消失
(4)重要函数算法分析
整个贪吃蛇游戏由5个源文件组成,分别是snake.h、timer.c、draw.c、play.c、main.c、snake.h文件
Snake.h
该文件包括贪吃蛇程序设计中所需要的系统头文件、宏定义、外部全局变量申明和函数原型说明等组成,使构成的贪吃蛇的各个C源文件只需要引用该头文件即可。
#ifndef SNAKE_H
#define SNAKE_H /*防止函数重定义*/
#define N 200
#include <stdlib.h>
#include<graphics.h>
#include <DOS.H>/*系统头文件*/
#define LEFT 0x4b00  /*定义上下左右的键值*/
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define ENTER 0x1c0d
#define SPACE 0x3920
#define TIMER 0x1c    /*定义时钟中断号*/
unsigned int TimerCounter=0; /*计时变量*/
int i,key;
int score=0;
int gamespeed=50000000;
大自然的美景struct Food    /*定义食物和奖励的结构体*/
{
  int x;
  int y;
  int die;
  int bonus;/*判断是否要出现食物的变量*/
}food,good;
什么知什么解
struct Snake  /*定义蛇的结构体*/
{
  int x[N];
  int y[N];
  int node;
  int direction;/*蛇移动方向*/
  int life;/* 蛇的生命,0活着,1死亡*/
}snake;
void Init(void);  /*图形驱动*/
void Clo(void); /*图形结束*/
void Draw(void); /*开始画面*/
void GameOver(void); /*结束游戏*/
void GamePlay(void);/* 游戏实现的过程*/
void PrScore(void);/*打印游戏得分*/
void IsBonus(void); /*判断是否产生奖励*/
void Eatfood(void); /*判断是否吃食物*/
void Eatbonus(void); /*判断是否吃奖励*/
手相图解void Notbonus(void); /*到时间后奖励没被吃掉则奖励消失*/
void interrupt newtimer(void); /*指向原来的时钟中断处理过程入口中的中断处理函数指针(句柄)*/
void interrupt newtimer1(void); /*新的时钟中断处理过程*/
void SetTimer1(void interrupt(*IntProc)(void)); /*设置新的时钟中断处理过程*/
void SetTimer(void interrupt(*IntProc)(void)); /*恢复原有的时钟中断处理过程*/
void KillTimer();/**/
车模美女图片#endif
源代码
Timer.c文件
时钟中断处理源程序文件,主要包括原先的时钟中断处理函数句柄、新的时钟中断处理函数、设置新的时钟中断处理过程、恢复原有的时钟中断处理过程的四个函数。
#include“snake.h”
Unsigned int TimerCounter=0;/*计时变量,每秒钟增加18*/
/****************************************************/
*函数原型:void interrupt(*oldtimer)(void);
*传入参数:无
*返回值:无
*函数功能:指向原来的时钟中断处理过程入口的中断处理函数指针(句柄)
/*****************************************************************/
void interrupt(*oldtimer)(void)
/*****************************************************************/
代人受过
*函数原型:void interrupt newtimer(void)
*传入参数:无
*返回值:无
*函数功能:新的时钟中断处理函数
/**********************************************************************/
void interrupt newtimer(void)
{
  (*oldtimer)();
  TimerCounter++;
}
/*****************************************************************/
*函数原型:void SetTimer(void interrupt(*IntProc)(void))
*传入参数:无
*返回值:无
*函数功能:设置新的时钟中断处理函数
/********************************************************************/
void SetTimer(void interrupt(*IntProc)(void))
{
  oldtimer=getvect(TIMER);
  disable();
  tvect(TIMER,IntProc);
  enable();
}
/*****************************************************************/
*函数原型:void KillTimer()
*传入参数:无

本文发布于:2023-06-19 21:16:47,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/993654.html

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

标签:食物   游戏   中断   函数   时钟   奖励   功能   方向
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图