c++贪吃蛇easyx代码
时间: 2023-07-24 12:58:08 浏览: 152
以下是一个简单的 C++ 贪吃蛇的 EasyX 代码示例:
```cpp
#include <graphics.h>
#include <conio.h>
#include <time.h>
const int WIDTH = 20; // 游戏区域宽度
const int HEIGHT = 20; // 游戏区域高度
const int CELL_SIZE = 20; // 每个格子的大小
int headX, headY; // 蛇头的位置
int foodX, foodY; // 食物的位置
int snake[WIDTH * HEIGHT]; // 蛇身的位置
int length = 1; // 蛇身的长度
enum Direction { UP, DOWN, LEFT, RIGHT };
Direction dir = RIGHT; // 蛇头的移动方向
void init(); // 初始化
void draw(); // 绘制游戏界面
void generateFood(); // 生成食物
bool move(); // 移动蛇头
bool checkCollision(); // 检查碰撞
bool eatFood(); // 吃食物
int main() {
init();
while (true) {
draw();
if (!_kbhit()) { // 没有按键按下时移动
if (!move()) break;
} else { // 有按键按下时改变蛇头方向
int ch = _getch();
switch (ch) {
case 'w':
case 'W':
if (dir != DOWN) dir = UP;
break;
case 's':
case 'S':
if (dir != UP) dir = DOWN;
break;
case 'a':
case 'A':
if (dir != RIGHT) dir = LEFT;
break;
case 'd':
case 'D':
if (dir != LEFT) dir = RIGHT;
break;
}
}
delay(100); // 暂停一段时间,控制游戏速度
}
closegraph();
return 0;
}
void init() {
srand(time(NULL)); // 初始化随机数生成器
initgraph(WIDTH * CELL_SIZE, HEIGHT * CELL_SIZE, SHOWCONSOLE); // 初始化图形界面
setbkcolor(WHITE); // 设置背景颜色为白色
cleardevice(); // 清屏
headX = WIDTH / 2; // 蛇头初始位置为中间
headY = HEIGHT / 2;
generateFood(); // 生成食物
snake[0] = headX + headY * WIDTH; // 蛇身初始位置为蛇头位置
}
void draw() {
cleardevice(); // 清屏
// 绘制蛇头
setfillcolor(BLUE);
fillrectangle(headX * CELL_SIZE, headY * CELL_SIZE, (headX + 1) * CELL_SIZE, (headY + 1) * CELL_SIZE);
// 绘制蛇身
setfillcolor(GREEN);
for (int i = 1; i < length; i++) {
int x = snake[i] % WIDTH;
int y = snake[i] / WIDTH;
fillrectangle(x * CELL_SIZE, y * CELL_SIZE, (x + 1) * CELL_SIZE, (y + 1) * CELL_SIZE);
}
// 绘制食物
setfillcolor(RED);
fillrectangle(foodX * CELL_SIZE, foodY * CELL_SIZE, (foodX + 1) * CELL_SIZE, (foodY + 1) * CELL_SIZE);
}
void generateFood() {
while (true) {
foodX = rand() % WIDTH;
foodY = rand() % HEIGHT;
bool overlap = false;
for (int i = 0; i < length; i++) {
if (foodX == snake[i] % WIDTH && foodY == snake[i] / WIDTH) {
overlap = true;
break;
}
}
if (!overlap) break;
}
}
bool move() {
int newHeadX = headX, newHeadY = headY;
switch (dir) {
case UP:
newHeadY--;
break;
case DOWN:
newHeadY++;
break;
case LEFT:
newHeadX--;
break;
case RIGHT:
newHeadX++;
break;
}
// 判断是否撞墙或撞到自己
if (newHeadX < 0 || newHeadX >= WIDTH || newHeadY < 0 || newHeadY >= HEIGHT || checkCollision()) {
outtextxy(WIDTH * CELL_SIZE / 2 - 30, HEIGHT * CELL_SIZE / 2 - 10, _T("Game Over!"));
return false;
}
// 判断是否吃到食物
if (eatFood()) {
generateFood();
length++;
}
// 更新蛇身位置
for (int i = length - 1; i > 0; i--) {
snake[i] = snake[i - 1];
}
snake[0] = newHeadX + newHeadY * WIDTH;
headX = newHeadX;
headY = newHeadY;
return true;
}
bool checkCollision() {
for (int i = 1; i < length; i++) {
if (headX == snake[i] % WIDTH && headY == snake[i] / WIDTH) {
return true;
}
}
return false;
}
bool eatFood() {
return headX == foodX && headY == foodY;
}
```
以上是一个简单的 C++ 贪吃蛇的 EasyX 代码示例,希望能对你有所帮助!
阅读全文