Update on 2024.8.8:咕了
Update on 2024.7.7:有了更加友好的界面!
Update on 2024.7.6:按下 Tab 键可以自动追踪主角了!
已知 Bug:
* 进入游戏——Esc 退出游戏——再进入游戏,渲染会出现一些奇奇怪怪的 Bug……(包括但不限于:神秘闪屏、影分身术、人格分裂、多重地牢……) 如果有好人可以帮帮我。
本小游戏是 C++编写而成的 Roguelike 命令行游戏!由于用到了大量 Windows 接口,只支持在 Windows 上编译运行!
确保你的编译器支持 C++11。也许你需要在编译选项中添加 -std=c++11。使用其它版本编译产生的 Bug,概不负责。
由于代码较长,代码放在洛谷云剪切板了。
本作(目前)亮点:
1. 使用 fwrite 和无闪清屏技术,带来更流畅的帧率体验。
2. 摒弃了 windows.h 自带的 Sleep 低效处理键盘事件,改为使用 std::chromo 中的时间段,高灵敏度处理键盘事件,同时不会误触。
3.(最重要的)极度复杂而精致的地牢!使用精心设计的,高效的地牢随机生成算法,生成不重样的复杂地牢。算法大致流程放在了最后。
游戏操作:
目前只有一个主角 P,按 WASD 移动,Tab 键启动追踪……# 是墙过不去,. 是地面可以通行。
界面预览:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
地牢生成算法:
函数原型:
(即源码中 Generator 命名空间下的 Generator 函数)
流程:
1. 准备一张大小为 n×mn\times mn×m 的地图。
2. 随机抽取 times 个矩形房间。大小最小为 ROOMMINWIDTH×\times×ROOMMINHEIGHT,最大为ROOMMAXWIDTH×\times×ROOMMAXHEIGHT。如果房间坐标不越界且不与地图上已有的房间重叠,则将此房间加入地图。
3. 使用广搜将剩余不属于房间的格子连为走廊。
4. 搜索并记录房间与走廊、房间与房间之间的墙。
5. 将每一个房间或走廊抽象为一个点,之间的墙抽象为无向边,于是构成了一张图。随机选择一个点,然后随机选择一条这个点有关的边。如果并查集查询边的两个顶点不连通,则将这条边与对应的墙打通,并并查集合并这两个顶点,再将这个新点加入队列。否则删去这两个点之间的所有边。重复执行以上过程直到队列为空。删边时,对应的墙有 UnionChance 的概率被打通。
6.返回地图。
我使用的参数:
Generator(101,41,4,4,10,10,2000,0.02)
可以自己在源代码里调整,但是 nnn 和 mmm 必须都是奇数,并且 UnionChance 必须小于 111,而且不要太大(最好小于 0.20.20.2),否则生成的地牢像碎掉了一样。