六、教师评审
教师评语
实验成绩
(虽然上机主要侧重于验证问题,但是建议各位老师从解决
“工程技术问题”,特别是“复杂工程问题”的角度去评审学
生上机过程及上机报告,主要内容包括提出问题、分析问题、
解决问题及验证问题。 要有较详细的评审意见
。)
签名:
日期:
附 录
用户使用手册
1、编译运行即开始游戏。
2、按小写字母 wsad 即可进行游戏的操作。 3、按任意键暂停游戏
程序源代码
#include
#define N20 / / 地图大小 #define WALL5 #define HEAR1 #define TAIL 2 #define BODY3 #define FOOD4 #define EMPTY0 #define UP 'w' #define DOWN's' #define LEFT 'a' #define RIGHT 'd'
// 墙
// 蛇头 // 蛇尾 // 蛇身 // 食物 // 空
// 蛇的前进方向:上下左右
#define GMAE_TIME100 class
RetroSnaker
// 设置游戏的绘制速度
{
public :
RetroSnaker() { Init(); } bool gameOver; void move(); void move( char
private :
// 游戏是否结束
ch );
int map[ N][ N]; int directionMap[ int hearX, hearY; int tailX, tailY;
// 二维地图 N][ N];
// 方向图
// 蛇头坐标 // 蛇尾坐标 // 食物坐标
// 标记是否吃到食物
int foodX, foodY; bool eatFood; void Init();
void gotoXY( int
/ / 初始化
x, int y); // 光标跳转到屏幕的相应位置
void againFood(); void erasingTheTail();
// 食物被吃,再次产生食物
// 擦除尾巴
char ch );// 擦除蛇头
void erasingTheHear(
};
void RetroSnaker ::move() {
switch (directionMap[hearY][hearX]) {
case UP:
if ( FOOD== map[hearY - 1][hearX])
againFood();
else if ( EMPTY== map[hearY - 1][hearX])
erasingTheTail();
else {
// 擦除尾巴
// 吃到食物
// 什么都没遇到
gameOver = true ; / / 没有遇到食物或者空,则表示游戏结束 break ;
}
erasingTheHear( break ;
case
DOWN:
UP);
if ( FOOD== map[hearY + 1][hearX])
againFood();
else if ( EMPTY== map[hearY + 1][hearX])
erasingTheTail();
else {
// 擦除尾巴
// 吃到食物
// 什么都没遇到
gameOver = true ; / / 没有遇到食物或者空,则表示游戏结束 break ;
}
erasingTheHear( break ;
case LEFT:
if ( FOOD== map[hearY][hearX - 1])
againFood();
else if ( EMPTY== map[hearY][hearX - 1])
erasingTheTail();
else {
gameOver = true ; / / 没有遇到食物或者空,则表示游戏结束 break ;
}
erasingTheHear( break ;
case RIGHT:
if ( FOOD== map[hearY][hearX + 1])
// 吃到食物
LEFT);
// 擦除尾巴
// 什么都没遇到
// 吃到食物
DOWN);
againFood();
else if ( EMPTY== map[hearY][hearX + 1])
erasingTheTail();
else {
// 擦除尾巴
// 什么都没遇到
gameOver = true ; / / 没有遇到食物或者空,则表示游戏结束
break ;
}
erasingTheHear(
RIGHT);
break ;
default :
break ;
}
}
void RetroSnaker ::move( char
ch){
directionMap[hearY][hearX] = move();
}
void RetroSnaker ::Init() {
int i = 0,j=0;
gameOver = false ; eatFood =
false
;
for (i = 0; i <
N; i++)
for (j = 0; j <
N; j++) {
EMPTY;
map[i][j] =directionMap[i][j] =
}
for (i = 0; i <
N; i++) {
map[0][i] = WALL;
map[ N - 1][i] = WALL;
map[i][0] =
WALL;
map[i][ N - 1] =
WALL;
}
// 初始化蛇头
hearX = N / 2; hearY =
N / 2;
map[hearY][hearX] =
HEAR;
directionMap[hearY][hearX] =
ch ;
// 清空二维数组
EMPTY; // 清空方向图
// 初始化墙
RIGHT; // 记录蛇头的移动方向