文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++基于easyx怎么实现迷宫游戏

2023-06-30 13:41

关注

本篇内容介绍了“C++基于easyx怎么实现迷宫游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

效果:

C++基于easyx怎么实现迷宫游戏

#define _CRT_SECURE_NO_DEPRECATEd#define _CRT_SECURE_NO_WARNINGS#include<graphics.h>#include<conio.h>#include<Windows.h>#include<stdio.h>#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 (_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++基于easyx怎么实现迷宫游戏

C++基于easyx怎么实现迷宫游戏

“C++基于easyx怎么实现迷宫游戏”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