C语言迷宫制造

ops/2024/9/23 3:24:22/

目录

  • 开头
  • 程序
  • 程序的流程图
  • 程序的效果
  • 我推荐要制造迷宫
  • 下一篇博客要讲的东西

开头

大家好,我叫这是我58。

程序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h> 
#include <string.h>
void printmaze(const char strmaze[11][11]) {int ia = 0;int ib = 0;for (ia = 0; ia < 11; ia++) {for (ib = 0; ib < 11; ib++) {printf("\033[%sm%c\033[0m", 'G' == strmaze[ia][ib] ? "32;1" : "0", strmaze[ia][ib]);}printf("|\n");}printf("-----------@\n");
}
int main() {int i = 0;int ia = 0;int ip = 0;int ig = 0;char ch = 0;char strmaze[11][11] = { 0 };char* cpg = NULL;memset(strmaze, ' ', sizeof strmaze);char* cp = &strmaze[0][0];printf("迷宫制造的规则:\n\t1.迷宫最大能制造的大小为11*11\n\t2.迷宫中只能有“P”“\033[32;1mG\033[0m”“*”和空格,不能有的会自动地被清除掉\n\t3.可以用“/”或者“|”来结束迷宫制造,只不过,用“|”来结束迷宫制造的话就可以使你可以边界互通了\n\t4.在制造迷宫的时候,迷宫最多只能有121个字符,如果超出这个部分,那么就会在换行之后自动结束迷宫制造,如果你制造的完整的迷宫的右边紧挨着“|”,那么就可以使你可以边界互通了\n\t5.最好把迷宫造的完整点,并且右边要加上“/”或者“|”,不然就会耽误你玩你自己做的迷宫的时间\n\n");while (ch = getchar(), ((' ' == ch || '*' == ch || 'P' == ch || 'G' == ch) && (i++, *cp = ch, (i <= 120 && cp++))), (ch - '/' && ch - '|')) {'P' == ch && ip++;'G' == ch && ig++;if (121 == i) {break;}}((!(ch - '|')) || (!(getchar() - '|'))) && (ia = 1);if (!(ip && ig)) {system("color 0C");system("cls");printf("ERROR: “P”或者“G”并\033[4m没有被创建出来\033[0m\n");return 1;}if (ip > 1 || ig > 1) {system("color 0C");system("cls");printf("ERROR: “P”和“G”\033[4m只能创建一个\033[0m\n");return 1;}for (i = 0, cp = NULL; !(cp && cpg); i++) {!cp && (cp = strstr(strmaze[i], "P"));!cpg && (cpg = strstr(strmaze[i], "G"));}system("cls");while ('\n' != getchar()) {;}while ('G' == *cpg) {printmaze(strmaze);scanf("%c", &ch);while ('\n' != getchar()) {;}*cp = ' ';switch (ch) {case 'w':for (i = 0; i < 11; i++) {if (cp == &strmaze[0][i]) {break;}}11 == i && '*' != *(cp - 11) && (cp -= 11);(ia && 11 != i && '*' != *(cp + 110)) && (cp += 110);break;case 'a':for (i = 0; i < 11; i++) {if (cp == &strmaze[i][0]) {break;}}11 == i && '*' != *(cp - 1) && cp--;(ia && 11 != i && '*' != *(cp + 10)) && (cp += 10);break;case 's':for (i = 0; i < 11; i++) {if (cp == &strmaze[10][i]) {break;}}11 == i && '*' != *(cp + 11) && (cp += 11);(ia && 11 != i && '*' != *(cp - 110)) && (cp -= 110);break;case 'd':for (i = 0; i < 11; i++) {if (cp == &strmaze[i][10]) {break;}}11 == i && '*' != *(cp + 1) && cp++;(ia && 11 != i && '*' != *(cp - 10)) && (cp -= 10);break;default:break;}*cp = 'P';system("cls");}system("color 0A");printf("恭喜你,你赢了\n");return 0;
}

程序的流程图

