给我一个贪吃蛇c语言代码
以下是一个简单的贪吃蛇C语言代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 20 // 地图宽度
#define HEIGHT 20 // 地图高度
int map[WIDTH][HEIGHT]; // 地图
int snake[WIDTH * HEIGHT][2]; // 蛇的位置
int snake_length; // 蛇的长度
int score; // 得分
// 初始化地图
void init_map() {
for (int i = 0; i < WIDTH; i++) {
for (int j = 0; j < HEIGHT; j++) {
map[i][j] = 0;
}
}
}
// 随机生成一个食物
void generate_food() {
int x, y;
do {
x = rand() % WIDTH;
y = rand() % HEIGHT;
} while (map[x][y] != 0);
map[x][y] = -1;
}
// 初始化蛇
void init_snake() {
snake_length = 1;
snake[0][0] = WIDTH / 2;
snake[0][1] = HEIGHT / 2;
map[snake[0][0]][snake[0][1]] = 1;
}
// 判断蛇是否撞墙或撞自己
int is_collision() {
int x = snake[0][0];
int y = snake[0][1];
// 是否撞墙
if (x < 0 || x >= WIDTH || y < 0 || y >= HEIGHT) {
return 1;
}
// 是否撞自己
for (int i = 1; i < snake_length; i++) {
if (snake[i][0] == x && snake[i][1] == y) {
return 1;
}
}
return 0;
}
// 移动蛇
void move_snake(int direction) {
int x = snake[0][0];
int y = snake[0][1];
switch (direction) {
case 1: // 上
y--;
break;
case 2: // 下
y++;
break;
case 3: // 左
x--;
break;
case 4: // 右
x++;
break;
}
// 判断是否撞墙或撞自己
if (is_collision()) {
printf("Game Over!\n");
exit(0);
}
// 判断是否吃到食物
if (map[x][y] == -1) {
snake_length++;
score++;
generate_food();
}
// 移动蛇的身体
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] = x;
snake[0][1] = y;
map[x][y] = 1;
}
// 显示游戏界面
void display() {
system("cls"); // 清屏
for (int i = 0; i < WIDTH; i++) {
for (int j = 0; j < HEIGHT; j++) {
if (map[i][j] == 0) { // 空地
printf(".");
} else if (map[i][j] == 1) { // 蛇的身体
printf("*");
} else if (map[i][j] == -1) { // 食物
printf("o");
}
}
printf("\n");
}
printf("Score: %d\n", score);
}
int main() {
srand(time(NULL)); // 初始化随机数生成器
init_map(); // 初始化地图
init_snake(); // 初始化蛇
generate_food(); // 随机生成食物
while (1) {
display(); // 显示游戏界面
if (_kbhit()) { // 检测键盘输入
int c = _getch();
if (c == 72) { // 上
move_snake(1);
} else if (c == 80) { // 下
move_snake(2);
} else if (c == 75) { // 左
move_snake(3);
} else if (c == 77) { // 右
move_snake(4);
}
}
move_snake(4); // 默认向右移动
Sleep(200); // 等待200毫秒
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/E4K 著作权归作者所有。请勿转载和采集!