c语言实现贪吃蛇
时间: 2023-07-13 16:12:19 浏览: 154
好的,以下是一个简单的C语言实现贪吃蛇的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 40 // 地图宽度
#define HEIGHT 20 // 地图高度
#define SNAKE_MAX_LENGTH 100 // 蛇的最大长度
int map[HEIGHT][WIDTH]; // 地图数组,0表示空格,1表示蛇身,2表示食物
int snake[SNAKE_MAX_LENGTH][2]; // 蛇身坐标数组,存储每个蛇节的横纵坐标
int snake_length = 3; // 蛇的长度
int food_x, food_y; // 食物的横纵坐标
int direction = 0; // 蛇的移动方向,0表示上,1表示右,2表示下,3表示左
// 初始化地图
void init_map() {
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
map[i][j] = 0;
}
}
}
// 初始化蛇
void init_snake() {
snake[0][0] = HEIGHT / 2;
snake[0][1] = WIDTH / 2;
map[snake[0][0]][snake[0][1]] = 1;
snake[1][0] = HEIGHT / 2 + 1;
snake[1][1] = WIDTH / 2;
map[snake[1][0]][snake[1][1]] = 1;
snake[2][0] = HEIGHT / 2 + 2;
snake[2][1] = WIDTH / 2;
map[snake[2][0]][snake[2][1]] = 1;
}
// 生成食物
void generate_food() {
int x, y;
do {
x = rand() % HEIGHT;
y = rand() % WIDTH;
} while (map[x][y] != 0);
food_x = x;
food_y = y;
map[food_x][food_y] = 2;
}
// 显示地图
void show_map() {
system("cls"); // 清屏
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
if (i == food_x && j == food_y) { // 食物
printf("O");
} else if (map[i][j] == 1) { // 蛇身
printf("#");
} else { // 空格
printf(" ");
}
}
printf("\n");
}
}
// 检测是否吃到食物
void check_eat_food() {
if (snake[0][0] == food_x && snake[0][1] == food_y) {
snake_length++;
generate_food();
}
}
// 检测是否撞到墙或自己
void check_dead() {
if (snake[0][0] < 0 || snake[0][0] >= HEIGHT || snake[0][1] < 0 || snake[0][1] >= WIDTH) {
exit(0);
}
for (int i = 1; i < snake_length; i++) {
if (snake[i][0] == snake[0][0] && snake[i][1] == snake[0][1]) {
exit(0);
}
}
}
// 移动蛇
void move_snake() {
// 计算蛇头新的位置
int new_head_x = snake[0][0], new_head_y = snake[0][1];
switch (direction) {
case 0: new_head_x--; break; // 上
case 1: new_head_y++; break; // 右
case 2: new_head_x++; break; // 下
case 3: new_head_y--; break; // 左
}
// 更新蛇身坐标数组和地图数组
for (int i = snake_length - 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]] = 1;
}
snake[0][0] = new_head_x;
snake[0][1] = new_head_y;
map[snake[0][0]][snake[0][1]] = 1;
}
// 键盘输入事件
void keyboard_event() {
if (_kbhit()) { // 判断是否有键盘输入
char ch = _getch();
switch (ch) {
case 'w': direction = 0; break; // 上
case 'd': direction = 1; break; // 右
case 's': direction = 2; break; // 下
case 'a': direction = 3; break; // 左
}
}
}
int main() {
// 初始化
srand(time(NULL)); // 设置随机数种子
init_map();
init_snake();
generate_food();
// 游戏循环
while (1) {
show_map();
check_eat_food();
check_dead();
move_snake();
keyboard_event();
Sleep(100); // 等待一段时间,控制蛇的移动速度
}
return 0;
}
```
该示例代码使用了Windows系统的控制台API,如果在其他操作系统下运行需要进行适当修改。
阅读全文