设计一个老鼠走迷宫的模拟程序,其中包括老鼠类,地图类,物品类,其中物品类分为增益物品和减益物品,增益物品可以增加血量,减益物品减少血量。地图是一个一个小格子组成的,老鼠一次走一个小格子,初始血量为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;
}
}
}
有帮助的话采纳一下哦!谢谢!
如有帮助,采纳支持一下,谢谢。