当前位置: 首页 > news >正文

C语言绽尽之“#”

目录

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

开头

大家好,我叫这是我58。

程序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <Windows.h>
char strmap[19][19] = { 0 };
void printmap(char strmap[19][19]) {int i = 0;int ia = 0;const char strco[6][4] = { "1;1","3","2;1","6;1","6","5;1" };for (; i < 19; i++) {for (ia = 0; ia < 19; ia++) {printf("\033[3%sm%c\033[0m", strco[rand() % 6], strmap[i][ia]);}printf("|\n");}printf("-------------------@");
}
enum WASD {N,W,A,S,D
};
typedef struct jin {enum WASD w;unsigned char cx:5;unsigned char cy:5;
}jin;
jin jarrp[9999999] = { {W,9,9} };
void del(char strmap[19][19], jin* jp, jin* jpa) {strmap[jp->cx][jp->cy] = ' ';*jp = *(jpa - 1);jpa->w = N;
}
void loop(char strmap[19][19], jin* jp, int isz, int* ipa, int* ipc) {int i = 0;int ia = 0;for (; i < 19; i++) {for (ia = 0; ia < 19; ia++) {if ('#'==strmap[i][ia]) {goto g;}}}
g:if (19 == i && 19 == ia) {memset(jp, 0, isz);strmap[9][10] = '#';//因为往上移动会偏移jp->cx = 9;//因为往上移动会偏移jp->cy = 10;//因为往上移动会偏移jp->w = W;*ipa = 2;*ipc = 0;}
}
int main() {int i = 0;int ib = 0;int ia = 2;int ic = 0;memset(strmap, ' ', sizeof strmap);srand((size_t)time(NULL));jin* jpa = jarrp;for (;;ib++) {jin* jp = jarrp;for (; jp->w; jp++) {;}jpa = jp;for (jp = jarrp; jp->w; jp++) {if (ib % 2) {//动switch (jp->w) {case W:jp->cy--;break;case A:jp->cx--;break;case S:jp->cy++;break;case D:jp->cx++;break;default:break;}}else {if (!(jp->cx) || 18 == jp->cx || !(jp->cy) || 18 == jp->cy) {//尽del(strmap, jp, jpa);}else {//绽if (jp == jpa) {break;}for (i = 0; i < 4; i++) {(jp + i + (ia > 1 ? 1 : ia) + ic)->cx = jp->cx;(jp + i + (ia > 1 ? 1 : ia) + ic)->cy = jp->cy;(jp + i + (ia > 1 ? 1 : ia) + ic)->w = ((enum WASD)(i + 1));}ic += 4; ia--;}}}for (jp = jarrp; jp->w; jp++) {strmap[jp->cx][jp->cy] = '#';}printmap(strmap);Sleep(100);system("cls");loop(strmap, jarrp, sizeof jarrp, &ia, &ic);for (jp = jarrp; jp->w; jp++) {strmap[jp->cx][jp->cy] = ' ';}}return 0;
}//绽/尽 --> 动 --> 绽/尽 --> ...

程序的流程图

break
等待0.1秒,等好之后就清屏
break
break
break
否(break)
是(break)
W == jp->w?
A == jp->w?
S == jp->w?
D == jp->w?
把jp指向的成员变量cx自减1
把jp指向的成员变量cy自减1
把jp指向的成员变量cy自加1
把jp指向的成员变量cx自加1
jp == jpa?
i < 4?
如果ia大于1,就把jp加i加1加ic的结果指向的成员变量cx设为jp指向的成员变量cx的值,否则就把jp加i加ia加ic的结果指向的成员变量cx设为jp指向的成员变量cx的值
如果ia大于1,就把jp加i加1加ic的结果指向的成员变量cy设为jp指向的成员变量cy的值,否则就把jp加i加ia加ic的结果指向的成员变量cy设为jp指向的成员变量cy的值
如果ia大于1,就把jp加i加1加ic的结果指向的成员变量w设为i加1的和,并把这个和转换成枚举WASD的类型,否则把jp加i加ia加ic的结果指向的成员变量也设为i加1的和,并把这个和也转换成枚举WASD的类型
ic自增4
ia自减1
设i为0
i自增1
执行del函数,参数有二维字符数组strmap,结构体jin指针jp和结构体jin指针jpa
开始
把宏_CRT_SECURE_NO_WARNINGS定义为1
导入stdio.h
导入string.h
导入stdlib.h
导入time.h
导入Windows.h
把有19行19列的全局二维字符数组strmap全部初始化为0
定义printmap函数
定义枚举WASD,并把枚举里的N,W,A,S和D分别初始化为0,1,2,3和4
定义结构体jin,成员变量有类型为枚举WASD的w,有5个bit的cx和有5个bit的cy,并把结构体jin中的struct关键字给去掉
把全局结构体jin数组jarrp不完全初始化为{W,9,9}
定义del函数
定义loop函数
定义整型i为0
定义整型ib为0
定义整型ia为2
定义整型ic为0
把二维字符数组strmap里的所有元素全部都设为空格
把随机数的种子设为现在的时间戳
定义结构体jin指针jpa为jarrp
1?
定义结构体jin指针jp为jarrp
jp->w?
把jp向右移动一位
把jpa设为jp
把jp设为jarrp
jp->w?
ib % 2?
把jp设为jarrp
jp->w?
把二维字符数组strmap第jp指向的成员变量cx的值行第jp指向的成员变量cy的值列设为字符“#”
把jp向右移动一位
执行printmaze函数,参数有二维字符数组strmap
执行loop函数,参数有二维字符数组strmap,结构体jin数组jarrp,jarrp的大小和ia,ic的地址
把jp设为jarrp
jp->w?
把二维字符数组strmap第jp指向的成员变量cx的值行第jp指向的成员变量cy的值列设为空格
把jp向右移动一位
ib自增1
!(jp->cx) || 18 == jp->cx || !(jp->cy) || 18 == jp->cy?
程序的概括:绽/尽 --> 动 --> 绽/尽 --> ...
printmap函数
结束
开始
定义整型i为0
定义整型ia为0
把有6行4列的常量二维字符数组strco分别初始化为“1;1”“3”“2;1”“6;1”“6”“5;1”
i < 19?
设ia为0
ia < 19?
输出“\​033[3%sm%c\​033[0m”(“%s”代常量二维字符数组strco的第随机值模6的值项,“%c”则代二维字符数组strmap第i行第ia列的元素)
ia自增1
输出“|\​n”
i自增1
输出“-------------------@”
del函数
结束
开始
把二维字符数组strmap第jp指向的成员变量cx的值行第jp指向的成员变量cy的值列设为空格
把解引用的jp设为解引用之后的某一个结果,其中这个结果为jpa减去1的结果
把jpa指向的成员变量w设为N
loop函数
因为往上移动会偏移
结束
开始
定义整型i为0
定义整型ia为0
i < 19?
设ia为0
ia < 19?
'#'==strmap[i][ia]?
转到g标签
g
19 == i && 19 == ia?
把jp指向的jarrp全部都转为0
把二维字符数组strmap第9行第10列设为字符“#”
把jp指向的成员变量cx设为9
把jp指向的成员变量cy设为10
把jp指向的成员变量w设为W
把解引用的ipa设为2
把解引用的ipc设为0
ia自增1
i自增1

程序的效果

绽尽之“#”

结尾

你觉得我做的这个程序好吗?如果不好,就可以评论一下来告诉我做的这个程序不好的原因吧。


http://www.mrgr.cn/news/206.html

相关文章:

  • 73、 dockerfile
  • eNSP 华为三层交换机配置DHCP
  • 第2章 C语言基础知识
  • Java面试题--JVM大厂篇之实战解析:如何通过CMS GC优化大规模Java应用的响应时间
  • Linux 内核中的定时器详解
  • 在Spring Boot中使用MyBatis实现复杂查询和分页功能
  • Java 多线程练习2 (抽奖比较Runnable写法)
  • Nuxt3【项目配置】nuxt.config.ts
  • C++ //练习 17.18 修改你的程序,忽略包含“ei“但并非拼写错误的单词,如“albeit“和“neighbor“。
  • [Linux] 关于执行文件路径的变量:$PATH
  • 悬浮球 可拖拽-支持鼠标和触控
  • Python做统计图之美
  • 仕考网:考外省公务员可以调回本地吗?
  • 《Unity3D网络游戏实战》通用服务器框架
  • 【AI大模型】解锁AI智能:从注意力机制到Transformer,再到BERT与GPT的较量
  • 全球最强AI程序员 “Genie” 横空出世
  • eNSP 华为ACL配置
  • 初识Linux · 基本指令(1)
  • LLMs之Framework:Hugging Face Accelerate后端框架之FSDP和DeepSpeed的对比与分析
  • 深入理解 GO 语言并发