maze里的所有元素都改为空格" style="opacity: 1;" id="L-j-把二维字符数组strmaze里的所有元素都改为空格"> maze里的所有元素都改为空格 LE-k" style="opacity: 1;" id="L-把二维字符数组strmaze里的所有元素都改为空格-k">
maze里的所有元素都改为空格" class="edgeLabel L-LS-j' L-LE-把二维字符数组strmaze里的所有元素都改为空格">
maze里的所有元素都改为空格-k" class="edgeLabel L-LS-把二维字符数组strmaze里的所有元素都改为空格' L-LE-k">
break
清屏
返回1
清屏
返回1
否(清屏)
是(break)
break
清屏
返回0
是(break)
break
是(break)
break
是(break)
break
否(break)
否(break)
否(break)
否(break)
否(break)
开始
把宏_CRT_SECURE_NO_WARNINGS定义为1
导入stdio.h
导入stdlib.h
导入string.h
定义printmaze函数
定义整型i为0
定义整型ia为0
定义整型ip为0
定义整型ig为0
定义字符ch为0
把有11行11列的二维字符数组strmaze全都初始化为0
定义字符指针cpg为空指针
maze里的所有元素都改为空格-796" transform="translate(1997.505126953125,1279)">
把二维字符数组strmaze里的所有元素都改为空格
定义字符指针cp为二维字符数组strmaze第0行第0列的地址
输出“迷宫制造的规则:\​n\​t1.迷宫最大能制造的大小为11*11\​n\​t2.迷宫中只能有“P”“\​033[32;1mG\​033[0m”“*”和空格,不能有的会自动地被清除掉\​n\​t3.可以用“/”或者“|”来结束迷宫制造,只不过,用“|”来结束迷宫制造的话就可以使你可以边界互通了\​n\​t4.在制造迷宫的时候,迷宫最多只能有121个字符,如果超出这个部分,那么就会在换行之后自动结束迷宫制造,如果你制造的完整的迷宫的右边紧挨着“|”,那么就可以使你可以边界互通了\​​n\​t5.最好把迷宫造的完整点,并且右边要加上“/”或者“|”,不然就会耽误你玩你自己做的迷宫的时间\​n\​n”
把ch设为你从缓冲区里最先读取到的字符
' ' == ch || '*' == ch || 'P' == ch || 'G' == ch?
i自增1
把解引用的cp设为ch
i <= 120?
把cp向右移动一位
ch - '/' && ch - '|'?
'P' == ch?
ip自增1
'G' == ch?
ig自增1
121 == i?
(!(ch - '|')) || (!(getchar() - '|'))?
设ia为1
!(ip && ig)?
把窗口的背景色设为黑色,前景色设为淡红色
输出“ERROR: “P”或者“G”并\​033[4m没有被创建出来\​033[0m\​n”
结束
ip > 1 || ig > 1?
把窗口的背景色设为黑色,前景色设为淡红色
输出“ERROR: “P”和“G”\​033[4m只能创建一个\​033[0m\​n”
设i为0
把cp设为空指针
!(cp && cpg)?
!cp?
从二维字符数组strmaze的第i项中找到字符串“P”的地址,如果找到了,cp就为strmaze的第i项中找到的字符串“P”的地址,否则cp为空指针
!cpg?
从二维字符数组strmaze的第i项中找到字符串“P”的地址,如果找到了,cpg就为strmaze的第i项中找到的字符串“G”的地址,否则cpg为空指针
i自增1
'\n' != getchar()?
'G' == *cpg?
执行printmaze函数,参数有二维字符数组strmaze
把ch设为你输入的字符
'\n' != getchar()?
把解引用的cp设为空格
'w' == ch?
设i为0
i < 11?
cp == &strmaze[0][i]?
11 == i && '*' != *(cp - 11)?
把cp向左移动11位
ia && 11 != i && '*' != *(cp + 110)?
把cp向右移动110位
把解引用的cp设为字符“P”
把窗口的背景色设为黑色,前景色设为淡绿色
输出“恭喜你,你赢了\​n”
'a' == ch?
设i为0
i < 11?
cp == &strmaze[i][0]?
11 == i && '*' != *(cp - 1)?
把cp向左移动一位
ia && 11 != i && '*' != *(cp + 10)?
把cp向右移动10位
's' == ch?
设i为0
i < 11?
cp == &strmaze[10][i]?
11 == i && '*' != *(cp + 11)?
把cp向右移动11位
ia && 11 != i && '*' != *(cp - 110)?
把cp向左移动110位
'd' == ch?
设i为0
i < 11?
cp == &strmaze[i][10]?
11 == i && '*' != *(cp + 1)?
把cp向右移动一位
ia && 11 != i && '*' != *(cp - 10)?
把cp向左移动10位
i自增1
i自增1
i自增1
i自增1
maze函数">
printfmaze函数
结束
开始
定义整型ia为0
定义整型ib为0
设ia为0
ia < 11?
设ib为0
ia < 11?
输出“\​033[%sm%c\​033[0m”(如果字符“G”为二维字符数组strmaze第ia行第ib列的元素,那么“%s”代“32;1”,否则代“0”,“%c”则代二维字符数组strmaze第ia行第ib列的元素的地址)
ib自增1
输出“|\​​n”
ia自增1
输出“-----------@\​n”

程序的效果

我推荐要制造迷宫

……

下一篇博客要讲的东西

sprintf函数和sscanf函数


http://www.ppmy.cn/ops/102696.html

相关文章

秋招 8.24京东笔试 JDS-2025届秋招-后端开发工程师-第3批

8.24 JDS-2025届秋招-后端开发工程师-第3批 前言 京东不同的语言(C, Java, Go)卷子是不同的&#xff0c;一开始会让你选对应的语言。 选择题分为八股文和编程逻辑题&#xff0c;编程大题有三题(15, 20, 25) 大题&#xff0c;笔者AC了前两道&#xff0c;最后一题暴力20% 希望…

sqlilabs less21-25关手工注入

第21关 一.登录页面 二 .Burp Suite 抓包&#xff0c;进入重放器 三.查询数据库 先进行编码 )and updatexml(1,concat(1,database()),1)# 四.查表&#xff0c;先进行编码 )and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where…

PHP 全攻略:从环境搭建到实战项目的深度探索

一、引言 PHP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛应用于 Web 开发的服务器端脚本语言。它具有简单易学、功能强大、开源免费等特点&#xff0c;被众多开发者和企业所青睐。本文将详细介绍 PHP 的开发环境搭建、基本语法格式、变量与变量作用域、常量与数…

使用python对接空号检测API接口

为什么选择空号检测API接口&#xff1f; 自动化检测电话号码的有效性&#xff0c;减少人工筛查的时间和成本。确保与客户的每一次联系都是有效的&#xff0c;避免因为无效号码而错失重要客户。通过API接口实时更新和验证电话号码数据&#xff0c;保证数据的准确性和及时性。 …

对标GPT4o,智谱推出新一代基座大模型 GLM-4-Plus

最新基座大模型 GLM-4-Plus发布并上线开放平台 在 KDD 国际数据挖掘与知识发现大会上&#xff0c;智谱 GLM 团队介绍了新一代基座大模型GLM-4-Plus。GLM-4-Plus 是智谱全自研 GLM 大模型的最新版本&#xff0c;它标志着智谱继续瞄准通用人工智能&#xff0c;持续推进大模型技术…

ESXI8虚拟机vmdk文件备份到本地硬盘

1. Esxi开启ssh服务 点击“管理”→“服务” →“TSM-SSH”&#xff0c;右击启动 2. 把datastore1中所有虚拟机文件(包括vmdk文件)复制到d:\E1 使用xshell等工具SSH登录ESXI8后台&#xff0c;确认datastore1的具体文件夹路径 在win10&#xff0c;使用cmd&#xff0c;在d:\E1…

设计模式 -- 适配器模式(Adapter Pattern)

1 基本介绍 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示&#xff0c;主的目的是兼容性&#xff0c;让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper) 适配器模式属于结构型模式 主要分为三类&#xff1a;类适配…

npm报错network request to https://registry.npmjs.org/fuse.js failed的解决方法

目录 一、问题描述二、解决方法一、问题描述 执行 npm install 报错: npm ERR! code ETIMEDOUT npm ERR! errno ETIMEDOUT npm ERR! network request to https://registry.npmjs.org/fuse.js failed, reason: connect ETIMEDOUT 104.16.31.34:443 npm ERR! network This is …