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

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设为你输入的字符
'
' != 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语言编译的游戏不好的原因吧(玩的时候异常不用管)。


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

相关文章:

  • 产品经理基础知识
  • 华为 OLT 添加 ONU 配置 (SNMP管理模式)
  • java之责任链模式
  • Qt框架学习03——对象树模型
  • ETAS工具链自动化实战指南<一>
  • 网站自动化锚文本的实现逻辑
  • 【C++ 面试 - 面向对象】每日 3 题(一)
  • 【ubuntu24.04】错误:8llvm 由于没有公钥:无法验证下列签名 NO_PUBKEY
  • 软考软件设计师-备考须知
  • 恒创科技:云服务器的备份和快照哪个更好?
  • Python抓取远程图片到本地
  • 05--kubernetes组件与安装
  • python爬虫代理IP实战
  • 安卓中携程和线程的区别。携程是指什么?
  • 余弦相似度详解及应用案例
  • DNS域名解析服务
  • 基于Spring boot的名城小区物业管理系统
  • 物联网中的物模型用大白话举例子一句话讲清楚,作用,原理。这东西我认为不咋好用,不过多少有点用。
  • 引领能源新时代:打造智能化加油系统新纪元
  • 计算机网络——TCP协议与UDP协议详解(上)