C语言破墙镐对称飞迷宫

news2025/2/23 4:13:39

目录

  • 开头
  • 程序
  • 程序的流程图
  • 程序游玩的效果(gif)
  • 结尾

开头

大家好,我叫这是我58。

程序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
enum WASD {
	W,
	A,
	S,
	D
};
void printmaze(const char strmaze[11][11], const int ip, const int ic) {
	int ia = 0;
	int ib = 0;
	for (ia = 0; ia < 11; ia++) {
		for (ib = 0; ib < 11; ib++) {
			printf("\033[%sm%c\033[0m",'G' == strmaze[ia][ib] ? "32;1" : "0", strmaze[ia][ib]);
		}
		printf("|\n");
	}
	printf("-----------@\n\033[%sm破墙镐*%d%s\n\033[%sm对称飞*%d%s\033[0m\n", ip ? "0" : "30;1", ip, ip ? "(q)" : "", ic ? "0" : "30;1", ic, ic ? "(e)" : "");
}
int main() {
	enum WASD wp = W;
	int i = 0;
	int ip = 4;
	int ic = 2;
	char ch = 0;
	char strmaze[11][11] = {
		'P','*',' ','*',' ',' ',' ','*',' ',' ','*',
		'*',' ',' ','*','*','*','*',' ','*','*',' ',
		' ',' ',' ','*','*',' ','*',' ','*','*',' ',
		'*','*','*','*','*','*','*',' ','*','*',' ',
		' ','*','*','*',' ','*',' ','*','*','*',' ',
		'*',' ','*','*','*','G','*','*','*','*',' ',
		'*',' ',' ','*',' ','*','*','*','*','*',' ',
		'*','*','*','*',' ','*','*','*',' ',' ',' ',
		'*','*','*','*','*','*','*','*',' ','*','*',
		' ',' ',' ','*','*','*','*','*','*','*','*',
		'*',' ',' ',' ',' ','*',' ',' ','*','*',' '
	};
	char* rmaze = malloc(122 * sizeof(char));
	char* rmazea = rmaze;
	rmaze = "P* *   *  **  **** **    ** * ** ******* **  *** * *** * ***G**** *  * ***** **** ***   ******** **   *********    *  ** ";
	char* cp = &strmaze[0][0];
	printf("\033[0m欢迎你来玩破墙镐对称飞迷宫,在这个迷宫中,“P”是你,空格是你可以走的地方,“\033[32;1mG\033[0m”为\033[32;1m终点\033[0m,输入“q”来用掉一把破墙镐来破掉你面前的墙,输入“e”来使用对称飞飞到你与迷宫的中心点中心对称的一个点,输入“r”即可重置迷宫,而你只要走到\033[32;1m终点\033[0m,就可以\033[32;1m赢\033[0m了,你听懂了吗?");
	Sleep(6400);
	system("cls");
	while ('G' == strmaze[5][5]) {
		int ix = (cp - &strmaze[0][0]) / 11;
		int iy = (cp - &strmaze[0][0]) % 11;
		printmaze(strmaze, ip, ic);
		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 (ip) {
				int ipa = 0;
				switch (wp) {
				case W:
					(ix && '*' == *(cp - 11)) && (*(cp - 11) = ' ', ipa = 1);
					break;
				case A:
					(iy && '*' == *(cp - 1)) && (*(cp - 1) = ' ', ipa = 1);
					break;
				case S:
					(10 != ix && '*' == *(cp + 11)) && (*(cp + 11) = ' ', ipa = 1);
					break;
				case D:
					(10 != iy && '*' == *(cp + 1)) && (*(cp + 1) = ' ', ipa = 1);
					break;
				default:
					break;
				}
				ipa && ip--;
			}
			break;//破墙镐
		case 'e':
			(ic && ' ' == strmaze[10 - ix][10 - iy]) && (ic--, cp = &strmaze[10 - ix][10 - iy]);//对称飞
			break;
		case 'r':
			ip = 4;
			ic = 2;
			cp = &strmaze[0][0];
			for (i = 0; i < 121; i++) {
				strmaze[0][i] = rmaze[i];
			}
			break;
		default:
			break;
		}
		*cp = 'P';
		system("cls");
	}
	system("color 0A");
	printf("恭喜你,你赢了\n");
	free(rmazea);
	rmaze = NULL;
	rmazea = NULL;
	return 0;
}//破墙镐(2)(q)对称飞(4)(e)迷宫:破墙镐——破墙(有墙才破),对称飞——从迷宫的中心点瞬移(瞬移点没墙)

