在路上

 找回密码
 立即注册
在路上 站点首页 游戏 查看内容

Roguelike游戏开发文章与资料整合

2018-11-1 23:31| 发布者: zhangjf| 查看: 1359| 评论: 0

摘要: 文/Bozar 从怎样学习算法开始 如果你以前没开发过 Roguelike 游戏,不妨去 RogueBasin 找到你熟悉的语言,阅读教程、使用现有的 API 制作一款最简单的游戏: 玩家人物在长方形房间内移动,抵达向下的楼梯后, ...

文/Bozar

从怎样学习算法开始

如果你以前没开发过 Roguelike 游戏,不妨去 RogueBasin 找到你熟悉的语言,阅读教程、使用现有的 API 制作一款最简单的游戏:

  • 玩家人物在长方形房间内移动,抵达向下的楼梯后,游戏胜利。
  • 楼梯的位置是随机生成的。除此以外,房间里还会生成位置随机、不会移动的敌人。
  • 玩家人物与敌人相邻时受到伤害并减少生命值。如果生命值低于 1,游戏失败。

你也可以参考更复杂一些的 Rune Hunter

接下来要介绍许多 RogueBasin 的文章,但是在此之前,如果你也是野生程序员,没学过数据结构和算法,我保举两本书:

A Common-Sense Guide to Data Structures and Algorithms
Learning JavaScript Data Structures and Algorithms

第一本书从时间复杂度开始,穿插着讲解数据结构和算法,不需要数学知识,知识点都提及了、但是不深入。第二本书更仔细地讲解了怎样用 JavaScript 实现各种数据结构和算法。看完这两本书,欺负小伴侣已经没问题了。

办理时间

Roguelike 开发中常用的工具有五种:办理时间,计算视野,寻路,生成地图和 AI。为了便利阅读,我在每节开头先列出文章,再做解释。

http://www.roguebasin.com/index.php?title=Time_Systems
http://www.roguebasin.com/index.php?title=An_elegant_time-management_system_for_roguelikes

第一篇文章提供了三种时间办理系统,我保举采用第三种能量系统,它的机制如下:

  • 每个人物每轮回复 X 点能量。
  • 轮到该人物时,只要他的能量超过阈值 Y,就能持续行动。
  • 每个行动消耗的能量不同。

那么,怎样轮流“唤醒”玩家人物和怪物,便利地插入新怪物、删除(死亡的)旧怪物?第二篇文章指出,对于使用能量的时间办理系统,其核心是一个双向链表。

计算视野

http://www.roguebasin.com/index. ... rsive_shadowcasting
http://www.roguebasin.com/index. ... fast_simplified_LOS

Shadowcasting(第一篇文章)挺复杂的,不外我知道的三个 API——libtcod(CPP),rot.js(JavaScript)和 RogueSharp(C#)——都能够计算视野。第二篇文章思路很巧妙,哪怕用不上也应该读一读。

寻路

http://www.roguebasin.com/index. ... er_of_Dijkstra_Maps
http://www.roguebasin.com/index. ... tra_Maps_Visualized
https://www.redblobgames.com/pathfinding/tower-defense/

我们可以把地图中的每个方格看作图(Graph)里的节点,以玩家人物所处位置为起点,用 Dijkstra 算法标识表记标帜出每个节点到起点的距离,最后让怪物始终沿着距离减小的标的目的移动——也就是逐步逼近玩家人物。Brogue 开发者最早提出这个想法(第一篇文章),并指出这种方法有多种用途:

  • 让怪物逼近或逃离玩家人物。
  • 让怪物走向特定目标(比如收集宝藏)。
  • 让玩家人物自动探索未知区域。


第二篇文章详细解释了上述思路,第三篇讲解了怎样遍历节点并标识表记标帜距离。

生成地图

生成地板和墙壁:

http://www.roguebasin.com/index. ... om_Cave-Like_Levels
http://www.roguebasin.com/index. ... -Building_Algorithm
http://www.roguebasin.com/index. ... d_Dungeon_Generator

添加地形:

http://www.roguebasin.com/index. ... ably_%22Fun%22_Maps
https://www.rockpapershotgun.com ... es-generate-levels/

滚动地图:

http://www.roguebasin.com/index.php?title=Scrolling_map

粗略地说,生成一层地下城包罗三个步骤,本文只提到前两个:

  • 生成墙壁和地板。
  • 添加不成活动的对象:地形,陷阱,楼梯,宝藏等等。
  • 添加可活动的对象:怪物。

深究下去,每个步骤都有很多门道。我觉得先用粗糙的技术把游戏做出来,然后慢慢打磨,适当控制开发难度比力好。

AI

http://www.roguebasin.com/index.php?title=Roguelike_Intelligence
http://www.roguebasin.com/index. ... nce_-_Stateless_AIs
http://www.roguebasin.com/index. ... d_State_Machine_AIs
http://www.roguebasin.com/index. ... -_Displaced_Actions
http://www.roguebasin.com/index. ... g_State_Machine_AIs
http://www.roguebasin.com/index. ... g_State_Machine_AIs

这是一位作者写的系列文章,介绍了三种 AI:无状态 AI(Stateless AI),状态机 AI(State Machine AI)和演化 AI(Evolving AI)。前两种我理解,第三种实在看不太懂。

最后我想说,构思和技术比如游戏的两条腿,任何一条太超前了都不可。不外话说回来,各种奇思妙想哪怕用不上,看一看也令人愉悦。所以我的下一句话是——人的智慧是没有极限的,迪奥!

via:机核

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2024-11-26 14:48

Copyright 2015-2024 djqfx

返回顶部