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

 更新时间:2022年05月11日 13:01:50   作者:Object_in_java  
这篇文章主要为大家详细介绍了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            10

IMAGE 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++中的字符串编码处理方法

    C++中的字符串编码处理方法

    这篇文章主要介绍了C++中的字符串编码处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • C++实现简单计算器

    C++实现简单计算器

    这篇文章主要为大家详细介绍了C++实现简单计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C++实现猴子吃桃的示例代码

    C++实现猴子吃桃的示例代码

    这篇文章主要介绍了C++实现猴子吃桃的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C++无锁队列的原理与实现示例

    C++无锁队列的原理与实现示例

    C++无锁队列是一种多线程编程技术,它可以在不使用锁的情况下实现线程安全的队列,本文就来详细的介绍一下C++无锁队列的原理与实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • c++用指针交换数组的实例讲解

    c++用指针交换数组的实例讲解

    下面小编就为大家分享一篇c++用指针交换数组的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • c++ 智能指针基础详解

    c++ 智能指针基础详解

    这篇文章主要介绍了c++ 智能指针基础的相关资料,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下
    2021-02-02
  • 全排列算法的非递归实现与递归实现的方法(C++)

    全排列算法的非递归实现与递归实现的方法(C++)

    本篇文章是对全排列算法的非递归实现与递归实现的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 使用UDP协议实现单词翻译服务器

    使用UDP协议实现单词翻译服务器

    这篇文章主要为大家详细介绍了如何使用UDP协议实现英文单词翻译服务器,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-08-08
  • 为什么说C语言是永不过时的语言

    为什么说C语言是永不过时的语言

    时隔5年,C语言再次领先Java,荣登TIOBE编程语言排行榜第一,那么C语言为何不会过时?你需要掌握多少种语言呢,感兴趣的朋友通过本文一起学习下吧
    2020-11-11
  • c++元编程模板函数重载匹配规则示例详解

    c++元编程模板函数重载匹配规则示例详解

    这篇文章主要为大家介绍了c++元编程模板函数重载匹配规则示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01

最新评论