C语言穿墙迷宫

news2024/9/22 8:29:32

目录

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

开头

大家好,我叫这是我58。

程序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <Windows.h>
void printmaze(const char strmaze[11][11], const int iwalk) {
	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你走了%d步\n", iwalk);
}
int main() {
	srand((unsigned int)time(NULL));
	int i = 0;
	int iw = 0;
	int iwalk = 0;
	char ch = 0;
	char strmaze[11][11] = {
		'*','*','*','*','*','*','*','*','*','*','G',
		'*','*','*','*','*','*','*','*','*','*','*',
		'*','*','*','*','*','*','*','*','*','*','*',
		'*','*','*','*','*','*','*','*','*','*','*',
		'*','*','*','*','*','*','*','*','*','*','*',
		'*','*','*','*','*','*','*','*','*','*','*',
		'*','*','*','*','*','*','*','*','*','*','*',
		'*','*','*','*','*','*','*','*','*','*','*',
		'*','*','*','*','*','*','*','*','*','*','*',
		'*','*','*','*','*','*','*','*','*','*','*',
		'P','*','*','*','*','*','*','*','*','*','*'
	};
	int wallarr[11][11] = { 0 };
	wallarr[0][10] = 2;
	wallarr[10][0] = 2;
	char* cp = &strmaze[10][0];
	printf("欢迎你来玩穿墙迷宫,在这个迷宫中,“P”是你,空格是你可以走的地方,“\033[32;1mG\033[0m”为\033[32;1m终点\033[0m,有些“*”是假墙,你可以走,有些“*”是真墙,你撞上去的话就会改变整个迷宫里所有墙的真假性了,而你只要走到\033[32;1m终点\033[0m,就可以\033[32;1m赢\033[0m了,你听懂了吗?");
	Sleep(6400);
	system("cls");
	for (i = 0; i < 121; i++) {
		2 != wallarr[0][i] && (wallarr[0][i] = rand() % 2);
	}//墙之初始化
	while ('G' == strmaze[0][10]) {
		int ip = cp - &strmaze[0][0];
		for (i = 0; i < 121; i++) {
			2 != wallarr[0][i] && i != ip && (strmaze[0][i] = '*');
		}//设墙
		printmaze(strmaze, iwalk);
		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 && 1 == wallarr[0][ip - 11] && (iw = 1), 11 == i && (!(wallarr[0][ip - 11]) || 2 == wallarr[0][ip - 11]) && (cp -= 11);
			iwalk++;
			break;
		case 'a':
			for (i = 0; i < 11; i++) {
				if (cp == &strmaze[i][0]) {
					break;
				}
			}
			11 == i && 1 == wallarr[0][ip - 1] && (iw = 1), 11 == i && (!(wallarr[0][ip - 1]) || 2 == wallarr[0][ip - 1]) && (cp--);
			iwalk++;
			break;
		case 's':
			for (i = 0; i < 11; i++) {
				if (cp == &strmaze[10][i]) {
					break;
				}
			}
			11 == i && 1 == wallarr[0][ip + 11] && (iw = 1), 11 == i && (!(wallarr[0][ip + 11]) || 2 == wallarr[0][ip + 11]) && (cp += 11);
			iwalk++;
			break;
		case 'd':
			for (i = 0; i < 11; i++) {
				if (cp == &strmaze[i][10]) {
					break;
				}
			}
			11 == i && 1 == wallarr[0][ip + 1] && (iw = 1), 11 == i && (!(wallarr[0][ip + 1]) || 2 == wallarr[0][ip + 1]) && (cp++);
			iwalk++;
			break;
		default:
			break;
		}
		if (iw) {
			for (i = 0; i < 121; i++) {
				2 != wallarr[0][i] && ip != i && (wallarr[0][i] = rand() % 2);
			}
		}//走后撞墙? --> (-是->改变墙的属性)
		iw = 0;
		*cp = 'P';
		system("cls");
	}
	system("color 0A");
	printf("恭喜你,你一共走了%d步就到达了终点\n", iwalk);
	return 0;
}//穿墙迷宫: 走后撞墙? --> (-是->改变墙的属性) 设墙

