C语言破墙镐对称飞迷宫

news/2024/9/23 3:19:02/

目录

  • 开头
  • 程序
  • 程序的流程图
  • 程序游玩的效果(gif)
  • 结尾

开头

大家好,我叫这是我58。

程序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
enum WASD {W,A,S,D
};
void printmaze(const char strmaze[11][11], const int ip, const int ic) {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\033[%sm破墙镐*%d%s\n\033[%sm对称飞*%d%s\033[0m\n", ip ? "0" : "30;1", ip, ip ? "(q)" : "", ic ? "0" : "30;1", ic, ic ? "(e)" : "");
}
int main() {enum WASD wp = W;int i = 0;int ip = 4;int ic = 2;char ch = 0;char strmaze[11][11] = {'P','*',' ','*',' ',' ',' ','*',' ',' ','*','*',' ',' ','*','*','*','*',' ','*','*',' ',' ',' ',' ','*','*',' ','*',' ','*','*',' ','*','*','*','*','*','*','*',' ','*','*',' ',' ','*','*','*',' ','*',' ','*','*','*',' ','*',' ','*','*','*','G','*','*','*','*',' ','*',' ',' ','*',' ','*','*','*','*','*',' ','*','*','*','*',' ','*','*','*',' ',' ',' ','*','*','*','*','*','*','*','*',' ','*','*',' ',' ',' ','*','*','*','*','*','*','*','*','*',' ',' ',' ',' ','*',' ',' ','*','*',' '};char* rmaze = malloc(122 * sizeof(char));char* rmazea = rmaze;rmaze = "P* *   *  **  **** **    ** * ** ******* **  *** * *** * ***G**** *  * ***** **** ***   ******** **   *********    *  ** ";char* cp = &strmaze[0][0];printf("\033[0m欢迎你来玩破墙镐对称飞迷宫,在这个迷宫中,“P”是你,空格是你可以走的地方,“\033[32;1mG\033[0m”为\033[32;1m终点\033[0m,输入“q”来用掉一把破墙镐来破掉你面前的墙,输入“e”来使用对称飞飞到你与迷宫的中心点中心对称的一个点,输入“r”即可重置迷宫,而你只要走到\033[32;1m终点\033[0m,就可以\033[32;1m赢\033[0m了,你听懂了吗?");Sleep(6400);system("cls");while ('G' == strmaze[5][5]) {int ix = (cp - &strmaze[0][0]) / 11;int iy = (cp - &strmaze[0][0]) % 11;printmaze(strmaze, ip, ic);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);wp = W;break;case 'a':for (i = 0; i < 11; i++) {if (cp == &strmaze[i][0]) {break;}}11 == i && '*' != *(cp - 1) && cp--;wp = A;break;case 's':for (i = 0; i < 11; i++) {if (cp == &strmaze[10][i]) {break;}}11 == i && '*' != *(cp + 11) && (cp += 11);wp = S;break;case 'd':for (i = 0; i < 11; i++) {if (cp == &strmaze[i][10]) {break;}}11 == i && '*' != *(cp + 1) && cp++;wp = D;break;case 'q':if (ip) {int ipa = 0;switch (wp) {case W:(ix && '*' == *(cp - 11)) && (*(cp - 11) = ' ', ipa = 1);break;case A:(iy && '*' == *(cp - 1)) && (*(cp - 1) = ' ', ipa = 1);break;case S:(10 != ix && '*' == *(cp + 11)) && (*(cp + 11) = ' ', ipa = 1);break;case D:(10 != iy && '*' == *(cp + 1)) && (*(cp + 1) = ' ', ipa = 1);break;default:break;}ipa && ip--;}break;//破墙镐case 'e':(ic && ' ' == strmaze[10 - ix][10 - iy]) && (ic--, cp = &strmaze[10 - ix][10 - iy]);//对称飞break;case 'r':ip = 4;ic = 2;cp = &strmaze[0][0];for (i = 0; i < 121; i++) {strmaze[0][i] = rmaze[i];}break;default:break;}*cp = 'P';system("cls");}system("color 0A");printf("恭喜你,你赢了\n");free(rmazea);rmaze = NULL;rmazea = NULL;return 0;
}//破墙镐(2)(q)对称飞(4)(e)迷宫:破墙镐——破墙(有墙才破),对称飞——从迷宫的中心点瞬移(瞬移点没墙)

程序的流程图

开始
把宏_CRT_SECURE_NO_WARNINGS定义为1
导入stdio.h
导入stdlib.h
导入Windows.h
定义枚举WASD里的变量为W,A,S和D,并分别把这些变量初始化为0,1,2和3
定义printmaze函数
定义枚举WASD变量wp为W
定义整型i为0
定义整型ip为0
定义整型ic为2
定义字符ch为0
把有11行11列的二维字符数组strmaze初始化为下面的图片

对称飞"> 破墙镐">
等待6.4秒,等待好后就清屏
是(break)
break
清屏
是(break)
break
是(break)
break
是(break)
break
break
break
否(break)
break
否(break)
break
break
否(break)
否(break)
否(break)
否(break)
否(break)
否(break)
否(break)
否(break)
ic && ' ' == strmaze[10 - ix][10 - iy])?
ic自减1
把cp设为二维字符数组strmaze第10减ix的值行第10减iy的值列的元素的地址
ip?
定义ipa为0
W == wp?
ix && '*' == *(cp - 11)?
把解引用的某个结果设为空格,而这个结果就是cp减去11的结果
把ipa设为1
ipa?
ip自减1
A == wp?
iy && '*' == *(cp - 1))?
把解引用的某个结果设为空格,而这个结果就是cp减去1的结果
把ipa设为1
S == wp?
10 != ix && '*' == *(cp + 11)?
把解引用的某个结果设为空格,而这个结果就是cp加上11的结果
把ipa设为1
D == ch?
10 != iy && '*' == *(cp + 1)?
把解引用的某个结果设为空格,而这个结果就是cp加上1的结果
把ipa设为1
把有122个字节大小的动态内存交给rmaze字符指针来维护
定义字符指针rmazea为rmaze
把rmaze设为“P* * * ** **** ** ** * ** ******* ** *** * *** * ***G**** * * ***** **** *** ******** ** ********* * ** ”
定义字符指针cp为二位字符数组strmaze第0行第0列的地址
输出“\​033[0m欢迎你来玩破墙镐对称飞迷宫,在这个迷宫中,“P”是你,空格是你可以走的地方,“\​033[32;1mG\​033[0m”为\​033[32;1m终点\​033[0m,输入“q”来用掉一把破墙镐来破掉你面前的墙,输入“e”来使用对称飞飞到你与迷宫的中心点中心对称的一个点,输入“r”即可重置迷宫,而你只要走到\​033[32;1m终点\​033[0m,就可以\​033[32;1m赢\​033[0m了,你听懂了吗?”
'G' == strmaze[5][5]?
定义整型iy为cp与二维字符数组strmaze第0行第0列的地址之间的元素个数模上11的结果
执行printmaze函数,参数有二位字符数组strmaze,整型ip和整型ic
把ch设为你输入的字符
'\​n' != getchar()?
把解引用的cp设为空格
'w' == ch?
设i为0
i < 11?
cp == &strmaze[0][i]?
11 == i && '*' != *(cp - 11)?
把cp向左移动11位
把wp设为W
把解引用的cp设为字符“P”
把窗口的背景色设为黑色,前景色设为淡绿色
输出“恭喜你,你赢了\​n”
借rmazea释放rmaze
把rmaze置为空指针
把rmazea也置为空指针
结束
'a' == ch?
设i为0
i < 11?
cp == &strmaze[i][0]?
11 == i && '*' != *(cp - 1)
把cp向左移动一位
把wp设为A
's' == ch?
设i为0
i < 11?
cp == &strmaze[10][i]?
11 == i && '*' != *(cp + 11)?
把cp向右移动11位
把wp设为S
'd' == ch?
设i为0
i < 11?
&strmaze[i][10]?
11 == i && '*' != *(cp + 1)?
把cp向右移动一位
把wp设为D
'q' == ch?
'e' == ch?
'r' == ch?
设ip为4
设ic为2
设cp为二位字符数组strmaze第0行第0列的地址
设i为0
i < 121?
把二维字符数组strmaze第0行第i列的元素设为rmaze第i项的元素
i自增1
i自增1
i自增1
i自增1
i自增1
破墙镐(2)(q)对称飞(4)(e)迷宫:破墙镐——破墙(有墙才破),对称飞——从迷宫的中心点瞬移(瞬移点没墙)
printmaze函数
结束
开始
定义整型ia为0
定义整型ib为0
设ia为0
ia < 11?
设ib为0
ib < 11?
输出“\​033[%sm%c\​033[0m”(如果“G”为二维字符数组strmaze第ia行第ib列的元素,那么“%s”就代“32;1”,否则代“0”,而“%c”则代二维字符数组strmaze第ia行第ib列的元素)
ib自增1
输出“|\​n”
ia自增1
输出“-----------@\​n\​033[%sm破墙镐*%d%s\​n\​033[%sm对称飞*%d%s\​033[0m\​n”(如果ip不为0,第一个“%s”和第二个“%s”分别代“0”和“(q)”,否则就分别代“30;1”和空字符串,第一个“%d”则代ip,如果ic不为0,第一个“%s”和第二个“%s”分别代“0”和“(e)”,否则就也分别代“30;1”和空字符串,第二个“%d”则代ic)

程序游玩的效果(gif)

结尾

你觉得我这次写的迷宫好吗?如果你觉得我这次写的迷宫不好,就可以评论一下我这次写的迷宫不好的原因吧。


http://www.ppmy.cn/news/1514789.html

相关文章

R 语言学习教程,从入门到精通,R Excel 文件使用(18)

1、R Excel 文件 Excel 格式的文件主要是 xls 或 xlsx&#xff0c;这两种文件可以在 R 语言中导入 xlsx 库来实现直接的读取。 R 语言读写 Excel 文件需要安装扩展包&#xff0c;我们可以在 R 到控制台输入以下命令来安装&#xff1a; install.packages("xlsx", re…

【git bash编码错误解决方案】启动conda环境时报错,其他terminal却正常

&#x1f50e;嘿&#xff0c;这里是慰慰&#x1f469;&#x1f3fb;‍&#x1f393;&#xff0c;会发各种类型的文章&#xff0c;智能专业&#xff0c;从事前端&#x1f43e; &#x1f389;如果有帮助的话&#xff0c;就点个赞叭&#xff0c;让我开心一下&#xff01;&#x1f…

iPhone 16系列详细参数曝光

根据海外媒体的最新汇总&#xff0c;iPhone 16系列的详细配置和价格已经曝光&#xff0c;其中标准版iPhone依然延续60Hz屏幕&#xff0c;成为众多果粉关注的热点。 据悉&#xff0c;iPhone 16将搭载6.1英寸的60Hz屏幕&#xff0c;内置苹果最新的A18芯片&#xff0c;并支持Apple…

AI在医学领域:通过声纹特征来预测血糖水平

糖尿病代谢紊乱&#xff08;DM&#xff09;是一种以血糖水平异常为特征的代谢性疾病&#xff0c;其表现为高血糖&#xff08;≥230 mg/dL&#xff09;或低血糖&#xff08;<65 mg/dL&#xff09;。该病导致胰岛素产生或作用受损&#xff0c;胰岛素作为调节葡萄糖稳态的关键激…

【C++ Primer Plus习题】3.7

问题: 解答: #include <iostream> using namespace std;const float GALLO_TO_LITRE 3.785; const float KM_TO_MILE 62.14;int main() {float litre 0;float gallo 0;float mile 0;cout << "请输入汽车油耗(每100km消耗的汽油量单位为升):";cin &…

DHCP DNS 欺骗武器化——实用指南

DHCP 枚举 在我们之前的文章中,我们分享了 DHCP DNS 欺骗背后的理论。实际上,需要几条信息才能有效地执行我们描述的攻击。对于攻击者来说幸运的是,发现DHCP 服务器并了解其配置的能力是 DHCP 协议的一部分,这使得侦察过程变得微不足道。 在以下章节中,我们将描述攻击者…

【Android】Navigation动态设置Graph和Launch参数

需求 Activity和Fragment可以服用&#xff0c;不同的启动方式&#xff0c;Fragment调用栈不同 方案 不同的启动方式&#xff0c;通过代码动态设置&#xff0c;使用不同的NavGraph 注意 动态设置代码是在onCreate之后执行的 NavHost如果指定了Graph&#xff0c;在onCreate…

技术前沿:WebRTC与H.265编码的兼容性挑战与应对策略

WebRTC&#xff08;Web Real-Time Communication&#xff09;是一种支持网页浏览器进行实时语音通话、视频聊天以及P2P文件共享的技术。然而&#xff0c;标准的WebRTC API在大多数浏览器中默认并不支持H.265&#xff08;也称为HEVC&#xff0c;高效视频编码&#xff09;编码。这…