贪吃蛇c++代码easyx库
时间: 2023-09-23 15:12:26 浏览: 133
基于easyx的贪吃蛇代码
好的,以下是一个简单的贪吃蛇C代码,使用了EasyX图形库:
```c
#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#define WIDTH 30
#define HEIGHT 20
#define BLOCK_SIZE 20
int snake[WIDTH * HEIGHT][2]; // 蛇身数组
int food[2]; // 食物位置
int len = 4; // 蛇身长度
int score = 0; // 得分
int dir = 1; // 蛇头朝向,1为右,2为下,3为左,4为上
// 画方块
void draw_block(int x, int y, COLORREF color) {
setfillcolor(color);
setlinecolor(color);
fillrectangle(x * BLOCK_SIZE, y * BLOCK_SIZE,
(x + 1) * BLOCK_SIZE, (y + 1) * BLOCK_SIZE);
}
// 画蛇
void draw_snake() {
draw_block(snake[0][0], snake[0][1], RGB(255, 0, 0)); // 画蛇头
for (int i = 1; i < len; i++) {
draw_block(snake[i][0], snake[i][1], RGB(0, 255, 0)); // 画蛇身
}
}
// 移动蛇
void move_snake() {
int head_x = snake[0][0];
int head_y = snake[0][1];
switch (dir) {
case 1: head_x++; break;
case 2: head_y++; break;
case 3: head_x--; break;
case 4: head_y--; break;
}
if (head_x < 0) head_x = WIDTH - 1;
if (head_x >= WIDTH) head_x = 0;
if (head_y < 0) head_y = HEIGHT - 1;
if (head_y >= HEIGHT) head_y = 0;
// 判断是否吃到食物
if (head_x == food[0] && head_y == food[1]) {
len++;
score++;
food[0] = rand() % WIDTH;
food[1] = rand() % HEIGHT;
}
// 移动蛇身
for (int i = len - 1; i > 0; i--) {
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
// 移动蛇头
snake[0][0] = head_x;
snake[0][1] = head_y;
}
// 画食物
void draw_food() {
draw_block(food[0], food[1], RGB(0, 0, 255));
}
// 检查游戏是否结束
bool check_gameover() {
for (int i = 1; i < len; i++) {
if (snake[i][0] == snake[0][0] && snake[i][1] == snake[0][1]) {
return true;
}
}
return false;
}
int main() {
srand((unsigned)time(NULL)); // 初始化随机数种子
initgraph(WIDTH * BLOCK_SIZE, HEIGHT * BLOCK_SIZE, SHOWCONSOLE); // 初始化图形界面
setbkcolor(WHITE); // 设置背景颜色
settextcolor(BLACK); // 设置文字颜色
settextstyle(20, 0, _T("黑体")); // 设置文字样式
food[0] = rand() % WIDTH; // 随机生成初始食物
food[1] = rand() % HEIGHT;
snake[0][0] = rand() % WIDTH; // 随机生成初始蛇头
snake[0][1] = rand() % HEIGHT;
while (1) {
// 画游戏界面
cleardevice();
draw_snake();
draw_food();
// 显示得分
TCHAR str[20];
_stprintf_s(str, _T("得分:%d"), score);
outtextxy(10, 10, str);
// 移动蛇
move_snake();
// 检查游戏是否结束
if (check_gameover()) {
MessageBox(NULL, _T("游戏结束!"), _T("贪吃蛇"), MB_OK);
break;
}
// 监听方向键
if (_kbhit()) {
int key = _getch();
if (key == 224) {
key = _getch();
switch (key) {
case 72: dir = 4; break;
case 80: dir = 2; break;
case 75: dir = 3; break;
case 77: dir = 1; break;
}
}
}
// 等待一段时间
Sleep(100);
}
closegraph(); // 关闭图形界面
return 0;
}
```
这段代码使用了EasyX图形库,需要在编译时链接EasyX库文件。在Visual Studio中,可以将EasyX库文件夹复制到项目目录下,然后在项目属性中设置附加包含目录和附加库目录,最后在链接器中添加所需的EasyX库文件即可。
阅读全文