C++掉血迷宫

目录

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

开头

大家好,我叫这是我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.xdnf.cn/news/1537250.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【例题】lanqiao549 扫雷

输入 3 4 0 1 0 0 1 0 1 0 0 0 1 0输出 2 9 2 1 9 4 9 2 1 3 9 2解题思路 分类讨论&#xff1a; 如果原来的方格整数为1&#xff0c;输出9如果原来的方格整数为0&#xff0c;输出周围8个&#xff08;最多八个&#xff09;的地雷数量和 代码 如何遍历一个方格mp[i][j]周围…

c++中引用是通过指针的方式实现

其实在汇编层面上&#xff0c;引用的代码和指针的代码是一致的。 先看指针情况下的代码分析&#xff0c;如下所示&#xff1a; #include <iostream>using namespace std;void fuzhi(int *x)//引用传参 {*x 10; }int main(int argc, char** argv) {int a 0;int b;a …

架构设计——概念和基础

&#x1f3e0;1 架构基础 想要搞清楚架构到底指什么&#xff0c;架构与框架的区别&#xff0c;就需要了解梳理系统、子系统、模块、组件、框架和架构 1.1系统与子系统 1.1.1系统 wiki:系统泛指由一群有关联的个体组成&#xff0c;根据某种规则运作&#xff0c;能完成个别元…

Python编码系列—Python外观模式:简化复杂系统的快捷方式

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

QT安装时出现错误(镜像)

QT下载网站 下载网址 QT安装时出现错误 解决方法 按“win+R”键弹出“运行”窗口,输入"cmd",点击确定; 打开如下图运行框,将Qt文件拖到窗口里->空一格输入“–mirror https://mirrors.aliyun.com/qt”->按enter键进入,即可成功安装 正式安

gazebo遇到的阶段性问题汇总

目录 1 gazebo中碰撞模型崩坏或者飞的问题2 编译报错解决方法 3 控制器无法正常启动解决方法 4 xacro:macro 定义函数5 xacro:property 定义变量的值报错截图解决方法 6 gazebo 模型视觉穿模&#xff08;已设置碰撞体积&#xff09;解决方法穿模截图 1 gazebo中碰撞模型崩坏或者…

王道408考研数据结构-绪论

1.1 数据结构的基本概念 数据结构 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。在任何问题中&#xff0c;数据元素 都不是孤立存在的&#xff0c;它们之间存在某种关系&#xff0c;这种数据元素相互之间的关系称为结构(Structure)。 数据结构包括三方面的内…

中秋的“超级月亮”在哪?来竹海幻境寻找心中的白月光

夜幕低垂&#xff0c;一场视觉盛宴悄然拉开序幕——《桃花江竹海幻境》&#xff08;下文简称《竹海幻境》&#xff09;剧场中。一轮轮明月仿佛穿越时空的使者&#xff0c;与葱郁的竹林交相辉映&#xff0c;与天际那轮皎洁的明月共同编织出一幅“超级月亮”的绝美画卷&#xff0…

sizeof与strlen()函数的对比总结

目录 1.sizeof操作符1.1sizeof操作符特点 2.strlen( )函数2.1 函数简介2.2 创建字符串 3.sizeof 和 strlen的对比 1.sizeof操作符 在学习操作符的时候&#xff0c;我们学习了 sizeof &#xff0c; sizeof 计算变量所占内存内存空间⼤⼩的&#xff0c;单位是字节&#xff0c;如…

C++的类与对象下

目录 1.初始化列表 2.隐式类型转换 1.单参数 2.多参数&#xff08;C11提供的新功能&#xff09; 3.static成员 4.友元 5.内部类 6.匿名对象 1.初始化列表 C祖师爷规定初始化列表是成员变量定义与初始化的地方。 class Time { public:Time(int hour):_hour(hour){cout &…

从虚拟机安装CentOS到自定义Dockerfile构建tomcat镜像

