用c语言写一个贪吃蛇游戏
时间: 2024-05-02 09:17:14 浏览: 48
用C语言写的贪吃蛇游戏
好的,下面是一个简单的贪吃蛇游戏的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define width 30 // 地图宽度
#define height 20 // 地图高度
int map[height][width] = {0}; // 地图数组
int snake[100][2] = {0}; // 蛇身数组
int food[2] = {0}; // 食物位置数组
int snake_len = 1; // 蛇身长度
int score = 0; // 分数
void init_map(); // 初始化地图
void draw_map(); // 绘制地图
void init_snake(); // 初始化蛇身
void draw_snake(); // 绘制蛇身
void update_snake(); // 更新蛇身
void generate_food(); // 生成食物
int main() {
init_map();
init_snake();
generate_food();
while (1) {
draw_map();
draw_snake();
update_snake();
Sleep(100); // 控制蛇的移动速度
system("cls"); // 清屏
}
return 0;
}
void init_map() {
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (i == 0 || i == height - 1 || j == 0 || j == width - 1) {
map[i][j] = -1; // 墙
} else {
map[i][j] = 0; // 空地
}
}
}
}
void draw_map() {
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (map[i][j] == -1) {
printf("#"); // 绘制墙
} else if (map[i][j] == 1) {
printf("*"); // 绘制食物
} else if (map[i][j] == 2) {
printf("o"); // 绘制蛇身
} else {
printf(" "); // 绘制空地
}
}
printf("\n");
}
printf("Score: %d\n", score); // 显示分数
}
void init_snake() {
snake[0][0] = height / 2; // 初始位置为地图中央
snake[0][1] = width / 2;
map[snake[0][0]][snake[0][1]] = 2; // 将蛇头位置标记为蛇身
}
void draw_snake() {
for (int i = 0; i < snake_len; i++) {
map[snake[i][0]][snake[i][1]] = 2; // 将蛇身位置标记为蛇身
}
}
void update_snake() {
int dir = getch(); // 获取方向键输入
int dx = 0, dy = 0;
switch (dir) {
case 'w': // 上
dx = -1;
break;
case 's': // 下
dx = 1;
break;
case 'a': // 左
dy = -1;
break;
case 'd': // 右
dy = 1;
break;
default:
break;
}
int new_x = snake[0][0] + dx;
int new_y = snake[0][1] + dy;
if (new_x < 0 || new_x >= height || new_y < 0 || new_y >= width) {
// 判断是否撞墙
printf("Game Over!\n");
exit(0);
}
if (map[new_x][new_y] == -1) {
// 判断是否撞墙
printf("Game Over!\n");
exit(0);
}
if (map[new_x][new_y] == 1) {
// 判断是否吃到食物
score++;
snake_len++;
generate_food();
} else {
// 更新蛇身
map[snake[snake_len - 1][0]][snake[snake_len - 1][1]] = 0;
for (int i = snake_len - 1; i > 0; i--) {
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
}
snake[0][0] = new_x;
snake[0][1] = new_y;
}
void generate_food() {
int x, y;
do {
x = rand() % (height - 2) + 1; // 生成随机位置
y = rand() % (width - 2) + 1;
} while (map[x][y] != 0);
food[0] = x;
food[1] = y;
map[x][y] = 1; // 标记为食物
}
```
该代码使用了Windows API的`Sleep()`函数和`system("cls")`函数,因此只能在Windows操作系统上运行。如果需要在其他操作系统上运行,可以使用相应的延时函数和清屏函数替换它们。
阅读全文