#include<iostream>
#include<string>
#include<stack>
using namespace std;
#define n 8stack <int *> s;int * createMaze(){//初始化迷宫int i,j;int * a;a=new int[n*n];for(i=0;i<n;i++){for(j=0;j<n;j++){*(a+n*i+j)=-1;//不设置为0的原因是超过矩阵范围的位置}             //系统默认的是0,会引起麻烦}*(a+n*0+1)=3;s.push(a+n*0+1);//当前位置入栈*(a+n*1+1)=1;*(a+n*1+2)=1;*(a+n*1+3)=1;*(a+n*1+5)=1;*(a+n*2+3)=1;*(a+n*2+4)=1;*(a+n*2+5)=1;*(a+n*2+6)=1;*(a+n*3+1)=1;*(a+n*3+2)=1;*(a+n*3+3)=1;*(a+n*3+5)=1;*(a+n*4+1)=1;*(a+n*4+4)=1;*(a+n*5+1)=1;*(a+n*5+2)=1;*(a+n*5+4)=1;*(a+n*5+5)=1;*(a+n*5+6)=1;*(a+n*6+2)=1;*(a+n*6+3)=1;*(a+n*6+4)=1;*(a+n*6+6)=1;*(a+n*7+6)=1;return a;
}
//程序中标记-1,1,2,3,4的值表示意义例如以下:
//-1:障碍物(方块)
//1:可行走的通道且还未曾被五角星通过
//2:五角星走过的通道(这样说不全然准确)。更准确的说是已经压栈的元素(地址)
//3:标识五角星
//4:遇到再也走不通的位置,离开时所填充的障碍(与-1的作用同样,可是不显示出来)void printMaze(int * a){//打印迷宫int i,j;for(i=0;i<n;i++){for(j=0;j<n;j++){if(*(a+n*i+j)==1||*(a+n*i+j)==2||*(a+n*i+j)==4){cout<<"  ";}else if(*(a+n*i+j)==3){cout<<"★";}else{//*(a+n*i+j)==-1cout<<"■";}}cout<<endl;}
}void run(int * a,char ch){int i,j;for(i=0;i<n;i++){for(j=0;j<n;j++){if(*(a+n*i+j)==3){switch(ch){case 'w':if(*(a+n*(i-1)+j)==1){*(s.top())=2;s.push(a+n*(i-1)+j);//入栈*(s.top())=3;}if(*(a+n*(i-1)+j)==2){*(s.top())=-1;s.pop();//出栈*(s.top())=3;}return;case 'a':if(*(a+n*i+j-1)==1){*(s.top())=2;s.push(a+n*i+j-1);//入栈*(s.top())=3;}if(*(a+n*i+j-1)==2){*(s.top())=-1;s.pop();//出栈*(s.top())=3;}return;case 's':if(*(a+n*(i+1)+j)==1){*(s.top())=2;s.push(a+n*(i+1)+j);//入栈*(s.top())=3;}if(*(a+n*(i+1)+j)==2){*(s.top())=-1;s.pop();//出栈*(s.top())=3;}return;case 'd':if(*(a+n*i+j+1)==1){*(s.top())=2;s.push(a+n*i+j+1);//入栈*(s.top())=3;}if(*(a+n*i+j+1)==2){*(s.top())=-1;s.pop();//出栈*(s.top())=3;}return;}}}}
}char getDirection(int * a){//得到方向int i,j;for(i=0;i<n;i++){for(j=0;j<n;j++){if(*(a+n*i+j)==3){//必须按优先级排列if(*(a+n*i+j+1)==1){return 'd';}if(*(a+n*(i+1)+j)==1){return 's';}if(*(a+n*i+j-1)==1){return 'a';}if(*(a+n*(i-1)+j)==1){return 'w';}if(*(a+n*i+j+1)==2){return 'd';}if(*(a+n*(i+1)+j)==2){return 's';}if(*(a+n*i+j-1)==2){return 'a';}if(*(a+n*(i-1)+j)==2){return 'w';}else{cout<<"无效按键"<<endl;}}}}
}int handle(){int * a;int count=1;string step;//用string是为了避免用户多输入字符而引起错误a=createMaze();printMaze(a);cout<<"请按随意键进行下一步!"<<endl;while(*(a+n*7+6)!=3){cout<<"第"<<count<<"步:";cin>>step;run(a,getDirection(a));printMaze(a);count++;}cout<<"恭喜你,顺利到达终点!"<<endl;return 0;
}int main(){handle();return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

转载于:https://www.cnblogs.com/blfshiye/p/4936551.html

迷宫游戏 堆栈实现相关推荐

  1. c语言课程设计走迷宫游戏,C语言课程设计-迷宫游戏.doc

    计算机技术基础课程设计 C语言 设计报告 题目:完整的二维迷宫游戏 学院:工商管理学院 专业:信息系统与信息管理 班级:050507 姓名:孙月 指导教师:张首伟 设计日期:2004年12月10日 题 ...

  2. 用webgl打造自己的3D迷宫游戏

    用webgl打造自己的3D迷宫游戏 2016/09/19 · JavaScript · WebGL 原文出处: AlloyTeam    背景:前段时间自己居然迷路了,有感而发就想到写一个可以让人迷路 ...

  3. 迷宫游戏c语言代码讲解,迷宫游戏C语言代码讲解.doc

    /*迷宫游戏 by CDQ*//*vc++ 6.0 编译成功本程序参照网上一个特殊算法随机生成迷宫该算法优点:效率高,从入口到出口只有唯一路径,入口出口自己设定该算法缺点:宽度高度都必须为奇数,只能生 ...

  4. matlab 邻近度 离群点_MATLAB自制迷宫游戏,快来试试吧!

    前几天给大家介绍了"一行matlab代码可以做哪些匪夷所思的事情",今天小编带给大家一款酷炫的私人订制版迷宫游戏.这款迷宫游戏包含以下功能: 随机生成迷宫地图 通过键盘手动求解生成 ...

  5. c语言八个方向迷宫课程设计,【精品资料最新版】C语言课程设计-迷宫游戏.doc...

    计算机技术基础课程设计 C语言 设计报告 题目:完整的二维迷宫游戏 学院:工商管理学院 专业:信息系统与信息管理 班级:050507 姓名:孙月 指导教师:张首伟 设计日期:2004年12月10日 题 ...

  6. JavaScript学习笔记:迷宫游戏

    文章目录 一.游戏运行效果 二.实现步骤 1.在HBuilder里创建项目MazeGame,添加maze.html 2.在脚本里创建迷宫数组用于设置单元格顶边与右边 3.在body里绘制迷宫 4.设置 ...

  7. c语言大作业走迷宫,基于C语言实现简单的走迷宫游戏

    本文实例讲述了C语言实现简单的走迷宫游戏的方法,代码完整,便于读者理解. 学数据结构时用"栈"写的一个走迷宫程序,实际上用到双向队列,方便在运行完毕后输出经过的点. #includ ...

  8. 递归走迷宫java,java递归实现的迷宫游戏

    java递归实现的迷宫游戏 public class Migong { private int gard[][]={  {1,1,1,1,0,1,1,1}, {0,0,0,1,1,1,1,1}, {1 ...

  9. 小红书:笔试题(棋盘最短路径,笔记本草稿栈,迷宫游戏)

    1. 棋盘最短路径问题 题目描述: 题目描述: 假设以一个n*m的矩阵作为棋盘,每个棋位对应一个二维坐标 (x, y).你有一颗棋子位于左上起点(0, 0),现在需要将其移动到右下底角 (n-1, m ...

最新文章

  1. 如何找到php的配置文件,如何查找PHP配置文件php.ini所在路径
  2. 日记:2019-07-28
  3. 天谕手游与奥特曼联手,玩家看到有多么激动?
  4. 线程池是如何复用的?
  5. [Redux/Mobx] Redux怎么添加新的中间件?
  6. Elasticsearch 支持哪些类型的查询?
  7. php可以控制视频的尺寸吗吗,控制视频像素尺寸这样做
  8. FBReaderJ源码编译配置
  9. oracle 11g Flashback Data Archive(闪回数据归档)
  10. 【Latex】数学公式排版
  11. 苹果Mac分享几个爱用音乐播放器
  12. Docker 容器十诫
  13. Mathematics Base - 期望、方差、协方差、相关系数总结
  14. linux编译安装libxml2,libxml2的编译与安装
  15. CMD如何进入C:WINDOWS\SYSTEM32
  16. 2006年~2011年记事简要
  17. 通过VNC远程连接ubuntu桌面(多种客户端连接方式)
  18. 数据库系统原理与应用教程(019)—— MySQL 的配置文件
  19. TypeError: from_buffer() cannot return the address of the raw string within a str or unicode or byte
  20. SAP中科目货币及本位币记账控制测试

热门文章

  1. 电脑投屏软件哪个好_目前当贝市场中投屏软件哪个好,最全面投屏技巧盘点
  2. ccs安装多版本编译器离线_大数据分析:学习工具JDK,在线安装指南
  3. win10资源管理器怎么打开_让你效率倍增的电脑神器,最强资源管理器增强工具「QTTabBar」...
  4. Java DataOutputStream writeChars()方法及示例
  5. python none_None关键字,带Python示例
  6. vs2019编写Linux c/c++项目
  7. poj 3710——Christmas Game
  8. android文本复制自定义剪切板,android 剪切板-文本复制、粘贴
  9. arm-linux 交叉编译 mp4v2
  10. BZOJ - 2186 欧拉函数