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

C++门迷宫

目录

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

开头

大家好,我叫这是我58。

程序

#include <iostream>
using namespace std;
void printmaze(const char strmaze[11][11]) {int i = 0;int ia = 0;for (; i < 11; i++) {for (ia = 0; ia < 11; ia++) {cout << "\033[" << ('0' == strmaze[i][ia] ? "33" : 'G' == strmaze[i][ia] ? "32;1" : "0") << "m" << strmaze[i][ia] << "\033[0m";}cout << "|" << endl;}cout << "-----------@" << endl;
}
int main() {char strmaze[11][11] = {'P','0','*','0','*','0','0',' ','0',' ',' ',' ',' ','*',' ','*',' ',' ','0',' ',' ',' ','*','*','*',' ','*',' ','*',' ','*',' ',' ','0',' ','*',' ','*','0','*',' ',' ',' ',' ',' ',' ','*',' ',' ',' ','0','*','*','*',' ',' ','0','*',' ','0','0',' ','*',' ','*','*',' ',' ','*','*',' ',' ','0','*','*','*','0',' ',' ','*','0','*',' ',' ','*',' ',' ',' ','0',' ','*',' ','*',' ','*',' ',' ','*','0',' ',' ','*',' ','*','*','*','0',' ','*',' ',' ',' ','*',' ',' ','0',' ',' ',' ','*','G',};char* cp = &strmaze[0][0];char ch = 0;int i = 0;bool bpw = 0;int doorarr[36] = {0,1,3,0,5,1,0,8,8,0,0,3,3,5,4,6,1,7,0,5,0,6,6,6,5,5,9,7,6,10,8,10,5,4,7,3};cout << "欢迎你来玩这个\033[33m门\033[0m迷宫,在这个迷宫中,“P”是你,“*”是墙,你不能走到这,空格是你可以走的地方,“w”使你上移,“a”使你左移,“s”使你下移,“d”使你右移,而\033[32;1m“G”\033[0m是\033[32;1m终点\033[0m,走到这能让你\033[32;1m胜利\033[0m,并且,\033[33m“0”\033[0m是\033[33m门\033[0m,按“\033[33mz\033[0m”键进入就可以走到\033[33m另外一扇门\033[0m的前面。这就是这迷宫的规则,你听明白了吗?" << endl << endl;system("pause");system("cls");while ('G' == strmaze[10][10]) {int ix = (cp - &strmaze[0][0]) / 11;int iy = (cp - &strmaze[0][0]) % 11;printmaze(strmaze);cin >> ch;rewind(stdin);*cp = ' ';switch (ch) {case 'w':ix && '*' != *(cp - 11) && '0' != *(cp - 11) && (cp -= 11);bpw = 1;break;case 'a':iy && '*' != *(cp - 1) && '0' != *(cp - 1) && (cp--);bpw = 0;break;case 's':10 != ix && '*' != *(cp + 11) && '0' != *(cp + 11) && (cp += 11);bpw = 0;break;case 'd':10 != iy && '*' != *(cp + 1) && '0' != *(cp + 1) && (cp++);bpw = 0;break;case 'z':if (bpw) {for (i = 0; i < 36; i += 2) {if (ix - 1 == doorarr[i] && iy == doorarr[i + 1]) {if (i / 2 % 2) {cp = &strmaze[doorarr[i - 2] + 1][doorarr[i - 1]];}else {cp = &strmaze[doorarr[i + 2] + 1][doorarr[i + 3]];}}}}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)
定义字符指针cp为二维字符数组strmaze第0行第0列的地址
定义字符ch为0
定义整型i为0
定义布尔型bpw为0
把有36个元素的整型数组doorarr里的元素分别为初始化为0,1,3,0,5,1,0,8,8,0,0,3,3,5,4,6,1,7,0,5,0,6,6,6,5,5,9,7,6,10,8,10,5,4,7和3
输出“欢迎你来玩这个\​033[33m门\​033[0m迷宫,在这个迷宫中,“P”是你,“*”是墙,你不能走到这,空格是你可以走的地方,“w”使你上移,“a”使你左移,“s”使你下移,“d”使你右移,而\​033[32;1m“G”\​033[0m是\​033[32;1m终点\​033[0m,走到这能让你\​033[32;1m胜利\​033[0m,并且,\​033[33m“0”\​033[0m是\​033[33m门\​033[0m,按“\​033[33mz\​033[0m”键进入就可以走到\​033[33m另外一扇门\​033[0m的前面。这就是这迷宫的规则,你听明白了吗?\​n\​n”
'G' == strmaze[10][10]?
定义整型ix为cp与二维字符数组strmaze第0行第0列的地址之间的元素个数除以11的结果
定义整型iy为cp与二维字符数组strmaze第0行第0列的地址之间的元素个数模上11的结果
执行printmaze函数,参数有二维字符数组strmaze
把ch设为你输入的字符
清空缓冲区
把解引用的cp设为空格
'w' == ch?
ix && '*' != *(cp - 11) && '0' != *(cp - 11)?
把cp向左移动11位
把bpw设为1
把解引用的cp设为字符“P”
把背景色设为黑色,前景色设为淡绿色
输出“恭喜你,你赢了\​n”
结束
'a' == ch?
iy && '*' != *(cp - 1) && '0' != *(cp - 1)?
把cp向左移动一位
把bpw设为0
's' == ch?
10 != ix && '*' != *(cp + 11) && '0' != *(cp + 11)?
把cp向右移动11位
把bpw设为0
'd' == ch?
10 != iy && '*' != *(cp + 1) && '0' != *(cp + 1)?
把cp向右移动一位
把bpw设为0
'z' == ch?
bpw?
设i为0
i < 36?
ix - 1 == doorarr[i] && iy == doorarr[i + 1]?
i / 2 % 2?
把cp设为二维字符数组strmaze第整型数组doorarr的第i减2项加1的值行第整型数组doorarr的第i减1项的值列的地址
i自增2
把cp设为二维字符数组strmaze第整型数组doorarr的第i加2项加1的值行第整型数组doorarr的第i加3项的值列的地址
printmaze函数
结束
开始
定义整型i为0
定义整型ia为0
i < 11?
设ia为0
ia < 11?
前面输出“\​033[”,如果“0”为二维字符数组strmaze第i行第ia列的元素,那么中间输出“33”,否则如果“G”为二维字符数组strmaze第i行第ia列的元素,那么中间就输出“32;1”,否则中间就输出“0”,后面则输出“m”,二维字符数组strmaze第i行第ia列的元素和“\​033[0m”
ia自增1
输出“|\​n”
i自增1
输出“-----------@\​n”

程序游玩的效果

门迷宫

下一篇博客要说的东西

C++两点成一线

相关文章:

C++门迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #include <iostream> using namespace std; void printmaze(const char strmaze[11][11]) {int i 0;int ia 0;for (; i < 11; i) {for (ia 0; ia <…...

用最通俗易懂的语言和例子讲解三维点云

前言&#xff1a; 我整体的学习顺序是看的按B站那“唯一”的三维点云的视频学习的&#xff08;翻了好久几乎没有第二个...&#xff09;对于深度学习部分&#xff0c;由于本人并没有进行学习&#xff0c;所以没有深究。大多数内容都进行了自己的理解并找了很多网络的资源方便理解…...

VM虚拟机下载以及激活

传统的官网已经找不到下载了&#xff0c;这里我将下载好的放在阿里云盘&#xff0c;百度云盘太慢了&#xff0c;懂得都得 阿里云盘分享 下载好了后会是一个exe文件&#xff0c;直接双击运行就可 下载无脑下一步即可&#xff0c;这里不做介绍 下载好了后&#xff0c;需要密钥这里…...

详解Ajax与axios的区别

Ajax与Axios在Web开发中都是用于发送HTTP请求的技术&#xff0c;但它们在多个方面存在显著的差异。以下是对两者区别的详细解析&#xff1a; 1. 技术原理 Ajax&#xff1a;Asynchronous JavaScript and XML&#xff08;异步JavaScript和XML&#xff09;的缩写&#xff0c;是一…...

golang学习笔记28——golang中实现多态与面向对象

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…...

运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行。

一、问题描述 运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行&#xff0c;然后重新运行。 二、问题分析 在idea中&#xff0c;运行一个springboot项目&#xff0c;在使用大量的库和依赖的时候&#xff0c;会出现报错“命令行过长”&…...

k8s自动清理pod脚本分享

检查会遇到集群节点内存消耗超过90%&#xff0c;我们可以筛选一些可以进行重启的pods&#xff0c;如脚本中涉及svc-开头的&#xff0c;进行触发即重启的shell编写。此项会涉及metrics组件需要安装。 #!/bin/bash# 设置内存使用率阈值为90% MEMORY_THRESHOLD90# 初始化一个数组…...

Go并发编程的高级技巧——请求复制与限流

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在一些高性能应用场景中,快速响应是非常重要的目标。例如,当一个应用需要快速响应用户的HTTP请求,或从多个副本中检索数据时,如何优化请求处理成为关键。本文将讨论如何在Go语言中,通过并发和限流机制来实现…...

网站建设模板选择哪种

在选择网站建设模板时&#xff0c;需要考虑多个因素&#xff0c;包括网站的目的、受众、内容类型以及个性化需求等。以下是一些常见的网站建设模板类型&#xff0c;以及它们的特点&#xff0c;希望对你的选择有所帮助。 企业/商务模板&#xff1a; 企业和商务网站通常需要专业、…...

【linux】kill命令

kill 命令在 Linux 和类 Unix 系统中用于向进程发送信号&#xff0c;默认情况下是发送 SIGTERM&#xff08;信号 15&#xff09;&#xff0c;请求程序终止运行。如果程序没有响应 SIGTERM 信号&#xff0c;可以使用 SIGKILL&#xff08;信号 9&#xff09;强制终止进程&#xf…...

Python基础 | 在虚拟环境中安装并在指定文件夹中打开Jupyter notebook

在虚拟环境中安装并在指定文件夹中打开Jupyter notebook 前言一、在虚拟环境下安装Jupyter notebook二、在指定路径下打开Jupyter notebook 前言 Jupyter Notebook 是一个基于 Web 的交互式计算环境&#xff0c;主要功能是将代码、文本、数学方程式、可视化和其他相关元素组合…...

1.Spring-容器-注册

一、Bean和获取Bean &#xff08;1&#xff09;创建IoC容器&#xff1a; SpringApplication.run(类名.class, args); ConfigurableApplicationContext ioc SpringApplication.run(Spring01IocApplication.class, args); &#xff08;2&#xff09;将对象注册到IoC容器中&am…...

Mapper.xml SQL大于小于号转义符

Mapper.xml中写的SQL语句&#xff0c;大于小于号字符直接写会报错&#xff0c;需要变成转义字符 对应如下&#xff1a; Mapper.xml SQL大于小于号转义符...

Linux:进程(三)——进程状态

目录 Linux源代码对进程的描述 R S D T t X Z&#xff08;进程僵尸&#xff09; 孤儿进程 Linux源代码对进程的描述 理论上把进程状态大致被分为了&#xff1a;运行、阻塞、挂起。那么&#xff0c;在操作系统中具体是如何描述状态的。&#xff08;有时候Linux内核也把…...

Effective Java 学习笔记 如何为方法编写文档

目录 方法的文档注解设计的原则 Javadoc常用的文档注释 一些注意细节 通过Javadoc命令生成h5页面 这是第8章Java方法的最后一部分&#xff0c;聚焦为导出的API编写文档注释。 如果要想使得API真正可用&#xff0c;配套的文档是必须的。Java提供了Javadoc这个文档生成工具&…...

TCP四大拥塞控制算法总结

四大算法&#xff1a;1.慢启动&#xff0c;2.拥塞避免&#xff0c;3.拥塞发生&#xff0c;4.快速恢复。 慢启动&#xff1a; 首先连接建好的开始先初始化拥塞窗口cwnd大小为1&#xff0c;表明可以传一个MSS大小的数据。 每当收到一个ACK&#xff0c;cwnd大小加一&#xff0c…...

深入解析ElasticSearch从基础概念到性能优化指南

一.引言 ElasticSearch是一个分布式的搜索和分析引擎&#xff0c;专为处理大规模的结构化和非结构化数据而设计。它建立在Apache Lucene之上&#xff0c;提供了强大的全文搜索能力、高可用性和实时分析的功能。无论是作为日志分析平台&#xff0c;还是作为数据驱动的应用程序的…...

git分支合并时忽略指定文件

分支合并忽略特定文件步骤 1.在项目根目录下cmd窗口运行以下命令 git config merge.ours.driver true2.在项目根目录下新建文件.gitattributes然后文件中写入需要忽略的文件名 mergeours, 一个文件占一行 Dockerfile mergeours /nginx/default.conf mergeours...

基于微信小程序的童装商城的设计与实现+ssm(lw+演示+源码+运行)

童装商城小程序 摘 要 随着移动应用技术的发展&#xff0c;越来越多的用户借助于移动手机、电脑完成生活中的事务&#xff0c;许多的传统行业也更加重视与互联网的结合&#xff0c;由于城镇人口的增加&#xff0c;人们去商场购物总是排着长长的队伍&#xff0c;对于时间紧的人…...

什么叫后验分布

后验分布&#xff08;Posterior Distribution&#xff09;是在贝叶斯统计中一个重要的概念。它指的是在观测到数据之后&#xff0c;对参数或潜变量的分布的更新。具体来说&#xff0c;后验分布是基于先验分布&#xff08;Prior Distribution&#xff09;和似然函数&#xff08;…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...