一、读程序题部分(贪吃蛇)
1、程序的功能
设计游戏界面,包括画墙、画蛇、画食物,并且设置蛇和食物的届性,编 写蛇的运动方式和游戏方式。
2、主函数分析
主函数中前两行与编写图形程序有关,第三行中调用Speed函数,把Speed 函数的返回值付给变量speed第五行dwall函数的作用是画墙,函数中乂调用 wall函数来画墙上的砖块
3、函数的调用关系
Setcoloc() lineO sedillstvleQ birf)
ngotox>t)i~i~i~~t~~ir~
n
gotox>t)
SrandQ randQsetlinestyle() recLangle() GameChwQ
cleaide^
4、数据变量定义作用
定义食物的横坐标food.x和食物的纵坐标food.y可以有效的随机设置食物出 现在界面的任何地方;
定义snake.life表示蛇的生死以否,好判断是否结束游戏
snake.dir=1;/*方向向右 */
定义snake.x[0]和snake.y[0俵示蛇头的坐标,在后面蛇撞墙死的问题上用的 到蛇头的坐标;
定义蛇的节数snake.node方便蛇每吃到食物节数增加;
定义snake.level,显示蛇的闯关数
5、主要函数的功能、流程图
dwall():画墙
wall():画组成墙的砖
Speed。选择贪吃蛇的速度 line():画线函数,画砖的线条
gotoxy():定位坐标
Play():调用各函数,开始完游戏
GameOver():结束游戏
6、程序的不足及改进
没有障碍墙,游戏过丁简单;没有游戏奖励,游戏趣味性不高;
改进:设置障碍墙,蛇撞到墙也死;
代码:for(j=200;j<=300;j+=10)
(
wall(j,300);/*画横的障碍墙*/
}
for(j=300;j<=350;j+=10)
(
wall(300,j);/*画竖的障碍墙*/
}
不足:没有游戏奖励,游戏趣味性不高;
改进:增加生命值,蛇每吃到三颗食物,则增加一个生命值;
代码:定义food.level,在Play函授中初始化,在设置蛇每吃到一颗食物就增 长一节身体的代码后加上
if(snake.node%3==0)
{snake.level++; /*除第一关外,其余每吃 3
颗食物,就增加一个生命值*/
gotoxy(5,2);
printf("The level is %d",snake.level); /* 左上角显示出生命值(级别)
*/
}
7、加上注释、改进后的完整代码
#include
#include
#include
#include
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define N 100/*贪吃蛇的最大长度*/
#define P 0x1970/*定义暂停功能键*/ int i,key;
int speed;/*游戏速度 */
struct FOOD
{
int x;/*食物的横坐标*/
int y;/*食物的纵坐标*/
int flag;/*标志是否要出现食物*/
}food;
struct Snake
{
int x[N];
int y[N];
int node;/*蛇的节数*/
int dir;/*蛇移动方向*/
int life;/*标志是死是活*/
int level;/*定义生命值(级另U) */
}snake;
void GameOver();/*结束游戏 */
void Play();/*玩游戏过程*/
void dwall();/* 画墙*/
void wall(int x,int y);/* 画组成墙的砖 */
int Speed();/*选择贪吃蛇的速度*/
main()
{
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"");
speed=Speed();/将函数返回值赋给speed*/
cleardevice();/* 活屏 */
dwall();/*开始画墙*/
Play();/*开始完游戏*/
getch();
closegraph();/*退出图形界面*/
}
void wall(int x,int y)
{
int sizx=9;
int sizy=9;
setcolor(15);/*白色画砖的上边和左边*/
line(x,y,x+sizx,y);
line(x,y+1,x+sizx