首页 > 其他分享 >C语言阴阳迷宫

C语言阴阳迷宫

时间:2024-09-01 15:51:04浏览次数:5  
标签:11 迷宫 阴阳 C语言 break && yiya 033 cp

目录

开头

大家好,我叫这是我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)

程序游玩的效果

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="Z0z9L6p0-1724915151271" src="https://live.csdn.net/v/embed/420834"></iframe>

阴阳迷宫

下一篇博客要说的东西

C语言推箱子迷宫

标签:11,迷宫,阴阳,C语言,break,&&,yiya,033,cp
From: https://blog.csdn.net/qq_69383179/article/details/141654845

相关文章

  • 【C语言】文件操作
    为什么使用文件?如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用文件。什么是文件?磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种......
  • C语言基础(三十)
    1、希尔排序:#include"date.h"#include<stdio.h>#include<stdlib.h>#include<time.h>//希尔排序函数voidshellSort(intarr[],intn){for(intgap=n/2;gap>0;gap/=2){//对每个子列表进行插入排序......
  • C语言基础(三十一)
    1、线性搜索:#include"date.h"#include<stdio.h>#include<stdlib.h>#include<time.h>//希尔排序voidshellSort(intarr[],intn){for(intgap=n/2;gap>0;gap/=2){for(inti=gap;i<n;......
  • C语言 - 条件编译
    在C语言中,条件编译是一种根据特定条件决定是否编译某段代码的机制。它可以提高代码的可移植性、灵活性和效率。一、条件编译的指令#ifdef、#ifndef、#endif:#ifdef:如果某个宏已被定义,则编译其后的代码块。#ifndef:如果某个宏未被定义,则编译其后的代码块。#endif:用于结束一......
  • python和c语言有什么不同
    1、语言类型Python是一种基于解释器的语言,解释器会逐行读取代码;首先将Python编译为字节码,然后由大型C程序解释。C是一种编译语言,完整的源代码将直接编译为机器代码,由CPU直接执行。2、内存管理Python使用自动垃圾收集器进行内存管理。在C语言中,程序员必须自己进行内存管......
  • c语言--力扣简单题目(两数之和)两种方法讲解
    题目如下:给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。示例1:输入:nums=[2,7,11,15],ta......
  • 手把手教你使用C语言实现堆栈数据结构算法-两种方式(链表+数组)
    堆栈定义栈(stack)是一种遵循先入后出逻辑的线性数据结构,常见操作入栈,出栈,访问栈图片来源:https://www.hello-algo.com/栈的实现栈遵循先入后出的原则,因此我们只能在栈顶添加或删除元素。然而,数组和链表都可以在任意位置添加和删除元素,因此栈可以视为一种受限制的数组或链表......
  • 讲解如何用C语言实现带头单向单链表
    目录链表的结构组成:链表的常用接口:初始化带头单链表的头指针:动态申请一个结点(用于后续数据的插入):单链表打印:单链表尾插:单链表的头插:单链表的尾删:单链表头删:单链表查找符合值的第一个节点,没找到时返回NULL:单链表在pos位置之后插入x:单链表删除pos位置之后的值......
  • 主元素问题(C语言)
    主元素问题(C语言)题目参考代码#include<stdio.h>intmain(){//主元素问题intn,s[400002],num=1,max=0,maxNum=0;scanf("%d",&n);for(inti=0;i<n;i++)scanf("%d",&s[i]);for(inti=0;......
  • c语言分支与循环详解
    使用if、switch实现分支结构,使用for、while、dowhile实现循环结构分支:1.1if语句的语法if(表达式) 语句;在c语言中0表示假,则语句不执行。非0表示真,语句执行1.2else与if对应,比如说一个数不是奇数就是偶数了if(表达式) 语句1;else 语句2;表达式成立则执行语句1,不成......