贪吃蛇C语言代码示例:从入门到上手
贪吃蛇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;
}
代码说明:
- 地图: 使用二维数组
map表示游戏地图,0 代表空地,1 代表蛇的身体,-1 代表食物。 - 蛇: 使用二维数组
snake保存蛇的坐标,snake_length记录蛇的长度。 - 食物: 使用
generate_food()函数随机生成食物。 - 碰撞检测: 使用
is_collision()函数判断蛇是否撞墙或撞自己。 - 移动: 使用
move_snake()函数根据方向移动蛇。 - 显示: 使用
display()函数显示游戏界面。
运行方法:
- 将代码保存为
snake.c文件。 - 使用 C 编译器编译代码,例如
gcc snake.c -o snake。 - 运行可执行文件
snake。
代码改进方向:
- 可以添加更多的游戏功能,例如游戏关卡、得分排名等。
- 可以优化游戏逻辑,提高游戏效率。
- 可以使用图形库绘制更美观的界面。
更多学习资料:
原文地址: https://www.cveoy.top/t/topic/lUYn 著作权归作者所有。请勿转载和采集!