C++3D迷宫

目录

开头

大家好,我叫这是我58

程序

cpp 复制代码
#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++掉血迷宫

相关推荐
呆萌很几秒前
C++ 集合 list 使用
c++
诚丞成1 小时前
计算世界之安生:C++继承的文水和智慧(上)
开发语言·c++
mirrornan2 小时前
3D和AR技术在电商行业的应用有哪些?
3d·ar·3d建模·3d模型·三维建模
东风吹柳2 小时前
观察者模式(sigslot in C++)
c++·观察者模式·信号槽·sigslot
A懿轩A2 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
大胆飞猪3 小时前
C++9--前置++和后置++重载,const,日期类的实现(对前几篇知识点的应用)
c++
1 9 J3 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
夕泠爱吃糖3 小时前
C++中如何实现序列化和反序列化?
服务器·数据库·c++
长潇若雪3 小时前
《类和对象:基础原理全解析(上篇)》
开发语言·c++·经验分享·类和对象
工业3D_大熊3 小时前
3D开发工具HOOPS助力造船业加速设计与数字化转型
3d