C语言阴阳迷宫

2024-08-29 16:44
文章标签 语言 阴阳 迷宫

本文主要是介绍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语言推箱子迷宫

这篇关于C语言阴阳迷宫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1118411

相关文章

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本