目录
开头
大家好,我叫这是我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++掉血迷宫