用c语言编写一个贪吃蛇游戏
时间: 2023-12-07 22:02:59 浏览: 57
好的,下面是一个简单的贪吃蛇游戏的 C 语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define HEIGHT 20
#define WIDTH 30
int snake[HEIGHT * WIDTH][2]; // 蛇身数组
int food[2]; // 食物位置
int len = 3; // 蛇身长度
int dir = 77; // 蛇头方向,默认向右
int score = 0; // 得分
int gameover = 0; // 游戏结束标志
// 初始化游戏
void init() {
// 随机生成食物位置
srand((unsigned)time(NULL));
food[0] = rand() % HEIGHT;
food[1] = rand() % WIDTH;
// 初始化蛇头和蛇身
snake[0][0] = HEIGHT / 2;
snake[0][1] = WIDTH / 2;
for (int i = 1; i < len; i++) {
snake[i][0] = snake[0][0];
snake[i][1] = snake[0][1] - i;
}
}
// 绘制游戏界面
void draw() {
system("cls"); // 清屏
printf("Score: %d\n", score);
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
if (i == snake[0][0] && j == snake[0][1]) { // 蛇头
printf("O");
} else if (i == food[0] && j == food[1]) { // 食物
printf("X");
} else {
int flag = 0; // 标记该位置是否为蛇身
for (int k = 1; k < len; k++) {
if (i == snake[k][0] && j == snake[k][1]) {
printf("o");
flag = 1;
break;
}
}
if (!flag) printf(" "); // 空格
}
}
printf("\n");
}
}
// 判断游戏是否结束
void check_gameover() {
// 蛇头碰到边界
if (snake[0][0] < 0 || snake[0][0] >= HEIGHT || snake[0][1] < 0 || snake[0][1] >= WIDTH) {
gameover = 1;
return;
}
// 蛇头碰到蛇身
for (int i = 1; i < len; i++) {
if (snake[0][0] == snake[i][0] && snake[0][1] == snake[i][1]) {
gameover = 1;
return;
}
}
}
// 移动蛇
void move() {
// 保存蛇尾位置
int tail[2];
tail[0] = snake[len - 1][0];
tail[1] = snake[len - 1][1];
// 移动蛇身
for (int i = len - 1; i > 0; i--) {
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
// 移动蛇头
switch (dir) {
case 72: snake[0][0]--; break; // 上
case 80: snake[0][0]++; break; // 下
case 75: snake[0][1]--; break; // 左
case 77: snake[0][1]++; break; // 右
}
// 判断是否吃到食物
if (snake[0][0] == food[0] && snake[0][1] == food[1]) {
// 在蛇尾添加一个新的身体
snake[len][0] = tail[0];
snake[len][1] = tail[1];
len++;
score++;
// 重新生成食物位置
food[0] = rand() % HEIGHT;
food[1] = rand() % WIDTH;
}
}
int main() {
init(); // 初始化游戏
while (!gameover) {
draw(); // 绘制游戏界面
check_gameover(); // 判断游戏是否结束
if (gameover) break;
if (_kbhit()) { // 检测键盘输入
char c = _getch();
if (c == 72 || c == 80 || c == 75 || c == 77) { // 上下左右键
if (dir != c) dir = c; // 避免掉头
}
}
move(); // 移动蛇
Sleep(100); // 等待100毫秒,控制速度
}
printf("Game Over! Score: %d\n", score);
return 0;
}
```
这是一个简单的控制台版贪吃蛇游戏,实现了基本的功能,如蛇身移动、食物生成和碰撞检测等。
阅读全文