潘sir让我们写个贪吃蛇
贪吃蛇分为三部分,一全局变量的构建、二蛇的移动、三食物的投放。
首先,构造把全局的条件做好。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define SNAKE_MAX_LENGTH 20
#define SNAKE_HEAD 'H'
#define SNAKE_BODY 'X'
#define BLANK_FOOD '$'
#define WALL_CELL '*'
int snakeX[SNAKE_MAX_LENGTH] = {1,2,3,4,5};
int snakeY[SNAKE_MAX_LENGTH] = {1,1,1,1,1};
int snakeLength = 5;
int game = 2;//利用while循环,如果不是game则游戏结束
char map[12][12]= {
"************", //初始状态
"*XXXXH *", //直接打表
"* *",
"* *",
"* *",
"* *",
"* *",
"* *",
"* *",
"* *",
"* *",
"************",
};
// define vars for snake, notice name of vars in C
其次,来让蛇移动起来
void snakeMove(int x, int y){//让蛇移动
map[snakeX[snakeLength-1]][snakeY[snakeLength-1]] = SNAKE_BODY;
map[snakeX[snakeLength-1]+x][snakeY[snakeLength-1]+y] = SNAKE_HEAD;
for (int i = 0; i < snakeLength; ++ i){
snakeX[i] = snakeX[i+1];
snakeY[i] = snakeY[i+1];
}
snakeX[snakeLength-1] = x + snakeX[snakeLength-1];
snakeY[snakeLength-1] = y + snakeY[snakeLength-1];
}
int main(void) {
put_FOOD(); //放个食物
while (game) {
output();
char c = getchar();
switch (c) {
case 'W': case 'w': snakeMove(0, -1); break;
case 'S': case 's': snakeMove(0, 1); break;
case 'A': case 'a': snakeMove(-1, 0); break;
case 'D': case 'd': snakeMove(1, 0); break;
}
gameover();
// system("cls");
}
// printf("The game is over");
}
最后,投放食物。食物应该按照什么规律投放呢?没有规律,随机投放,所以会用到stdlib.h,time.h头文件。
void put_FOOD(void) {
int i, j, k;
i = 1 + (rand() % 9);
j = 1 + (rand() % 9);
for (k = 0; k < snakeLength - 1; ++ k) {
if (snakeX[k] == i && snakeY[k] == j) {
put_FOOD();
}
} //蛇身不可后退
map[i][j] = SNAKE_FOOD;
}
void output() {
int i, j;
for (i = 0; i < 12; ++ i) {
for (j = 0; j < 12; ++ j) {
printf("%c", map[i][j]);
}
printf("\n");
}
}