请选择 进入手机版 | 继续访问电脑版
查看: 2499|回复: 10

[程序基础] Re:0 从 0 开始打造你的 Roguelike 游戏

[复制链接]

1

主题

2

帖子

2

积分

精华
0
在线时间
32 小时
发表于 2020-5-11 08:35:07 | 显示全部楼层 |阅读模式
本帖最后由 岛娘岛娘岛 于 2020-5-11 12:13 编辑

大家好,我是岛娘,人在纽约,落地成盒,最近躲在家里写了一个 Roguelike 小游戏,
由于 GC 的底层使用的是 TypeScript 作为开发语言,所以打算最近用 TypeScript 进行重构,在此之前,打算先把目前学到的开发知识做一番整理。
主要参考的是 LazyDev 的 Pico8 从 0 开始手撸 Roguelike 系列 (顺带一提,他的这个游戏 最近在 itch 上发布了,东西是个好东西,就是教程事无巨细实在太长了!)

以及 rot.js 的开发者文档 —— 一个 TypeScript 实现的 Roguelike Toolkit,包含了地牢生成(Percedure Generation),视野算法(Field of Vision),寻路算法(Path Finding)等大部分 Roguelike 游戏中所需要的常见模块,可以帮助我们一出生就是 Level 5!

本篇章节分为七个部分:
Lv0:随机生成一个地牢迷宫
Lv1:增加玩家可以控制的主角
Lv2:增加摄像机和地图卷动,支持更大规模的地图
Lv3:增加主角的视野
Lv4:增加怪物和战斗
Lv5:给怪物增加 AI
Lv6:增加道具
Lv7:  ???
下面就让我们开始吧!
完整的代码仓库在这儿:
https://github.com/lychees/Re-0-Make-your-own-Roguelike-Game-with-TypeScript

Lv:0 随机生成一个地牢迷宫




第 0 关,主要是架设开发环境,跑完之后每次打开浏览器,会随机生成一个地牢。
方法是使用 rot.js 自带的 ROT.Map.Digger 方法,我们首先实现 Game 类。
注意这个 class 类应该是一个单例(Singleton),用来跑游戏的主循环(Main Loop),不过一开始先这样就好了。

https://github.com/lychees/Re-0-Make-your-own-Roguelike-Game-with-TypeScript/blob/master/src/level/lv0.ts#L49-L63


紧接着我们实现 Map 类。

https://github.com/lychees/Re-0-Make-your-own-Roguelike-Game-with-TypeScript/blob/master/src/level/lv0.ts#L6-L47

TypeScript 中因为有类型推断,所以当我们我们把鼠标移动上去时可以看到 ROT.Map.Digger 需要传入什么参数,前面肯定是迷宫的长和宽了。
至于后面是什么,可以按住 Ctrl 点进去一探究竟,暂时我们还用不到。



通过查阅相关文档,http://ondras.github.io/rot.js/manual/#map/maze
我们知道,在 ROT.Map 类中,目前包含三类迷宫生成算法,包括完美迷宫(Maze,a.k.a. 最小生成树),元胞自动机,和刚才的原版 Rogue 算法。
(目前还流行使用波函数坍塌算法生成自相似的迷宫,不过需要我们以后自己实现!)

Lv:1 增加玩家可以控制的主角
迷宫里怎么能没有活得东西,先让我们添加主角 —— Player 类。
https://github.com/lychees/Re-0-Make-your-own-Roguelike-Game-with-TypeScript/blob/master/src/level/lv1.ts#L11-L25
注意,在古典主义 roguelike 游戏中,我们希望玩家和怪物可以遵循一套相同的规则,因而增加更多的抽象在这里是有益的,不过我们后面增加怪物的时候再加。

我们现在需要给 Player 找一个空的位置,刚才我们已经记录了所有空的格子,现在就可以派上用场了。
rot.js 里也帮我们预制了一个随机数发生器,让我们使用它!

https://github.com/lychees/Re-0-Make-your-own-Roguelike-Game-with-TypeScript/blob/master/src/level/lv1.ts#L6-L9

