字符游戏-智能蛇
1让蛇动起来
2放置奖励的食物
3实现自动寻找
1让蛇动起来
字符表示:
char BLANK_CHAR = ' ';
char WALL_CHAR = '*';
char SNAKE_HEAD_CHAR = 'H';
char SNAKE_BODY_CHAR = 'X';
char FOOD_CHAR = '$';
用 * 来围成墙体,用 $ 来表示食物,用 H 来表示蛇头,用 X 来表示蛇的身体。
绘出一个方形区域,这是蛇身活动的范围。
char map[12][13] = {
"************",
"* *",
"* *",
"* *",
"* *",
"* *",
"* *",
"* *",
"* *",
"* *",
"* *",
"************",
};
初始化变量:
int snakeHeadX = 1, snakeHeadY = 1;
int snakeBodyX[100] = {0}, snakeBodyY[100] = {0};
int snakeBodyLen = 0;
int snakeTailIndex = -1;
int willBeLonger = 0;
int foodX = 0, foodY = 0;
int gameRunning = 1;
编写一个让蛇动起来的函数:
void snakeMove(char control){
map[snakeHeadX][snakeHeadY]= BLANK_CHAR;
// record the previous snake head position
int prevSnakeHeadX= snakeHeadX;
int prevSnakeHeadY= snakeHeadY;
switch(control){
case'w':
snakeHeadX--;
break;
case'a':
snakeHeadY--;
break;
case's':
snakeHeadX++;
break;
case'd':
snakeHeadY++;
break;
default:
return;
}
if(map[snakeHeadX][snakeHeadY]!= BLANK_CHAR&&map[snakeHeadX][snakeHeadY]!= FOOD_CHAR)
{
gameOver();
}
就是说,当输入W时蛇会向上挪动一格,输入A时蛇会向左挪动一格,输入S时蛇会向下挪动一格,输入D时蛇会向右挪动一格。这样,我们就实现了对贪吃蛇行进方向的控制。
2放置奖励的食物
因为每次放置食物的地方随机,程序里应当包含stdlib.h头文件。而为了不用每次都设置不同seed,我们可以给程序中添加time.h头文件。
注意,放置食物的地方不可以事蛇的身体,更不能是墙体。
下面是实现该功能的代码:
void spawnFood() {
// Random food position
foodX = rand() % 10 + 1;
foodY = rand() % 10 + 1;
while (map[foodX][foodY] != BLANK_CHAR) {
foodX = rand() % 10 + 1;
foodY = rand() % 10 + 1;
}
map[foodX][foodY] = FOOD_CHAR;
}
3实现自动寻找
其实要设置变量表示食物位置,然后用蛇头位置计算出食物位置,然后蛇头判断食物位置方向能不能走,不能就换地方,具体代码如下:
以方向向右为例:
if (xdirection == 'D')
{
if (D == 1)
next = 'D';
else if (W == 1)
next = 'W';
else if (S == 1)
next = 'S';
else if (A == 1)
next = 'A';
else
{
system("cls");
printf("OH YOUR SNAKE IS TOO STUPID\nGAME OVER!!!\nPRESS ENTER TO QUIT\n");
getchar();
return 0;
}
}