C语言边界互通传送迷宫

目录

  • 注意事项
  • 开头
  • 程序
  • 程序的流程图
  • 程序输入与输出的效果
  • 结尾

注意事项

  • 程序里有关字符’\033’的输出都关于Sunshine-Linux的其中一篇博客——《printf函数高级用法设置打印字体颜色和背景色等》

开头

大家好,我叫这是我58。今天,我们来看一下我用C语言编译的边界互通传送迷宫和与之相关的一些东西。

程序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <Windows.h>
void printmaze(const char strmaze[9][9]) {int ia = 0;int ib = 0;for (ia = 0; ia < 9; ia++) {for (ib = 0; ib < 9; ib++) {printf("\033[%sm%c", 'G' == strmaze[ia][ib] ? "32" : '^' == strmaze[ia][ib] ? "33" : "0", strmaze[ia][ib]);}printf("\033[0m|\n");}printf("---------@\n");
}
int main() {int i = 0;char ch = 0;char strmaze[9][9] = {" *  ^^ ^ ","*P*^ ^  ^","^*^    ^ "," ^ ^^^ ^ ","      ^  ","   ^ ^^ ^","^^ ^    ^","    ^  G "," ^  ^  * "};char* cp = &strmaze[1][1];char* const carrp[32] = { &strmaze[0][4],&strmaze[0][5],&strmaze[0][7],&strmaze[1][3],&strmaze[1][5],&strmaze[1][8],&strmaze[2][0],&strmaze[2][7],&strmaze[3][3],&strmaze[3][4],&strmaze[3][7], &strmaze[4][6],&strmaze[6][0],&strmaze[3][1],&strmaze[5][6],&strmaze[6][3],&strmaze[7][4],&strmaze[2][2],&strmaze[3][5],&strmaze[6][1],&strmaze[6][8],&strmaze[5][8],&strmaze[5][5],&strmaze[5][3],&strmaze[8][4],&strmaze[8][1],&strmaze[0][1],&strmaze[1][0],&strmaze[1][2],&strmaze[2][1],&strmaze[8][7],&strmaze[1][1] };printf("欢迎你来玩这个迷宫游戏,在这个迷宫中,“P”是你,“G”是终点,而“*”是你可以走的地方,空格是虚空,你不能走,“w”往上,“a”往左,“s”往下,“d”往右,并且,这个迷宫边界互通,而且只要在传送点“^”上输入“z”,就可以传送到这个传送点的另一端,而你只要走到终点就可以了,这就是这个迷宫游戏的规则");Sleep(8800);system("cls");while ('G' == strmaze[7][7]) {printmaze(strmaze);scanf("%c", &ch);while ('\n' != getchar()) {;}*cp = ' ';for (i = 0; i < 26; i++) {' ' == *carrp[i] && (*carrp[i] = '^');}for (; i < 32; i++) {' ' == *carrp[i] && (*carrp[i] = '*');}switch (ch) {case 'w':for (i = 0; i < 9; i++) {if (cp == &strmaze[0][i]) {break;}}(9 == i && ' ' != *(cp - 9)) && (cp -= 9);(9 != i && ' ' != *(cp + 72)) && (cp += 72);break;case 'a':for (i = 0; i < 9; i++) {if (cp == &strmaze[i][0]) {break;}}(9 == i && ' ' != *(cp - 1)) && cp--;(9 != i && ' ' != *(cp + 8)) && (cp += 8);break;case 's':for (i = 0; i < 9; i++) {if (cp == &strmaze[8][i]) {break;}}(9 == i && ' ' != *(cp + 9)) && (cp += 9);(9 != i && ' ' != *(cp - 72)) && (cp -= 72);break;case 'd':for (i = 0; i < 9; i++) {if (cp == &strmaze[i][8]) {break;}}(9 == i && ' ' != *(cp + 1)) && (cp++);(9 != i && ' ' != *(cp - 8)) && (cp -= 8);break;case 'z':for (i = 0; i < 26; i++) {if (carrp[i] == cp) {i < 13 && (cp = carrp[i + 13]), i < 13 || (cp = carrp[i - 13]);break;}}break;default:break;}*cp = 'P';system("cls");}system("color 0A");printf("恭喜你,你赢了\n");return 0;
}

