c语言写一个贪吃蛇小游戏
时间: 2024-12-21 13:27:29 浏览: 3
在C语言中编写一个简单的贪吃蛇游戏需要使用基本的图形界面操作,如控制台输入输出和数组来表示游戏状态。以下是游戏的基本框架:
```c
#include <stdio.h>
#include <conio.h> // 这里用于暂停键盘输入
#define SNAKE_SPEED 5
#define SNAKE_SIZE 10
#define SNAKE_LENGTH 3
#define BOARD_WIDTH 20
#define BOARD_HEIGHT 10
typedef struct {
int x, y; // 蛇的位置
} Snake;
Snake snake[SNAKE_LENGTH];
bool eaten_food = false;
void draw_board() {
// 清空屏幕
system("cls");
// 绘制蛇的身体
for(int i = 0; i < SNAKE_LENGTH; i++) {
printf("| ");
if(i == snake[0].x && i == snake[0].y)
printf("*"); // 显示头部
else
printf(" ");
}
printf("|\n");
// 如果吃到食物,更新蛇和显示新位置
if(eaten_food) {
eaten_food = false;
snake[0].x = rand() % BOARD_WIDTH; // 食物随机位置
snake[0].y = rand() % BOARD_HEIGHT;
}
// 画出边界和食物
for(int i = 0; i < BOARD_WIDTH; i++)
printf("| ");
printf("|\n");
printf("+-----------------\n");
printf("| %d,%d |", snake[0].x + 1, snake[0].y + 1);
}
int main() {
srand(time(NULL));
snake[0].x = BOARD_WIDTH / 2 - SNAKE_SIZE / 2;
snake[0].y = BOARD_HEIGHT / 2;
while(true) {
draw_board(); // 显示当前画面
if(snake[0].x >= BOARD_WIDTH || snake[0].x < 0 ||
snake[0].y >= BOARD_HEIGHT || snake[0].y < 0) {
printf("Game Over! You hit the border.\n");
break;
}
// 根据方向键移动蛇
char direction = _getch(); // 获取按键
switch(direction) {
case 'w': snake[0].y -= SNAKE_SPEED; break;
case 's': snake[0].y += SNAKE_SPEED; break;
case 'a': snake[0].x -= SNAKE_SPEED; break;
case 'd': snake[0].x += SNAKE_SPEED; break;
}
// 检查是否吃到自己
if(snake[0].x == snake[i].x && snake[0].y == snake[i].y && i != 0) {
printf("Game Over! You ate yourself.\n");
break;
}
// 吃掉食物
if(snake[0].x == snake[1].x && snake[0].y == snake[1].y) {
eaten_food = true;
snake[SNAKE_LENGTH - 1] = snake[SNAKE_LENGTH - 2]; // 扩展蛇身
}
}
return 0;
}
```
注意:以上代码假设你有`_getch()`函数可用,它可以从控制台获取单个字符。在一些系统上可能需要替换为其他方法。这个简化的例子不包含碰撞检测和更复杂的逻辑。
阅读全文