当前位置: 首页 > news >正文

C++3D迷宫

目录

  • 开头
  • 程序
  • 程序的流程图
  • 程序游玩的效果
  • 下一篇博客要说的东西

开头

大家好,我叫这是我58。

程序

#include <iostream>
using namespace std;
void printmaze(char strmaze[5][5][5]) {cout << "-----@" << endl;int i = 0;int ia = 0;int ib = 0;for (; i < 5; i++) {for (ia = 0; ia < 5; ia++) {for (ib = 0; ib < 5; ib++) {cout << "\033[" << ('G' == strmaze[i][ia][ib] ? "32;1" : "0") << "m" << strmaze[i][ia][ib] << "\033[0m";}cout << "|" << endl;}cout << "-----@" << endl;}
}
int main() {char strmaze[5][5][5] = {'P','*',' ','*','*','*',' ',' ',' ','*',' ',' ','*',' ',' ',' ','*','*','*',' ',' ',' ','*',' ',' ',' ',' ','*',' ',' ',' ','*',' ','*',' ','*','*','*','*','*',' ',' ','*',' ',' ',' ',' ','*',' ',' ','*',' ',' ','*',' ','*',' ','*',' ',' ',' ','*',' ','*','*',' ',' ','*',' ',' ',' ',' ','*',' ',' ','*','*',' ',' ',' ',' ',' ','*','*',' ',' ',' ','*',' ','*',' ',' ','*',' ',' ',' ',' ','*','*',' ','*','*',' ',' ',' ','*',' ',' ',' ',' ',' ','*','*',' ','*',' ',' ','*','*','*',' ','*',' ',' ','G',};char* cp = &strmaze[0][0][0];char ch = 0;cout << "欢迎你来玩这个3D迷宫,在这个迷宫中,“P”是你,“*”是墙,空格是你可以走的地方,而\033[32;1m“G”\033[0m是\033[32;1m终点\033[0m,走到这就能让你胜利了,并且,按“w”能使你往上移,按“a”能使你往左移,按“s”能使你往下移,按“d”能使你往右移,按“q”能使你上一层,按“e”能使你下一层。这就是这迷宫的规则,你听明白了吗?" << endl << endl;system("pause");system("cls");while ('G' == strmaze[4][4][4]) {int ix = (cp - &strmaze[0][0][0]) / 25;int iy = (cp - &strmaze[0][0][0]) / 5 % 5;int iz = (cp - &strmaze[0][0][0]) % 5;printmaze(strmaze);cin >> ch;rewind(stdin);*cp = ' ';switch (ch) {case 'w':iy && '*' != *(cp - 5) && (cp -= 5);break;case 'a':iz && '*' != *(cp - 1) && (cp--);break;case 's':4 != iy && '*' != *(cp + 5) && (cp += 5);break;case 'd':4 != iz && '*' != *(cp + 1) && (cp++);break;case 'q':ix && '*' != *(cp - 25) && (cp -= 25);break;case 'e':4 != ix && '*' != *(cp + 25) && (cp += 25);break;default:break;}*cp = 'P';system("cls");}system("color 0A");cout << "恭喜你,你赢了" << endl;return 0;
}

程序的流程图

开始
导入io流
释放std命名空间的所有东西
定义printmaze函数
把三维字符数组strmaze初始化为下面的图片

