C语言推箱子迷宫

news2024/12/28 5:38:32

目录

  • 开头
  • 程序
  • 程序的流程图
  • 程序游玩的效果
  • 下一篇博客要说的东西

开头

大家好,我叫这是我58。

程序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>
typedef struct T {
	int ix;
	int iy;
}T;
void printmaze(const char strmaze[11][11], T tarr[9]) {
	int ia = 0;
	int ib = 0;
	int ic = 0;
	char str[5] = "33";
	for (ia = 0; ia < 11; ia++) {
		for (ib = 0; ib < 11; ib++) {
			for (ic = 0; ic < 9; ic++) {
				if ('@' == strmaze[tarr[ic].ix][tarr[ic].iy] && tarr[ic].ix == ia && tarr[ic].iy == ib) {
					strcpy(str, "33;1");
					break;
				}
			}
			printf("\033[%sm%c\033[0m", 'G' == strmaze[ia][ib] ? "32;1" : '$' == strmaze[ia][ib] || '#' == strmaze[ia][ib] ? "33;1" : '@' == strmaze[ia][ib] ? str : "0", strmaze[ia][ib]);
			strcpy(str, "33");
		}
		printf("|\n");
	}
	printf("-----------@\n");
}
int main() {
	int i = 0;
	char ch = 0;
	T tarr[9] = { {0,3},{0,9},{3,1},{4,0},{5,1},{7,4},{7,5},{9,2},{10,2} };
	char strmaze[11][11] = {
		'P','@',' ','$','*',' ',' ',' ',' ','$','@',
		'*','*',' ',' ','*',' ',' ',' ',' ','@','@',
		' ',' ','*',' ','@',' ',' ','@',' ','@',' ',
		'@','$',' ','*','*','@','@','*',' ','*',' ',
		'$','@',' ',' ',' ',' ',' ','*','@','*',' ',
		'@','$',' ','@',' ',' ',' ','@','*','@',' ',
		' ',' ',' ',' ','*','*',' ',' ',' ',' ',' ',
		'@','*',' ','*','$','$','*',' ','*','@','*',
		' ',' ','*',' ','@',' ',' ','*',' ',' ',' ',
		' ',' ','$','@',' ',' ',' ','@','@',' ','#',
		' ',' ','$',' ',' ','@',' ','*',' ','#','G'
	};
	char strmazer[11][11] = { 0 };
	memcpy(strmazer, strmaze, sizeof strmaze);
	char* cp = &strmaze[0][0];
	char* cboxp = cp;
	printf("欢迎你来玩推\033[33m箱子\033[0m迷宫,在这个迷宫中,“P”是你,空格是你可以走的地方,“\033[32;1mG\033[0m”为\033[32;1m终点\033[0m,\033[33m箱子“@”\033[0m可以推,门“\033[33;1m#\033[0m”一般无法通行,但在“\033[33;1m$\033[33;1m”全被\033[33m箱子“@”\033[0m占的时候,它们就会被打开,而且打开的时候所有的箱子“\033[33m@\033[0m”都会变成墙“*”,并且输入“r”即可重置迷宫,而你只要走到\033[32;1m终点\033[0m,就可以\033[32;1m赢\033[0m了,现在你听懂了吗?");
	Sleep(8000);
	system("cls");
	while ('G' == strmaze[10][10]) {
		int ifl = 0;
		printmaze(strmaze, tarr);
		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) && '@' != *(cp - 11) && (cp -= 11, ifl = 1);
			if (!ifl && 11 == i && '@' == *(cp - 11)) {
				cboxp = cp - 11;
				(cboxp - &strmaze[0][0]) / 11 && (' ' == *(cboxp - 11) || '$' == *(cboxp - 11) ) && (*cboxp = ' ', cboxp -= 11, *cboxp = '@', cp -= 11);
			}
			break;
		case 'a':
			for (i = 0; i < 11; i++) {
				if (cp == &strmaze[i][0]) {
					break;
				}
			}
			11 == i && '*' != *(cp - 1) && '#' != *(cp - 1) && '@' != *(cp - 1) && (cp--, ifl = 1);
			if (!ifl && 11 == i && '@' == *(cp - 1)) {
				cboxp = cp - 1;
				(cboxp - &strmaze[0][0]) % 11 && (' ' == *(cboxp - 1) || '$' == *(cboxp - 1)) && (*cboxp-- = ' ', *cboxp = '@', cp--);
			}
			break;
		case 's':
			for (i = 0; i < 11; i++) {
				if (cp == &strmaze[10][i]) {
					break;
				}
			}
			11 == i && '*' != *(cp + 11) && '#' != *(cp + 11) && '@' != *(cp + 11) && (cp += 11, ifl = 1);
			if (!ifl && 11 == i && '@' == *(cp + 11)) {
				cboxp = cp + 11;
				10 != (cboxp - &strmaze[0][0]) / 11 && (' ' == *(cboxp + 11) || '$' == *(cboxp + 11)) && (*cboxp = ' ', cboxp += 11, *cboxp = '@', cp += 11);
			}
			break;
		case 'd':
			for (i = 0; i < 11; i++) {
				if (cp == &strmaze[i][10]) {
					break;
				}
			}
			11 == i && '*' != *(cp + 1) && '#' != *(cp + 1) && '@' != *(cp + 1) && (cp++, ifl = 1);
			if (!ifl && 11 == i && '@' == *(cp + 1)) {
				cboxp = cp + 1;
				10 != (cboxp - &strmaze[0][0]) % 11 && (' ' == *(cboxp + 1) || '$' == *(cboxp + 1)) && (*cboxp++ = ' ', *cboxp = '@', cp++);
			}
			break;
		case 'r':
			memcpy(strmaze, strmazer, sizeof strmaze);
			cp = &strmaze[0][0];
			cboxp = cp;
			break;
		default:
			break;
		}
		*cp = 'P';
		system("cls");
		for (ifl = 0, i = 0; i < 9; i++) {
			' ' == strmaze[tarr[i].ix][tarr[i].iy] && (strmaze[tarr[i].ix][tarr[i].iy] = '$');
			'@' == strmaze[tarr[i].ix][tarr[i].iy] && ifl++;
		}
		if (9 == ifl) {
			strmaze[9][10] = ' ';
			strmaze[10][9] = ' ';
			for (i = 0; i < 121; i++) {
				'@' == strmaze[0][i] && (strmaze[0][i] = '*');
			}
		}
	}
	system("color 0A");
	printf("恭喜你,你赢了\n");
	return 0;
}