写在开头 整个过程中涉及的三方软件均来源于三方的官网&#xff0c;因此需要有一个稳定良好的访问公网网络的环境&#xff0c;可能需要科学上网 下载并安装 VMware Workstation Player 下载 需要先注册登录&#xff1a;https://login.broadcom.com/signin 下载页面&#xff1a…

7-23 还原二叉树

代码&#xff1a; #include<iostream> using namespace std; int n; char a[55],b[55]; int dfs(int l,int r,int x,int y){ // printf("**l%d,r%d,x%d,y%d\n",l,r,x,y);if(l>r) return 0; // if(lr) return 1;int i;for(ix;i<y;i){if(a[l]b[i]) break;…

信息安全工程师(6)网络信息安全现状与问题

一、网络信息安全现状 威胁日益多样化&#xff1a;网络攻击手段不断翻新&#xff0c;从传统的病毒、木马、蠕虫等恶意软件&#xff0c;到勒索软件、钓鱼攻击、DDoS攻击、供应链攻击等&#xff0c;威胁形式多种多样。这些攻击不仅针对个人用户&#xff0c;还广泛影响企业、政府等…

【OJ刷题】双指针问题5

这里是阿川的博客&#xff0c;祝您变得更强 ✨ 个人主页&#xff1a;在线OJ的阿川 &#x1f496;文章专栏&#xff1a;OJ刷题入门到进阶 &#x1f30f;代码仓库&#xff1a; 写在开头 现在您看到的是我的结论或想法&#xff0c;但在这背后凝结了大量的思考、经验和讨论 目录 1…

Mac下nvm无法安装node问题

背景 最近换用mac开发&#xff0c;然后使用nvm&#xff08;版本0.40.1&#xff09;进行node安装的时候出现了一些问题 使用 nvm ls-remote发现只有 iojs 版本 原因可能是nodejs升级了某个协议导致的 解决方案 可以使用 NVM_NODEJS_ORG_MIRRORhttp://nodejs.org/dist nvm ls-re…

关于一道逻辑思维训练题的理解(手表、闹钟、标准时间的骗局)

说有一块手表&#xff0c;比闹钟每时慢30秒&#xff0c;而闹钟比标准时间每时快30秒&#xff0c;那么&#xff0c;这块手表是准时的么 &#xff1f; 这道题就是个带时间刻度的四维骗局 就是个文字游戏 接下来我们来分析一下&#xff0c;为什么说它是个骗局&#xff0c;简直与…

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

我们已经完成了四张表的创建&#xff0c;学会了创建表和查看表字段信息的语句。 初写MySQL四张表:(1/4)-CSDN博客 初写MySQL四张表:(2/4)-CSDN博客 接下来&#xff0c;我们来学点对数据的操作&#xff1a;增 删 查&#xff08;一部分&#xff09;改 先来看这四张表以及相关…

Java入门,初识Java

Java背景知识 Java是早期美国 sun 公司&#xff08;Stanford University Network&#xff09;在1995年推出的一门计算机高级编程语言。Java早期称为Oak&#xff08;中文翻译为&#xff1a;橡树&#xff09;&#xff0c;后期改名为Java。&#xff08;因为当时sun公司门口有很多…

【Linux系统编程】用互斥量和信号量加锁STL容器,避免并发问题

目录 引言 容器模型 容器代码 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 STL容器并没有保证线程安全&#xff0c;而大多数应用场景下&#xff0c;为了追求效率&#xff0c;多线程是必不可少的。而底层容器难免会有并发问题。从设计上来说要么在上层代码做加锁处…

Effective C++笔记之二十三:非void函数不写return

一.main函数 Qt Creator查看汇编的步骤如下 上图是g编译器下的汇编 eax就是main()函数的返回值 如果删掉return 0&#xff1b; 可以发现编译器还是把eax的值设为了0&#xff0c;由此可见&#xff0c;即使在main函数中不写return 0&#xff0c;编译器还是会默认添加个return 0。…