等待用户按下任意一个键,按下后就清屏
break
清屏
break
break
break
break
break
否(break)
否(break)
否(break)
否(break)
否(break)
否(break)
否(break)
定义字符指针cp为三维字符数组strmaze第0层第0行第0列的地址
定义字符ch为0
输出“欢迎你来玩这个3D迷宫,在这个迷宫中,“P”是你,“*”是墙,空格是你可以走的地方,而\​033[32;1m“G”\​033[0m是\​033[32;1m终点\​033[0m,走到这就能让你胜利了,并且,按“w”能使你往上移,按“a”能使你往左移,按“s”能使你往下移,按“d”能使你往右移,按“q”能使你上一层,按“e”能使你下一层。这就是这迷宫的规则,你听明白了吗?\​n\​n”
'G' == strmaze[4][4][4]?
定义整型ix为cp与三维字符数组strmaze第0层第0行第0列的地址之间的元素个数除以25的结果
定义整型iy为cp与三维字符数组strmaze第0层第0行第0列的地址之间的元素个数除以5模5的结果
定义整型iy为cp与三维字符数组strmaze第0层第0行第0列的地址之间的元素个数模5的结果
执行pritmaze函数,参数有三维字符数组strmaze
把ch设为你输入的字符
清空缓冲区
把解引用的cp设为空格
'w' == ch?
iy && '*' != *(cp - 5)?
把cp向左移动5位
把解引用的cp设为字符“P”
把背景色设为黑色,前景色设为淡绿色
输出“恭喜你,你赢了\​n”
结束
'a' == ch?
iz && '*' != *(cp - 1)?
把cp向左移动一位
's' == ch?
4 != iy && '*' != *(cp + 5)?
把cp向右移动5位
'd' == ch?
4 != iz && '*' != *(cp + 1)?
把cp向右移动一位
'q' == ch?
ix && '*' != *(cp - 25)?
把cp向左移动25位
'e' == ch?
4 != ix && '*' != *(cp + 25)?
把cp向右移动25位
printmaze函数
结束
开始
输出“-----@\​n”
定义整型i为0
定义整型ia为0
定义整型ib为0
i < 5?
设ia为0
ia < 5?
设ib为0
ib < 5?
如果字符“G”为三维字符数组strmaze第i层第ia行第ib列的元素,那么就输出“\​033[32;1m”,三维字符数组strmaze第i层第ia行第ib列的元素和“\​033[0m”,否则输出“\​033[0m”,三维字符数组strmaze第i层第ia行第ib列的元素和“\​033[0m”
ib自增1
输出“|\​n”
ia自增1
输出“-----@\​n”
i自增1

程序游玩的效果

3D迷宫

下一篇博客要说的东西

C++掉血迷宫

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • opencv之图像梯度
  • # wps必须要登录激活才能使用吗?
  • Java多线程2
  • 开发板与ubuntu建立网络通信(NFS和TFTP协议搭建)
  • 【GESP】C++一级练习BCQM3006,多行输出
  • MySQL——数据库的高级操作(三)权限管理(4)收回权限
  • JUC学习笔记(一)
  • android 老项目中用到的jar包不存在,通过离线的方法加载
  • 【C/C++】程序的构建(编译)过程概述
  • PyAutoGUI:自动化操作的强大工具
  • 【Android Studio】app:compileDebugJavaWithJavac FAILED解决办法
  • c++类型转换
  • GoPlantUML,go代码到类图
  • 33.递归、搜索、回溯之记忆化搜索
  • 2024 年最佳 Chrome 验证码扩展,解决 reCAPTCHA 问题
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【node学习】协程
  • Brief introduction of how to 'Call, Apply and Bind'
  • Elasticsearch 参考指南(升级前重新索引)
  • gulp 教程
  • Node 版本管理
  • python大佬养成计划----difflib模块
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vuex 学习笔记 01
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 多线程事务回滚
  • 分布式事物理论与实践
  • 排序(1):冒泡排序
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 一起参Ember.js讨论、问答社区。
  • 用Canvas画一棵二叉树
  • 你对linux中grep命令知道多少?
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #、%和$符号在OGNL表达式中经常出现
  • #if等命令的学习
  • #Z0458. 树的中心2
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (zt)最盛行的警世狂言(爆笑)
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)ObjectiveC 深浅拷贝学习
  • .NET 8.0 中有哪些新的变化?
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET 反射的使用
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .Net转前端开发-启航篇,如何定制博客园主题
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @property @synthesize @dynamic 及相关属性作用探究