C语言是真男人就挺过100回合

开头

大家好,我叫这是我58

程序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <time.h>
enum WASD {
	N,
	W,
	A,
	S,
	D,
};
typedef struct Moster {
	enum WASD w;
	int ix;
	int iy;
}Moster;
void printmap(const char strmap[11][11], const int ir) {
	int ia = 0;
	int ib = 0;
	for (ia = 0; ia < 11; ia++) {
		for (ib = 0; ib < 11; ib++) {
			printf("\033[%sm%c\033[0m", '&' == strmap[ia][ib] ? "31;1" : "0", strmap[ia][ib]);
		}
		printf("|\n");
	}
	printf("-----------@\n\033[%sm你已挺过%d回合\033[0m\n", ir>99 ? "32;1" : "0", ir);
}
int main() {
	system("color 07");
	srand((unsigned int)time(NULL));
	int i = 0;
	int im = 0;
	int ims = 0;
	int ir = 0;
	int is = 0;
	char ch = 0;
	char strmap[11][11] = {
		'P',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
		' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
		' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
		' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
		' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
		' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
		' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
		' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
		' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
		' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
		' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '
	};
	char* cp = &strmap[0][0];
	printf("欢迎你来玩这个名叫真男人就挺过100回合的游戏,在这个游戏中,“P”是你,空格是你可以走的地方,而怪物“\033[31;1m&\033[0m”是你要躲避的东西,如果你跟怪物接触,那你就\033[31;1m泗\033[0m了,这就是这个游戏的规则");
	Sleep(4500);
	system("cls");
	const Moster* const m=(Moster*)calloc(1000, sizeof(Moster));
	Moster* mm = m;
	for (; !is; ir++) {
		printmap(strmap, ir);
		Moster* ma = m;
		for (; ma->w; ma++) {
			;
		}
		const Moster* mb = ma;
		ma = m;
		scanf("%c", &ch);
		while ('\n' != getchar()) {
			;
		}
		*cp = ' ';
		switch (ch) {
		case 'w':
			for (i = 0; i < 11; i++) {
				if (cp == &strmap[0][i]) {
					break;
				}
			}
			11 == i && (cp -= 11);
			break;
		case 'a':
			for (i = 0; i < 11; i++) {
				if (cp == &strmap[i][0]) {
					break;
				}
			}
			11 == i && cp--;
			break;
		case 's':
			for (i = 0; i < 11; i++) {
				if (cp == &strmap[10][i]) {
					break;
				}
			}
			11 == i && (cp += 11);
			break;
		case 'd':
			for (i = 0; i < 11; i++) {
				if (cp == &strmap[i][10]) {
					break;
				}
			}
			11 == i && cp++;
			break;
		default:
			break;
		}//P走(可跳)
		*cp = 'P';
		system("cls");
		int ix = (cp - &strmap[0][0]) / 11;
		int iy = (cp - &strmap[0][0]) % 11;
		for (; im && ma->w ;ma++) {
			if (ma->ix == ix && ma->iy == iy) {
				is = 1;
			}
		}//P碰怪?/怪碰P?
		for (ma = m; ma != mb; ma++) {
			strmap[ma->ix][ma->iy] = ' ';
		}
		for (ims = ir / 10 + 1, ma = m; ims; mm++, im++, ims--) {
			do {
				mm->ix = rand() % 11;
				mm->iy = rand() % 11;
			} while (mm->ix == ix && mm->iy == iy);
			mm->w = (enum WASD)(rand() % 4 + 1);
		}//怪生
		for (ma = m; ma->w; ma++) {
			switch (ma->w) {
			case W:
				!(ma->ix) && ma->ix--;
				break;
			case A:
				!(ma->iy) && ma->iy--;
				break;
			case S:
				10 != ma->ix && ma->ix++;
				break;
			case D:
				10 != ma->iy && ma->iy++;
				break;
			default:
				break;
			}
			ma->w = (enum WASD)(rand() % 4 + 1);
		}//怪走&换方向
		for (ma = m; ma->w; ma++) {
			if (ma->ix == ix && ma->iy == iy) {
				is = 1;
			}
		}//P碰怪?/怪碰P?
		for (ma = m; ma != mb; ma++) {
			strmap[ma->ix][ma->iy] = '&';
		}
	}
	system("color 0C");
	printf("恭喜你,你泗了\n");
	free(m);
	return 0;
}//是真男人就挺过100回合:P走(可跳) P碰怪? 怪生(&)走 怪换方向 怪碰P? --> P走

程序的流程图

