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语言中使用JWT进行身份验证的几种方式

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

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

如何合理管控Java语言的异常

《如何合理管控Java语言的异常》:本文主要介绍如何合理管控Java语言的异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、Thorwable类3、Error4、Exception类4.1、检查异常4.2、运行时异常5、处理方式5.1. 捕获异常

C语言中的常见进制转换详解(从二进制到十六进制)

《C语言中的常见进制转换详解(从二进制到十六进制)》进制转换是计算机编程中的一个常见任务,特别是在处理低级别的数据操作时,C语言作为一门底层编程语言,在进制转换方面提供了灵活的操作方式,今天,我们将深... 目录1、进制基础2、C语言中的进制转换2.1 从十进制转换为其他进制十进制转二进制十进制转八进制十进

$在R语言中的作用示例小结

《$在R语言中的作用示例小结》在R语言中,$是一个非常重要的操作符,主要用于访问对象的成员或组件,它的用途非常广泛,不仅限于数据框(dataframe),还可以用于列表(list)、环境(enviro... 目录1. 访问数据框(data frame)中的列2. 访问列表(list)中的元素3. 访问jav

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