帮我用c++写一份使用easyx库的森林冰火人的代码
时间: 2024-03-05 21:48:42 浏览: 143
好的,以下是使用EasyX库的森林冰火人的C++代码,注意需要在安装了EasyX库的环境下编译运行:
```c++
#include <graphics.h>
#include <conio.h>
#include <time.h>
#define ROW 15 // 地图行数
#define COL 15 // 地图列数
#define SIZE 40 // 方格大小
#define WIDTH COL * SIZE // 地图宽度
#define HEIGHT ROW * SIZE // 地图高度
#define LEFT 75 // 左移键值
#define RIGHT 77 // 右移键值
#define UP 72 // 上移键值
#define DOWN 80 // 下移键值
// 地图
int map[ROW][COL] = {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
{1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},
{1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},
{1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};
// 角色
struct Character {
int x, y; // 坐标
int dir; // 方向
int state; // 状态
} hero, enemy;
// 地图画笔
IMAGE mapImage;
// 角色画笔
IMAGE heroImage[4];
IMAGE enemyImage[4];
// 初始化角色
void initCharacter(Character &ch, int x, int y) {
ch.x = x;
ch.y = y;
ch.dir = RIGHT;
ch.state = 0;
}
// 绘制地图
void drawMap() {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (map[i][j]) {
putimage(j * SIZE, i * SIZE, &mapImage);
}
}
}
}
// 绘制角色
void drawCharacter(Character ch, IMAGE image[]) {
putimage(ch.x, ch.y, &image[ch.dir / 90 * 3 + ch.state % 3]);
}
// 移动角色
void moveCharacter(Character &ch, int dx, int dy) {
int x = ch.x + dx;
int y = ch.y + dy;
if (map[y / SIZE][x / SIZE] == 0) {
ch.x = x;
ch.y = y;
}
}
// 更新角色状态
void updateCharacter(Character &ch) {
ch.state++;
if (ch.state == 3) {
ch.state = 0;
}
}
// 更新角色方向
void updateCharacterDir(Character &ch, int dir) {
if (dir == LEFT || dir == RIGHT || dir == UP || dir == DOWN) {
ch.dir = dir;
}
}
// 判断是否碰撞
bool isCollision(Character ch1, Character ch2) {
return ch1.x == ch2.x && ch1.y == ch2.y;
}
int main() {
// 初始化图形窗口
initgraph(WIDTH, HEIGHT);
// 加载地图
loadimage(&mapImage, _T("map.jpg"), WIDTH, HEIGHT);
// 加载角色
loadimage(&heroImage[0], _T("hero0.png"), SIZE, SIZE);
loadimage(&heroImage[1], _T("hero1.png"), SIZE, SIZE);
loadimage(&heroImage[2], _T("hero2.png"), SIZE, SIZE);
loadimage(&heroImage[3], _T("hero3.png"), SIZE, SIZE);
loadimage(&enemyImage[0], _T("enemy0.png"), SIZE, SIZE);
loadimage(&enemyImage[1], _T("enemy1.png"), SIZE, SIZE);
loadimage(&enemyImage[2], _T("enemy2.png"), SIZE, SIZE);
loadimage(&enemyImage[3], _T("enemy3.png"), SIZE, SIZE);
// 初始化角色
initCharacter(hero, SIZE, SIZE);
initCharacter(enemy, WIDTH - SIZE * 2, HEIGHT - SIZE * 2);
// 绘制地图和角色
drawMap();
drawCharacter(hero, heroImage);
drawCharacter(enemy, enemyImage);
// 游戏循环
while (true) {
// 判断键盘事件
if (_kbhit()) {
int key = _getch();
switch (key) {
case LEFT:
updateCharacterDir(hero, LEFT);
moveCharacter(hero, -SIZE, 0);
break;
case RIGHT:
updateCharacterDir(hero, RIGHT);
moveCharacter(hero, SIZE, 0);
break;
case UP:
updateCharacterDir(hero, UP);
moveCharacter(hero, 0, -SIZE);
break;
case DOWN:
updateCharacterDir(hero, DOWN);
moveCharacter(hero, 0, SIZE);
break;
}
}
// 更新角色状态
updateCharacter(hero);
updateCharacter(enemy);
// 绘制地图和角色
drawMap();
drawCharacter(hero, heroImage);
drawCharacter(enemy, enemyImage);
// 判断碰撞
if (isCollision(hero, enemy)) {
break;
}
// 延迟
Sleep(100);
}
// 游戏结束
closegraph();
return 0;
}
```
在运行之前需要将图片文件放置在与代码同一目录下,并且需要安装 EasyX 库。
阅读全文