C++掉血迷宫

devtools/2024/11/13 9:49:49/

目录

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

开头

大家好,我叫这是我58。

程序

#include <iostream>
#include <string>
#include <cstring>
using namespace std;
enum RBYG {R = 1,B = 2,Y = 4,G = 7,
};
struct heal {int ix;int iy;enum RBYG rbyg;int HOrD;
};
void printmaze(const char strmaze[11][11], const int ihea, heal healarr[54]) {int i = 0;int ia = 0;int ib = 0;string str = "0";for (; i < 11; i++) {for (ia = 0; ia < 11; ia++) {for (ib = 0; ib < 54; ib++) {if (healarr[ib].ix == i && healarr[ib].iy == ia) {if (2 == healarr[ib].HOrD || -2 == healarr[ib].HOrD) {str = "35;1";}else {switch (healarr[ib].rbyg) {case R:str = "31;1";break;case B:str = "36";break;case Y:str = "33";break;case G:str = "32;1";break;default:break;}}break;}}cout << "\033[" << ('P' != strmaze[i][ia] ? 'G' == strmaze[i][ia] ? "32;1" : str : "0") << "m" << strmaze[i][ia] << "\033[0m";str = "0";}cout << "|" << endl;}cout << "-----------@" << endl << "\033[3" << (ihea > 6 ? "2;1" : ihea > 3 ? "3" : "1") << "m你现在的生命值为:" << ihea << endl << "\033[0m";
}
int main() {char str[9] = "color 0";char strmaze[11][11] = {'P','X','O',' ',' ',' ',' ','X','X','O','O','*','*','*','*',' ','X',' ',' ','X','O','O','O','X','X','X',' ',' ','X',' ',' ','*','*','*','*','*','*','O',' ','*','*','X','O','O',' ','X',' ','*','*','*','*',' ',' ','X','O',' ','X','X','*','X','O','*',' ',' ',' ','X','X','*',' ','O',' ','X','*',' ',' ','X','O',' ','*','X',' ','X',' ',' ','*',' ',' ','X','O','*','X','*',' ',' ',' ','*',' ','X','X','X','O','X','*','X',' ',' ',' ','X','X','X','O','X','O','*','O','X',' ','X','X','X','G',};char strmazer[11][11] = { 0 };char* cp = &strmaze[0][0];char ch = 0;int ihea = 10;int i = 0;heal healarr[54] = { {0,1,R,-1},{0,2,R,1},{0,7,R,-1},{0,8,B,-1},{0,9,R,1},{0,10,R,1},{1,5,G,-1},{1,8,Y,-1},{1,9,R,1},{1,10,B,1},{2,0,G,1},{2,1,R,-1},{2,2,R,-1},{2,3,R,-1},{2,6,B,-1},{3,4,Y,1},{3,8,Y,-1},{3,9,R,1},{3,10,R,1},{4,1,B,-1},{4,9,B,-1},{4,10,Y,1},{5,1,R,-1},{5,2,R,-1},{5,4,R,1},{5,5,R,-1},{5,10,B,-1},{6,0,Y,-1},{6,3,G,1},{6,5,Y,-1},{6,9,Y,-1},{6,10,Y,2},{7,2,R,-1},{7,4,G,-1},{7,10,B,-1},{8,0,Y,1},{8,2,B,-1},{8,9,R,-1},{8,10,G,-1},{9,0,R,-1},{9,1,G,1},{9,2,Y,-1},{9,4,B,1},{9,8,R,-1},{9,9,G,-2},{9,10,G,-2},{10,0,Y,1},{10,1,B,-1},{10,2,G,1},{10,4,B,1},{10,5,R,-1},{10,7,B,-1},{10,8,G,-1},{10,9,G,-2} };heal healarrR[54] = { 0 };memcpy(healarrR, healarr, sizeof healarr);memcpy(strmazer, strmaze, sizeof strmaze);cout << "欢迎你来玩这个\033[31m掉迷宫\033[0m,在这个迷宫中,“P”是你,“*”是墙,空格是你可以走的地方,而\033[32;1m“G”\033[0m是\033[32;1m终点\033[0m,走到这能让你\033[32;1m胜利\033[0m,并且,按“w”使你上移,按“a”使你左移,按“s”使你下移,按“d”使你右移,按“r”重置这个迷宫,\033[31;1m“X”\033[0m是\033[31;1m陷阱\033[0m,你如果踩了他,就会根据它的\033[31;1m颜\033[0;36m色\033[31m扣掉相应的\033[0m,其中,\033[31;1m红色扣1\033[0m,\033[36m蓝色扣2\033[0m,\033[33m黄色扣4\033[0m,\033[32;1m绿色扣7\033[0m,而\033[35;1m紫色扣14\033[0m,\033[4m并且会\033[31m永远出现在这个迷宫中\033[0m,而\033[32;1m“O”\033[0m是\033[32;1m瓶\033[0m。到这就会使你用\033[32;1m瓶加\033[0m,\033[4m但\033[32;1;4m瓶\033[0;4m用完之后就不能再使用了\033[0m,其中,\033[31;1m红色加1\033[0m,\033[36m蓝色加2\033[0m,\033[33m黄色加4\033[0m,\033[32;1m绿色加7\033[0m,\033[35;1m紫色加14\033[0m。这就是这迷宫的规则,你听明白了吗?" << endl << endl;system("pause");system("cls");while ('G' == strmaze[10][10] && ihea >= 1) {int ix = (cp - &strmaze[0][0]) / 11;int iy = (cp - &strmaze[0][0]) % 11;for (i = 0; i < 54; i++) {healarr[i].HOrD < 0 && ('P' == strmaze[healarr[i].ix][healarr[i].iy] && (ihea += healarr[i].rbyg * healarr[i].HOrD), ' ' == strmaze[healarr[i].ix][healarr[i].iy] && (strmaze[healarr[i].ix][healarr[i].iy] = 'X'));healarr[i].HOrD > 0 && ('P' == strmaze[healarr[i].ix][healarr[i].iy] && (ihea += healarr[i].rbyg * healarr[i].HOrD), 'O' != strmaze[healarr[i].ix][healarr[i].iy] && (healarr[i].HOrD = 0));}printmaze(strmaze, ihea, healarr);cin >> ch;rewind(stdin);*cp = ' ';switch (ch) {case 'w':ix && '*' != *(cp - 11) && (cp -= 11);break;case 'a':iy && '*' != *(cp - 1) && (cp--);break;case 's':10 != ix && '*' != *(cp + 11) && (cp += 11);break;case 'd':10 != iy && '*' != *(cp + 1) && (cp++);break;case 'r':memcpy(healarr, healarrR, sizeof healarr);memcpy(strmaze, strmazer, sizeof strmaze);ihea = 10;cp = &strmaze[0][0];break; default:break;}*cp = 'P';system("cls");}ihea >= 1 && (str[7] = 'A'), ihea >= 1 || (str[7] = '4');system(str);cout << (ihea >= 1 ? "恭喜你,你赢了" : "很遗憾,你输了") << endl;return 0;
}