程序的流程图

开始
把宏_CRT_SECURE_NO_WARNINGS定义为1
导入stdio.h
导入stdlib.h
导入string.h
导入Windows.h
定义结构体T,成员变量有整型ix和整型iy,并把结构体T中的struct关键字给去掉
定义printmaze函数
定义整型i为0
定义字符ch为0
把有9个结构体T的结构体T数组tarr里的元素分别初始化为{0,3},{0,9},{3,1},{4,0},{5,1},{7,4},{7,5},{9,2}和{10,2}
把有11行11列的二维字符数组strmaze初始化为下面的图片

等待8秒,等待好后就清屏
是(break)
break
清屏
是(break)
break
是(break)
break
是(break)
break
break
否(break)
否(break)
否(break)
否(break)
否(break)
否(break)
否(break)
否(break)
否(break)
把有11行11列的二维字符数组strmazer里的元素全都初始化为0
把二维字符数组strmaze里的所有内容拷贝到二维字符数组strmazer的里面去
定义字符指针cp为二维字符数组strmaze第0行第0列的地址
定义cboxp为cp
输出“欢迎你来玩推\​033[33m箱子\​033[0m迷宫,在这个迷宫中,“P”是你,空格是你可以走的地方,“\​033[32;1mG\​033[0m”为\​033[32;1m终点\​033[0m,\​033[33m箱子“@”\​033[0m可以推,门“\​033[33;1m#\​033[0m”一般无法通行,但在“\​033[33;1m$\​033[33;1m”全被\​033[33m箱子“@”\​033[0m占的时候,它们就会被打开,而且打开的时候所有的箱子“\​033[33m@\​033[0m”都会变成墙“*”,并且输入“r”即可重置迷宫,而你只要走到\​033[32;1m终点\​033[0m,就可以\​033[32;1m赢\​033[0m了,现在你听懂了吗?”
'G' == strmaze[10][10]?
定义整型ifi为0
执行printmaze函数,参数有二维字符数组strmaze和结构体T数组tarr
把ch设为你输入的字符
'\​n' != getchar()?
把解引用的cp设为空格
'w' == ch?
设i为0
i < 11?
cp == &strmaze[0][i]?
11 == i && '*' != *(cp - 11) && '#' != *(cp - 11) && '@' != *(cp - 11)?
把cp向左移动11位
设ifl为1
!ifl && 11 == i && '@' == *(cp - 11)?
把cboxp设为cp减去11的结果
(cboxp - &strmaze[0][0]) / 11 && (' ' == *(cboxp - 11) || '$' == *(cboxp - 11) )?
把解引用的cboxp设为空格
cboxp向左移动11位
把解引用的cboxp设为字符“@”
把cp向左移动11位
把解引用的cp设为字符“P”
设ifl为0
设i为0
i < 9?
' ' == strmaze[tarr[i].ix][tarr[i].iy]?
把二维字符数组strmaze第结构体T数组tarr的第i项的成员变量ix的值行第结构体T数组tarr的第i项的成员变量iy的值列的元素设为字符“$”
'@' == strmaze[tarr[i].ix][tarr[i].iy]?
ifl自增1
i自增1
9 == ifl?
把二维字符数组strmaze第9行第10列的元素设为空格
把二维字符数组strmaze第10行第9列的元素设为空格
设i为0
i < 121?
'@' == strmaze[0][i]?
把二维字符数组strmaze第0行第i列的元素设为字符“*”
i自增1
把背景色设为黑色,前景色设为淡绿色
输出“恭喜你,你赢了\​n”
结束
'a' == ch?
设i为0
i < 11?
cp == &strmaze[i][0]?
11 == i && '*' != *(cp - 1) && '#' != *(cp - 1) && '@' != *(cp - 1)?
把cp向左移动一位
设ifl为1
!ifl && 11 == i && '@' == *(cp - 1)?
把cboxp设为cp减去1的结果
(cboxp - &strmaze[0][0]) % 11 && (' ' == *(cboxp - 1) || '$' == *(cboxp - 1))?
把解引用的cboxp设为空格,并把cboxp向左移动一位
把解引用的cboxp设为字符“@”
把cp向左移动一位
's' == ch?
设i为0
i < 11?
cp == &strmaze[10][i]?
11 == i && '*' != *(cp + 11) && '#' != *(cp + 11) && '@' != *(cp + 11)?
把cp向右移动11位
设ifl为1
!ifl && 11 == i && '@' == *(cp + 11)?
把cboxp设为cp加上11的结果
10 != (cboxp - &strmaze[0][0]) / 11 && (' ' == *(cboxp + 11) || '$' == *(cboxp + 11))?
把解引用的cboxp设为空格
把cboxp向右移动11位
把解引用的cboxp设为字符“@”
把cp向右移动11位
'd' == ch?
设i为0
i < 11?
cp == &strmaze[i][10]?
11 == i && '*' != *(cp + 1) && '#' != *(cp + 1) && '@' != *(cp + 1)?
把cp向右移动一位
设ifl为1
!ifl && 11 == i && '@' == *(cp + 1)?
把cboxp设为cp加上1的结果
10 != (cboxp - &strmaze[0][0]) % 11 && (' ' == *(cboxp + 1) || '$' == *(cboxp + 1))?
把解引用的cboxp设为空格,并把cboxp向有右移动一位
把解引用的cboxp设为字符“@”
把cp向右移动一位
'r' == ch?
把二维字符数组strmazer里的所有内容拷贝到二维字符数组strmaze的里面去
把cp设为二维字符数组strmaze第0行第0列的地址
把cboxp设为cp
i自增1
i自增1
i自增1
i自增1
printmaze函数
break
结束
开始
定义整型ia为0
定义整型ib为0
定义整型ic为0
把有5个字符的字符串str初始化为“33”
设ia为0
ia < 11?
设ib为0
ib < 11?
设ic为0
ic < 9?
'@' == strmaze[tarr[ic].ix][tarr[ic].iy] && tarr[ic].ix == ia && tarr[ic].iy == ib)?
把“33;1”拷贝到字符串str的里面去
输出“\​033[%sm%c\​033[0m”(如果字符“G”为二维字符数组strmaze第ia行第ib列的元素,“%s”代“32;1”,否则如果字符“$”或者字符“#”为二维字符数组strmaze第ia行第ib列的元素,那么“%s”代“33;1”,否则如果字符“@”为二维字符数组strmaze第ia行第ib列的元素,那么“%s”代字符串str,否则“%s”代“0”,“%c”则代二维字符数组strmaze第ia行第ib列的元素)
把“33”拷贝到字符串str的里面去
ib自增1
输出“|\​n”
ia自增1
输出“-----------@\​n”
ic自增1

程序游玩的效果

推箱子迷宫

下一篇博客要说的东西

C语言中的###

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2094800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python内置模块datetime.date类详细介绍

Python的datetime模块是一个强大的日期和时间处理库&#xff0c;它提供了多个类来处理日期和时间。主要包括几个功能类datetime.date、datetime.time、datetime.datetime、datetime.timedelta,datetime.timezone等。 使用datetime模块 要使用 datetime模块&#xff0c;直接导…

大模型辅助软件开发,助力工程师的开发之路

大模型与软件工程师&#xff1a;改变开发范式的力量 “是人类工程师的能力&#xff0c;而不是大模型的能力&#xff0c;决定了大模型协作式开发的上限。” 这句话深刻地揭示了在人工智能&#xff0c;尤其是大型语言模型&#xff08;LLM&#xff09;飞速发展的今天&#xff0c…

《数字信号处理》学习02-序列的能量及周期性

目录 一&#xff0c;序列的能量 二&#xff0c;序列的周期性 一&#xff0c;序列的能量 序列能量在数字信号处理中的应用&#xff1a;能量归一化。在信号处理中&#xff0c;有时需要对信号进行归一化处理&#xff0c;使得信号的能量为特定的值&#xff0c;这在一些算法和系统…

无主灯吊顶的精致做法:打造光影艺术的居家空间

在现代家居设计中&#xff0c;无主灯吊顶以其独特的照明效果和空间层次感&#xff0c;逐渐成为追求高品质生活人群的首选。无主灯设计不仅能够有效避免传统主灯带来的刺眼感&#xff0c;还能通过多点光源的巧妙布局&#xff0c;营造出温馨、舒适的居家氛围。作为无主灯照明灯具…

洛谷 P3183 [HAOI2016]食物链(记忆化搜索/拓扑排序)

[HAOI2016]食物链 给定 n 个物种和 m 条能量流动关系&#xff0c;求其中的食物链条数。物种的名称从 1 到 n 编号&#xff0c; M 条能量流动关系形如 a1​→b1​,a2​→b2​,a3​→b3​⋯am−1​→bm−1​,am​→bm​ 其中 ai​→bi​ 表示能量从物种 ai​ 流向物种 bi​ ,注意…

【Linux 驱动】IMX6ULL interrupt驱动

1. GIC驱动初始化 start_kernel (init\main.c) init_IRQ (arch\arm\kernel\irq.c) irqchip_init (drivers\irqchip\irqchip.c) of_irq_init (drivers\of\irq.c) desc->irq_init_cb match->data; ret desc->irq_init_cb(des…

(已开源-CVPR 2024)YOLO-World: Real-Time Open-Vocabulary Object Detection

169期《YOLO-World Real-Time Open-Vocabulary Object Detection》 You Only Look Once (YOLO) 系列检测模型是目前最常用的检测模型之一。然而&#xff0c;它们通常是在预先定义好的目标类别上进行训练&#xff0c;很大程度上限制了它们在开放场景中的可用性。为了解决这一限制…

医学领域实现基于大模型和本地知识库的智能问答系统

在医学领域实现一个基于大模型和本地知识库的智能问答系统&#xff0c;需要考虑医学领域的专业知识和术语。我们将构建一个简单版本的系统&#xff0c;该系统能够处理医学问题&#xff0c;并且能够从本地知识库中检索相关信息来生成答案。 技术栈&#xff1a; 自然语言处理模型…

编译LineageOS模拟器镜像,导出到AndroidStudio

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 源码下载 LineageOS官网&#xff1a;https://lineageos.org/ LineageOS源码 github 地址&#xff1a;https://github.com/LineageOS/android LineageOS源码国…

讯鹏科技智慧公厕专业供应商,解读智慧公厕有哪些奥秘

在当今科技日新月异的时代&#xff0c;讯鹏科技作为智慧公厕专业供应商&#xff0c;以其先进的技术和创新的解决方案&#xff0c;为人们带来了全新的公共卫生体验。那么&#xff0c;智慧公厕究竟有哪些奥秘呢&#xff1f;让我们一同解读。 一、智慧公厕硬件 1. 环境监测传感器&…

06:【江科大stm32】:定时器输入捕获功能

定时器输入捕获功能 1、通过定时器的输入捕获功能测量PWM波的频率2、PWMI模式测量频率和占空比 1、通过定时器的输入捕获功能测量PWM波的频率 定时器标准库相关的编程接口&#xff1a; ①PWM.c文件的代码如下&#xff1a; /*通过定时器TIM2生成一个分辨率为10us,频率为1KHz的…

八皇后问题代码实现(java,递归)

简介&#xff1a;著名的八皇后问题是由棋手马克斯贝瑟尔在1848年提出来的&#xff0c;要求在 8 8 的棋盘上摆放8个皇后&#xff0c;使”皇后“们不能互相攻击 &#xff0c;当任意两个皇后都不处于同一行、同一列或同一条斜线上时就不会相互攻击&#xff0c;即为目标解。 说明…

C语言中的预处理指令的其中之一——#line

目录 开头1.什么是预处理指令——#line?2.预处理指令——#line的实际应用改__FILE__宏改__LINE__宏改__FILE__宏和__LINE__宏…… 下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们要学一下关于C语言中的预处理指令的其中之一——#line的一些…

4-6 使用bios 中断 显示字符

1 显示的逻辑 bios 首先通过中断&#xff0c;访问到 最前面的中断向量表&#xff0c;然后 通过中断向量表然后 访问到具体的 bios 的函数&#xff0c;这些函数是bios 自带的&#xff0c;具体的位置 &#xff0c; 我也不知道。只知道有这个函数。 3 显示的原理 &#xff1b; 主要…

纯蓝图事件

一、创建事件分发器 1、蓝图中可直接添加Event Dispatchers事件分发器 2、还可以设置事件的传递参数 3、直接将创建好的事件分发器拖入EventGraph中会显示出Call、Bind、UnBind、Assign等方法 二、广播事件通知 三、订阅、取消订阅事件通知

算法数学加油站:一元高斯分布(正态分布)Python精美科研绘图(PDF、CDF、PPF、ECDF曲线;QQ图)

这类博客针对算法学习时可能遇到的数学知识补充&#xff0c;但不会太多废话&#xff0c;主要是公式结合Python代码精美绘图理解&#xff01; 本期重点&#xff1a; 参数&#xff1a;期望、标准差曲线&#xff1a;概率密度曲线PDF、累积概率密度函数CDF、百分点函数PPF应用&am…

14:LDO电源模块的布局

1.器件要和边框相聚5mm的距离作为工艺边&#xff0c;工艺边可以布线&#xff0c;但不能摆放器件 LDO布局原则 ①输出靠近负载端 和DCDC布局一样

Springcloud微服务合并打包,重复路径引发的血案

你好&#xff0c;我是柳岸花开。 在微服务架构的世界里&#xff0c;各种服务之间的接口调用犹如人类的神经系统&#xff0c;构成了整个系统的核心。然而&#xff0c;正是这些看似简单的接口路径&#xff0c;可能会引发一场惊天血案。今天&#xff0c;我们就来揭开一起因“重复路…

Git高手必备:掌握这些指令,轻松玩转版本控制(一)

前言 注&#xff1a;本文下的除非特殊声明&#xff0c;否则一律不作为实际加号&#xff0c;仅表示连接 所有的版本控制系统&#xff0c;只能跟踪文本文件的改动比如txt文件&#xff0c;网页&#xff0c;所有程序的代码等&#xff0c;能清楚的知道改动了什么。但是类似于图片、…

嵌入式全栈开发学习笔记---Linux系统编程(文件编程)

目录 Linux文件概述 系统IO 创建文件creat() 打开文件open() 写文件write() 读文件read() 文件指针---lseek() 系统IO拷贝 标准IO 标准IO和系统IO的区别 缓冲区的分类 行缓存测试 打开文件fopen() 写文件fwrite() 读文件read() 标准IO拷贝 标准IO和系统IO的效…