C++课程设计贪吃蛇小游戏(内附完整源码与附件) 下载本文

六、教师评审

教师评语

实验成绩

(虽然上机主要侧重于验证问题,但是建议各位老师从解决

“工程技术问题”,特别是“复杂工程问题”的角度去评审学

生上机过程及上机报告,主要内容包括提出问题、分析问题、

解决问题及验证问题。 要有较详细的评审意见

。)

签名:

日期:

附 录

用户使用手册

1、编译运行即开始游戏。

2、按小写字母 wsad 即可进行游戏的操作。 3、按任意键暂停游戏

程序源代码

#include #include #include #include #include using namespace std;

#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; // 记录蛇头的移动方向