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

相关文章

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

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

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

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

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英