程序的流程图

开始
把宏_CRT_SECURE_NO_WARNINGS定义为1
导入stdio.h
导入Windows.h
定义printmaze函数
定义型i为0
定义字符ch为0
定义二维字符数组strmaze为下面的图片

等待8.8秒,等待好后就清屏
是(break)
break
清屏
是(break)
break
是(break)
break
是(break)
break
否(break)
否(break)
否(break)
否(break)
否(break)
否(break)
定义字符指针cp为二维字符数组strmaze第一行第一列的元素的地址
把有32个字符指针的常量数组carrp分别初始化为第0行第4列的地址,第0行第5列的地址,第0行第7列的地址,第1行第3列的地址,第1行第5列的地址,第1行第8列的地址,第2行第0列的地址,第2行第7列的地址,第3行第3列的地址,第3行第4列的地址,第3行第7列的地址,第4行第6列的地址,第6行第0列的地址,第3行第1列的地址,第5行第6列的地址,第6行第3列的地址,第7行第4列的地址,第2行第2列的地址,第3行第5列的地址,第6行第1列的地址,第6行第8列的地址,第5行第8列的地址,第5行第5列的地址,第5行第3列的地址,第8行第4列的地址,第8行第1列的地址,第0行第1列的地址,第1行第0列的地址,第1行第2列的地址,第2行第1列的地址,第8行第7列的地址和第1行第1列的地址
输出“欢迎你来玩这个迷宫游戏,在这个迷宫中,“P”是你,“G”是终点,而“*”是你可以走的地方,空格是虚空,你不能走,“w”往上,“a”往左,“s”往下,“d”往右,并且,这个迷宫边界互通,而且只要在传送点“^”上输入“z”,就可以传送到这个传送点的另一端,而你只要走到终点就可以了,这就是这个迷宫游戏的规则”
'G' == strmaze[7][7]?
把字符ch设为你输入的字符
'\n' != getchar()?
把解引用的的cp设为空格
设i为0
i < 26?
' ' == *carrp[i]?
把解引用的字符指针常量数组carrp的第i项设为“^”
i自增1
i < 32?
' ' == *carrp[i]?
把解引用的字符指针常量数组carrp的第i项设为“*”
i自增1
'w' == ch?
设i为0
i < 9?
cp == &strmaze[0][i]?
9 == i && ' ' != *(cp - 9)?
把cp向左移动9位
9 != i && ' ' != *(cp + 72)?
把cp向右移动72位
把解引用的cp设为“P”
把窗口的背景色设为黑色,前景色设为淡绿色
输出“恭喜你,你赢了\n”
结束
'a' == ch?
设i为0
i < 9?
cp == &strmaze[i][0]?
9 == i && ' ' != *(cp - 1)?
把cp向左移动一位
9 != i && ' ' != *(cp + 8)?
cp向右移动8位
's' == ch?
设i为0
i < 9?
cp == &strmaze[8][i]?
9 == i && ' ' != *(cp + 9)?
把cp向右移动9位
9 != i && ' ' != *(cp - 72)?
把cp向左移动72位
'd' == ch?
设i为0
i < 9?
cp == &strmaze[i][8]?
9 == i && ' ' != *(cp + 1)?
把cp向右移动一位
9 != i && ' ' != *(cp - 8)?
把cp向左移动8位
'z' == ch?
设i为0
i < 26?
carrp[i] == cp?
i < 13?
把cp设为字符指针常量数组carrp的第i加13项
i < 13?
break
i自增1
i自增1
i自增1
i自增1
i自增1
把cp设为字符指针常量数组carrp的第i减13项
printmaze函数
结束
开始
定义整型ia为0
定义整型ib为0
设ia为0
ia < 9?
设ib为0
ib < 9?
输出“\​033[%sm%c”(如果有9行9列的常量二维数组strmaze的第ia行第ib列为“G”,那么就代“32”,否则如果有9行9列的常量二维数组strmaze的第ia行第ib列为“^”,那么就代“33”,否则就代“0”,“%c”则代有9行9列的常量二维数组strmaze的第ia行第ib列的字符)
ib自增1
输出“\​033[0m|\​n”
ia自增1
输出“---------@\​n”

程序输入与输出的效果

边界互通传送迷宫

结尾

在你看到这里后,可以评论来互动一下我哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/386495.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务面试-分布式 注册中心 远程调用 保护

标红的原理还是不太熟悉 重新看 分布式事务 CAP理论 Consistency&#xff08;一致性&#xff09; Availability&#xff08;可用性&#xff09; Partition tolerance &#xff08;分区容错性&#xff09; BASE 理论 就是做取舍 cap三选二 AT模式脏写 TCC模式 注册中…

4nm点状激光模组的应用让未来科技走向潮流

在科技发展时代&#xff0c;激光技术以其高精度、高效率的特性&#xff0c;正逐步成为众多行业不可或缺的核心技术之一。其中&#xff0c;4nm点状激光模组作为激光技术领域的佼佼者&#xff0c;凭借其卓越的性能和广泛的应用前景&#xff0c;正引领着科技发展的新潮流。接下来我…

UnityShaderUI编辑器扩展

前言&#xff1a; 当我们在制作通用Shader的时候&#xff0c;避免不了许多参数混杂在一起&#xff0c;尽管在材质面板已经使用过Header标签来区分&#xff0c;但是较长的Shader参数就会导致冗余&#xff0c;功能块不够简约明了&#xff0c;如图&#xff1a; 对于Shader制作者来…

用spingboot+vue实现酒店管理系统的不同角色登录功能(附源码)

酒店管理系统 一、项目介绍 1、项目用到的技术栈 开发工具&#xff1a;idea 语言&#xff1a;java、js、htmlajax 数据库&#xff1a;MySQL 服务器&#xff1a;Tomcat 框架&#xff1a;mybatis、jQuery、springboot、vue 2、项目实现功能 管理员和用户登录和退出功能以及用…

WSL for Windows

1、安装 超详细Windows10/Windows11 子系统&#xff08;WSL2&#xff09;安装Ubuntu20.04&#xff08;带桌面环境&#xff09;_wsl安装ubuntu20.04-CSDN博客https://blog.csdn.net/weixin_44301630/article/details/122390018 注意&#xff0c;安装之后首次启动 Ubuntu 时&…

NC 删除有序链表中重复的元素-I

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 删除给出链表…

用依赖倒置和控制反转,突破Golang循环调用限制之后的思考

在软件开发中&#xff0c;随着项目规模的扩大和业务逻辑的复杂化&#xff0c;重构代码变得越来越重要。本文将介绍如何在既有代码基础上&#xff0c;通过依赖倒置&#xff08;DIP&#xff09;和控制反转&#xff08;IoC&#xff09;&#xff0c;实现新增加的代码可以循环引用到…

初学Mybatis之动态 SQL

动态 SQL 是指根据不同的条件生成不同的 SQL 语句 动态 SQL 详情请看链接 搭建环境&#xff1a; mysql 建立博客表 CREATE TABLE blog(id VARCHAR(50) NOT NULL COMMENT 博客id,title VARCHAR(100) NOT NULL COMMENT 博客标题,author VARCHAR(30) NOT NULL COMMENT 博客作者…

SolidWorks 2022安装包下载(图文详细安装教程)

SolidWorks 2022提供了强大的工具和功能&#xff0c;旨在帮助工程师和设计师进行产品设计和工程分析。它具有直观的用户界面和用户友好的操作&#xff0c;使得用户可以快速上手并进行复杂的设计任务。 主要特点和功能包括&#xff1a; 三维建模和装配&#xff1a;SolidWorks 20…

电脑没有摄像头怎么用手机当摄像头?虚拟摄像头使用的详细教程来了(全)

随着科技水平以及全球化经济的快速发展&#xff0c;视频会议、在线课程和直播已经成为日常办公或者生活中必不可少的一个环节。然而&#xff0c;在如今仍有许多台式电脑和一些老旧的笔记本电脑并没有内置摄像头&#xff0c;亦或者自带的摄像头质量不够理想&#xff0c;这使得视…

《python语言程序设计》2018版第6章第19题几何问题点的位置,利用4.31显示如何测试一个点是在一条有向线的左、右还是刚好在线上

# 这个是4.31的代码&#xff0c;一个函数里包含了。在线上&#xff0c;在线左&#xff0c;在线右 def judgePoint(x0, y0, x1, y1, x2, y2):juMethod ((x1 - x0) * (y2 - y0)) - ((x2 - x0) * (y1 - y0))if juMethod > 0:print("p2 is on the left side of the line f…

学习笔记:MySQL数据库操作5

1. 触发器&#xff08;Triggers&#xff09; 触发器是数据库的一种高级功能&#xff0c;它允许在执行特定数据库操作&#xff08;如INSERT、UPDATE、DELETE&#xff09;之前或之后自动执行一段代码。 1.1 创建商品和订单表 商品表&#xff08;goods&#xff09; gid: 商品编号…

Web3.js 4.x版本事件监听详解:从HTTP到WebSocket的迁移

项目场景 在一个使用以太坊区块链技术的项目中&#xff0c;需要监听智能合约的事件&#xff0c;以便在事件触发时能够及时响应。项目中使用了web3.js库的4.x版本&#xff0c;节点使用Geth启动&#xff0c;并通过HTTP与节点进行通信。 问题描述 合约DataStorage.sol文件已经定…

优雅单片机之STM32C8T6------蓝牙模块基本设置(2)

0&#xff0c;C8T6系列 1&#xff0c;入门之程序的下载 2&#xff0c;蓝牙模块基本设置&#xff08;本文&#xff09; 2&#xff0c;蓝牙模块基本应用 3&#xff0c;蓝牙小车&#xff08;待定&#xff09; 一&#xff0c;蓝牙模块基础设置 需要硬件&#xff1a;电脑&#x…

数据驱动未来:构建下一代湖仓一体电商数据分析平台,引领实时商业智能革命

1.1 项目背景 本项目是一个创新的湖仓一体实时电商数据分析平台&#xff0c;旨在为电商平台提供深度的数据洞察和业务分析。技术层面&#xff0c;项目涵盖了从基础架构搭建到大数据技术组件的集成&#xff0c;采用了湖仓一体的设计理念&#xff0c;实现了数据仓库与数据湖的有…

NGINX项目实战

一、nginx四层代理 部署支持4层TCP/UDP代理的Nginx服务器 部署nginx服务器 编译安装必须要使用--with-stream参数开启4层代理模块。 [rootproxy ~]# rm -rf /usr/local/nginx/ #清理环境 [rootproxy nginx-1.16.1]# ./configure --with-http_ssl_module --with-stream #开…

Java 沙漏图案(Hour-glass Pattern)

给定正整数 n&#xff0c;以沙漏形式打印数字模式。示例&#xff1a; 输入&#xff1a;rows_no 7 输出&#xff1a; 1 2 3 4 5 6 7 2 3 4 5 6 7 3 4 5 6 7 4 5 6 7 5 6 7 6 7 7 6 7 5 6 7 4 5 6 7 3 4 5 6 7 2 3 4 5 6 7 1 2 3 4 5 6…

phpwamp集成环境中里在php7.1.5下安装php_redis扩展及mysql索引类型和索引方法笔记

一、phpwamp集成环境中里在php7.1.5下安装php_redis扩展 phpwamp集成环境使用起来非常方便&#xff0c;选择要启用的环境启动即可&#xff0c;可以非常方便地在apache,nginx&#xff0c;php各版本之间切换。启动后的界面如下图&#xff0c;不过在使用phpwamp的过程中&#xff0…

C# 6.定时器 timer

使用控件&#xff1a; 开启定时器&#xff1a;timer1.Start(); 关闭定时器&#xff1a;timer1.Stop(); 定时间时间间隔:Interval timer1.Interval 1000; Interva等于1000是每一秒刷新一次 定时器默认时间间隔是100ms 代码创建定时器 ①创建 Timer t1 new Timer(); …

dotnet-starter-kit:一个Web API+Blazor多租户、模块化、简洁DDD架构!

推荐一个Web APIBlazor多租户、模块化、简洁DDD项目框架。 01 项目简介 dotnet-starter-kit是一个基于 .NET 8 的开源项目&#xff0c;架构构建基于 Clean Architecture 原则的解决方案。支持多租户、模块化&#xff0c;一个开箱即用的项目&#xff0c;方便我们快速开发项目。…