用easyx写一个贪吃蛇游戏
时间: 2023-07-01 09:07:08 浏览: 44
好的,以下是一个基于 EasyX 的贪吃蛇游戏的代码示例:
```cpp
#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
const int kWidth = 800; // 窗口宽度
const int kHeight = 600; // 窗口高度
const int kBlockSize = 20; // 方块大小
const int kMaxLen = 500; // 蛇的最大长度
struct Point {
int x, y;
};
// 蛇节点
struct SnakeNode {
Point position;
int direction;
};
int main()
{
// 初始化窗口
initgraph(kWidth, kHeight);
// 初始化随机数种子
srand(time(NULL));
// 游戏循环标志
bool running = true;
// 初始化蛇
SnakeNode snake[kMaxLen];
int snakeLen = 3;
for (int i = 0; i < snakeLen; ++i) {
snake[i].position.x = (kWidth / 2) - i * kBlockSize;
snake[i].position.y = kHeight / 2;
snake[i].direction = 1; // 初始方向向右
}
// 初始化食物
Point food;
food.x = (rand() % (kWidth / kBlockSize)) * kBlockSize;
food.y = (rand() % (kHeight / kBlockSize)) * kBlockSize;
// 游戏循环
while (running) {
// 绘制背景
setfillcolor(BLACK);
solidrectangle(0, 0, kWidth, kHeight);
// 绘制食物
setfillcolor(YELLOW);
solidcircle(food.x + kBlockSize / 2, food.y + kBlockSize / 2, kBlockSize / 2);
// 绘制蛇
setfillcolor(WHITE);
for (int i = 0; i < snakeLen; ++i) {
solidrectangle(snake[i].position.x, snake[i].position.y,
snake[i].position.x + kBlockSize, snake[i].position.y + kBlockSize);
}
// 蛇移动
for (int i = snakeLen - 1; i >= 1; --i) {
snake[i].position = snake[i - 1].position;
snake[i].direction = snake[i - 1].direction;
}
switch (snake[0].direction) {
case 1: // 向右
snake[0].position.x += kBlockSize;
break;
case 2: // 向下
snake[0].position.y += kBlockSize;
break;
case 3: // 向左
snake[0].position.x -= kBlockSize;
break;
case 4: // 向上
snake[0].position.y -= kBlockSize;
break;
}
// 检测是否吃到食物
if (snake[0].position.x == food.x && snake[0].position.y == food.y) {
// 蛇长度加1
++snakeLen;
// 重新生成食物
food.x = (rand() % (kWidth / kBlockSize)) * kBlockSize;
food.y = (rand() % (kHeight / kBlockSize)) * kBlockSize;
}
// 检测是否碰到边界或自身
if (snake[0].position.x < 0 || snake[0].position.x >= kWidth ||
snake[0].position.y < 0 || snake[0].position.y >= kHeight) {
// 碰到边界,游戏结束
running = false;
}
for (int i = 1; i < snakeLen; ++i) {
if (snake[0].position.x == snake[i].position.x &&
snake[0].position.y == snake[i].position.y) {
// 碰到自身,游戏结束
running = false;
break;
}
}
// 处理用户输入
if (_kbhit()) {
int key = _getch();
switch (key) {
case 'a':
if (snake[0].direction != 1) {
snake[0].direction = 3;
}
break;
case 's':
if (snake[0].direction != 4) {
snake[0].direction = 2;
}
break;
case 'd':
if (snake[0].direction != 3) {
snake[0].direction = 1;
}
break;
case 'w':
if (snake[0].direction != 2) {
snake[0].direction = 4;
}
break;
}
}
// 延时
Sleep(100);
}
// 游戏结束,输出分数
cleardevice();
settextcolor(YELLOW);
settextstyle(40, 0, _T("Arial"));
outtextxy(kWidth / 2 - 100, kHeight / 2 - 50, _T("Game Over!"));
TCHAR scoreText[16];
_stprintf_s(scoreText, _T("Score: %d"), snakeLen - 3);
outtextxy(kWidth / 2 - 100, kHeight / 2, scoreText);
_getch();
// 退出程序
closegraph();
return 0;
}
```
运行此代码,即可在 EasyX 窗口中玩贪吃蛇游戏。