c语言easyx简单贪吃蛇
时间: 2023-09-15 08:17:59 浏览: 74
以下是一个使用easyx库实现的简单贪吃蛇游戏的C语言代码:
```c
#include <graphics.h>
#include <conio.h>
#include <time.h>
#define WIDTH 640 // 窗口宽度
#define HEIGHT 480 // 窗口高度
#define SIZE 20 // 贪吃蛇每个正方形的边长
#define MAX_LENGTH (WIDTH / SIZE) * (HEIGHT / SIZE) // 贪吃蛇最大长度
struct Snake {
int x, y; // 贪吃蛇头部坐标
int length; // 贪吃蛇长度
int direction; // 贪吃蛇运动方向
int body[MAX_LENGTH][2]; // 贪吃蛇身体各个部分的坐标
} snake;
struct Food {
int x, y; // 食物坐标
} food;
void init(); // 初始化函数
void drawSnake(); // 绘制贪吃蛇
void moveSnake(); // 移动贪吃蛇
void generateFood(); // 生成食物
bool isHitWall(); // 判断是否撞墙
bool isHitBody(); // 判断是否撞身体
bool isEatFood(); // 判断是否吃到食物
int main() {
init();
while (1) {
moveSnake();
if (isHitWall() || isHitBody()) {
break;
}
if (isEatFood()) {
generateFood();
}
cleardevice();
drawSnake();
Sleep(100);
}
closegraph();
return 0;
}
void init() {
initgraph(WIDTH, HEIGHT);
setbkcolor(WHITE);
setfillcolor(BLACK);
setcolor(BLACK);
snake.x = WIDTH / 2;
snake.y = HEIGHT / 2;
snake.length = 3;
snake.direction = VK_RIGHT;
for (int i = 0; i < snake.length; i++) {
snake.body[i][0] = snake.x - i * SIZE;
snake.body[i][1] = snake.y;
}
generateFood();
}
void drawSnake() {
for (int i = 0; i < snake.length; i++) {
fillrectangle(snake.body[i][0], snake.body[i][1], snake.body[i][0] + SIZE, snake.body[i][1] + SIZE);
}
setfillcolor(RED);
fillrectangle(food.x, food.y, food.x + SIZE, food.y + SIZE);
setfillcolor(BLACK);
}
void moveSnake() {
for (int i = snake.length - 1; i > 0; i--) {
snake.body[i][0] = snake.body[i - 1][0];
snake.body[i][1] = snake.body[i - 1][1];
}
switch (snake.direction) {
case VK_UP:
snake.y -= SIZE;
break;
case VK_DOWN:
snake.y += SIZE;
break;
case VK_LEFT:
snake.x -= SIZE;
break;
case VK_RIGHT:
snake.x += SIZE;
break;
}
snake.body[0][0] = snake.x;
snake.body[0][1] = snake.y;
}
void generateFood() {
srand((unsigned int)time(NULL));
bool flag = true;
while (flag) {
flag = false;
food.x = SIZE * (1 + rand() % (WIDTH / SIZE - 2));
food.y = SIZE * (1 + rand() % (HEIGHT / SIZE - 2));
for (int i = 0; i < snake.length; i++) {
if (food.x == snake.body[i][0] && food.y == snake.body[i][1]) {
flag = true;
break;
}
}
}
}
bool isHitWall() {
if (snake.x < SIZE || snake.x > WIDTH - 2 * SIZE || snake.y < SIZE || snake.y > HEIGHT - 2 * SIZE) {
return true;
}
else {
return false;
}
}
bool isHitBody() {
for (int i = 1; i < snake.length; i++) {
if (snake.body[i][0] == snake.x && snake.body[i][1] == snake.y) {
return true;
}
}
return false;
}
bool isEatFood() {
if (snake.x == food.x && snake.y == food.y) {
snake.length++;
snake.body[snake.length - 1][0] = snake.body[snake.length - 2][0];
snake.body[snake.length - 1][1] = snake.body[snake.length - 2][1];
return true;
}
else {
return false;
}
}
```
在该代码中,我们使用了`graphics.h`和`conio.h`两个头文件来实现图形界面和键盘输入的功能。其中,`init()`函数负责初始化贪吃蛇和食物的位置、长度、方向等信息,`drawSnake()`函数负责绘制贪吃蛇和食物,`moveSnake()`函数负责移动贪吃蛇,`generateFood()`函数负责随机生成食物,并判断其是否与贪吃蛇身体重叠,`isHitWall()`函数和`isHitBody()`函数分别用于判断贪吃蛇是否撞墙和撞身体,`isEatFood()`函数用于判断贪吃蛇是否吃到了食物。在主函数中,我们使用一个循环不断移动贪吃蛇,并根据不同情况终止游戏。
在编写完代码后,我们需要在编译选项中添加`-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32`这些库文件,才能正常编译和运行程序。