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

C++黑暗迷宫

目录

  • 开头
  • 程序
  • 程序的流程图
  • 程序游玩的效果
  • 下一篇博客要说的东西

开头

大家好,我叫这是我58。

程序

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
struct near {
	int i;
	int ia;
	int ix;
	int iy;
	int iwalk;
};
void printnear(const char* const cp, char ca, near* n) {
	int i = 0;
	int arr[9] = { -33,-32,-31,-1,0,1,31,32,33 };
	for (; i < 9; i++) {
		cout << "\033[" << ('G' == cp[arr[i]] ? "32;1m" : 4 == i && '0' == ca && (n->i == n->ix || n->ia == n->iy) ? "32m" : "0m") << cp[arr[i]] << "\033[0m" << (i % 3 - 2 ? "" : "#\n");
	}
	cout << "####" << endl << "你走了\033[" << ('0' == ca ? "32;1m" : "31;1m") << n->iwalk << "\033[0m步" << endl;
}
int main() {
	srand((unsigned int)time(NULL));
	near n = { rand() % 30 + 1, rand() % 30 + 1 };
	char strmaze[32][32] = {
		'@','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','@',
		'|',' ',' ',' ',' ','*',' ',' ','*',' ',' ',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ',' ','*',' ',' ',' ',' ',' ','|',
		'|','*',' ','*',' ','*',' ',' ','*',' ',' ','*',' ','*','*',' ','*','*',' ',' ',' ',' ',' ','*',' ','*',' ','*',' ',' ',' ','|',
		'|',' ',' ',' ',' ','*','*',' ',' ',' ','*',' ',' ','*',' ','*',' ',' ','*',' ','*',' ',' ','*',' ',' ',' ',' ',' ','*',' ','|',
		'|',' ','*',' ','*','*',' ',' ','*','*','*',' ',' ','*',' ',' ',' ',' ','*','*',' ',' ','*',' ','*',' ','*',' ','*',' ',' ','|',
		'|',' ',' ',' ',' ','*',' ','*',' ',' ',' ',' ',' ',' ',' ',' ','*',' ','*',' ',' ','*','*',' ','*',' ',' ','*',' ',' ','*','|',
		'|',' ','*',' ',' ','*','*',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','*',' ',' ','*',' ',' ',' ',' ',' ',' ',' ',' ','|',
		'|','*','*','*',' ',' ',' ','*',' ',' ','*','*','*',' ','*',' ',' ','*',' ','*',' ','*',' ',' ',' ',' ',' ',' ','*','*',' ','|',
		'|',' ','*',' ',' ','*',' ',' ',' ',' ','*',' ','*',' ','*','*',' ','*',' ','*',' ','*',' ',' ','*','*',' ','*',' ',' ','*','|',
		'|',' ','*','*','*','*',' ',' ',' ','*',' ',' ',' ','*',' ',' ','*',' ',' ',' ','*',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','|',
		'|',' ',' ','*',' ',' ',' ','*','*',' ',' ',' ','*',' ',' ','*','*',' ','*',' ',' ',' ','*',' ',' ',' ','*',' ',' ',' ',' ','|',
		'|','*',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ','*',' ',' ',' ','*','*',' ',' ',' ',' ','*',' ',' ','*',' ',' ',' ','|',
		'|',' ',' ',' ',' ',' ','*',' ','*',' ','*',' ',' ',' ',' ',' ',' ','*',' ','*',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ','|',
		'|',' ','*',' ',' ','*',' ',' ','*',' ','*',' ','*',' ','*',' ','*',' ',' ','*',' ',' ','*',' ',' ',' ',' ',' ','*',' ',' ','|',
		'|',' ',' ','*',' ','*',' ',' ','*',' ',' ',' ','*','*','*',' ',' ',' ',' ',' ',' ','*','*','*',' ','*',' ','*',' ',' ','*','|',
		'|','*',' ','*',' ',' ','*',' ','*',' ','*',' ',' ','*',' ','*',' ','*',' ',' ','*','*',' ',' ',' ',' ',' ',' ','*',' ',' ','|',
		'|',' ',' ','*',' ',' ',' ','*','*',' ',' ',' ','*',' ',' ',' ',' ',' ','*',' ',' ','*','*','*',' ',' ',' ',' ',' ',' ',' ','|',
		'|',' ',' ','*',' ',' ',' ',' ','*',' ',' ',' ',' ','*',' ',' ',' ',' ',' ','*',' ',' ',' ','*',' ',' ','*',' ',' ',' ','*','|',
		'|',' ',' ','*','*',' ','*','*',' ','*',' ',' ',' ',' ','*',' ','*',' ',' ','*','*','*','*','*',' ','*','*','*','*',' ',' ','|',
		'|',' ',' ','*',' ','*',' ',' ',' ',' ','*',' ',' ',' ',' ','*','*',' ',' ','*',' ','*',' ',' ',' ','*',' ',' ','*','*',' ','|',
		'|',' ','*',' ',' ',' ','*',' ',' ',' ','*',' ','*',' ',' ',' ',' ','*',' ',' ',' ','*',' ',' ','*',' ',' ',' ',' ',' ',' ','|',
		'|',' ',' ',' ',' ',' ',' ','*',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ','*',' ',' ',' ',' ','*',' ','*',' ',' ',' ','|',
		'|','*',' ','*',' ',' ',' ','*','*',' ','*',' ','*',' ','*',' ',' ',' ',' ','*',' ',' ','*',' ','*',' ','*',' ',' ',' ','*','|',
		'|',' ','*',' ',' ',' ','*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ','*',' ',' ',' ',' ',' ',' ',' ','*',' ','*',' ','|',
		'|',' ',' ','*',' ',' ','*',' ',' ',' ',' ','*',' ',' ',' ','*',' ',' ',' ',' ','*',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','|',
		'|','*',' ',' ',' ',' ',' ','*',' ','*','*',' ',' ','*',' ',' ','*','*',' ',' ',' ','*',' ','*',' ','*',' ','*',' ','*',' ','|',
		'|',' ','*',' ','*',' ','*',' ','*',' ','*',' ','*',' ',' ','*',' ',' ','*',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','*',' ','|',
		'|',' ','*',' ',' ','*',' ',' ','*',' ',' ',' ',' ',' ','*',' ','*',' ',' ',' ','*',' ',' ',' ','*',' ',' ',' ','*',' ',' ','|',
		'|',' ','*','*',' ',' ',' ',' ','*',' ','*',' ',' ','*',' ',' ',' ','*','*','*',' ',' ','*',' ','*',' ','*',' ',' ','*',' ','|',
		'|',' ',' ',' ',' ',' ',' ','*',' ',' ',' ','*',' ',' ','*','*',' ',' ',' ',' ',' ','*',' ',' ','*','*',' ','*',' ',' ',' ','|',
		'|','*',' ','*',' ',' ','*',' ',' ',' ',' ',' ',' ',' ','*',' ',' ',' ','*',' ',' ',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','|',
		'@','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','@',
	};
	char ca = 0;
	strmaze[n.i][n.ia] = 'P';
	char* cp = &strmaze[n.i][n.ia];
	while ('P' == strmaze[n.i = rand() % 30 + 1][n.ia = rand() % 30 + 1]) {
		;
	}
	strmaze[n.i][n.ia] = 'G';
	char ch = 0;
	cout << "欢迎你来玩这个\033[7m黑暗\033[0m迷宫,在这个迷宫中,“P”是你,“*”是墙,你不能走到这,空格是你可以走的地方,“w”上移,“a”左移,“s”下移,“d”右移,而\033[32;1m“G”\033[0m是\033[32;1m终点\033[0m,走到这能让你\033[32;1m胜利\033[0m,并且,\033[4m在这个迷宫中你的出生点与\033[32;1m“G”终点\033[0;4m是随机指定的\033[0m,\033[4m而你的可视范围是以你为中心点的3*3的方块\033[0m。其中,这迷宫游戏有\033[32;1m两个\033[31m模式\033[0m,\033[32;1m一个模式是简单模式\033[0m,以\033[32;1m这个模式开始游戏就会给你提供一些\033[4m增益\033[0m:如果\033[32;1m终点“G”\033[0m的X坐标与你的X坐标相等,或者\033[32;1m终点“G”\033[0m的Y坐标与你的Y坐标相等,那么你就会变\033[32m绿\033[0m,\033[31m另一个模式是困难模式,\033[4m没有任何的增益,全靠找。\033[0m这就是这迷宫的规则,你听明白了吗?" << endl << endl << "**************" << endl << "* \033[32;1m0.简单模式\033[0m *" << endl << "* \033[31m1.困难模式\033[0m *" << endl << "**************" << endl;
	cin >> ca;
	while ('0' != ca && '1' != ca) {
		cout << "\033[31;1m输入错误,请重新输入 ->\033[0m";
		rewind(stdin);
		cin >> ca;
	}
	system("cls");
	while ('G' == strmaze[n.i][n.ia]) {
		n.ix = (cp - &strmaze[0][0]) / 32;
		n.iy = (cp - &strmaze[0][0]) % 32;
		printnear(cp, ca, &n);
		cin >> ch;
		rewind(stdin);
		*cp = ' ';
		switch (ch) {
		case 'w':
			1 != n.ix && '*' != *(cp - 32) && (cp -= 32, n.iwalk++);
			break;
		case 'a':
			1 != n.iy && '*' != *(cp - 1) && (cp--, n.iwalk++);
			break;
		case 's':
			30 != n.ix && '*' != *(cp + 32) && (cp += 32, n.iwalk++);
			break;
		case 'd':
			30 != n.iy && '*' != *(cp + 1) && (cp++, n.iwalk++);
			break;
		default:
			break;
		}
		*cp = 'P';
		system("cls");
	}
	system("color 0A");
	cout << "恭喜你,走了\033[3" << ('0' == ca ? "2m" : "3;1m") << n.iwalk << "\033[0;32;1m步就赢了" << endl;
	return 0;
}

