设计一个老鼠走迷宫的模拟程序,其中包括老鼠类,地图类,物品类,其中物品类分为增益物品和减益物品,增益物品可以增加血量,减益物品减少血量。地图是一个一个小格子组成的,老鼠一次走一个小格子,初始血量为100,血量上限为100,地图上定义出口,开始时老鼠处于迷宫中心位置,迷宫格子中有随机生成的碍物,障碍物不允许通行。迷宫只有一个出口,每个格子子上有增益物品或者减益物品,当老鼠血量大于等于0且到达用口格子到,游戏胜利:否则游戏失败,假设老鼠移动一格血量自然减1,请编程实现该模拟过程
2条回答 默认 最新
关注 #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; } } }
有帮助的话采纳一下哦!谢谢!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用