C++基于easyx怎么实现迷宫游戏
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容介绍了"C++基于easyx怎么实现迷宫游戏"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效
千家信息网最后更新 2025年01月19日C++基于easyx怎么实现迷宫游戏
本篇内容介绍了"C++基于easyx怎么实现迷宫游戏"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
效果:
/*走迷宫*/#define _CRT_SECURE_NO_DEPRECATEd#define _CRT_SECURE_NO_WARNINGS#include#include #include #include #define LEFT 0//方向#define RIGHT 1#define UP 0//由于当前素材只有左右二个方向,所以上下共用了左右方向#define DOWN 1#define ROAD 0//地图元素类型#define WALL 1#define ENTERX 1//入口 x列,y行#define ENTERY 0#define OUTX 11 //出口 x列,y行#define OUTY 8#define HUMANWIDTH 75#define HUMANHEIGHT 130#define WIDTH 12//地图大小#define HEIGHT 10IMAGE img_human;IMAGE img_human_mask;IMAGE img_wall;IMAGE img_road;int moveNum[2] = { 0 };//当前动作序号int direction;//上下左右四个方向int human_witdh;int human_height;int x, y;//x列数,y行数int map[HEIGHT][WIDTH] = {//地图 { 1,1,1,1,1,1,1,1,1,1,1,1 }, { 0,0,0,1,1,1,1,1,1,1,1,1 }, { 1,1,0,1,1,1,1,0,1,1,1,1 }, { 1,1,0,0,1,1,1,0,1,1,1,1 }, { 1,1,1,0,1,1,1,0,1,1,1,1 }, { 1,1,1,0,1,1,1,0,1,1,1,1 }, { 1,1,1,0,1,1,1,0,1,1,1,1 }, { 1,1,1,0,0,0,0,0,0,0,1,1 }, { 1,1,1,1,1,1,1,1,1,0,0,0 }, { 1,1,1,1,1,1,1,1,1,1,1,1 },};void showbk() {//绘制背景 for (int j = 0; j < WIDTH; j++) for (int i = 0; i < HEIGHT; i++) if (map[i][j] == WALL) putimage(j * img_wall.getwidth(), i * img_wall.getheight(), img_wall.getwidth(), img_wall.getheight(), &img_wall, 0, 0, SRCCOPY); else putimage(j * img_wall.getwidth(), i * img_wall.getheight(), img_wall.getwidth(), img_wall.getheight(), &img_road, 0, 0, SRCCOPY);}void start()//初始化{ loadimage(&img_wall, _T(".\\walls.gif")); initgraph(img_wall.getwidth() * WIDTH, img_wall.getheight() * HEIGHT); loadimage(&img_human, _T(".\\行走素材图.jpg")); loadimage(&img_human_mask,_T( ".\\行走素材图mask.jpg")); human_witdh = 75;//img_human.getwidth()/4; human_height = 130;//img_human.getheight()/2; //putimage(x,y,HUMANWIDTH,HUMANHEIGHT,&img_human,0,0); loadimage(&img_road, _T(".\\road.gif")); x = 0; y = 1;}void updateWithoutInput(){}void drawRole(int x0, int y0)//绘制前景{ putimage((x - x0 / 4.0) * img_wall.getwidth() - 7, (y - y0 / 4.0) * img_wall.getheight() - 70, human_witdh, human_height, &img_human_mask, moveNum[direction] * human_witdh, direction * (human_height - 10), NOTSRCERASE); putimage((x - x0 / 4.0) * img_wall.getwidth() - 7, (y - y0 / 4.0) * img_wall.getheight() - 70, human_witdh, human_height, &img_human, moveNum[direction] * human_witdh, direction * (human_height - 10), SRCINVERT);}void show(int x0, int y0){ showbk(); //clearrectangle(x,y,x+human_witdh,y+human_height); //先显示背景 //准备好遮罩MASK图和源图,三元光栅操作 drawRole(x0, y0); FlushBatchDraw(); Sleep(50);}void readRecordFile(){//读取存档 FILE* fp; int temp; fp = fopen(".\\record.dat", "r"); fscanf(fp, "%d %d", &x, &y); fclose(fp);}void WriteRecordFile(){//保存存档 FILE* fp; int temp; fp = fopen(".\\record.dat", "w"); fprintf(fp, "%d %d ", x, y); fclose(fp);}void updateWithInput(){//增加过度 char input; int olddirection = direction; int oldx = x; int oldy = y; /******异步输入检测方向键状态 if(GetAsyncKeyState(VK_LEFT)&0x8000) 向左 if(GetAsyncKeyState(VK_RIGHT)&0x8000) 向右 if(GetAsyncKeyState(VK_UP)&0x8000) 向上 if(GetAsyncKeyState(VK_DOWN)&0x8000) 向下 ********/ if (_kbhit()) { input = _getch(); switch (input) { case 'a':direction = LEFT; if (map[y][x - 1] == ROAD) x--; moveNum[direction] = 0; break; case 'd':direction = RIGHT; if (map[y][x + 1] == ROAD) x++; moveNum[direction] = 0; break; case 'w':direction = UP; if (map[y - 1][x] == ROAD) y--; moveNum[direction] = 0; break; case 's':direction = DOWN; if (map[y + 1][x] == ROAD) y++; moveNum[direction] = 0; break; case 'W':WriteRecordFile(); break; case 'R':readRecordFile(); break; } if (x != oldx || y != oldy) for (int i = 4; i > 0; i--) {//过渡动画 show((x - oldx) * i, (y - oldy) * i); moveNum[direction]++;//动作序号,一个完整动作分解为四个姿势 moveNum[direction] %= 4; } }}int main(){ start(); BeginBatchDraw(); while (1) { show(0, 0); Sleep(50); if (x == OUTX && y == OUTY)//到达了出口 { outtextxy(0, 0, _T("reach target!")); Sleep(50); break; } updateWithoutInput(); updateWithInput(); } EndBatchDraw(); _getch(); closegraph(); return 0;}
"C++基于easyx怎么实现迷宫游戏"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
方向
迷宫
动作
地图
C++
上下
内容
序号
更多
知识
出口
实用
上下左右
学有所成
接下来
元素
入口
动画
只有
困境
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
英富莱网络技术有限公司怎么样
中国社会科学引文索引数据库
软件网络安全职责
c 软件开发学什么条件
学生如何保护自身网络安全
查看数据库表数量
软件开发中团队协作
html和数据库
服务器 em1
山西计算机网络技术
如何查看自己电脑数据库版本
服务器示例图
少年三国志找不到服务器
湘潭软件开发培训学校
网络安全主题周报
分布式数据库管理技术背景
dnf服务器喇叭怎么打开
家里多个电脑安装网吧服务器
集团网络安全应急管理 培训班
河北文档软件开发定制企业
中国期刊数据库是什么意思
当你在服务器装迪哥会怎么样
公安信息网络安全规定
ns暗黑2哪个服务器
建立居民数据库
浙江服务器应用线束厂家
dsg数据库复制软件
服务器可以储存什么
中通吉网络技术有限公司看准网
网络安全可控区域指什么