程序的流程图

开始
导入io流
导入string
导入cstring头文件
释放std命名空间的所有东西
定义枚举RBYG里的R,B,Y和G,其中,R为1,B为2,Y为4,G为7
定义结构体heal,里面有整型ix,整型iy,类型为枚举RBYG的变量rbyg和整型HOrD
定义printmaze函数
把有9个字符的字符串str初始化为“color 0”
把有11行11列的字符二维数组strmaze初始化为下面的图片

等待玩家按下任意一个键,按下后就清屏
break
清屏
break
break
break
break
否(break)
否(break)
否(break)
否(break)
否(break)
把有11行11列的二维字符数组strmazer里的元素全都初始化为0
定义字符指针cp为二维字符数组strmaze第0行第0列的地址
定义字符ch为0
定义整型ihea为10
定义整型i为0
把有54个元素的结构体heal数组healarr里的元素分别初始化为{0,1,R,-1},{0,2,R,1},{0,7,R,-1},{0,8,B,-1},{0,9,R,1},{0,10,R,1},{1,5,G,-1},{1,8,Y,-1},{1,9,R,1},{1,10,B,1},{2,0,G,1},{2,1,R,-1},{2,2,R,-1},{2,3,R,-1},{2,6,B,-1},{3,4,Y,1},{3,8,Y,-1},{3,9,R,1},{3,10,R,1},{4,1,B,-1},{4,9,B,-1},{4,10,Y,1},{5,1,R,-1},{5,2,R,-1},{5,4,R,1},{5,5,R,-1},{5,10,B,-1},{6,0,Y,-1},{6,3,G,1},{6,5,Y,-1},{6,9,Y,-1},{6,10,Y,2},{7,2,R,-1},{7,4,G,-1},{7,10,B,-1},{8,0,Y,1},{8,2,B,-1},{8,9,R,-1},{8,10,G,-1},{9,0,R,-1},{9,1,G,1},{9,2,Y,-1},{9,4,B,1},{9,8,R,-1},{9,9,G,-2},{9,10,G,-2},{10,0,Y,1},{10,1,B,-1},{10,2,G,1},{10,4,B,1},{10,5,R,-1},{10,7,B,-1},{10,8,G,-1}和{10,9,G,-2}
把有54个元素的结构体heal数组healarrR里的元素全都初始化为0
把结构体heal数组healarr里的全部内容都拷贝到结构体heal数组healarrR的里面去
把二维字符数组strmaze里的全部内容都拷贝到二维字符数组strmazer的里面去
输出“欢迎你来玩这个[31m掉迷宫\​033[0m,在这个迷宫中,“P”是你,“*”是墙,空格是你可以走的地方,而\​033[32;1m“G”\​033[0m是\​033[32;1m终点\​033[0m,走到这能让你\​033[32;1m胜利\​033[0m,并且,按“w”使你上移,按“a”使你左移,按“s”使你下移,按“d”使你右移,按“r”重置这个迷宫,\​033[31;1m“X”\​033[0m是\​033[31;1m陷阱\​033[0m,你如果踩了他,就会根据它的\​033[31;1m颜\​033[0;36m色\​033[31m扣掉相应的\​033[0m,其中,\​033[31;1m红色扣1\​033[0m,\​033[36m蓝色扣2\​033[0m,\​033[33m黄色扣4\​033[0m,\​033[32;1m绿色扣7\​033[0m,而\​033[35;1m紫色扣14\​033[0m,\​033[4m并且会\​033[31m永远出现在这个迷宫中\​033[0m,而\​033[32;1m“O”\​033[0m是\​033[32;1m瓶\​033[0m。到这就会使你用\​033[32;1m瓶加\​033[0m,\​033[4m但\​033[32;1;4m瓶\​033[0;4m用完之后就不能再使用了\​033[0m,其中,\​033[31;1m红色加1\​033[0m,\​033[36m蓝色加2\​033[0m,\​033[33m黄色加4\​033[0m,\​033[32;1m绿色加7\​033[0m,\​033[35;1m紫色加14\​033[0m。这就是这迷宫的规则,你听明白了吗?\​n\​n”
'G' == strmaze[10][10] && ihea >= 1?
定义整型ix为cp与二维字符数组strmaze第0行第0列的地址之间的元素个数除以11的结果
定义整型iy为cp与二维字符数组strmaze第0行第0列的地址之间的元素个数模上11的结果
设i为0
i < 54?
healarr[i].HOrD < 0?
'P' == strmaze[healarr[i].ix][healarr[i].iy]?
把ihea自增结构体heal数组healarr的第i项的成员变量rbyg的值乘以结构体heal数组healarr的第i项的成员变量HOrD的值的结果
' ' == strmaze[healarr[i].ix][healarr[i].iy]?
把二维字符数组strmaze第结构体heal数组healarr的第i项的成员变量ix的值行第结构体heal数组healarr的第i项的成员变量iy的值列的元素设为字符“X”
healarr[i].HOrD > 0?
'P' == strmaze[healarr[i].ix][healarr[i].iy]?
把ihea自增结构体heal数组healarr的第i项的成员变量rbyg的值乘以结构体heal数组healarr的第i项的成员变量HOrD的值的结果
'O' != strmaze[healarr[i].ix][healarr[i].iy]?
把结构体heal数组healarr的第i项的成员变量HOrD设为0
i自增1
执行printmaze函数,参数有二维字符数组strmaze,整型ihea和结构体heal数组healarr
把ch设为你输入的字符
清空缓冲区
把解引用的cp设为空格
'w' == ch?
ix && '*' != *(cp - 11)?
把cp向左移动11位
把解引用的cp设为字符“P”
ihea >= 1?
把字符串str的第7项设为字符“A”
ihea >= 1?
执行系统命令,命令为字符串str
如果ihea大于等于1,那么就输出“恭喜你,你赢了\​n”,否则就输出“很遗憾,你输了\​n”
结束
'a' == ch?
iy && '*' != *(cp - 1)?
把cp向左移动一位
's' == ch?
10 != ix && '*' != *(cp + 11)?
把cp向右移动11位
'd' == ch?
10 != iy && '*' != *(cp + 1)?
把cp向右移动一位
'r' == ch?
把结构体heal数组healarrR里的全部内容都拷贝到结构体heal数组healarr的里面去
把二维字符数组strmazer里的全部内容都拷贝到二维字符数组strmaze的里面去
设ihea为10
设cp为二维字符数组strmaze第0行第0列的地址
把字符串str的第7项设为字符“4”
printmaze函数
break
break*2
break*2
break*2
break*2
否(break*2)
结束
开始
定义整型i为0
定义整型ia为0
定义整型ib为0
定义字符串str为“0”
i < 11?
设ia为0
ia < 11?
设ib为0
ib < 54?
healarr[ib].ix == i && healarr[ib].iy == ia?
2 == healarr[ib].HOrD || -2 == healarr[ib].HOrD?
把字符串str设为“35;1”
前面输出“\​033[”,如果“P”不为二维字符数组strmaze第i行第ib列的元素,那么如果“G”为二维字符数组strmaze第i行第ia列的元素,那么中间就输出“32;1”,否则中间就输出字符串str,而如果“P”为二维字符数组strmaze第i行第ib列的元素,那么中间就输出“0”,后面则输出“m”,二维字符数组strmaze第i行第ia列的元素和“\​033[0m”
把字符串str设为“0”
ia自增1
输出“|\​n”
i自增1
前面输出“-----------@\​n\​033[3”,如果ihea大于6,那么中间就输出“2;1”,否则如果ihea大于3,那么中间就输出“3”,否则中间就输出“1”,后面输出“m你现在的生命值为:”,ihea和“\​n\​033[0m”
R == healarr[ib].rbyg?
把字符串str设为“31;1”
B == healarr[ib].rbyg?
把字符串str设为“36”
Y == healarr[ib].rbyg?
把字符串str设为“33”
G == healarr[ib].rbyg?
把字符串str设为“32;1”
ib自增1

程序游玩的效果

下一篇博客要说的东西

C++门迷宫


http://www.ppmy.cn/devtools/114019.html

相关文章

C++中为什么构造函数和析构函数不允许调用虚函数?

目录 1.引言 2.不要在构造函数中调用虚函数的原因 2.1.对象不完全构造问题 2.2.虚函数表&#xff08;vtable&#xff09;尚未初始化 3.不要在析构函数中调用虚函数的原因 4.构造函数中调用虚函数的实际效果 4.1.静态绑定而非动态绑定 4.2.运行时行为分析 5.替代方案 …

客户端/服务器的简易实现

目录 一,网络编程套接字 二,UDP/TCP的区别(​编辑) 三,UDP API使用 四,TCP API使用 一,网络编程套接字 socket socket(操作系统给应用程序的API,起了一个名字,就成为socket API) socket API提供了两套API分别为UDP和TCP: 二,UDP/TCP的区别() TCP有链接,可靠传输,面向字…

Qt中的延时

单次触发延时 单次触发延时是指定时器在指定的延时后触发一次&#xff0c;然后自动停止。这种方式非常适合只需要延时执行一次操作的场景。 #include <QTimer> #include <QObject>class MyClass : public QObject {Q_OBJECT public:MyClass() {QTimer::singleSho…

华为9月新品预告,「玄玑」之韵,引领科技潮流

随着科技的不断发展&#xff0c;智能手机已经成为我们日常生活中不可或缺的一部分。 作为全球领先的科技企业&#xff0c;华为一直致力于为消费者带来创新且具有竞争力的产品。 近日&#xff0c;有关华为9月份即将发布的新品消息引起了广泛关注。 据悉&#xff0c;这次新品将…

基于51单片机的矿井安全检测系统

基于51单片机的矿井安全检测系统使用51单片机作为系统主控&#xff0c;LCD1602进行显示同时系统集成了ADC0808和烟雾传感器、甲烷传感器&#xff0c;二者结合测量环境烟雾值&#xff0c;同时使用DHT11温湿度传感器获取环境温湿度值&#xff0c;使用L298N驱动风扇&#xff0c;利…

【Python机器学习】循环神经网络(RNN)——传递数据并训练

与其他Keras模型一样&#xff0c;我们需要向.fit()方法传递数据&#xff0c;并告诉它我们希望训练多少个训练周期&#xff08;epoch&#xff09;&#xff1a; model.fit(X_train,y_train,batch_sizebatch_size,epochsepochs,validation_data(X_test,y_test)) 因为个人小电脑内…

iPhone 16系列:熟悉的味道,全新的体验

来看看iPhone 16和Plus这两个新成员&#xff0c;实话说&#xff0c;它们和之前曝光的样子几乎完全一致。下面我们就一起来细数一下这次的几大变化吧。 外观设计&#xff1a;焕然一新 首先&#xff0c;最显眼的变化就是后置镜头模组的布局调整为了垂直排列。这一改变使得整个背…

初写MySQL四张表:(1/4)

今天我们的任务主线&#xff0c;便是完成创建该表&#xff1a; 表&#xff1a; 何为表&#xff1a; 表&#xff0c;Table也。 我在这里只是简单谈谈&#xff1a; 数据库的对象之一&#xff1a;数据库的对象有四大类&#xff0c;表是其中最根本的存在对象。其特点就是&…