C语言阴阳迷宫

目录

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

开头

大家好,我叫这是我58。

程序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>
enum WASD {W,A,S,D
};
enum YYSe{YI,YA,SW,N
};
typedef struct YYS {enum YYSe yy;int ix;int iy;
}YYS;
void printmaze(const char strmaze[11][11], const int iyi, const int iya, const int iyy) {int ia = 0;int ib = 0;for (ia = 0; ia < 11; ia++) {for (ib = 0; ib < 11; ib++) {printf("\033[%s%sm%c\033[0m", 'G' == strmaze[ia][ib] ? "32;1" : "0", iyy % 2 ? ";7" : "", strmaze[ia][ib]);}printf("\033[%cm|\033[0m\n", iyy % 2 ? '7' : '0');}printf("\033[%cm-----------@\n\033[0m阳之镐*%d\n\033[7m阴之镐*%d\033[0m\n", iyy % 2 ? '7' : '0', iyi, iya);
}
int main() {enum WASD wp = W;int i = 0;int ia = 0;int iyi = 0;int iya = 0;int iyy = 0;YYS yys[10] = { {YI,0,1}, {YI,1,7}, {YA,0,7}, {YA,0,8}, {YA,2,0}, {YA,7,5}, {SW,0,3}, {SW,0,9}, {SW,6,3}, {SW,7,7} };char ch = 0;char strmaze[11][11] = {'P','-','*','&',' ',' ','*','+','+','&',' ','*','*','*',' ','*',' ','*','-','*','*',' ','+',' ',' ',' ',' ','*','*','*','*',' ',' ','*','*','*','*','*',' ',' ',' ','*',' ',' ','*',' ',' ',' ','*','*','*',' ','*','*','*','*','*','*',' ',' ',' ',' ','*','*',' ',' ','*',' ','*','&','*',' ',' ',' ','*',' ',' ','*','*',' ','*','*','+','*','&',' ',' ',' ','*','*',' ','*',' ',' ',' ',' ',' ','*','*','*',' ',' ',' ',' ',' ',' ',' ','*','*','*',' ','*','*','*',' ',' ','*','*','*','*','G'};int yiya[11][11] = { 0 };for (i = 0; i < 121; i++) {switch (strmaze[0][i]) {case '*':yiya[0][i] = 1;break;case ' ':yiya[0][i] = 0;break;default:i && (yiya[0][i] = 2), i || (yiya[0][i] = 0);break;}}char strmazer[11][11] = { 0 };int yiyar[11][11] = { 0 };memcpy(strmazer, strmaze, sizeof strmaze);memcpy(yiyar, yiya, sizeof yiya);char* cp = &strmaze[0][0];printf("\033[0m欢迎你来玩\033[4;7m阴\033[0m\033[4m阳\033[0m迷宫,在这个迷宫中,“P”是你,空格是你可以走的地方,“\033[32;1mG\033[0m”为\033[32;1m终\033[7m点\033[0m,输入“q”来用掉一把阳之镐破墙,\033[7m输入“e”来用掉一把阴之镐造墙\033[0m,输入“r”即可重置迷宫,在“&”上输入“z”就可以把“*”切换成\033[7m空格\033[0m,空格切换成“\033[7m*\033[0m”,再输入一次即可变回原样,而你只要走到\033[32;1m终\033[7m点\033[0m,就可以\033[32;1m赢\033[0m了,你听懂了吗?");Sleep(7500);system("cls");while ('G' == strmaze[10][10]) {int ix = (cp - &strmaze[0][0]) / 11;int iy = (cp - &strmaze[0][0]) % 11;for (i = 0; i < 6; i++) {' ' == strmaze[yys[i].ix][yys[i].iy] && (strmaze[yys[i].ix][yys[i].iy] = '%');}for (; i < 10; i++) {' ' == strmaze[yys[i].ix][yys[i].iy] && (strmaze[yys[i].ix][yys[i].iy] = '&');}printmaze(strmaze, iyi, iya, iyy);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 (iyi) {switch (wp) {case W:ix && '*' == *(cp - 11) && 2 != yiya[ix - 1][iy] && (*(cp - 11) = ' ', yiya[ix - 1][iy] = 0, iyi--);break;case A:iy && '*' == *(cp - 1) && 2 != yiya[ix][iy - 1] && (*(cp - 1) = ' ', yiya[ix][iy - 1] = 0, iyi--);break;case S:10 != ix && '*' == *(cp + 11) && 2 != yiya[ix + 1][iy] && (*(cp + 11) = ' ', yiya[ix + 1][iy] = 0, iyi--);break;case D:10 != iy && '*' == *(cp + 1) && 2 != yiya[ix][iy + 1] && (*(cp + 1) = ' ', yiya[ix][iy + 1] = 0, iyi--);break;default:break;}}break;case 'e':if (iya) {switch (wp) {case W:ix && ' ' == *(cp - 11) && 2 != yiya[ix - 1][iy] && (*(cp - 11) = '*', yiya[ix - 1][iy] = 1, iya--);break;case A:iy && ' ' == *(cp - 1) && 2 != yiya[ix][iy - 1] && (*(cp - 1) = '*', yiya[ix][iy - 1] = 1, iya--);break;case S:10 != ix && ' ' == *(cp + 11) && 2 != yiya[ix + 1][iy] && (*(cp + 11) = '*', yiya[ix + 1][iy] = 1, iya--);break;case D:10 != iy && ' ' == *(cp + 1) && 2 != yiya[ix][iy + 1] && (*(cp + 1) = '*', yiya[ix][iy + 1] = 1, iya--);break;default:break;}}break;case 'z':for (i = 6; i < 10; i++) {if (cp == &strmaze[yys[i].ix][yys[i].iy]) {iyy++;for (ia = 0; ia < 121; ia++) {if (2 != yiya[0][ia]) {if (yiya[0][ia]) {strmaze[0][ia] = ' ';yiya[0][ia] = 0;}else {strmaze[0][ia] = '*';yiya[0][ia] = 1;}}}}}break;case 'r':iyy = 0;iyi = 0;iya = 0;cp = &strmaze[0][0];memcpy(strmaze, strmazer, sizeof strmaze);memcpy(yiya, yiyar, sizeof yiya);wp = W;for (i = 0; i < 2; i++) {yys[i].yy = YI;}for (; i < 10; i++) {i < 6 && (yys[i].yy = YA), i < 6 || (yys[i].yy = SW);}break;default:break;}*cp = 'P';system("cls");for (i = 0; i < 6; i++) {if (cp == &strmaze[yys[i].ix][yys[i].iy] && N != yys[i].yy) {i < 2 && iyi++, i < 2 || iya++;yys[i].yy = N;}}}system("color 0A");printf("恭喜你\033[37m,\033[32;1;7m你赢了\033[32;1m\n");return 0;
}