有了主角之后,接下来我们需要让主角可以动起来,大多数 roguelike 游戏中,都是回合制,控制角色的行动顺序,在 rot.js 是用 engine 和 schedule 类实现的。
https://github.com/lychees/Re-0-Make-your-own-Roguelike-Game-with-TypeScript/blob/master/src/level/lv1.ts#L110-L113

根据 schedule 所选的不同,可以是每个单位轮流行动,也可以是根据速度和行动力控制行动顺序,也可以是更复杂甚至自定义的调度规则,这里我们先使用 simple 的轮流行动即可。
接下来我们让主角可以相应键盘事件。
https://github.com/lychees/Re-0-Make-your-own-Roguelike-Game-with-TypeScript/blob/master/src/level/lv1.ts#L25-L53

注意这里我们使用了 8 个方向的拓扑规则,因而你也可以使用小键盘让主角斜着移动。
注意这里我们并没有刷新整张地图,而是只修改主角移动前后的局部,这可以节省绘图的时间,在一些 FTS 游戏里是常用的技巧(参考 Quake 引擎)。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

38

主题

152

帖子

162

积分

BlackWhite

精华
2
在线时间
2114 小时

GC众筹纪念奖章月散散醋虾虾GC2021牛年拜年庆活动奖章

发表于 2020-5-11 08:41:19 | 显示全部楼层
啊这 大佬
为美好的世界献上祝福

13

主题

54

帖子

69

积分

GC居民

精华
3
在线时间
174 小时

GC众筹纪念奖章月散散醋虾虾GC2021牛年拜年庆活动奖章

发表于 2020-5-11 08:46:30 | 显示全部楼层
支持!

0

主题

8

帖子

8

积分

精华
0
在线时间
12 小时

GC众筹纪念奖章

发表于 2020-5-11 08:52:18 | 显示全部楼层
群除我佬
みんな犠牲者。

12

主题

88

帖子

88

积分

百无一用是幽斗

精华
0
在线时间
95 小时

GC众筹纪念奖章月散散醋虾虾GC2021牛年拜年庆活动奖章

发表于 2020-5-11 10:00:43 | 显示全部楼层
永远滴神+1
陌岭之星社团持续招人中
欢迎感兴趣的大佬与萌新们加入!
联系方式:2829404743

21

主题

98

帖子

103

积分

七星瓢虫

精华
1
在线时间
281 小时

月散散醋虾虾

发表于 2020-5-11 10:22:13 | 显示全部楼层
一起来监督岛娘更新

5

主题

48

帖子

63

积分

码字废人腊肉

精华
3
在线时间
91 小时

月散散醋虾虾GC众筹纪念奖章

发表于 2020-5-11 16:05:23 | 显示全部楼层
大佬,是大佬!
一块陈年腊肉

1

主题

12

帖子

12

积分

《幸福乡村2035》企划

精华
0
在线时间
13 小时

GC众筹纪念奖章

发表于 2021-3-10 04:33:29 | 显示全部楼层
确认过是眼神,是大佬~
AVG游戏《幸福乡村2035》玩家交流qq群:1101072521
欢迎加入~

3

主题

12

帖子

12

积分

精华
0
在线时间
5 小时
发表于 2021-4-23 22:39:26 | 显示全部楼层
也太厉害了
(砸吧嘴)
真后悔大学没学计算机。。

3

主题

15

帖子

15

积分

精华
0
在线时间
34 小时
发表于 2021-4-28 11:04:14 | 显示全部楼层
mark一波
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注我们

上海神炎网络科技有限公司

邮箱:[email protected]

游戏创作综合交流QQ群:656319312

素材创作交流QQ群:347830194

GameCreator 云平台

沪网文[2018]8510-515号

沪ICP备18006881号

沪ICP证B2-20200653号

手机版|小黑屋|GameCreator

GMT+8, 2021-9-23 11:16 , Processed in 0.177906 second(s), 24 queries .

快速回复 返回顶部 返回列表