![]() |
![]() ![]() |
![]() |
|
2018-08-28, 22:20
Post
#1
|
|||
GEEKs will Eventually Evolve into Kryptonians. | All my jokes are cries for help. ![]()
Group: Avatar Posts: 1156 Joined: 2008-05-18 Member No.: 21346 ![]() |
## 怎样学习算法 如果你以前没开发过 Roguelike 游戏,不妨去 RogueBasin 找到[你熟悉的语言](http://www.roguebasin.com/index.php?title=Articles#Programming_languages),阅读教程、使用现有的 API 制作一款最简单的游戏: * 玩家人物在长方形房间内移动,抵达向下的楼梯后,游戏胜利。 * 楼梯的位置是随机生成的。除此以外,房间里还会生成位置随机、不会移动的敌人。 * 玩家人物与敌人相邻时受到伤害并减少生命值。如果生命值低于 1,游戏失败。 你也可以参考更复杂一些的 [Rune Hunter](https://github.com/Bozar/runeHunter)。 接下来要介绍许多 RogueBasin 的文章,但是在此之前,如果你也是野生程序员,没学过数据结构和算法,我推荐两本书: * [A Common-Sense Guide to Data Structures and Algorithms](https://www.amazon.cn/dp/B075FZ9P7N/) * [Learning JavaScript Data Structures and Algorithms](https://www.amazon.cn/dp/B077NB5H6Y/) 第一本书从时间复杂度开始,穿插着讲解数据结构和算法,不需要数学知识,知识点都提及了、但是不深入。第二本书更仔细地讲解了怎样用 JavaScript 实现各种数据结构和算法。看完这两本书,欺负小朋友已经没问题了。 » Click to show Spoiler - click again to hide... « ## 管理时间 Roguelike 开发中常用的工具有五种:管理时间,计算视野,寻路,生成地图和 AI。为了方便阅读,我在每节开头先列出文章,再做解释。 * http://www.roguebasin.com/index.php?title=Time_Systems * http://www.roguebasin.com/index.php?title=..._for_roguelikes 第一篇文章提供了三种时间管理系统,我推荐采用第三种能量系统,它的机制如下: * 每个人物每轮回复 X 点能量。 * 轮到该人物时,只要他的能量超过阈值 Y,就能持续行动。 * 每个行动消耗的能量不同。 那么,怎样轮流“唤醒”玩家人物和怪物,方便地插入新怪物、删除(死亡的)旧怪物?第二篇文章指出,对于使用能量的时间管理系统,其核心是一个双向链表。 ## 计算视野 * http://www.roguebasin.com/index.php?title=...e_shadowcasting * http://www.roguebasin.com/index.php?title=..._simplified_LOS Shadowcasting(第一篇文章)挺复杂的,不过我知道的三个 API——libtcod(CPP),rot.js(JavaScript)和 RogueSharp(C#)——都能够计算视野。第二篇文章思路很巧妙,哪怕用不上也应该读一读。 ## 寻路 * http://www.roguebasin.com/index.php?title=...f_Dijkstra_Maps * http://www.roguebasin.com/index.php?title=...Maps_Visualized * https://www.redblobgames.com/pathfinding/tower-defense/ 我们可以把地图中的每个方格看作图(Graph)里的节点,以玩家人物所处位置为起点,用 Dijkstra 算法标记出每个节点到起点的距离,最后让怪物始终沿着距离减小的方向移动——也就是逐步逼近玩家人物。Brogue 开发者最早提出这个想法(第一篇文章),并指出这种方法有多种用途: * 让怪物逼近或逃离玩家人物。 * 让怪物走向特定目标(比如收集宝藏)。 * 让玩家人物自动探索未知区域。 第二篇文章详细解释了上述思路,第三篇讲解了怎样遍历节点并标记距离。 ## 生成地图 生成地板和墙壁: * http://www.roguebasin.com/index.php?title=...ave-Like_Levels * http://www.roguebasin.com/index.php?title=...lding_Algorithm * http://www.roguebasin.com/index.php?title=...ngeon_Generator 添加地形: * http://www.roguebasin.com/index.php?title=..._%22Fun%22_Maps * https://www.rockpapershotgun.com/2015/07/28...enerate-levels/ 滚动地图: * http://www.roguebasin.com/index.php?title=Scrolling_map 粗略地说,生成一层地下城包括三个步骤,本文只提到前两个: * 生成墙壁和地板。 * 添加不可活动的对象:地形,陷阱,楼梯,宝藏等等。 * 添加可活动的对象:怪物。 深究下去,每个步骤都有很多门道。我觉得先用粗糙的技术把游戏做出来,然后慢慢打磨,适当控制开发难度比较好。 » Click to show Spoiler - click again to hide... « ## AI * http://www.roguebasin.com/index.php?title=...ke_Intelligence * http://www.roguebasin.com/index.php?title=...-_Stateless_AIs * http://www.roguebasin.com/index.php?title=...ate_Machine_AIs * http://www.roguebasin.com/index.php?title=...splaced_Actions * http://www.roguebasin.com/index.php?title=...ate_Machine_AIs * http://www.roguebasin.com/index.php?title=...ate_Machine_AIs 这是一位作者写的系列文章,介绍了三种 AI:无状态 AI(Stateless AI),状态机 AI(State Machine AI)和演化 AI(Evolving AI)。前两种我理解,第三种实在看不太懂。 最后我想说,构思和技术好比游戏的两条腿,任何一条太超前了都不行。不过话说回来,各种奇思妙想哪怕用不上,看一看也令人愉悦。所以我的下一句话是——人的智慧是没有极限的,迪奥! » Click to show Spoiler - click again to hide... « |
|||
|
2018-08-30, 10:26
Post
#2
|
|||
主物质者 ![]()
Group: Primer Posts: 3 Joined: 2018-08-30 Member No.: 76257 ![]() |
(IMG:style_emoticons/default/biggrin.gif) 曾经看过大佬的Caves of Qud的介绍从此入坑,没想到大佬还对游戏开发有所涉猎~
|
|||
|
2018-08-31, 17:59
Post
#3
|
|||
主物质者 ![]()
Group: Primer Posts: 1 Joined: 2014-02-13 Member No.: 58504 ![]() |
正好最近在学算法,很不错的资料,感谢大佬分享 (IMG:style_emoticons/default/biggrin.gif)
|
|||
![]() ![]() ![]() |
Copyright © 2005-2024 The Ring of Wonder | Time is now: 2024-06-30, 23:22 |