C++老鼠走迷宫游戏编程

设计一个老鼠走迷宫的模拟程序,其中包括老鼠类,地图类,物品类,其中物品类分为增益物品和减益物品,增益物品可以增加血量,减益物品减少血量。地图是一个一个小格子组成的,老鼠一次走一个小格子,初始血量为100,血量上限为100,地图上定义出口,开始时老鼠处于迷宫中心位置,迷宫格子中有随机生成的碍物,障碍物不允许通行。迷宫只有一个出口,每个格子子上有增益物品或者减益物品,当老鼠血量大于等于0且到达用口格子到,游戏胜利:否则游戏失败,假设老鼠移动一格血量自然减1,请编程实现该模拟过程


#include<iostream>
#include<getch.h>
#include<stdlib.h>
#include <time.h>
using namespace std;
time_t tstart;
//设置迷宫结构
struct Maze
{
private:
    //地图
    char map[15][15];
    //空位置数量
    int space; 
    //入口位置
    char in_x,in_y;
    //出口位置
    char out_x,out_y;
    //坐标
    char x,y;
    //老鼠位置
    char m_x,m_y;
    int success;
    //......
    //构造地图
    void create_map(void)
    {
        srand(time(NULL));
        //在地图中全部填#
        for(int i=0;i<15;i++)
        {
            for(int j=0;j<15;j++)
            {
                map[i][j]='#';
            }
        }
        //设置出口、入口
        for(int i=0;i<space;)
        {
            x=rand()%13+1;
            y=rand()%13+1;
            if(map[x][y]=='#')
            {
                map[x][y]=' ';
                i++;
            }
            
            
        }
 
        map[in_x][in_y]='@';
        
    
        
        if(map[out_x][out_y]!=' ')
        {
            map[out_x][out_y]=' ';
        }
        
    }
    //检查地图是否可以走出
    int check_map(int i,int j)
    {
        //参考经典算法大全
        map[i][j]='@';        
        if(i == out_x && j ==out_y )
        {
            success = 1;
        }
        if(success != 1 && map[i][j+1] == ' ') check_map(i, j+1);
        if(success != 1 && map[i+1][j] == ' ') check_map(i+1, j);
        if(success != 1 && map[i][j-1] == ' ') check_map(i, j-1);
        if(success != 1 && map[i-1][j] == ' ') check_map(i-1, j);
        if(success != 1)
        {
            map[i][j] = ' ';
        }
        return success;
    }
    
public:
    //构建迷宫
    Maze(char inx,char iny,char outx,char outy,int _space)
    {
        //使用构造函数的参数对成员初始化
        in_x=m_x=inx;
        in_y=m_y=iny;
        out_x=outx;
        out_y=outy;
        space=_space;
        while(1)
        {
            //构造地图
            create_map();
            //检查地图是否可以走出
            success=0;
            if(check_map(in_x,in_y)==1)
            {    
                break;
            }
        }
        for (int i = 0; i < 15; ++i)
        {
            for(int j=0;j<15;j++)
            {
                if(map[i][j]=='@')
                {
                    map[i][j]=' ';
                }
            }
        }
        map[in_x][in_y]='@';
        tstart=time(NULL);
    }
    //显示迷宫
    void show(void)
    {
        system("clear");
        //printf("\33[2J");
        for(int i=0;i<15;i++)
        {
            for(int j=0;j<15;j++)
            {
                cout<<map[i][j]<<' ';
            }
            cout<<endl;
        }
    }
    //老鼠向上
    void up(void)
    {
        if(map[m_x-1][m_y]==' ')
        {
            map[m_x-1][m_y]='@';
            map[m_x][m_y]=' ';
            m_x-=1;
        }
        else 
        {
            return;
        }
    }
    //老鼠向下
    void down(void)
    {
        if(map[m_x+1][m_y]==' ')
        {
            map[m_x+1][m_y]='@';
            map[m_x][m_y]=' ';
            m_x+=1;
        }
        else 
        {
            return;
        }
    }
    //向右
    void right(void)
    {
        if(map[m_x][m_y+1]==' '&&m_y<=14)
        {
            map[m_x][m_y+1]='@';
            map[m_x][m_y]=' ';
            m_y+=1;
        }
        else 
        {
            return;
        }
    }
    //向左
    void left(void)
    {
        if(map[m_x][m_y-1]==' '&&m_y>=1)
        {
            map[m_x][m_y-1]='@';
            map[m_x][m_y]=' ';
            m_y-=1;
        }
        else 
        {
            return;
        }
    }
    //检查是否到达出口
    bool check(void)
    {
        if(m_x==out_x&&m_y==out_y)
        {
            return true;
        }
        return false;
    }
};
 
int main()
{
    //创建迷宫对象
    Maze maze(1,1,14,13,140);
 
    while(1)
    {
        //检查是否走通
        if(maze.check())
        {
            maze.show();
            time_t tend=time(NULL);
            cout<<"逃出迷宫!用时"<<tend-tstart<<"秒!"<<endl;
            break;
        }
        //显示地图
        maze.show();
        
        switch(getch())
        {
            case 183:maze.up();break;
            case 184:maze.down();break;
            case 185:maze.right();break;
            case 186:maze.left();break;
        }
    }
}

有帮助的话采纳一下哦!谢谢!

可参考

如有帮助,采纳支持一下,谢谢。