程序的流程图

开始
导入io流
导入cstdlib头文件
导入ctime头文件
定义near结构体,成员变量有整型i,整型ia,整型ix,整型iy和整型iwalk
定义printnexto函数
把随机数的种子设为现在的时间戳
把结构体near变量n的前两个成员变量分别初始化为随机数模30加1的结果和另一个随机数模30加1的结果
把有32行32列的二维字符数组strmaze初始化为下面的图片

否(清屏)
break
清屏
break
break
break
否(break)
否(break)
否(break)
否(break)
否(break)
定义字符ca为0
把二维字符数组strmaze第结构体near变量n的成员变量i的值行第结构体near变量n的成员变量ia的值列的元素设为字符“P”
定义字符指针cp二维字符数组strmaze第结构体near变量n的成员变量i的值行第结构体near变量n的成员变量ia的值列的元素的地址
'P' == strmaze[n.i = rand() % 30 + 1][n.ia = rand() % 30 + 1]?
定义字符ch为0
输出“欢迎你来玩这个\​033[7m黑暗\​033[0m迷宫,在这个迷宫中,“P”是你,“*”是墙,你不能走到这,空格是你可以走的地方,“w”上移,“a”左移,“s”下移,“d”右移,而\​033[32;1m“G”\​033[0m是\​033[32;1m终点\​033[0m,走到这能让你\​033[32;1m胜利\​033[0m,并且,\​033[4m在这个迷宫中你的出生点与\​033[32;1m“G”终点\​033[0;4m是随机指定的\​033[0m,\​033[4m而你的可视范围是以你为中心点的3*3的方块\​033[0m。其中,这迷宫游戏有\​033[32;1m两个\​033[31m模式\​033[0m,\​033[32;1m一个模式是简单模式\​033[0m,以\​033[32;1m这个模式开始游戏就会给你提供一些\​033[4m增益\​033[0m:如果\​033[32;1m终点“G”\​033[0m的X坐标与你的X坐标相等,或者\​033[32;1m终点“G”\​033[0m的Y坐标与你的Y坐标相等,那么你就会变\​033[32m绿\​033[0m,\​033[31m另一个模式是困难模式,\​033[4m没有任何的增益,全靠找。\​033[0m这就是这迷宫的规则,你听明白了吗?\​n\​n**************\​n* \​033[32;1m0.简单模式\​033[0m *\​n* \​033[31m1.困难模式\​033[0m *\​n**************\​n”
把ca设为你输入的字符
'0' != ca && '1' != ca?
输出“\​033[31;1m输入错误,请重新输入 ->\​033[0m”
清空缓冲区
把ca设为你输入的字符
'G' == strmaze[n.i][n.ia]?
把结构体near变量n的成员变量ix设为cp与二维字符数组strmaze第0行第0列的地址之间的元素个数除以32的结果
把结构体near变量n的成员变量iy设为cp与二维字符数组strmaze第0行第0列的地址之间的元素个数模上32的结果
执行printnear函数,参数有字符指针cp,字符ca和结构体near变量n的地址
把ch设为你输入的字符
清空缓冲区
把解引用的cp设为空格
'w' == ch?
1 != n.ix && '*' != *(cp - 32)?
把cp向左移动32位
把结构体near变量n的成员变量iwalk自增1
把解引用的cp设为字符“P”
把背景色设为黑色,前景色设为淡绿色
前面输出“恭喜你,走了\​033[3”,如果字符“0”为ca,那么中间就输出“2m”,否则就输出“3;1m”,后面则输出结构体near变量n的成员变量iwalk和“\​033[0;32;1m步就赢了\​n”
结束
'a' == ch?
1 != n.iy && '*' != *(cp - 1)?
把cp向左移动一位
把结构体near变量n的成员变量iwalk自增1
's' == ch?
30 != n.ix && '*' != *(cp + 32)?
把cp向右移动32位
把结构体near变量n的成员变量iwalk自增1
'd' == ch?
30 != n.iy && '*' != *(cp + 1)?
把cp向右移动一位
把结构体near变量n的成员变量iwalk自增1
printnear函数
结束
开始
定义整型i为0
把有9个元素的整型数组arr里的元素分别初始化为-33,-32,-31,-1,0,1,31,32和33
i < 9?
前面输出“\​033[”,如果字符“G”为解引用之后的cp向右移动arr的第i项的值位的结果,那么中间就输出“32;1m”,否则如果结构体near指针n指向的成员变量i等于结构体near指针n指向的成员变量ix,或者结构体near指针n指向的成员变量ia等于结构体near指针n指向的成员变量iy,并且4为i,字符“0”为ca,那么中间就输出“32m”,否则就输出“0m”,后面则输出解引用之后的cp向右移动arr的第i项的值位的结果和“\​033[0m”,如果i模3减去2的结果不为0,那么最后就输出空字符串,否则最后就输出“#\​n”
i自增1
前面输出“####\​n你走了\​033[”,如果字符“0”为ca,那么中间就输出“32;1m”,否则中间就输出“31;1m”,后面则输出结构体near指针n指向的成员变量iwalk和“\​033[0m步\​n”

程序游玩的效果

黑暗迷宫

下一篇博客要说的东西

C++平台跳跃游戏

在这里插入图片描述


http://www.kler.cn/news/324207.html

相关文章:

  • Zabbix Agent 监控 MySQL 进程状态
  • 关于frp Web界面-----frp Server Dashboard 和 frp Client Admin UI
  • 笔记本电脑怎样分区才合理?如何对笔记本分区恢复数据
  • 力扣最热一百题——颜色分类
  • Sharp.js:简单而又实用的图像处理库
  • JMeter与大模型融合应用之JMeter菜单栏中切入大模型交互详解
  • RTA-OS Port Guide学习(三)-基于S32K324 OS
  • php学习基础语法学习
  • 玩转图像处理:Python与OpenCV实现高效绿幕背景替换
  • 基于监控易,了解IT设备的监控策略
  • Linux基础入门 --12 DAY(SHELL脚本编程基础)
  • 力扣 简单 112.路径总和
  • 小徐影院:Spring Boot驱动的影院管理系统
  • 57 长短期记忆网络(LSTM)_by《李沐:动手学深度学习v2》pytorch版
  • ansible 配置
  • Acwing 质数
  • AAMAS 24 | 基于深度强化学习的多智能体和自适应框架用于动态组合风险管理
  • 【HTML5】html5开篇基础(4)
  • 使用transformers调用Qwen2-VL-7B-Instruct
  • 【算法题】221. 最大正方形-力扣(LeetCode)
  • 【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL66
  • 负载均衡--会话保持失败原因及解决方案(五)
  • 鸿蒙harmonyos next纯flutter开发环境搭建
  • HTML基础用法介绍二
  • Goland使用SSH远程Linux进行断点调试 (兼容私有库)
  • Leetcode基础算法篇|202409(4)贪心算法
  • MySQL数据库修改authentication_string字段为显示密码后无法登录
  • oracle 如何判断当前时间在27号到当月月底
  • [JavaEE] HTTP/HTTPS
  • 2024中国新能源汽车零部件交易会,开源网安展示了什么?