程序的流程图

开始
把宏_CRT_SECURE_NO_WARNINGS定义为1
导入stdio.h
导入stdlib.h
导入Windows.h
定义枚举WASD里的变量为W,A,S和D,并分别把这些变量初始化为0,1,2和3
定义printmaze函数
定义枚举WASD变量wp为W
定义整型i为0
定义整型ip为0
定义整型ic为2
定义字符ch为0
把有11行11列的二维字符数组strmaze初始化为下面的图片

对称飞
破墙镐
等待6.4秒,等待好后就清屏
是(break)
break
清屏
是(break)
break
是(break)
break
是(break)
break
break
break
否(break)
break
否(break)
break
break
否(break)
否(break)
否(break)
否(break)
否(break)
否(break)
否(break)
否(break)
ic && ' ' == strmaze[10 - ix][10 - iy])?
ic自减1
把cp设为二维字符数组strmaze第10减ix的值行第10减iy的值列的元素的地址
ip?
定义ipa为0
W == wp?
ix && '*' == *(cp - 11)?
把解引用的某个结果设为空格,而这个结果就是cp减去11的结果
把ipa设为1
ipa?
ip自减1
A == wp?
iy && '*' == *(cp - 1))?
把解引用的某个结果设为空格,而这个结果就是cp减去1的结果
把ipa设为1
S == wp?
10 != ix && '*' == *(cp + 11)?
把解引用的某个结果设为空格,而这个结果就是cp加上11的结果
把ipa设为1
D == ch?
10 != iy && '*' == *(cp + 1)?
把解引用的某个结果设为空格,而这个结果就是cp加上1的结果
把ipa设为1
把有122个字节大小的动态内存交给rmaze字符指针来维护
定义字符指针rmazea为rmaze
把rmaze设为“P* * * ** **** ** ** * ** ******* ** *** * *** * ***G**** * * ***** **** *** ******** ** ********* * ** ”
定义字符指针cp为二位字符数组strmaze第0行第0列的地址
输出“\​033[0m欢迎你来玩破墙镐对称飞迷宫,在这个迷宫中,“P”是你,空格是你可以走的地方,“\​033[32;1mG\​033[0m”为\​033[32;1m终点\​033[0m,输入“q”来用掉一把破墙镐来破掉你面前的墙,输入“e”来使用对称飞飞到你与迷宫的中心点中心对称的一个点,输入“r”即可重置迷宫,而你只要走到\​033[32;1m终点\​033[0m,就可以\​033[32;1m赢\​033[0m了,你听懂了吗?”
'G' == strmaze[5][5]?
定义整型iy为cp与二维字符数组strmaze第0行第0列的地址之间的元素个数模上11的结果
执行printmaze函数,参数有二位字符数组strmaze,整型ip和整型ic
把ch设为你输入的字符
'\​n' != getchar()?
把解引用的cp设为空格
'w' == ch?
设i为0
i < 11?
cp == &strmaze[0][i]?
11 == i && '*' != *(cp - 11)?
把cp向左移动11位
把wp设为W
把解引用的cp设为字符“P”
把窗口的背景色设为黑色,前景色设为淡绿色
输出“恭喜你,你赢了\​n”
借rmazea释放rmaze
把rmaze置为空指针
把rmazea也置为空指针
结束
'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?
&strmaze[i][10]?
11 == i && '*' != *(cp + 1)?
把cp向右移动一位
把wp设为D
'q' == ch?
'e' == ch?
'r' == ch?
设ip为4
设ic为2
设cp为二位字符数组strmaze第0行第0列的地址
设i为0
i < 121?
把二维字符数组strmaze第0行第i列的元素设为rmaze第i项的元素
i自增1
i自增1
i自增1
i自增1
i自增1
破墙镐(2)(q)对称飞(4)(e)迷宫:破墙镐——破墙(有墙才破),对称飞——从迷宫的中心点瞬移(瞬移点没墙)
printmaze函数
结束
开始
定义整型ia为0
定义整型ib为0
设ia为0
ia < 11?
设ib为0
ib < 11?
输出“\​033[%sm%c\​033[0m”(如果“G”为二维字符数组strmaze第ia行第ib列的元素,那么“%s”就代“32;1”,否则代“0”,而“%c”则代二维字符数组strmaze第ia行第ib列的元素)
ib自增1
输出“|\​n”
ia自增1
输出“-----------@\​n\​033[%sm破墙镐*%d%s\​n\​033[%sm对称飞*%d%s\​033[0m\​n”(如果ip不为0,第一个“%s”和第二个“%s”分别代“0”和“(q)”,否则就分别代“30;1”和空字符串,第一个“%d”则代ip,如果ic不为0,第一个“%s”和第二个“%s”分别代“0”和“(e)”,否则就也分别代“30;1”和空字符串,第二个“%d”则代ic)

程序游玩的效果(gif)

结尾

你觉得我这次写的迷宫好吗?如果你觉得我这次写的迷宫不好,就可以评论一下我这次写的迷宫不好的原因吧。

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

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

相关文章

【CTF Web】CTFShow cookie泄露 Writeup(cookie泄露+URL解码)

cookie泄露 10 cookie 只是一块饼干&#xff0c;不能存放任何隐私数据 解法 按 F12 打开开发者工具&#xff0c;点击网络&#xff0c;刷新页面。 flag 在 响应标头的 Set-Cookie 中。 用 URL 解码工具转换。 Flag ctfshow{8483acdb-a677-4c77-8aff-438d44ff1a3e}声明 本博客…

论文翻译软件哪个好用?如何将论文转化?

在学术海洋里遨游&#xff0c;每一篇论文都是思想的灯塔。 但当这座灯塔用外语构建&#xff0c;如何让它在中国读者面前同样熠熠生辉&#xff1f;别担心&#xff0c;把论文翻译成中文的旅程&#xff0c;不仅可以轻松启航&#xff0c;还能优雅靠岸&#xff01; 不知道怎么把论…

【Android笔记】Android APK编译打包流程

前言 本文将介绍Android从一个项目打包成APK的过程&#xff0c;其中涉及Android Java和Kotlin文件、资源文件、清单文件、依赖jar包和so库等在打包过程中处理。 步骤 总体的打包流程如下图&#xff0c;下面就介绍下详细的打包步骤。 1、将aidl文件编译成java文件 在构建过程中…

OpenAI API VBA function returns #Value! but MsgBox displays response

题意&#xff1a;“OpenAI API VBA 函数返回 #Value!&#xff0c;但 MsgBox 显示响应” 问题背景&#xff1a; I am trying to integrate the OpenAI API into Excel. The http request to OpenAI chat completion works correctly and the response is OK. When I display it…

esp32c3 luaos

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、介绍二、相关介绍2.1helloworld——2.2任务框架2.3消息传递 与消息订阅2.4uart2.5二进制数据/c结构体的打包与解析2.6 zbuffer库2.8 uart 485 数据解析2.9 …

Ubuntu 20.04安装中文输入法

本文旨在详细介绍在Ubuntu 20.04操作系统中安装中文输入法的步骤和方法。我们将从选择适合的中文输入法软件、下载与安装过程、配置输入法设置以及解决可能遇到的问题等方面展开讲解&#xff0c;帮助用户轻松实现在Ubuntu 20.04系统下流畅输入中文的需求。无论你是Ubuntu的新手…

东方银行--用 MinIO 和 Dremio 替代 Hadoop

我们的客户是一家总部位于日本的全球金融机构&#xff0c;最近与MinIO和Dremio一起完成了一个雄心勃勃的Hadoop替换项目。你可以在Subsurface的这个演讲中看到他们介绍它&#xff0c;但我们认为我们也会把它写下来。与大多数银行一样&#xff0c;该公司已经建立了大量的Hadoop足…

游戏开发设计模式之状态模式

目录 状态模式在Unity中的具体实现案例是什么&#xff1f; 如何在游戏开发中有效地结合状态模式与享元模式以优化资源使用&#xff1f; 状态模式与其他设计模式&#xff08;如观察者模式、策略模式&#xff09;结合使用的实际例子有哪些&#xff1f; 在处理复杂状态变化时&…

day19:生成器、yield表达式、三元表达式、生成式和函数的递归

一、生成器 1. 如何得到自定义的迭代器 【方法一】&#xff1a;在函数内一旦存在yield关键字&#xff0c;调用函数并不会执行函数体代码&#xff0c;会返回一个生成器对象&#xff0c;生成器即自定义的迭代器。 【方法二】&#xff1a;生成器表达式 反问&#xff1a;为什么自…

信息系统安全等级划分及其重要性:构建安全基石

在信息化社会&#xff0c;数据已成为企业与国家的重要资产&#xff0c;其安全防护日益受到重视。我国的“信息系统安全等级保护制度”正是在这一背景下应运而生&#xff0c;旨在通过等级划分&#xff0c;为不同级别的信息系统提供适配的安全保护措施&#xff0c;确保信息资产的…

Camera篇(一)ov13850调试

ov13850一千三百万像素&#xff0c;必须离线模式&#xff0c;所以ISP TDM配置离线 menuconfig 中需要将ISP TDM功能打开&#xff0c;同时开启WDR 配为&#xff08;*&#xff09; dts配置 work_mode 一律配1 &vind0 {csi_top <360000000>;csi_isp <322000000…

基于x86 平台opencv的图像采集和seetaface6的眼睛状态检测(睁眼,闭眼)功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.2 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的眼睛状态检测(睁眼,闭眼)功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的眼睛…

【C++ Primer Plus习题】3.4

问题: 解答: #include <iostream> using namespace std;const int DAY_TO_HOUR 24; const int HOUR_TO_MIN 60; const int MIN_TO_SEC 60;int main() {long seconds 0,record0;int days 0, hours 0, minutes0;cout << "请输入秒数:";cin >>…

进阶-5.锁

锁 1.概述2.全局锁3.表级锁3.1 介绍3.2 表锁3.3 元数据锁3.4意向锁 4.行级锁 1.概述 分类 按锁的粒度分类&#xff1a; 全局锁&#xff1a;锁住数据库中所有表表级锁&#xff1a;每次操作锁定整张表行级锁&#xff1a;每次操作锁定对应的行数据 2.全局锁 介绍 全局锁就是对…

【经验】linux下cuda的更换

linux下cuda的更换 查看当前cuda和cudnn的版本 nvcc -Vcudnn版本 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2下载对应版本的cuda 查看驱动版本535.54.03 下载对应的cuda版本 版本查看https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.htm…

Revisiting PM-Based B+-Tree With Persistent CPU Cache——论文泛读

TPDS 2024 Paper 论文阅读笔记整理 问题 持久存储器&#xff08;PM&#xff09;具有接近DRAM的性能和数据持久性&#xff0c;配备PM的平台支持异步DRAM刷新&#xff08;ADR&#xff09;功能[2]&#xff0c;确保PM DIMM的内容以及已到达内存控制器的写挂起队列&#xff08;WPQ…

深度学习 --- VGG16卷积核的可视化(JupyterNotebook实战)

VGG16卷积核的可视化 在前一篇文章中&#xff0c;我对VGG16输入了一张图像&#xff0c;并实现了VGG16各层feature map的可视化。深度学习 --- VGG16各层feature map可视化(JupyterNotebook实战)-CSDN博客文章浏览阅读615次&#xff0c;点赞13次&#xff0c;收藏15次。在VGG16模…

123-域防火墙入站出站规则不出网隧道上线组策略对象同步

参考&#xff1a;【内网安全】 域防火墙&入站出站规则&不出网隧道上线&组策略对象同步_对公司的邮件服务器建立防火墙规则 入站出战-CSDN博客 单机-防火墙-限制端口出入站 熟悉常见主机配置不出网的方式 1、入站&出站&连接安全 2、域&专用&公网…

【采集软件】用Python开发的小红薯详情批量采集工具,含笔记正文、转评赞藏等

一、背景介绍 1.1 爬取目标 用python开发的爬虫采集软件&#xff0c;可自动按笔记链接抓取笔记的详情数据。 为什么有了源码还开发界面软件呢&#xff1f;方便不懂编程代码的小白用户使用&#xff0c;无需安装python&#xff0c;无需改代码&#xff0c;双击打开即用&#xff…

本地部署docker文档

由于访问 https://docs.docker.com/ 文档慢&#xff0c;直接本地部署官方文档 如果不想执行以下操作&#xff0c;也可以直接使用官方文档仓库地址提供的 Dockerfile 和 compose.yaml 进行操作 以下操作环境为Windows系统&#xff0c;根据 Dockerfile 相关操作来生成 html 页面…