用C语言写一个贪吃蛇
时间: 2024-09-13 13:12:37 浏览: 46
编写一个完整的贪吃蛇游戏需要大量的代码,涉及到窗口绘制、键盘输入处理、游戏状态管理等多个部分。这里我将给出一个简化的C语言版本,使用文本模式来展示基本的游戏框架,实际的游戏会更复杂,并可能需要结合图形库如ncurses来完成。
```c
#include <stdio.h>
#include <conio.h> // Windows系统下的键盘输入函数
#define BOARD_SIZE 10
#define SNAKE_LENGTH 5
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
struct Snake {
int x[BOARD_SIZE * BOARD_SIZE], y[BOARD_SIZE * BOARD_SIZE];
int length;
};
void moveSnake(struct Snake* snake) {
if (snake->length > 1 && snake->x[snake->length - 1] == snake->x[snake->length - 2] &&
snake->y[snake->length - 1] == snake->y[snake->length - 2]) {
for (int i = snake->length - 1; i > 0; i--) {
snake->x[i] = snake->x[i - 1];
snake->y[i] = snake->y[i - 1];
}
} else {
snake->x[snake->length] = snake->x[snake->length - 1] + 1;
snake->y[snake->length] = snake->y[snake->length - 1];
}
}
int main() {
struct Snake snake = { {0}, {0} };
snake.length = 1;
while (TRUE) {
printf("\nSnakelord's World\n");
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (i == snake.y[0] && j == snake.x[0])
printf("O");
else
printf(" ");
}
printf("\n");
}
// Move the snake based on user input
switch (_getch()) {
case UP: snake.y[0]--;
break;
case DOWN: snake.y[0]++;
break;
case LEFT: snake.x[0]--;
break;
case RIGHT: snake.x[0]++;
break;
}
moveSnake(&snake);
// Check for game over conditions (e.g., hitting a wall or eating its own tail)
if (snake.x[snake.length] < 0 || snake.x[snake.length] >= BOARD_SIZE ||
snake.y[snake.length] < 0 || snake.y[snake.length] >= BOARD_SIZE ||
// ... more checks here ...
) {
printf("Game Over!\n");
return 0;
}
// Add new block to the snake head when it eats food (for this basic example, we don't add anything)
}
}
```
这只是一个非常基础的框架,真正的游戏还需要处理用户输入判断是否吃到食物,增加食物生成,以及更复杂的边界检查等。如果你想要一个完整的游戏体验,建议使用专门的编程环境和库,比如Unity或pygame。
阅读全文