程序的流程图

开始
把宏_CRT_SECURE_NO_WARNINGS定义为1
导入stdio.h
导入stdlib.h
导入time.h
导入Windows.h
定义printmaze函数
把随机数的种子设为现在的时间戳
定义整型i为0
定义整型iw为0
定义整型iwalk为0
定义字符ch为0
把有11行11列的二维字符数组strmaze初始化为下面的图片

走后撞墙? --> (-是->改变墙的属性)
设墙
墙之初始化
等待6.4秒,等待好后就清屏
是(break)
break
清屏
是(break)
break
是(break)
break
break
iw?
设i为0
i < 121?
2 != wallarr[0][i] && ip != i?
把二维整型数组wallarr第0行第i列的元素设为随机数模2的结果
i自增1
设i为0
i < 121?
2 != wallarr[0][i] && i != ip?
把二维字符数组strmaze第0行第i列的元素设为字符“*”
i自增1
设i为0
i < 121?
2 != wallarr[0][i]?
把二维整型数组wallarr第0行第i列的元素设为随机数模2的结果
i自增1
把有11行11列的二维整型数组wallarr里的元素全都初始化为0
把二维整型数组wallarr第0行第10列的元素设为2
把二维整型数组wallarr第10行第0列的元素也设为2
定义字符指针cp为二维字符数组strmaze第10行第0列的地址
输出“欢迎你来玩穿墙迷宫,在这个迷宫中,“P”是你,空格是你可以走的地方,“\​033[32;1mG\​033[0m”为\​033[32;1m终点\​033[0m,有些“*”是假墙,你可以走,有些“*”是真墙,你撞上去的话就会改变整个迷宫里所有墙的真假性了,而你只要走到\​033[32;1m终点\​033[0m,就可以\​033[32;1m赢\​033[0m了,你听懂了吗?”
'G' == strmaze[0][10]?
定义整型ip为cp与二维字符数组strmaze第0行第0列的地址之间的元素个数
执行printmaze函数,参数有二维字符数组strmaze和整型iwalk
把ch设为你输入的字符
'\​n' != getchar()?
把解引用的cp设为空格
'w' == ch?
设i为0
i < 11?
cp == &strmaze[0][i]?
11 == i && 1 == wallarr[0][ip - 11]?
把iw设为1
11 == i && (!(wallarr[0][ip - 11]) || 2 == wallarr[0][ip - 11])?
把cp向左移动11位
iwalk自增1
设iw为0
把解引用的cp设为字符“P”
把窗口的背景色设为黑色,前景色设为淡绿色
输出“恭喜你,你一共走了%d步就到达了终点\​n”(“%d”代iwalk)
结束
'a' == ch?
设i为0
i < 11?
cp == &strmaze[i][0]?
11 == i && 1 == wallarr[0][ip - 1]?
把iw设为1
11 == i && (!(wallarr[0][ip - 1]) || 2 == wallarr[0][ip - 1])?
把cp向左移动一位
iwalk自增1
's' == ch?
设i为0
i < 11?
cp == &strmaze[10][i]?
11 == i && 1 == wallarr[0][ip + 11]?
设iw为1
11 == i && (!(wallarr[0][ip + 1])?
把cp向右移动11位
iwalk自增1
'd' == ch?
设i为0
i < 11?
cp == &strmaze[i][10]?
11 == i && 1 == wallarr[0][ip + 1]?
设iw为1
11 == i && (!(wallarr[0][ip + 1]) || 2 == wallarr[0][ip + 1])?
把cp向右移动一位
iwalk自增1
i自增1
i自增1
i自增1
i自增1
穿墙迷宫: 走后撞墙? --> (-是->改变墙的属性) 设墙
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”,否则“%s”代“0”,“%c”则代二维字符数组strmaze的第ia行第ib列的元素)
ib自增1
输出“|\​n”
ia自增1
输出“-----------@\​n你走了%d步\​n”(“%d”代iwalk)

程序游玩的效果

穿墙迷宫

下一篇博客要说的东西

阴阳迷宫

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

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

相关文章

Axure团队协作功能详解:从创建到管理的全流程

Axure RP 支持团队协作&#xff0c;通过创建团队项目&#xff0c;多个团队成员可以同时在同一个项目上进行编辑和管理。以下是使用 Axure 进行团队协作的详细步骤&#xff1a; Axure 使用地址 1. 创建团队项目 打开 Axure RP&#xff0c;并在菜单栏中选择 “Team” > “Cr…

【6678专题】-点亮LED灯(寄存器方式)

本章需要参考的资料为 《General Purpose Input Output (GPIO) User Guide.pdf》&#xff0c;具体在创龙资料文件夹目录下D:\JYTL\12DSP_FPGA\08_文档\创龙\TL6678ZH-EVM_V1.5\TL6678ZH-EVM_V1.5\6-开发参考资料\数据手册\核心板元器件\DSP\Technical Reference Manual 《Multi…

CentOS 安装 NVIDIA 相关软件包时出现依赖问题

CentOS 安装 NVIDIA 相关软件包时出现依赖问题 1 CentOS 安装 NVIDIA 相关软件包时报错如下2 解决方法 1 CentOS 安装 NVIDIA 相关软件包时报错如下 Error: Package: 3:kmod-nvidia-latest-dkms-550.90.07-1.el7.x86_64 (cuda-rhel7-x86_64)Requires: dkms Error: Package: 3:…

嵌入式中详解STM32启动文件

本文对STM32启动文件startup_stm32f10x_hd.s的代码进行讲解,此文件的代码在任何一个STM32F10x工程中都可以找到。 启动文件使用的ARM汇编指令汇总 Stack——栈 Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=Stack_Mem SPACE Stack_Size__initial_sp 开辟…

EEG揭秘:视觉线索如何操控我们的运动表现

摘要 在脑电图(EEG)或皮层脑电图(ECoG)实验中&#xff0c;视觉线索常用于时间同步&#xff0c;但可能会无意中诱发神经活动和认知加工&#xff0c;从而使任务解码变得更具挑战性。为了解决这一问题&#xff0c;本研究引入了四种新的视觉线索(淡出(Fade)、旋转(Rotation)、参考…

使用插件i18n实现国际化多语言

1、安装 npm install vue-i18nnext --save 或者 yarn add vue-i18nnext --save 2、配置 新建目录及文件夹 - src - locales - lang - zh.js // 中文&#xff0c; - en.js // 英语&#xff0c; - ar.js // 法语&#xff0c; - jp.js // 日语&#xff0c; - fr…

上万人苦心研究数年的数据,备份怎么做才保险?-Infortrend

业界领先的应用研究机构&#xff0c;拥有上万名员工。需要一套存储设备&#xff0c;能够长期保存大量备份数据。他们从事的研究项目周期&#xff0c;往往持续数月甚至数年&#xff0c;涉及大量的数据收集和分析。为了确保研究的连续性&#xff0c;并且保护关键数据&#xff0c;…

效率提升关键

在当今快节奏的工作环境中&#xff0c;效率软件成为了提升个人和团队生产力的重要工具。这些软件可以帮助人们更好地管理时间、优化工作流程以及增强团队协作。具体分析如下&#xff1a; 1 亿可达 ◦ 简介&#xff1a;亿可达作为一款自动化工具&#xff0c;亿可达被誉为国…

为什么要学习 CCRC-PIPP

背景&#xff1a; 在数字化时代背景下&#xff0c;数据已成为重要的生产要素和国家战略资源&#xff0c;个人信息的保护尤为关键。 保障公民的个人信息权益&#xff0c;促进其依法合理有效利用&#xff0c;是政府和企业推动数字经济健康发展的首要任务。 中国网络安全审查技…

TypeScript入门简介

TypeScript&#xff08;TS&#xff09;是JavaScript的超集&#xff0c;其可以编译出纯净、 简洁的JavaScript代码&#xff0c;并且可以运行在任何浏览器上、Node.js环境中和任何支持ECMAScript 3&#xff08;或更高版本&#xff09;的JavaScript引擎中。TypeScript提供最新的和…

【如何在MacOS升级ruby版本】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

如何在手机上设置国内代理IP地址:详细指南

在某些情况下&#xff0c;我们可能需要在手机上设置国内代理IP地址&#xff0c;以便访问特定的网络服务或提高网络连接的稳定性。本文将详细介绍如何在Android和iOS设备上设置代理IP地址。 在Android设备上设置代理IP地址 在Android设备上设置代理IP地址非常简单&#xff0c;只…

AD7046 GD32 SPI驱动设计

硬件设计 AD7046简介&#xff1a;ADS7046 12 位&#xff0c; 3 MSPS&#xff0c; 单端输入&#xff0c; 小型低功耗 SAR ADC。ADS7046 是一款 12 位 3 MSPS SAR ADC&#xff0c; 支持0V到 AVDD 范围内的单端输入&#xff0c; AVDD 的范围为2.35V至 3.6V。内部失调电压校准功能…

深度解读SGM41511电源管理芯片I2C通讯协议REG05寄存器解释

REG05 是 SGM41511 的第六个寄存器&#xff0c;地址为 0x05。它是一个可读写的寄存器&#xff0c;上电复位值&#xff08;PORV&#xff09;为 10011111。这个寄存器控制多个重要的充电安全和管理功能&#xff1a; EN_TERM (D[7])&#xff1a; 控制充电终止功能 0 禁用 1 …

视频结构化从入门到精通——认识视频结构化

认识视频结构化 1. 视频结构化与非结构化 1. 非结构化数据 非结构化数据指的是未经处理、以原始形式存在的数据。这类数据是直接采集、记录的&#xff0c;包含了音频、视频等多维信息&#xff0c;且没有任何标签、注释或分类来表示其中的内容。非结构化数据需要进一步处理和…

scrapy--伪分布式redis操作

免责声明:本文仅做分享... 目录 scrapy分布式爬虫 伪分布式 redis 快速学习使用 字 符 串 类 型 列 表 类 型 hash 类型 set 类型 zset 类型 小结: scrapy-redis 安装第三方库: settings.py配置: spider文件修改: redis数据库添加 键 值 启动 scrapy总结 scrap…

IS-IS路由配置--路由聚合

目录 不熟悉和理解IS-IS动态协议的可以回顾IS-IS详解&#xff0c;IS-IS相关的实验都不再做过多的解释 一. 实验拓扑 二. 实验配置 不熟悉和理解IS-IS动态协议的可以回顾IS-IS详解&#xff0c;IS-IS相关的实验都不再做过多的解释 IS-IS路由原理详解https://blog.csdn.net/23…

js Object.keys--filter 遍历对象中的数组,排查为空字段

Object.keys(filter).forEach(function(key) { if(key filters){ filter[key] filter[key].filter((item) > item.tagName ! "") } });

CTF—杂项学习

1 文件操作隐写 1.1 文件类型识别 1.1.1 File命令 当文件没有后缀名或有后缀名而无法打开时&#xff0c;根据识别出的文件类型来修改后缀名即可正常打开文件&#xff0c;file是Linux下的文件识别命令。 file 文件名 使用场景&#xff1a;不知道后缀名&#xff0c;无法打开文件…

低代码技术在业务流程自动化中的应用与挑战

在数字化转型的浪潮中&#xff0c;低代码平台和业务流程自动化&#xff08;BPA&#xff09;成为了企业提升效率和灵活性的关键工具。今天&#xff0c;我们将探讨低代码技术如何推动BPA的实施&#xff0c;及其带来的挑战和解决方案。 低代码技术概述 低代码平台是现代软件开发的…