c语言贪吃蛇小游戏代码及注释
时间: 2023-07-31 18:13:40 浏览: 66
以下是一个简单的 C 语言贪吃蛇小游戏代码,附有注释,希望能够帮助你:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 30 // 地图宽度
#define HEIGHT 20 // 地图高度
#define MAX_LEN 100 // 蛇的最大长度
int map[HEIGHT][WIDTH]; // 地图
int snake[MAX_LEN][2]; // 蛇的身体
int len = 3; // 蛇的长度
int score = 0; // 得分
int dir = 0; // 蛇的方向,0表示向右,1表示向下,2表示向左,3表示向上
void init() { // 初始化函数
int i, j;
// 初始化地图
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
if (i == 0 || j == 0 || i == HEIGHT - 1 || j == WIDTH - 1) {
map[i][j] = 1; // 边界
} else {
map[i][j] = 0; // 内部
}
}
}
// 初始化蛇
snake[0][0] = HEIGHT / 2;
snake[0][1] = WIDTH / 2;
snake[1][0] = HEIGHT / 2;
snake[1][1] = WIDTH / 2 - 1;
snake[2][0] = HEIGHT / 2;
snake[2][1] = WIDTH / 2 - 2;
for (i = 0; i < len; i++) {
map[snake[i][0]][snake[i][1]] = 2; // 蛇的身体
}
// 随机生成食物
srand((unsigned)time(NULL)); // 设置随机数种子
int x = rand() % (HEIGHT - 2) + 1;
int y = rand() % (WIDTH - 2) + 1;
map[x][y] = 3; // 食物
}
void draw_map() { // 绘制地图函数
int i, j;
system("cls"); // 清屏
// 绘制地图
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
if (map[i][j] == 1) {
putchar('#'); // 边界
} else if (map[i][j] == 2) {
putchar('*'); // 蛇的身体
} else if (map[i][j] == 3) {
putchar('@'); // 食物
} else {
putchar(' '); // 空地
}
}
putchar('\n');
}
// 显示得分
printf("Score: %d\n", score);
}
void move() { // 移动函数
int i;
// 计算蛇头的位置
int new_x = snake[0][0], new_y = snake[0][1];
if (dir == 0) {
new_y++;
} else if (dir == 1) {
new_x++;
} else if (dir == 2) {
new_y--;
} else if (dir == 3) {
new_x--;
}
// 判断是否吃到食物
if (map[new_x][new_y] == 3) {
len++;
score += 10;
map[new_x][new_y] = 0;
int x, y;
do {
x = rand() % (HEIGHT - 2) + 1;
y = rand() % (WIDTH - 2) + 1;
} while (map[x][y] != 0);
map[x][y] = 3;
}
// 移动蛇的身体
for (i = len - 1; i > 0; i--) {
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
map[snake[i][0]][snake[i][1]] = 2;
}
// 移动蛇的头
snake[0][0] = new_x;
snake[0][1] = new_y;
map[snake[0][0]][snake[0][1]] = 2;
// 判断是否撞墙或撞到自己
if (map[new_x][new_y] == 1 || map[new_x][new_y] == 2) {
printf("Game Over!\n");
exit(0);
}
}
void input() { // 输入函数
if (_kbhit()) { // 判断是否有按键输入
int key = _getch(); // 获取按键
if (key == 224) { // 方向键
key = _getch();
if (key == 77 && dir != 2) { // 向右
dir = 0;
} else if (key == 80 && dir != 3) { // 向下
dir = 1;
} else if (key == 75 && dir != 0) { // 向左
dir = 2;
} else if (key == 72 && dir != 1) { // 向上
dir = 3;
}
} else if (key == 27) { // ESC键
printf("Game Over!\n");
exit(0);
}
}
}
int main() {
init(); // 初始化
while (1) { // 主循环
draw_map(); // 绘制地图
move(); // 移动
input(); // 输入
Sleep(100); // 延时
}
return 0;
}
```
这是一个比较简单的贪吃蛇小游戏,仅供参考,如果需要更加完整的游戏体验,可以自行扩展。