这是一款旨在以有趣的互动方式教授 Ruby 语言和人工智能的游戏。
你扮演一名勇士,爬上一座高塔,到达顶层的珍贵红宝石。在每一层你都需要编写一个 Ruby 脚本来指示战士与敌人战斗、营救俘虏并到达楼梯。您对每层楼的内容有所了解,但您永远无法确定会发生什么。你必须预先给战士足够的人工智能来找到他自己的方式。
注意:播放器目录结构在 2009 年 7 月 18 日发生了变化。如果您有一个使用“level-00*”结构的旧配置文件,请将最后一层的内容移动到父目录中。
首先安装Ruby。
宝石 安装 rubywarrior
然后运行“rubywarrior”命令来设置你的配置文件。这将在您当前的位置创建一个 rubywarrior 目录,您将在您的个人资料目录中找到一个 player.rb 文件,其中包含:
class Player def play_turn ( warrior ) # 你的代码在这里 end end
您的目标是使用命令填充此“play_turn”方法以指示战士做什么。在每个级别,您的能力都会随着难度而增长。请参阅您的个人资料目录中的自述文件,详细了解您的战士在当前级别可用的能力。
这是一个简单的例子,它会指示战士如果感觉到敌人就攻击,否则他会向前走。
[hidecontent type="logged" desc="隐藏内容:登录后可查看"]
class Player
def play_turn ( warrior ) 如果 warrior。感觉。敌人? 战士。攻击! 否则 战士。走! 结束 结束 结束
完成 player.rb 编辑后,保存文件并再次运行“rubywarrior”命令开始播放关卡。该剧通过一系列转折发生。在每一个上,您的“play_turn”方法都会与任何敌人的方法一起被调用。
您不能在关卡中间更改代码。您必须考虑到该级别上可能发生的一切,并从一开始就给您的战士正确的指示。
失去所有健康将导致您无法通关。你不会因此而受到惩罚,你只需要回到你的 player.rb,改进你的代码,然后再试一次。
一旦你通过一个级别(通过到达楼梯),配置文件自述文件将更新为下一个级别。更改 player.rb 文件并再次运行 rubywarrior 以玩下一关。
您的目标不仅是爬上楼梯,而且要获得最高分。您可以通过多种方式在关卡中赚取积分。
打败一个敌人,将他的最大生命值加到你的分数上
救出一名俘虏可获得 20 分
在奖励时间内通过关卡以获得剩余的奖励时间
击败所有敌人并解救所有俘虏,获得20%的综合加成
当您通过关卡时,总分会保持不变。当您通过一个级别时,该分数将添加到您的总分中。
不要太在意一开始就完美得分。到达塔顶后,您将能够重新运行塔并微调您的战士以获得最高分。有关详细信息,请参阅下面的史诗模式。
尽管这是一款基于文本的游戏,但您可以将其视为二维游戏,您可以从头顶观看。每一层都是矩形的,由许多正方形组成。一次只能在一个给定的方格上放置一个单元,您的目标是找到有楼梯的方格。这是一个示例关卡图和键。
---- |Cs>| | 秒| |C @ | ---- > = 楼梯 @ = 战士 (20 HP) s = 污泥 (12 HP) S = 浓稠污泥 (24 HP) C = 俘虏 (1 HP)
刚开始时,您的战士只有几种能力,但随着每个级别的增加,您的能力都会增长。战士有两种能力:行动和感官。
动作是以某种方式影响游戏的东西。你可以很容易地分辨出一个动作,因为它以感叹号结尾。每回合只能执行一个动作,因此请明智地选择。以下是一些操作示例。
勇士,走! 向给定方向移动(默认为向前)。 战士.攻击! 攻击给定方向的单位(默认为向前)。 战士。休息! 恢复 10% 的最大生命值,但仅此而已。 战士.绑定! 绑定给定方向的单位以防止他移动(默认为向前)。 勇士.救援! 在给定方向(默认为向前)从锁链中解救一名俘虏(获得 50 分)。
感觉是收集有关地板的信息的东西。您可以根据需要在每个回合中尽可能频繁地使用感官来收集有关您周围环境的信息并帮助您选择正确的行动。感官不会以感叹号结尾。
战士的感觉 返回给定方向的空间(默认为向前)。 战士健康 返回代表您的健康状况的整数。 战士.距离 返回楼梯离开的空间数。 战士.听 返回其中包含单位的所有空间的数组。
由于您的感觉在每一轮都会发生变化,因此您应该记录下收集到的信息以供下一轮使用。例如,如果您的健康状况自上一轮以来下降,您可以确定您是否受到攻击。
每当你感知一个区域时,通常会返回一个或多个空间(在一个数组中)。空间是表示关卡中正方形的对象。您可以调用空间上的方法来收集有关空间内容的信息。以下是您可以在空间上调用的各种方法。
空间.空? 如果为真,这意味着此位置没有任何东西(可能除了楼梯),您可以步行到这里。 空间.楼梯? 确定楼梯是否在该位置 空间。敌人? 确定敌方单位是否在此位置。 太空俘虏? 确定俘虏是否在这个位置。 太空墙? 如果这是关卡的边缘,则返回真。你不能在这里走路。 空间滴答作响? 如果此空间包含会及时爆炸的炸弹,则返回 true。 太空魔像? 如果魔像占据了这个空间,则返回真。
你经常会在某种意义上直接调用这些方法。例如,“感觉”感觉返回一个空格。可以叫“俘虏”吗?以此来确定俘虏是否在你面前。
战士。感觉。俘虏?
在你的旅程中,你可能会发现创造傀儡的能力。这是一个您也可以控制的独立单元。转弯处理是通过一个块完成的。这是一个例子。
战士。形式! 做 | 傀儡| 魔像。攻击! 如果 傀儡。感觉。敌人? 结尾
复杂的逻辑可以放在这个块中,就像在玩家转弯方法中一样。您可能希望将逻辑移动到它自己的类中,或者为不同类型的傀儡创建多个类。你可以在一个关卡中创建多个魔像,但每个魔像都会消耗战士一半的生命值。
到达塔顶后,您将进入史诗模式。当再次运行 rubywarrior 时,它会不停地运行你当前的 player.rb 通过塔中的所有级别。
你的战士很可能不会第一次成功,所以在你遇到困难或想要微调得分的关卡上使用 -l 选项。
红宝石战士-l 3
一旦您的战士再次登顶,您将获得一个平均等级,以及每个等级的等级。从最好到最差的等级是 S、A、B、C、D 和 F。尝试在每个级别上获得 S 以获得最终分数。
注意:我正在微调评分系统。如果您发现“S”级在给定级别上太容易或太难达到,请在 GitHub 上为此添加一个问题。
如果您卡在某个关卡上,请查看 README 文档并确保您尝试了每项功能。如果你不能保持健康,一定要在周围没有敌人的时候“休息”(同时注意你的健康)。另外,尽可能使用远程武器(例如弓)。
请记住,您在这里使用 Ruby 工作。不要简单地用大量代码填充“play_turn”方法。用方法和类来组织它。播放器目录设置为加载路径,因此您可以包含 player.rb 文件中的其他 ruby 文件。
感官是廉价的,所以请随意使用它们。存储感知到的信息,以帮助您更好地确定将来要采取的行动。
在您的配置文件目录中运行“rubywarrior”将自动选择该配置文件,因此您不必每次都选择。
如果你的目标是积分,记得扫一下区域。即使你靠近楼梯,在你得到所有东西之前不要进去(如果你有健康)。使用远距离感官(例如看和听)来确定是否还有敌人。
确保尝试可以传递给 rubywarrior 命令的不同选项。运行“rubywarrior –help”来查看它们。
[/hidecontent]