用c语言写一个贪吃蛇小游戏的代码
时间: 2024-09-17 21:07:58 浏览: 78
好的,贪吃蛇小游戏是一个经典的游戏,也是很多人学习C语言时的练手项目之一。下面是一个简单的贪吃蛇游戏代码,你可以参考一下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
#define WIDTH 30 // 游戏窗口宽度
#define HEIGHT 20 // 游戏窗口高度
#define SNAKE_LENGTH 5 // 初始贪吃蛇长度
#define FOOD_COUNT 5 // 初始食物数量
typedef struct _point {
int x;
int y;
} Point;
Point snake[WIDTH * HEIGHT]; // 贪吃蛇
Point foods[WIDTH * HEIGHT]; // 食物
int score = 0; // 得分
int snake_length = SNAKE_LENGTH; // 贪吃蛇长度
int food_count = FOOD_COUNT; // 食物数量
void init(); // 初始化游戏
void draw(); // 绘制游戏界面
void update(); // 更新游戏状态
void input(); // 处理用户输入
void generate_food(); // 生成食物
int main() {
init();
while (1) {
draw();
update();
input();
Sleep(100); // 控制游戏速度
}
return 0;
}
void init() {
// 初始化贪吃蛇位置
int x = WIDTH / 2, y = HEIGHT / 2;
for (int i = 0; i < snake_length; i++) {
snake[i].x = x - i;
snake[i].y = y;
}
// 初始化食物位置
generate_food();
}
void draw() {
system("cls"); // 清屏
// 绘制游戏界面
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
if (i == 0 || i == HEIGHT - 1 || j == 0 || j == WIDTH - 1) {
printf("#");
} else if (i == snake.y && j == snake.x) {
printf("O");
} else {
int flag = 0;
for (int k = 0; k < food_count; k++) {
if (foods[k].x == j && foods[k].y == i) {
printf("$");
flag = 1;
break;
}
}
if (!flag) printf(" ");
}
}
printf("\n");
}
printf("score: %d\n", score);
}
void update() {
// 移动贪吃蛇
for (int i = snake_length - 1; i > 0; i--) {
snake[i].x = snake[i - 1].x;
snake[i].y = snake[i - 1].y;
}
switch (getch()) {
case 'w':
snake.y--;
break;
case 's':
snake.y++;
break;
case 'a':
snake.x--;
break;
case 'd':
snake.x++;
break;
default:
break;
}
// 判断是否吃到食物
for (int i = 0; i < food_count; i++) {
if (snake.x == foods[i].x && snake.y == foods[i].y) {
score++;
snake_length++;
generate_food();
}
}
// 判断是否撞墙或自噬
if (snake.x == 0 || snake.x == WIDTH - 1 ||
snake.y == 0 || snake.y == HEIGHT - 1) {
printf("Game over!\n");
exit(0);
}
for (int i = 1; i < snake_length; i++) {
if (snake.x == snake[i].x && snake.y == snake[i].y) {
printf("Game over!\n");
exit(0);
}
}
}
void input() {
if (_kbhit()) getch(); // 处理多余输入
}
void generate_food() {
// 随机生成食物位置
srand(time(NULL));
for (int i = 0; i < food_count; i++) {
int x, y;
do {
x = rand() % (WIDTH - 2) + 1;
y = rand() % (HEIGHT - 2) + 1;
} while (snake.x == x && snake.y == y);
foods[i].x = x;
foods[i].y = y;
}
}
阅读全文