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语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi