帮我用c语言写一个贪吃蛇游戏
时间: 2023-06-12 09:06:40 浏览: 105
全网最详细!C语言 设计贪吃蛇游戏.zip
5星 · 资源好评率100%
好的,以下是一个简单的贪吃蛇游戏的 C 代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
#define ROW 20 // 行数
#define COL 40 // 列数
int score = 0; // 得分
// 定义坐标结构体
typedef struct {
int x;
int y;
} Coordinate;
// 定义蛇结构体
typedef struct {
Coordinate head; // 头
Coordinate body[ROW * COL]; // 身体
int length; // 长度
} Snake;
// 定义食物结构体
typedef struct {
Coordinate pos; // 位置
int exist; // 是否存在
} Food;
// 初始化蛇
void initSnake(Snake *snake) {
snake->head.x = ROW / 2;
snake->head.y = COL / 2;
snake->body[0].x = snake->head.x;
snake->body[0].y = snake->head.y - 1;
snake->body[1].x = snake->head.x;
snake->body[1].y = snake->head.y - 2;
snake->length = 3;
}
// 初始化食物
void initFood(Food *food) {
food->pos.x = rand() % ROW;
food->pos.y = rand() % COL;
food->exist = 1;
}
// 打印游戏界面
void printGame(Snake *snake, Food *food) {
system("cls");
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (i == snake->head.x && j == snake->head.y) {
printf("H"); // 头
} else if (food->exist && i == food->pos.x && j == food->pos.y) {
printf("F"); // 食物
} else {
int k, flag = 0;
for (k = 0; k < snake->length; k++) {
if (i == snake->body[k].x && j == snake->body[k].y) {
printf("B"); // 身体
flag = 1;
break;
}
}
if (!flag) {
printf(" "); // 空格
}
}
}
printf("\n");
}
printf("Score: %d\n", score);
}
// 移动蛇
void moveSnake(Snake *snake) {
int i;
for (i = snake->length - 1; i > 0; i--) {
snake->body[i] = snake->body[i - 1];
}
snake->body[0] = snake->head;
}
// 判断是否吃到食物
void eatFood(Snake *snake, Food *food) {
if (snake->head.x == food->pos.x && snake->head.y == food->pos.y) {
score += 10; // 加分
snake->length++; // 增加长度
food->exist = 0; // 食物不存在
}
}
// 判断是否结束游戏
int isGameOver(Snake *snake) {
int i;
for (i = 1; i < snake->length; i++) {
if (snake->head.x == snake->body[i].x && snake->head.y == snake->body[i].y) {
return 1; // 撞到身体,游戏结束
}
}
if (snake->head.x < 0 || snake->head.x >= ROW || snake->head.y < 0 || snake->head.y >= COL) {
return 1; // 越界,游戏结束
}
return 0;
}
int main() {
srand(time(NULL));
Snake snake; // 蛇
Food food; // 食物
char ch; // 按键
initSnake(&snake);
initFood(&food);
while (1) {
printGame(&snake, &food);
if (_kbhit()) {
ch = _getch();
switch (ch) {
case 'w':
snake.head.x--;
break;
case 'a':
snake.head.y--;
break;
case 's':
snake.head.x++;
break;
case 'd':
snake.head.y++;
break;
}
}
moveSnake(&snake);
eatFood(&snake, &food);
if (food.exist == 0) {
initFood(&food);
}
if (isGameOver(&snake)) {
printGame(&snake, &food);
printf("Game Over!\n");
system("pause");
return 0;
}
Sleep(100); // 延时
}
return 0;
}
```
这个代码使用了 Windows 系统下的控制台 API,因此只能在 Windows 系统上运行。如果想在其他操作系统上运行,需要根据不同的系统和环境进行相应的修改。
阅读全文