程序的流程图

开始
把宏_CRT_SECURE_NO_WARNINGS定义为1
导入stdio.h
导入stdlib.h
导入string.h
导入Windows.h
定义枚举WASD,并把里面的成员变量W,A,S和D分别设为0,1,2和3
定义枚举YYSe,并把里面的成员变量YI,YA,SW和N分别设为0,1,2和3
定义结构体YYS,成员变量有类型为枚举YYSe的yy,整型ix和整型iy,并把结构体YYS中的关键字struct给去掉
定义printmaze函数
定义枚举WASD变量wp为W
定义整型i为0
定义整型ia为0
定义整型iyi为0
定义整型iya为0
定义整型iyy为0
把有10个结构体YYS的结构体YYS数组yys分别初始化为{YI,0,1},{YI,1,7},{YA,0,7},{YA,0,8},{YA,2,0},{YA,7,5},{SW,0,3},{SW,0,9},{SW,6,3}和{SW,7,7}
把字符ch设为0
把有11行11列的二维字符数组strmaze初始化为下面的图片

break
等待7.5秒,等待好后就清屏
是(break)
break
清屏
是(break)
break
是(break)
break
是(break)
break
break*2
break*2
break*2
break*2
否(break*2)
break*2
break*2
break*2
break*2
否(break*2)
否(break)
否(break)
否(break*2)
否(break*2)
否(break*2)
否(break*2)
否(break*2)
否(break*2)
否(break*2)
否(break*2)
break
是(break)
break
否(break)
把有11行11列的二维整型数组yiya里的元素全都初始化为0
设i为0
i < 121?
'*' == strmaze[0][i]?
把二维整型数组yiya第0行第i项的元素设为1
i自增1
把二维字符数组strmazer里的元素全都初始化为0
把二维整型数组yiyar里的元素全都初始化为0
把二维字符数组strmaze拷贝到二维字符数组strmazer的里面去
把二维整型数组yiya拷贝到二维整型数组yiyar的里面去
定义字符指针cp为二维字符数组strmaze第0行第0列的地址
输出“\​033[0m欢迎你来玩\​033[4;7m阴\​033[0m\​033[4m阳\​033[0m迷宫,在这个迷宫中,“P”是你,空格是你可以走的地方,“\​033[32;1mG\​033[0m”为\​033[32;1m终\​033[7m点\​033[0m,输入“q”来用掉一把阳之镐破墙,\​033[7m输入“e”来用掉一把阴之镐造墙\​033[0m,输入“r”即可重置迷宫,在“&”上输入“z”就可以把“*”切换成\​033[7m空格\​033[0m,空格切换成“\​033[7m*\​033[0m”,再输入一次即可变回原样,而你只要走到\​033[32;1m终\​033[7m点\​033[0m,就可以\​033[32;1m赢\​033[0m了,你听懂了吗?”
'G' == strmaze[10][10]?
定义ix为cp与二维字符数组strmaze第0行第0列的地址之间的元素个数除以11的结果
定义iy为cp与二维字符数组strmaze第0行第0列的地址之间的元素个数模上11的结果
设i为0
i < 6?
' ' == strmaze[yys[i].ix][yys[i].iy]?
把二维字符数组strmaze第结构体YYS数组yys第i项的成员变量ix的值行第结构体YYS数组yys第i项的成员变量iy的值列的元素设为字符“%”
i自增1
i < 10?
' ' == strmaze[yys[i].ix][yys[i].iy]?
把二维字符数组strmaze第结构体YYS数组yys第i项的成员变量ix的值行第结构体YYS数组yys第i项的成员变量iy的值列的元素设为字符“&”
i自增1
执行printmaze函数,参数有二维字符数组strmaze,整型iyi,整型iya和整型iyy
把ch设为你输入的字符
'\​n' != getchar()?
把解引用的cp设为空格
'w' == ch?
设i为0
i < 11?
cp == &strmaze[0][i]?
11 == i && '*' != *(cp - 11)?
把cp向左移动11位
把wp设为W
把解引用的cp设为字符“P”
设i为0
i < 6?
cp == &strmaze[yys[i].ix][yys[i].iy] && N != yys[i].yy?
i < 2?
iyi自增1
i < 2?
把结构体YYS数组yys第i项的成员变量yy设为N
i自增1
把窗口的背景色设为黑色,前景色设为淡绿色
输出“恭喜你\​033[37m,\​033[32;1;7m你赢了\​033[32;1m\​n”
结束
'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?
cp == &strmaze[10][i]?
11 == i && '*' != *(cp + 11)?
把cp向右移动一位
把wp设为D
'q' == ch?
iyi?
W == wp?
ix && '*' == *(cp - 11) && 2 != yiya[ix - 1][iy]?
把解引用之后的cp减去11的结果设为空格
把二维整型数组yiya第ix减1行第iy列设为0
iyi自减1
A == wp?
iy && '*' == *(cp - 1) && 2 != yiya[ix][iy - 1]?
把解引用之后的cp减去1的结果设为空格
把二维整型数组yiya第ix行第iy减1列设为0
iyi自减1
S == wp?
D == wp?
10 != iy && '*' == *(cp + 1) && 2 != yiya[ix][iy + 1]?
把解引用之后的cp加上1的结果设为空格
把二维整型数组yiya第ix加1行第iy列设为0
iyi自减1
10 != ix && '*' == *(cp + 11) && 2 != yiya[ix + 1][iy]?
把解引用之后的cp加上11的结果设为空格
把二维整型数组yiya第ix行第iy加1列设为0
iyi自减1
'e' == ch?
iya?
W == wp?
ix && ' ' == *(cp - 11) && 2 != yiya[ix - 1][iy]?
把解引用之后的cp减去11的结果设为字符“*”
把二维整型数组yiya第ix减1行第iy列设为1
iya自减1
A == wp?
iy && ' ' == *(cp - 1) && 2 != yiya[ix][iy - 1]?
把解引用之后的cp减去1的结果设为字符“*”
把二维整型数组yiya第ix行第iy减1列设为1
iya自减1
S == wp?
10 != ix && ' ' == *(cp + 11) && 2 != yiya[ix + 1][iy]?
把解引用之后的cp加上11的结果设为字符“*”
把二维整型数组yiya第ix加1行第iy列设为1
iya自减1
D == wp?
10 != iy && ' ' == *(cp + 1) && 2 != yiya[ix][iy + 1]?
把解引用之后的cp加上1的结果设为字符“*”
把二维整型数组yiya第ix行第iy加1列设为1
iya自减1
'z' == ch?
设i为6
i < 10?
cp == &strmaze[yys[i].ix][yys[i].iy]?
iyy自增1
设ia为0
ia < 121?
2 != yiya[0][ia]?
yiya[0][ia]?
把二维字符数组strmaze第0行第ia列设为空格
把二维整型数组yiya第0行第ia列设为0
ia自增1
i自增1
'r' == ch?
设iyy为0
设iyi为0
设iya为0
设cp为二维字符数组strmaze第0行第0列的地址
把二维字符数组strmazer拷贝到二维字符数组strmaze的里面去
把二维整型数组yiyar拷贝到二维整型数组yiya的里面去
把wp设为W
设i为0
i < 2?
把结构体YYS数组yys的第i项的成员变量yy设为YI
i自增1
i < 10?
i < 6?
把结构体YYS数组yys的第i项的成员变量yy设为YA
i < 6?
i自增1
i自增1
i自增1
i自增1
i自增1
' ' == strmaze[0][i]?
把二维整型数组yiya第0行第i项的元素设为0
i?
把二维整型数组yiya第0行第i项的元素设为2
i?
把二维整型数组yiya第0行第i项的元素设为0
把结构体YYS数组yys的第i项的成员变量yy设为SW
把二维字符数组strmaze第0行第ia列设为字符“*”
把二维整型数组yiya第0行第ia列设为1
iya自增1
printmaze函数
结束
开始
定义整型ia为0
定义整型ib为0
设ia为0
ia < 11?
设ib为0
ib < 11?
输出“\​033[%s%sm%c\​033[0m”(如果“G”为二维字符数组strmaze第ia行第ib列的元素,那么第一个“%s”代“32;1”,否则第一个“%s”代“0”,如果iyy模上2的结果不为0,那么第二个“%s”代“;7”,否则第二个“%s”代空字符串,“%d”则代二维字符数组strmaze第ia行第ib列的元素)
ib自增1
输出“\​033[%cm|\​033[0m\​n”(如果iyy模上2的结果不为0,那么“%c”代字符“7”,否则“%c”代字符“0”)
ia自增1
输出“\​033[%cm-----------@\​n\​033[0m阳之镐*%d\​n\​033[7m阴之镐*%d\​033[0m\​n”(如果iyy模上2的结果不为0,那么“%c”代字符“7”,否则“%c”代字符“0”,第一个“%d”代iyi,第二个“%d”则代iya)

程序游玩的效果

阴阳迷宫

下一篇博客要说的东西

C语言推箱子迷宫

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

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

相关文章

CityHash、FarmHash

CityHash和FarmHash都是由Google开发的非加密哈希函数&#xff0c;专为快速处理大量数据而设计。它们在数据中心和大规模分布式系统中尤其有用&#xff0c;用于任务如数据分区、查找优化、数据校验等。这两种哈希函数都以其高效的性能和良好的分布特性而著称。 CityHash City…

设计模式 -- 外观模式(Facade Pattern)

1 问题引出 组建一个家庭影院 DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能&#xff0c;其过程为&#xff1a; 直接用遥控器&#xff1a;统筹各设备开关 开爆米花机&#xff0c;放下屏幕 &#xff0c;开投影仪 &#xff0c;开音响&#xf…

【人工智能】AI算法系统设计与算法建模的详细阐述

&#x1f3c6;&#x1f3c6;欢迎大家来到我们的天空&#x1f3c6;&#x1f3c6; &#x1f3c6;&#x1f3c6;如果文章内容对您有所触动&#xff0c;别忘了点赞、关注&#xff0c;收藏&#xff01; &#x1f3c6; 作者简介&#xff1a;我们的天空 &#x1f3c6;《头衔》&#x…

自定义全局变量在uniapp的Vuex应用

本文介绍了uniapp使用自定义全局变量的方法。当同一业务在连续页面操作时&#xff0c;存在部分筛选变量需要始终保持一致&#xff0c;比如时间筛选条件等&#xff0c;来回跳转页面时如果采用变量传递&#xff0c;常较为繁琐&#xff0c;存在遗漏传递或未清除上一次变量值&#…

图像金字塔的作用

1. 概述 图像金字塔是图像多尺度表达的一种&#xff0c;主要应用与图像分割&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。图像金字塔实际上是一张图片在不同尺度下的集合&#xff0c;即原图的上采样和下采样集合。金字塔的底部是高分辨率图像&#xff0c;而…

LuaJit分析(九)LuaJit中的JIT原理分析

Jit in luajit Luajit是一款高性能的lua解释器&#xff0c;与官方的lua解释器相比&#xff0c;luajit的高速除了将解释器直接以汇编代码实现外&#xff0c;还支持jit模式&#xff08;Just in time&#xff09;。Jit模式即将luajit的字节码编译成处理器能够直接执行的机器码&am…

vue3如何监听reactive对象是哪个属性发生的变化

在 Vue 3 中&#xff0c;如果你想监听 reactive 对象中的某个属性发生的变化&#xff0c;你可以使用 watch 函数进行监听。watch 函数允许你观察 reactive 对象的某个属性或者整个对象&#xff0c;并在变化时执行相应的操作。 1. 监听 reactive 对象的某个属性 如果你只想监听…

C++学习/复习补充记录 --- 图论(深搜,广搜)

数据结构与算法 | 深搜&#xff08;DFS&#xff09;与广搜&#xff08;BFS&#xff09;_深搜广搜算法-CSDN博客 深度优先搜索理论基础 深搜和广搜的区别&#xff1a; &#xff08;通俗版&#xff09; dfs是可一个方向去搜&#xff0c;不到黄河不回头&#xff0c;直到遇到绝境了…

在Unity中使用C#进行Xml序列化时保留特定小数位的方法参考

序列化方法代码参考&#xff1a; using System.IO; using System.Xml.Serialization;public class XmlTool {public static string ToXml<T>(T obj){XmlSerializer xmlSerializer new XmlSerializer(typeof(T));using var stringWriter new StringWriter();//让xml文档…

linux驱动 -- 输入子系统

1:输入子系统介绍 一个统一的输入设备的开发框架&#xff0c; 统一生成设备文件&#xff0c; 统一返回固定格式值。 2:输入子系统开发设备 键盘、鼠标、触摸屏等等。 3&#xff1a;输入子系统运行框架 应用层&#xff1a;操作设备文件openclosereadwrite 输入子系统&#xff…

Netty 学习笔记

Java 网络编程 早期的 Java API 只支持由本地系统套接字库提供的所谓的阻塞函数&#xff0c;下面的代码展示了一个使用传统 Java API 的服务器代码的普通示例 // 创建一个 ServerSocket 用以监听指定端口上的连接请求 ServerSocket serverSocket new ServerSocket(5000); //…

OS常规测试方法-PPMU

step 0: 检查工作&#xff1a; 检查每根pin连接到指定的PPMU资源是否正确继电器资源在PRJ文件中是否定义正确 step 1 设计者设计的测试电路继电器重置初始化close应该闭合的继电器 step 2 DPS pin电压置0V&#xff0c;同时考虑电流量程wait闭合测试机DPS通道RELAYwait st…

android13 隐藏状态栏里面的飞行模式 隐藏蓝牙 隐藏网络

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.代码分析 4.代码修改 5.编译运行 6.彩蛋 1.前言 android13 隐藏状态栏里面的飞行模式,或者其他功能,如网络,蓝牙等等功能,隐藏下图中的一些图标。 2.问题分析 这里如果直接找这个布局的话,需要跟的逻…

nefu暑假acm集训1 构造矩阵 个人模板+例题汇总

前言&#xff1a; 以下都是nefu暑假集训的训练题&#xff0c;我在此把我的模板和写的一些练习题汇总一下并分享出来&#xff0c;希望在能满足我复习的情况下能帮助到你。 正文&#xff1a; 模板&#xff1a; #include<bits/stdc.h> using namespace std; typedef long…

算法训练营|图论第5天

题目&#xff1a;107.寻找存在的路径 题目链接&#xff1a; 107. 寻找存在的路径 (kamacoder.com) 代码&#xff1a; #include<bits/stdc.h> #include<unordered_map> #include<unordered_set> using namespace std; vector<int>father; int find(…

Celery 中,广播模式可以通过使用 RabbitMQ 的 fanout 交换机来实现

这里写自定义目录标题 设置 Django 的 settings 模块从 Django 的 settings 文件中加载 Celery 配置自动发现任务使 Celery 实例可用配置 Celery 的任务路由 在 Celery 中&#xff0c;广播模式可以通过使用 RabbitMQ 的 fanout 交换机来实现。fanout 交换机会将消息广播到所有绑…

嵌入式开发者必备资料库 【完全免费】

嵌入式资料网盘分享文案 &#x1f31f; 嵌入式开发者必备资料库 &#x1f31f; 亲爱的嵌入式开发爱好者们&#xff0c; 我们为大家准备了一份丰富的嵌入式资料网盘&#xff0c;涵盖了单片机、Linux系统、硬件设计等多个领域的优质资源&#xff0c;助力你的学习和项目开发&…

国外课程环境总结

CS106L2023 and CS106B 环境配置(详细教程)_cs106b 2023-CSDN博客

Java:内存过高和CPU过高的排查流程

一、CPU占用过高排查流程 1、利用 top 命令可以查出占 CPU 最高的的进程pid 。 假设pid为 98762、查看该进程下占用最高的线程id。 top -Hp 98763、假设占用率最高的线程 ID 为 6900&#xff0c;将其转换为 16 进制形式 (因为 java native 线程以16进制形式输出) 。 printf…

WHAT - 通过 react-use 源码学习 React(State 篇)

目录 一、官方介绍1. Sensors2. UI3. Animations4. Side-Effects5. Lifecycles6. State7. Miscellaneous 二、源码学习示例&#xff1a;n. xx - yyState - createMemoState - createReducer 一、官方介绍 Github 地址 react-use 是一个流行的 React 自定义 Hook 库&#xff0…