c语言贪吃蛇游戏代码
时间: 2023-08-12 10:19:34 浏览: 139
以下是一份简单的 C 语言贪吃蛇游戏代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 30 // 游戏区域宽度
#define HEIGHT 20 // 游戏区域高度
#define SNAKE_INIT_LEN 4 // 贪吃蛇初始长度
enum Direction {UP, DOWN, LEFT, RIGHT}; // 枚举方向
int snake[WIDTH * HEIGHT][2]; // 贪吃蛇身体坐标
int food[2]; // 食物坐标
int snake_len; // 贪吃蛇当前长度
enum Direction dir; // 贪吃蛇当前方向
void init_game() {
// 初始化贪吃蛇
snake_len = SNAKE_INIT_LEN;
for (int i = 0; i < snake_len; i++) {
snake[i][0] = WIDTH / 2 + i;
snake[i][1] = HEIGHT / 2;
}
// 随机生成食物
srand((unsigned) time(NULL));
food[0] = rand() % WIDTH;
food[1] = rand() % HEIGHT;
// 初始化方向
dir = RIGHT;
}
void draw_game() {
// 清空屏幕
system("cls");
// 绘制游戏区域
for (int y = 0; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++) {
if (x == 0 || x == WIDTH - 1 || y == 0 || y == HEIGHT - 1) {
printf("#");
} else if (x == food[0] && y == food[1]) {
printf("$");
} else {
int is_snake_body = 0;
for (int i = 0; i < snake_len; i++) {
if (x == snake[i][0] && y == snake[i][1]) {
printf("O");
is_snake_body = 1;
break;
}
}
if (!is_snake_body) {
printf(" ");
}
}
}
printf("\n");
}
}
void update_game() {
// 移动贪吃蛇
int head_x = snake[0][0], head_y = snake[0][1];
switch (dir) {
case UP:
head_y--;
break;
case DOWN:
head_y++;
break;
case LEFT:
head_x--;
break;
case RIGHT:
head_x++;
break;
}
// 判断是否吃到食物
if (head_x == food[0] && head_y == food[1]) {
snake_len++;
food[0] = rand() % WIDTH;
food[1] = rand() % HEIGHT;
}
// 移动贪吃蛇身体
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] = head_x;
snake[0][1] = head_y;
// 判断是否撞墙或撞自己
if (head_x == 0 || head_x == WIDTH - 1 || head_y == 0 || head_y == HEIGHT - 1) {
printf("Game Over!");
exit(0);
}
for (int i = 1; i < snake_len; i++) {
if (head_x == snake[i][0] && head_y == snake[i][1]) {
printf("Game Over!");
exit(0);
}
}
}
int main() {
init_game();
while (1) {
draw_game();
update_game();
Sleep(100);
if (_kbhit()) {
char c = _getch();
switch (c) {
case 'w':
dir = UP;
break;
case 's':
dir = DOWN;
break;
case 'a':
dir = LEFT;
break;
case 'd':
dir = RIGHT;
break;
}
}
}
return 0;
}
```
代码解释:
1. `init_game()` 函数用于初始化游戏,包括初始化贪吃蛇、随机生成食物等。
2. `draw_game()` 函数用于绘制游戏画面,包括游戏区域、贪吃蛇、食物等。
3. `update_game()` 函数用于更新游戏状态,包括移动贪吃蛇、判断是否吃到食物、判断是否撞墙或撞自己等。
4. `main()` 函数中使用一个无限循环不断更新和绘制游戏,并且通过 `_kbhit()` 和 `_getch()` 函数来获取用户输入的方向。`Sleep()` 函数用于控制游戏速度。
这份代码可能还有一些问题,但是可以作为一个简单的贪吃蛇游戏的基础实现。
阅读全文