用c语言写一个完整的贪吃蛇游戏代码
时间: 2024-03-25 19:40:48 浏览: 165
用C语言写的贪吃蛇游戏代码
好的,以下是一个简单的贪吃蛇游戏的完整C语言代码,可以在Windows操作系统上编译运行:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
// 定义游戏区域的大小
const int WIDTH = 30;
const int HEIGHT = 20;
// 定义贪吃蛇的结构体
typedef struct Snake {
int x; // 蛇头的x坐标
int y; // 蛇头的y坐标
int length; // 蛇的长度
int direction; // 蛇头移动的方向
int bodyX[WIDTH * HEIGHT]; // 蛇身的x坐标
int bodyY[WIDTH * HEIGHT]; // 蛇身的y坐标
} Snake;
// 定义食物的结构体
typedef struct Food {
int x; // 食物的x坐标
int y; // 食物的y坐标
} Food;
// 定义全局变量
Snake snake;
Food food;
int score = 0;
int speed = 200; // 蛇移动的速度,单位为毫秒
// 游戏初始化
void init() {
// 初始化蛇的位置和长度
snake.x = WIDTH / 2;
snake.y = HEIGHT / 2;
snake.length = 3;
snake.direction = 'w'; // 初始方向为向上
for (int i = 0; i < snake.length; i++) {
snake.bodyX[i] = snake.x;
snake.bodyY[i] = snake.y + i;
}
// 随机生成食物的位置
srand((unsigned)time(NULL));
food.x = rand() % WIDTH;
food.y = rand() % HEIGHT;
// 初始化得分和速度
score = 0;
speed = 200;
}
// 显示游戏画面
void display() {
system("cls"); // 清屏
// 显示游戏区域
for (int i = 0; i <= HEIGHT + 1; i++) {
for (int j = 0; j <= WIDTH + 1; j++) {
if (i == 0 || i == HEIGHT + 1 || j == 0 || j == WIDTH + 1) {
printf("#");
} else if (i == snake.y && j == snake.x) {
printf("O"); // 显示蛇头
} else if (i == food.y && j == food.x) {
printf("*"); // 显示食物
} else {
int flag = 0;
for (int k = 0; k < snake.length; k++) {
if (i == snake.bodyY[k] && j == snake.bodyX[k]) {
printf("o"); // 显示蛇身
flag = 1;
break;
}
}
if (!flag) {
printf(" ");
}
}
}
printf("\n");
}
// 显示得分和速度
printf("Score: %d\n", score);
printf("Speed: %d\n", speed);
}
// 处理用户输入
void input() {
if (_kbhit()) { // 判断是否有键盘输入
char ch = _getch();
if (ch == 'w' || ch == 'a' || ch == 's' || ch == 'd') {
if (abs(ch - snake.direction) != 2) { // 判断是否按了相反的方向
snake.direction = ch;
}
}
}
}
// 更新游戏状态
void update() {
// 更新蛇身的位置
for (int i = snake.length - 1; i > 0; i--) {
snake.bodyX[i] = snake.bodyX[i - 1];
snake.bodyY[i] = snake.bodyY[i - 1];
}
snake.bodyX[0] = snake.x;
snake.bodyY[0] = snake.y;
// 根据方向更新蛇头的位置
switch (snake.direction) {
case 'w':
snake.y--;
break;
case 'a':
snake.x--;
break;
case 's':
snake.y++;
break;
case 'd':
snake.x++;
break;
}
// 判断是否撞墙或自咬
if (snake.x < 1 || snake.x > WIDTH || snake.y < 1 || snake.y > HEIGHT) {
printf("Game over!\n");
system("pause"); // 暂停游戏,等待用户按任意键继续
init(); // 重新开始游戏
return;
}
for (int i = 1; i < snake.length; i++) {
if (snake.x == snake.bodyX[i] && snake.y == snake.bodyY[i]) {
printf("Game over!\n");
system("pause"); // 暂停游戏,等待用户按任意键继续
init(); // 重新开始游戏
return;
}
}
// 判断是否吃到食物
if (snake.x == food.x && snake.y == food.y) {
snake.length++; // 蛇长度加1
score += 10; // 得分加10
if (score % 50 == 0) {
speed -= 10; // 每得50分,速度加快10毫秒
}
food.x = rand() % WIDTH; // 重新生成食物的位置
food.y = rand() % HEIGHT;
}
}
// 主函数
int main() {
init(); // 初始化游戏
while (1) {
display(); // 显示游戏画面
input(); // 处理用户输入
update(); // 更新游戏状态
Sleep(speed); // 暂停一段时间,使蛇移动起来
}
return 0;
}
```
这个代码实现了一个简单的贪吃蛇游戏,包括蛇的移动、食物的随机生成、得分的计算、撞墙和自咬的判定等功能。你可以在Windows操作系统上编译运行这个代码,体验一下这个经典的游戏。
阅读全文