用c语言写一个贪吃蛇小游戏 带注释
时间: 2024-01-06 12:03:43 浏览: 83
当然可以!以下是一个简单的贪吃蛇小游戏的示例代码,带有注释以帮助你理解:
```c
#include <stdio.h>
#include <conio.h>
#include <windows.h>
// 定义游戏区域的宽度和高度
#define WIDTH 20
#define HEIGHT 20
// 定义蛇的最大长度
#define MAX_LENGTH 100
// 定义蛇的移动方向
enum Direction { UP, DOWN, LEFT, RIGHT };
// 定义蛇的结构体
typedef struct {
int x;
int y;
} Position;
// 全局变量,存储蛇的位置和长度
Position snake[MAX_LENGTH];
int length;
// 全局变量,存储食物的位置
Position food;
// 全局变量,存储蛇的移动方向和游戏是否结束
enum Direction dir;
int gameover;
// 设置光标位置
void setCursorPosition(int x, int y) {
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
// 初始化游戏
void initGame() {
// 初始化蛇的位置和长度
length = 1;
snake[0].x = WIDTH / 2;
snake[0].y = HEIGHT / 2;
// 初始化食物的位置
food.x = rand() % WIDTH;
food.y = rand() % HEIGHT;
// 初始化蛇的移动方向和游戏状态
dir = RIGHT;
gameover = 0;
}
// 绘制游戏界面
void drawGame() {
system("cls"); // 清屏
// 绘制墙壁
for (int i = 0; i < WIDTH + 2; i++) {
setCursorPosition(i, 0);
printf("#");
setCursorPosition(i, HEIGHT + 1);
printf("#");
}
for (int i = 0; i < HEIGHT + 2; i++) {
setCursorPosition(0, i);
printf("#");
setCursorPosition(WIDTH + 1, i);
printf("#");
}
// 绘制蛇的身体
for (int i = 0; i < length; i++) {
setCursorPosition(snake[i].x, snake[i].y);
printf("*");
}
// 绘制食物
setCursorPosition(food.x, food.y);
printf("@");
// 移动光标至游戏区域外,避免闪烁
setCursorPosition(WIDTH + 5, HEIGHT + 5);
}
// 处理键盘输入
void handleInput() {
if (_kbhit()) { // 检测是否有按键输入
switch (_getch()) { // 获取按下的键值
case 'w':
dir = UP;
break;
case 's':
dir = DOWN;
break;
case 'a':
dir = LEFT;
break;
case 'd':
dir = RIGHT;
break;
case 'x':
gameover = 1;
break;
}
}
}
// 更新游戏状态
void updateGame() {
// 根据移动方向更新蛇的位置
switch (dir) {
case UP:
snake[0].y--;
break;
case DOWN:
snake[0].y++;
break;
case LEFT:
snake[0].x--;
break;
case RIGHT:
snake[0].x++;
break;
}
// 判断蛇是否吃到了食物
if (snake[0].x == food.x && snake[0].y == food.y) {
// 食物被吃掉后,蛇的长度增加
length++;
// 生成新的食物位置
food.x = rand() % WIDTH;
food.y = rand() % HEIGHT;
}
// 判断蛇是否触碰到墙壁或自身
if (snake[0].x <= 0 || snake[0].x >= WIDTH + 1 ||
snake[0].y <= 0 || snake[0].y >= HEIGHT + 1) {
gameover = 1;
}
for (int i = 1; i < length; i++) {
if (snake[i].x == snake[0].x && snake[i].y == snake[0].y) {
gameover = 1;
break;
}
}
}
int main() {
// 隐藏光标
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(hOut, &cci);
cci.bVisible = 0;
SetConsoleCursorInfo(hOut, &cci);
// 设置随机种子
srand(time(NULL));
// 初始化游戏
initGame();
while (!gameover) {
// 绘制游戏界面
drawGame();
// 处理键盘输入
handleInput();
// 更新游戏状态
updateGame();
// 控制游戏速度
Sleep(100);
}
// 游戏结束后显示游戏结束信息
setCursorPosition(WIDTH / 2 - 4, HEIGHT / 2);
printf("Game Over!");
return 0;
}
```
希望这个示例代码能帮助你开始编写贪吃蛇小游戏!如果有任何问题,请随时向我提问。
阅读全文