C语言一笔画迷宫

目录

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

开头

大家好,我叫这是我58。

程序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <Windows.h>
void printmaze(const char strmaze[11][11]) {int ia = 0;int ib = 0;for (ia = 0; ia < 11; ia++) {for (ib = 0; ib < 11; ib++) {printf("%c", strmaze[ia][ib]);}printf("|\n");}printf("-----------@\n");
}
int main() {int i = 0;int iq = 0;const int arr[6] = { 5,5,8,5,8,6 };char ch = 0;char strmaze[11][11] = {'P',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};char* cp = &strmaze[0][0];char* cpb = cp;printf("欢迎你来玩这个一笔画迷宫,在这个游戏中,“P”是你,空格是你可以走的地方,输入“r”即可重置迷宫,并且你每走一步,就会拉出一堵墙,而你只要用拉出的墙把这个迷宫中的所有空格都变没,就可以取得这个迷宫的\033[32;1m胜利\033[0m了,这就是这个迷宫的规则");Sleep(6300);system("cls");while (117 != iq) {//一笔画完成? --> (-是->赢-->end -否->记录移动前的地址)cpb = cp;//记录移动前的地址printmaze(strmaze);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);break;case 'a':for (i = 0; i < 11; i++) {if (cp == &strmaze[i][0]) {break;}}11 == i && '*' != *(cp - 1) && cp--;break;case 's':for (i = 0; i < 11; i++) {if (cp == &strmaze[10][i]) {break;}}11 == i && '*' != *(cp + 11) && (cp += 11);break;case 'd':for (i = 0; i < 11; i++) {if (cp == &strmaze[i][10]) {break;}}11 == i && '*' != *(cp + 1) && cp++;break;case 'r':cp = &strmaze[0][0];cpb = cp;memset(strmaze, ' ', sizeof strmaze);strmaze[0][0] = 'P';for (i = 0, iq = 0; i < 3; i++) {strmaze[arr[i]][arr[i + 3]] = '*';}break;//r重置default:break;}if (cp != cpb) {*cpb = '*';iq++;}//移动前的地址 == 移动后的地址? -->(-是->不拉墙 -否->拉墙)*cp = 'P';system("cls");}system("color 0A");printf("恭喜你,你赢了\n");return 0;
}//一笔画迷宫:记录移动前的地址 --> 移动前的地址 == 移动后的地址? -->(-是->不拉墙 -否->拉墙) --> 一笔画完成? --> (-是->赢-->end -否->记录移动前的地址)(r重置)

程序的流程图

开始
把宏_CRT_SECURE_NO_WARNINGS定义为1
导入stdio.h
导入string.h
导入Windows.h
定义printmaze函数
定义整型i为0
定义整型iq为0
把常量整型数组arr分别初始化为5,5,8,5,8和6
定义字符ch为0
把有11行11列的二维字符数组strmaze初始化为下面的图片

移动前的地址 == 移动后的地址? -->(-是->不拉墙 -否->拉墙)
r重置
记录移动前的地址
一笔画完成? --> (-是->赢-->end -否->记录移动前的地址)
等待6.3秒,等待之后就清屏
是(break)
break
清屏
是(break)
break
是(break)
break
是(break)
break
否(break)
否(break)
否(break)
否(break)
否(break)
否(break)
cp != cpb?
把解引用的cpb设为字符“*”
iq自增1
把cp设为二维字符数组strnaze第0行第0列的地址
把cpb设为cp
把二维字符数组strmaze里的所有元素都替换为空格
把二维字符数组strmaze第0行第0列的元素设为字符“P”
设i为0
设iq为0
i < 3?
把二位字符数组strmaze第arr的第i项的值行第arr的第i加3项的值列的元素设为字符“*”
i自增1
把cpb设为cp
117 != iq?
定义字符指针cp为二维字符数组strnaze第0行第0列的地址
定义字符指针cpb为cp
输出“欢迎你来玩这个一笔画迷宫,在这个游戏中,“P”是你,空格是你可以走的地方,输入“r”即可重置迷宫,并且你每走一步,就会拉出一堵墙,而你只要用拉出的墙把这个迷宫中的所有空格都变没,就可以取得这个迷宫的\​033[32;1m胜利\​033[0m了,这就是这个迷宫的规则”
执行printmaze函数,参数有二维字符数组strmaze
把ch设为你输入的字符
'\​n' != getchar()?
把解引用的cp设为空格
'w' == ch?
设i为0
i < 11?
cp == &strmaze[0][i]?
11 == i && '*' != *(cp - 11)?
把cp向左移动11位
把解引用的cp设为字符“P”
把窗口的背景色设为黑色,前景色设为淡绿色
输出“恭喜你,你赢了\​n”
结束
'a' == ch?
设i为0
i < 11?
cp == &strmaze[i][0]?
11 == i && '*' != *(cp - 1)?
把cp向左移动一位
's' == ch?
设i为0
i < 11?
cp == &strmaze[10][i]?
11 == i && '*' != *(cp + 11)?
把cp向右移动11位
'd' == ch?
设i为0
i < 11?
cp == &strmaze[i][10]?
11 == i && '*' != *(cp + 1)?
把cp向右移动一位
'r' == ch?
i自增1
i自增1
i自增1
i自增1
一笔画迷宫:记录移动前的地址 --> 移动前的地址 == 移动后的地址? -->(-是->不拉墙 -否->拉墙) --> 一笔画完成? --> (-是->赢-->end -否->记录移动前的地址)(r重置)
printmaze函数
结束
开始
定义整型ia为0
定义整型ib为0
设ia为0
ia < 11?
设ib为0
ib < 11?
输出“%c”(“%c”代二维字符数组strmaze第ia行第ib列的地址)
ib自增1
输出“|\​n”
ia自增1
输出“-----------@\​n”

程序游玩的效果

一笔画迷宫

结尾

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

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

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

相关文章

智慧环卫与智慧城市:以人文本的创新发展之路

智慧环卫与智慧城市&#xff1a;以人文本的创新发展之路 前言智慧环卫与智慧城市 前言 智慧环卫和智慧城市的建设是当今社会发展的重要趋势&#xff0c;它们对于提升城市管理水平、改善居民生活质量具有至关重要的意义。随着国家政策对新型城市建设的大力推动&#xff0c;智慧…

python环境学习:pip 和 conda的区别和联系。哪个更好使用?pip创建虚拟环境并解释venv模块,pip的常用命令,conda的常用命令。

文章目录 一、pip介绍二、pip 和 conda 的区别与联系1、包管理器的功能2、下载包的来源3、 环境管理4、 安装速度和依赖管理5、联系6、实践中的使用 三、pip创建独立环境1、存在问题并提供解决方案a、问题b、解决方案1c、解决方案2 1、创建虚拟环境流程&#xff08;easy&#x…

Three 物体(三)

点&#xff08;Points&#xff09; 一个用于显示点的类。 由WebGLRenderer渲染的点使用 gl.POINTS。 构造器 Points( geometry : Geometry, material : Material ) geometry —— &#xff08;可选&#xff09;是一个Geometry或者BufferGeometry的实例&#xff0c;默认值是…

Android13 app后台无法启动Abort background activity starts from

总纲 android13 rom 开发总纲说明 目录 1.前言 2.log分析 3.代码查找分析 4.修改方法 5.编译测试 6彩蛋 1.前言 Android13 用户app后台无法启动,提示Abort background activity starts from 10111 2.log分析 08-07 21:37:36.703: W/ActivityTaskManager(440): Back…

保护网站安全,了解常见的几种网络攻击

随着互联网技术的迅猛发展&#xff0c;网站作为信息展示和交互的重要平台&#xff0c;面临着日益复杂的网络攻击威胁。从简单的口令入侵到复杂的分布式拒绝服务&#xff08;DDoS&#xff09;攻击&#xff0c;网络攻击手段层出不穷&#xff0c;给网站所有者带来了巨大的挑战。今…

完成控制器方法获取参数-@RequestParam

文章目录 1.将方法的request和response参数封装到参数数组1.SunDispatcherServlet.java1.根据方法信息&#xff0c;返回实参列表2.具体调用 2.测试 2.封装Http请求参数到参数数组1.自定义RequestParam注解2.MonsterController.java 增加参数3.SunDispatcherServlet.java1.resol…

正则表达式备查

一、常用 符号内容\将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如&#xff0c;“n”匹配字符“n”。“\n”匹配换行符。序列“\”匹配“\”&#xff0c;“(”匹配“(”。^匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性&#xff0c;^ 还…

ARM工作模式

ARM ARM架构ARM七个工作模式寄存器异常向量表存储格式&#xff08;内存大小端&#xff09;汇编指令 ARM架构 RAM&#xff1a;随机访问存储器 ROM&#xff1a;只读访问存储器 AHB&#xff1a;先进高速总线 APB&#xff1a;先进外设总线 USB&#xff1a;统一串行总线 norflash&am…

Python爬虫案例二:获取虎牙主播图片(动态网站)

爬虫流程&#xff1a;优先假设是JSON数据&#xff0c;抓包方式只能翻页JSON数据HTML数据1.异步数据&#xff08;即先返回HTML&#xff0c;再返回目标的数据&#xff0c;只是触发了JSON请求&#xff09;&#xff0c;不在HTML中2.不能刷新网页&#xff0c;直接翻页 测试链接&…

基于Vue.js+Express的夕阳红养老院管理系统的设计与实现--附源码98650

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 相关技术介绍 2.1 Express框架介绍 2.2 Vue.js 2.3 MySQL数据库 2.4 Node.js主要功能 3系统分析 3.1 可行性分析 3.2 系统流程分析 3.2.1 数据新增流程 3.2.2 数据修改流程 3.2.3数据删除…

【Android】Glide模块工作原理

Glide模块工作原理 每个Glide模块包含一个Decoder&#xff0c;和一个Transcoder Decoder负责将DataSource转换为对应的Resource Transcoder负责将对应的Resource&#xff0c;转换为Drawable GlideModule示例 这里以SVG为例&#xff0c;展示下GlideModule是如何定义的 cla…

Java中等题-完全平方数(力扣)

给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 3 和 11 不是。 示…

AWS SAM CLI 备忘单!

安装 AWS SAM CLI brew tap aws/tap brew 安装 aws-sam-cli 验证安装 $ sam --version 升级 SAM $ brew upgrade aws-sam-cli 您需要 AWS 凭证才能在 AWS 上工作。 构建并部署简单应用程序 $ sam init→ 下载示例应用程序 $ sam build→ 构建您的应用程序 $ sam deploy --guid…

记录自己的嵌入式学习之路

一、STM32软件编程 【STM32】C语言基础补充-CSDN博客 【STM32】写Keil程序的注意事项-CSDN博客 【STM32】一些外设通用内容-CSDN博客 二、嵌入式硬件设计 未完待续

go设计模式———适配器模式

适配器模式是一种设计模式&#xff0c;用来解决接口不兼容的问题。它的作用是让原本因为接口不兼容而无法一起工作的类能够协同工作。通俗地说&#xff0c;它就像是一种“转换器”&#xff0c;能够把一种接口转化为另一种接口&#xff0c;从而让不同的系统或组件可以一起使用。…

联合体成员的访问——真题讲解

【题目】 阅读下述代码&#xff0c;请问修改data的value成员以存储3.14&#xff0c;正确的方式是() union Data { int num; float value; char symbol; }; union Data data; A. data.value 3.14; B. value.data 3.14; C. data->value 3.14; D. value->data 3.1…

Java学习_18_Stream流

文章目录 前言一、不可变集合二、Stream流思想第一步&#xff1a;得到Stream流第二步&#xff1a;Stream流的中间方法Stream流的终结方法 总结 前言 博客仅记录个人学习进度和一些查缺补漏。 学习内容&#xff1a;BV17F411T7Ao 一、不可变集合 不可变集合就是长度和内容都不可…

希尔排序,详细解析(附图解)

1.希尔排序思路 希尔排序是一种基于插入排序的算法&#xff0c;通过将原始数据分成若干个子序列&#xff0c;然后对子序列进行插入排序&#xff0c;逐渐减小子序列的间隔&#xff0c;最后对整个序列进行一次插入排序。 1.分组直接插入排序&#xff0c;目标接近有序--------…

transformers调用llama的方式

transformers调用llama的使用方式 不同版本llama对应的transformers库版本llama2llama3Meta-Llama-3-8B-InstructMeta-Llama-3-8B llama3.1Meta-Llama-3.1-8B-Instruct 不同版本llama对应的transformers库版本 # llama2 pip install torch1.13.1cu116 torchvision0.14.1cu116 …

C语言贪吃蛇之BUG满天飞

C语言贪吃蛇之BUG满天飞 今天无意间翻到了大一用C语言写的贪吃蛇&#xff0c;竟然还标注着BUG满天飞&#xff0c;留存一下做个纪念&#xff0c;可能以后就找不到了 /* 此程序 --> 贪吃蛇3.0 Sur_流沐 当前版本&#xff1a; Bug满天飞 */ #include<stdio.h> #includ…