用c语言编写贪吃蛇游戏程序
时间: 2023-12-20 11:52:50 浏览: 75
用c语言编写的贪吃蛇程序
好的,下面是一个简单的贪吃蛇游戏程序的示例代码,使用C语言编写。
```
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define MAX_LEN 1000
// 定义游戏区域的大小
#define ROW 20
#define COL 30
// 定义蛇的结构体
typedef struct Snake {
int x; // 蛇头的横坐标
int y; // 蛇头的纵坐标
int len; // 蛇的长度
int body[MAX_LEN][2]; // 蛇的身体坐标
} Snake;
// 定义食物的结构体
typedef struct Food {
int x; // 食物的横坐标
int y; // 食物的纵坐标
} Food;
// 定义游戏状态的枚举类型
enum GameState {
INIT, // 游戏初始化
RUN, // 游戏运行状态
END // 游戏结束状态
};
// 初始化游戏状态
int gameState = INIT;
// 初始化蛇
Snake snake;
// 初始化食物
Food food;
// 初始化游戏区域
char map[ROW][COL];
// 初始化分数
int score = 0;
// 隐藏光标
void HideCursor() {
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
// 设置光标位置
void SetCursorPosition(int x, int y) {
COORD position = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}
// 初始化游戏区域
void InitMap() {
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (i == 0 || i == ROW - 1 || j == 0 || j == COL - 1) {
map[i][j] = '#';
} else {
map[i][j] = ' ';
}
}
}
}
// 初始化蛇
void InitSnake() {
snake.x = 5;
snake.y = 5;
snake.len = 3;
int i;
for (i = 0; i < snake.len; i++) {
snake.body[i][0] = snake.x + i;
snake.body[i][1] = snake.y;
}
}
// 初始化食物
void InitFood() {
food.x = rand() % (COL - 2) + 1;
food.y = rand() % (ROW - 2) + 1;
}
// 渲染游戏
void Render() {
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (i == snake.y && j == snake.x) {
printf("O");
} else if (i == food.y && j == food.x) {
printf("*");
} else {
printf("%c", map[i][j]);
}
}
printf("\n");
}
printf("Score: %d\n", score);
}
// 更新游戏状态
void Update() {
// 检查游戏是否结束
if (snake.x == 0 || snake.x == COL - 1 || snake.y == 0 || snake.y == ROW - 1) {
gameState = END;
return;
}
int i;
for (i = 1; i < snake.len; i++) {
if (snake.x == snake.body[i][0] && snake.y == snake.body[i][1]) {
gameState = END;
return;
}
}
// 检查是否吃到食物
if (snake.x == food.x && snake.y == food.y) {
score++;
snake.len++;
snake.body[snake.len - 1][0] = snake.x;
snake.body[snake.len - 1][1] = snake.y;
InitFood();
}
// 更新蛇的位置
for (i = snake.len - 1; i >= 1; i--) {
snake.body[i][0] = snake.body[i - 1][0];
snake.body[i][1] = snake.body[i - 1][1];
}
snake.body[0][0] = snake.x;
snake.body[0][1] = snake.y;
}
// 处理输入
void HandleInput() {
if (_kbhit()) {
char c = _getch();
switch (c) {
case 'w':
if (snake.body[1][1] != snake.y - 1) {
snake.y--;
}
break;
case 'a':
if (snake.body[1][0] != snake.x + 1) {
snake.x--;
}
break;
case 's':
if (snake.body[1][1] != snake.y + 1) {
snake.y++;
}
break;
case 'd':
if (snake.body[1][0] != snake.x - 1) {
snake.x++;
}
break;
case 'q':
gameState = END;
break;
default:
break;
}
}
}
// 游戏循环
void GameLoop() {
while (gameState != END) {
if (gameState == INIT) {
InitMap();
InitSnake();
InitFood();
gameState = RUN;
} else if (gameState == RUN) {
system("cls");
HandleInput();
Update();
Render();
Sleep(100);
}
}
printf("Game Over!\n");
}
int main() {
HideCursor();
GameLoop();
return 0;
}
```
这个程序使用了Windows的Console API,在Windows系统下编译并运行即可。
阅读全文