开始
把宏_CRT_SECURE_NO_WARNINGS定义为1
导入stdio.h
导入strlib.h
导入Windows.h
导入time.h
定义枚举WASD,并把枚举WASD里的N,W,A,S和D分别设为0,1,2,3和4
定义结构体Moster,成员变量有类型为枚举WASD的w,整型ix和整型iy,并把结构体Moster的关键字struct给去掉
定义printmaze函数
把窗口的背景色设为黑色,前景色设为白色
设随机数的种子为现在的时间戳
定义整型i为0
定义整型im为0
定义整型ims为0
定义整型ir为0
定义整型is为0
定义字符ch为0
定义有11行11列的二维字符数组strmap为下面的图片

怪走&换方向
怪生
P碰怪?/怪碰P?
P走(可跳)
等待4.5秒,等待好后就清屏
是(break)
break
清屏
break
是(break)
break
是(break)
break
是(break)
break
否(break)
否(break)
否(break)
否(break)
否(break)
break
break
break
否(break)
否(break)
否(break)
否(break)
否(break)
W == ma->w?
A == ma->w?
!(ma->iy)?
把ma指向的成员变量w设为强制转换成枚举WASD类型的某一个结果,而这个结果就是随机值模4加1的结果
S == ma->w?
10 != ma->ix?
D == ma->w?
10 != ma->iy?
!(ma->ix)?
把ma指向的成员变量iy自减1
把ma指向的成员变量ix自加1
把ma指向的成员变量iy自加1
把ma指向的成员变量ix自减1
把ma向右移动一位
ma->w?
设ma为m
mm->ix == ix && mm->iy == iy?
把mm指向的成员变量w设为强制转换成枚举WASD类型的某一个结果,而这个结果就是随机值模4加1的结果
把mm向右移动一位
im自增1
ims?
ims自减1
把mm指向的成员变量iy设为随机值模11的结果
把mm指向的成员变量ix设为随机值模11的结果
把ma设为m
把ims设为ir除以10加上1的结果
设ma为m
ma->w?
把ma向右移动一位
ma->ix == ix && ma->iy == iy?
设is为1
im && ma->w?
ma->ix == ix && ma->iy == iy?
设is为1
把ma向右移动一位
'a' == ch?
设i为0
i < 11?
cp == &strmap[i][0]?
11 == i?
把cp向左移动11位
's' == ch?
设i为0
i < 11?
cp == &strmap[10][i]?
11 == i?
把cp向右移动11位
'd' == ch?
设i为0
i < 11?
cp == &strmap[i][10]?
11 == i?
把cp向右移动一位
'w' == ch?
设i为0
i < 11?
cp == &strmap[0][i]?
11 == i?
i自增1
i自增1
i自增1
i自增1
定义字符指针cp为二维字符数组strmap第0行第0列的地址
输出“欢迎你来玩这个名叫真男人就挺过100回合的游戏,在这个游戏中,“P”是你,空格是你可以走的地方,而怪物“\​033[31;1m&\​033[0m”是你要躲避的东西,如果你跟怪物接触,那你就\​033[31;1m泗\​033[0m了,这就是这个游戏的规则”
calloc函数为常量结构体Moster指针常量m开辟了的1000个大小为结构体Moster的大小的动态内存
定义结构体Moster指针mm为m
!is?
执行printmap函数,参数有二维字符数组strmap和整型ir
定义结构体Moster指针ma为m
ma->w?
定义常量结构体Moster指针mb为ma
设ma为m
把ch设为你输入的字符
'\​n' != getchar()?
把解引用的cp设为空格
把解引用的cp设为字符“P”
定义整型ix为cp与二维字符数组strmap第0行第0列的地址之间的元素个数除以11的结果
定义整型iy为cp与二维字符数组strmap第0行第0列的地址之间的元素个数模11的结果
设ma为m
ma != mb?
把二维字符数组strmaze第ma指向的成员变量ix的值行第ma指向的成员变量iy的值列的元素设为空格
把ma向右移动一位
设ma为m
ma != mb?
把窗口的背景色设为黑色,前景色设为淡红色
ir自增1
输出“恭喜你,你泗了\​n”
释放动态内存m
结束
是真男人就挺过100回合:P走(可跳) P碰怪? 怪生(&)走 怪换方向 怪碰P? --> P走
printmap函数
结束
开始
定义整型ia为0
定义整型ib为0
设ia为0
ia < 11?
设ib为0
ib < 11?
输出“\​033[%sm%c\​033[0m”(如果字符“&”为二维字符数组strmaze第ia行第ib列的元素,那么“%s”就代“31;1”否则代“0”,而“%c”则代二维字符数组strmaze第ia行第ib列的元素)
ib自增1
输出“|\​n”
ia自增1
输出“-----------@\​n\​033[%sm你已挺过%d回合\​033[0m\​n”(如果ir大于99,那么“%s”就代“32;1”,否则就代“0”,而“%d”则代ir)

程序游玩的效果

是真男人就挺过100回合

结尾

你觉得我这次用C语言编译的游戏好吗?如果不好,就可以评论来告诉我这次用C语言编译的游戏不好的原因吧(玩的时候异常不用管)。

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值