用C语言写一个贪吃蛇小游戏
时间: 2023-08-23 18:05:53 浏览: 92
好的,下面是一个简单的贪吃蛇小游戏的C语言代码,希望对你有帮助:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
// 定义游戏区域大小
#define WIDTH 40
#define HEIGHT 20
// 定义蛇的最大长度
#define MAX_LENGTH 100
// 定义方向
#define UP 1
#define DOWN 2
#define LEFT 3
#define RIGHT 4
// 定义蛇的结构体
struct snake {
int x;
int y;
} s[MAX_LENGTH];
// 定义食物的结构体
struct food {
int x;
int y;
} f;
// 定义游戏状态
int direction; // 蛇的方向
int length; // 蛇的长度
int score; // 分数
int gameover; // 游戏结束标志
// 初始化游戏状态
void init() {
// 初始化蛇的位置和长度
s[0].x = WIDTH / 2;
s[0].y = HEIGHT / 2;
length = 1;
direction = RIGHT;
gameover = 0;
// 随机生成食物的位置
srand((unsigned)time(NULL));
f.x = rand() % (WIDTH - 2) + 1;
f.y = rand() % (HEIGHT - 2) + 1;
score = 0;
}
// 显示游戏界面
void display() {
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 == f.y && j == f.x) {
printf("*");
} else {
int flag = 0;
for (int k = 0; k < length; k++) {
if (s[k].x == j && s[k].y == i) {
printf("O");
flag = 1;
break;
}
}
if (!flag) {
printf(" ");
}
}
}
printf("\n");
}
// 输出分数信息
printf("Score: %d\n", score);
}
// 蛇移动
void move() {
// 记录蛇尾的位置
int tail_x = s[length - 1].x;
int tail_y = s[length - 1].y;
// 移动蛇身
for (int i = length - 1; i > 0; i--) {
s[i].x = s[i - 1].x;
s[i].y = s[i - 1].y;
}
// 移动蛇头
switch (direction) {
case UP:
s[0].y--;
break;
case DOWN:
s[0].y++;
break;
case LEFT:
s[0].x--;
break;
case RIGHT:
s[0].x++;
break;
}
// 判断是否吃到食物
if (s[0].x == f.x && s[0].y == f.y) {
// 增加分数和长度
score += 10;
length++;
// 重新生成食物
f.x = rand() % (WIDTH - 2) + 1;
f.y = rand() % (HEIGHT - 2) + 1;
}
// 判断是否撞墙
if (s[0].x == 0 || s[0].x == WIDTH - 1 || s[0].y == 0 || s[0].y == HEIGHT - 1) {
gameover = 1;
}
// 判断是否撞到自己
for (int i = 1; i < length; i++) {
if (s[0].x == s[i].x && s[0].y == s[i].y) {
gameover = 1;
}
}
// 把蛇尾移动到新的位置
s[length - 1].x = tail_x;
s[length - 1].y = tail_y;
}
// 处理键盘输入
void input() {
if (_kbhit()) {
switch (_getch()) {
case 'w':
case 'W':
if (direction != DOWN) {
direction = UP;
}
break;
case 's':
case 'S':
if (direction != UP) {
direction = DOWN;
}
break;
case 'a':
case 'A':
if (direction != RIGHT) {
direction = LEFT;
}
break;
case 'd':
case 'D':
if (direction != LEFT) {
direction = RIGHT;
}
break;
case 'q':
case 'Q':
gameover = 1;
break;
}
}
}
// 主函数
int main() {
init();
while (!gameover) {
display();
move();
input();
Sleep(100); // 控制游戏速度
}
printf("Game Over! Score: %d\n", score);
return 0;
}
```
注意:此代码仅供参考,可能存在不足之处,如有问题欢迎指正。
阅读全文