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

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++掉血迷宫


http://www.kler.cn/a/307780.html

相关文章:

  • Unity图形学之Blend指令
  • linux常见资源查询命令(持续更新)
  • 自动驾驶系列—从数据采集到存储:解密自动驾驶传感器数据采集盒子的关键技术
  • DBeaver 连接 OceanBase Oracle 租户
  • u盘加密软件有哪些?2025年必备的u盘加密神器分享(共6款!提前布局!)
  • 前端系统设计面试题(二)Javascript\Vue
  • GO 反射
  • CNSS Recruit 2024 Web方向 题解WriteUp
  • git编译安装报错
  • 基于STM32的温度、电流、电压检测proteus仿真系统(OLED、DHT11、继电器、电机)
  • 计算机毕业设计 高校学术交流平台的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 借助大模型将文档转换为视频
  • html+css+js网页设计 旅游 厦门旅游网10个页面
  • element-plus的面包屑组件el-breadcrumb
  • 使用 SuperCraft AI 设计书橱模型的指南
  • 简单代码实现视频转图片_py
  • 在Flask中实现日志记录
  • 动态ip切换频率是快点好还是慢点好
  • Mybatis批量操作
  • Java 使用 Redis
  • 并发容器(Map、List、Set)实战及其原理分析
  • 如何快速清理Docker中的停止容器?
  • HFish开源蜜罐系统常见问题排查
  • 10- 【JavaWeb】Tomcat、Servlet基础
  • springboot后端开发-常见注解及其用途
  • C++ this指针