C语言实现简单的贪吃蛇游戏
概述
贪吃蛇是一款非常经典的游戏,很多初学者希望用C语言来实现这个小游戏,来体验C语言的基本语法和编程思路。本文将详细讲解如何使用C语言实现简单的贪吃蛇游戏。
游戏规则
游戏中,玩家操作一只“蛇”来吃食物,当蛇头碰到蛇身或者墙壁时游戏结束。游戏中蛇的长度会随着吃掉的食物而增加,而玩家需要使蛇尽可能地长,同时避免碰到自己的身体或者墙壁。
实现过程
实现贪吃蛇游戏的过程大概分为六个步骤:
1. 初始化游戏界面和蛇的位置
在游戏开始时,需要初始化游戏界面和蛇的位置。
/* 游戏界面方格数 */
#define ROW 20
#define COL 20
/* 蛇的最长长度 */
#define MAXSNAKELENGTH 100
/* 游戏界面定义及蛇的定义 */
struct GameScreen {
char screen[ROW][COL];
int row;
int col;
int snakeLength;
int snake[MAXSNAKELENGTH][2]; // snake[0]代表蛇头,[snakeLength-1]代表蛇尾
};
2. 随机生成食物位置
void createFood(GameScreen &gm) {
srand(time(NULL));
int r, c;
do {
r = rand() % gm.row;
c = rand() % gm.col;
} while (gm.screen[r][c] != ' ');
gm.screen[r][c] = '*';
}
3. 绘制游戏界面
绘制游戏界面可以使用如下代码:
void display(GameScreen &gm) {
for (int i = 0; i < gm.row; i++) {
for (int j = 0; j < gm.col; j++) {
printf("%c", gm.screen[i][j]);
}
printf("\n");
}
}
4. 从键盘读取玩家操作
可以使用如下代码从键盘读取玩家的输入:
/* 操作方向 */
#define UP 'w'
#define DOWN 's'
#define LEFT 'a'
#define RIGHT 'd'
#define QUIT 'q'
/* 读取键盘输入 */
char getOperation() {
char ch = getch();
while (!(ch == UP || ch == DOWN || ch == LEFT || ch == RIGHT || ch == QUIT)) {
ch = getch();
}
return ch;
}
5. 蛇的运动
蛇的运动可以使用如下代码:
void move(GameScreen &gm, char operation) {
bool isEatFood = false; // 是否吃到食物
int nextSnakeHeadRow, nextSnakeHeadCol;
switch (operation) {
case UP:
nextSnakeHeadRow = gm.snake[0][0] - 1;
nextSnakeHeadCol = gm.snake[0][1];
break;
case DOWN:
nextSnakeHeadRow = gm.snake[0][0] + 1;
nextSnakeHeadCol = gm.snake[0][1];
break;
case LEFT:
nextSnakeHeadRow = gm.snake[0][0];
nextSnakeHeadCol = gm.snake[0][1] - 1;
break;
case RIGHT:
nextSnakeHeadRow = gm.snake[0][0];
nextSnakeHeadCol = gm.snake[0][1] + 1;
break;
default:
break;
}
/* 蛇头插入新位置 */
if (nextSnakeHeadRow >= 0 && nextSnakeHeadRow < gm.row &&
nextSnakeHeadCol >= 0 && nextSnakeHeadCol < gm.col &&
gm.screen[nextSnakeHeadRow][nextSnakeHeadCol] != '*' &&
gm.snakeLength < MAXSNAKELENGTH) {
gm.snakeLength++;
for (int i = gm.snakeLength - 1; i > 0; i--) {
gm.snake[i][0] = gm.snake[i - 1][0];
gm.snake[i][1] = gm.snake[i - 1][1];
}
gm.snake[0][0] = nextSnakeHeadRow;
gm.snake[0][1] = nextSnakeHeadCol;
if (gm.screen[nextSnakeHeadRow][nextSnakeHeadCol] == '*') {
isEatFood = true;
gm.screen[nextSnakeHeadRow][nextSnakeHeadCol] = ' ';
}
for (int i = 0; i < gm.snakeLength; i++) {
gm.screen[gm.snake[i][0]][gm.snake[i][1]] = 'o';
}
gm.screen[gm.snake[0][0]][gm.snake[0][1]] = '@';
if (isEatFood) {
createFood(gm);
}
}
}
6. 游戏结束判断
游戏结束判断可以使用如下代码:
bool isGameOver(GameScreen &gm) {
/* 判断是否碰到自身 */
for (int i = 1; i < gm.snakeLength; i++) {
if (gm.snake[i][0] == gm.snake[0][0] && gm.snake[i][1] == gm.snake[0][1]) {
return true;
}
}
/* 判断是否碰到墙壁 */
if (gm.snake[0][0] < 0 || gm.snake[0][0] >= gm.row ||
gm.snake[0][1] < 0 || gm.snake[0][1] >= gm.col) {
return true;
}
return false;
}
示例演示
以下两条示例用代码展示:
示例一:初始化游戏界面和蛇的位置
/* 初始化游戏界面和蛇的位置 */
void init(GameScreen &gm) {
/* 初始化游戏界面 */
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (i == 0 || i == ROW - 1 || j == 0 || j == COL - 1) {
gm.screen[i][j] = '#';
} else {
gm.screen[i][j] = ' ';
}
}
}
/* 初始化蛇的位置 */
gm.snakeLength = 1;
gm.snake[0][0] = ROW / 2;
gm.snake[0][1] = COL / 2;
gm.screen[gm.snake[0][0]][gm.snake[0][1]] = '@';
/* 随机生成食物位置 */
createFood(gm);
}
示例二:主函数实现
int main() {
GameScreen gm;
init(gm);
display(gm);
char operation;
while (true) {
operation = getOperation();
move(gm, operation);
display(gm);
if (isGameOver(gm)) {
printf("Game Over!\n");
break;
}
}
return 0;
}
总结
通过以上步骤,就可以在C语言中实现一个简单的贪吃蛇游戏。当然,还可以通过增加游戏难度、优化游戏界面等方式来让游戏变得更加有趣。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现简单的贪吃蛇游戏 - Python技术站