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

程序的效果

绽尽之“#”

结尾

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值