问题标签 [adventure]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 用于解析简单的基于文本的数据文件的正则表达式
任何人都可以给我一点正则表达式的帮助吗?
我正在阅读一个简单文本冒险的“位置”列表(那些在当时很受欢迎)。但是,我不确定如何获取输入。
这些位置都遵循以下格式:
如:
(后续位置用空行分隔。)
我将这些存储为具有以下结构的 Location 对象:
我使用一种方法从 URL 检索数据并从读取的文本创建 Location 对象,但我完全无法做到这一点。我认为正则表达式会有所帮助。任何人都可以借我一个急需的手吗?
c# - 关于类文本冒险游戏设计的疑问。
整个夏天我一直在学习 C#,现在我想用我迄今为止所做的事情来做一个小项目。我决定开发一种基于文本的冒险游戏。
游戏的基本结构将涉及拥有多个扇区(或房间)。进入房间后,将输出描述以及您可能采取的一些操作;在那个房间里检查、拿起、使用东西的能力;可能是战斗系统等。一个扇区最多可以连接 4 个其他扇区。
无论如何,在纸上写下关于如何为此设计代码的想法,我对部分代码的结构摸不着头脑。
我已经决定了一个玩家类和一个代表关卡/地牢/区域的“关卡”类。该级别将由许多相互关联的“部门”组成。在任何给定时间,玩家都会出现在关卡中的某个特定区域。
所以这里的混乱:
从逻辑上讲,人们会期望player.Move(Dir d)
诸如此类方法之类的方法应该更改关卡对象中的“当前扇区”字段。这意味着Player类需要了解Level类。嗯。并且Level可能必须操纵Player对象(例如,玩家进入房间,被某物伏击,从库存中丢失某些东西。)所以现在Level还需要持有对Player对象的引用?
这感觉不太好;一切都必须引用其他一切。
在这一点上,我记得在我正在使用的书中阅读了有关代表的内容。虽然我知道 C++ 中的函数指针,但在有关委托的章节中提供了具有某种“基于事件”编程观点的示例,对此我没有太多启发。
这给了我设计类的想法,如下所示:
玩家:
等级:
这是一种可行的方法吗?
如果代表章节没有按原样呈现,我就不会想到使用这样的“事件”。那么在不使用回调的情况下实现这一点的好方法是什么?
我有发布非常详细的帖子的习惯……抱歉 v__v
c# - 文本冒险中的编码交互
编辑:如果您懒得阅读这个庞大的问题,我在底部做了一个总结。
我目前正在为我将在 C# 中进行的文本冒险开发一种“框架”,作为编码练习。在此框架中,可能的操作由“交互”类定义。
潜在的“可操作”对象是库存项目(棍子、枪、剑)、环境项目(墙、门、窗)和角色(人、动物)。其中每一个都有一个属性,即交互列表。目前,交互基本上是一个“动作/响应”名称值对。当您键入“粉碎窗口”时,它会查看播放器可用并匹配主题的所有可能的可操作项目(在本例中为“窗口”)。然后计算出该操作是“粉碎”,并在窗口(环境项)上的交互列表中查找以获取对粉碎操作的响应,然后将其写入控制台。
这一切都完成了,但这是我卡住的一点:
一个动作具有任意数量的潜在后果,这些后果因每个潜在的交互作用而异。这些是:
- 通过在交互中查找它来返回描述操作结果的响应,可能与第二个主题
EITHER - 动作的主题(物品栏物品、环境物品或角色)改变了它的描述 EG。“punch wall”可以改变墙壁的描述来描述墙上的凹痕 或 - 动作的主题被另一个项目 EG 替换。“粉碎瓶子”导致“瓶子”变为“破瓶子”或“杀死约翰”导致角色约翰被环境项目“约翰的尸体”取代。
- 返回描述先前更改 EG 的响应。“瓶子的碎片散落在地板上。”
- 更改了区域的描述。例如。“粉碎灯泡”导致房间的描述改变为描述漆黑的房间
- 从库存或环境 EG 中添加/删除项目。“捡瓶子”。现在,您的库存中有一个瓶子,并且该瓶子已从环境中移除。
- 可用于移动的方向和它们导致的区域已更改 EG。“用钥匙开锁”可以让你向东移动到另一个房间
- 玩家被移动到一个新的区域 EG。“往北走”带你到另一个区域。
我需要以某种通用方式确定特定交互应该调用这些后果中的哪一个,并调用它们。一个动作可能会使用许多这些后果,或者只是一个。
例如,如果该项目是一个瓶子:
“ fill bottle with water ”将首先返回一个描述您已将瓶子装满水的响应。然后它将用“bottle of water”项目替换“bottle”项目。这是两个后果,返回响应和替换项目。
假设你当时要做“向窗户扔瓶水”。这更复杂。它首先会返回一个描述所发生事件的响应,瓶子和窗户都会破碎,水会到处流。该瓶子将从玩家的库存中移除。接下来,将“瓶水”替换为“破瓶”,将“窗”替换为“破窗”。区域描述也会改变以反映这一点。那是五个后果,返回响应,从库存中删除一个项目,替换两个项目和更新当前区域的描述。
正如你所看到的,我需要一种通用的方式来定义每个“交互”的基础,该操作的后果是什么,并适当地更新其他对象,如项目、播放器(用于库存)和区域。
如果不清楚,我很抱歉,如果有人有任何问题,我会尽力澄清。
编辑:有没有办法让我在交互上定义一个方法,我可以将许多方法传递给调用(及其参数)?返回的初始响应将是默认的强制结果,如果指定,则可能会有额外的结果。
例如,在上面的示例中,对于第一个交互“加水”,我会告诉它返回一个响应(“你已经给瓶子装满了水”),并调用一个 ReplaceItem 方法来替换“瓶”主题与“瓶水”。
对于第二次交互,我会告诉它返回一个响应(“瓶子在空中飞驰而入......”),在动作主题上调用 RemoveFromInventory,在瓶子上调用 UpdateStatus(“瓶子被砸碎”)和窗户(“窗户被砸碎了”)并调用 UpdateAreaDescription 来更改当前区域的描述(“你站在一个只有一扇窗户的房间里,玻璃被砸得粉碎”)。
这听起来可行吗?为了所有不同的可能交互,我试图使其尽可能通用。
编辑2:进一步澄清,并试图总结问题:
在我的游戏中,有可操作的对象(瓶子、墙、约翰)。每个 Actionable 对象都有一个交互对象列表,描述玩家如何与它们交互。目前,Interaction 具有“Name”属性(“throw”、“hit”、“break”)并返回 Response(“You throw the”)。
我要解决的问题是交互还需要做许多其他事情,这些事情因每个特定的交互而异。让我们以玻璃瓶为例。
“扔玻璃瓶”
- 返回响应(“你扔了玻璃瓶。”)
- “瓶子”从玩家的物品栏中移除。
- 替换为新的以反映更改。(“瓶子”替换为“破瓶子”)。
- 返回第二个响应(“玻璃瓶碎片散落在地板上”)。
“throw glass bottle at window”
- 返回响应(“你将玻璃瓶扔到了窗口。”)
- 对象“Bottle”从玩家的物品栏中移除。
- 将对象替换为新对象以反映更改。(“瓶子”替换为“破瓶子”)。
- 第二个可选对象被替换为新对象以反映更改。(“窗口”替换为“破窗”)。
- 当前区域的“描述”属性已更新。(“你站在一个房间里,只有一扇破窗户。”)。
当我创建交互时,如何改变它们执行的其他操作,例如对主题的状态更改或对当前区域描述的更改?
如果您需要更多上述操作示例,请告诉我,我会再做一些。
nlp - 文本冒险动作的合理变量名称
这是一个困难的问题,我一直在绞尽脑汁,但我只是为这些变量想出了一个合理的名称。有人可能会立即找到一个。
采取以下示例操作:
- “把瓶子扔到墙上”
- “把约翰推门”
- “用剑攻击食人魔”
动作事物在/与/在/在/对事物
如果我必须为每个“事物”定义一个变量,我需要为第一个“事物”取一个合理的名称,并为第二个“事物”取一个合理的名称。所以......就像“Interactor”和“Interactee”......但是一个正确的名字。
我一直试图向一些人解释这一点,但我似乎无法理解这个概念,所以请随时要求我澄清一下。
state - 冒险游戏中的状态管理
我一直在考虑制作一款点击式冒险游戏。我遇到的问题是以通用(而不是丑陋)的方式表示游戏逻辑和状态。
游戏状态:
你从一个房间拿了一个物品,它不应该再在那里(可以很容易地完成)你和一个角色交谈,他做了一些影响另一个房间/屏幕的事情,如何保存房间的状态和性格是
游戏逻辑:
你和一个角色交谈,他做了一些动画并改变了世界状态中的一些东西,你如何在不将其硬编码到游戏中的情况下进行设置?
我想这些问题是相关的,因为弄清楚如何表示状态将大大有助于弄清楚如何定义“动作”。
c# - 使用开关块来解析文本冒险的输入?
好的,我现在的目标是进行基本的文字冒险。但是,要做到这一点,我需要/想要一个可以执行以下操作的 switch 语句:
- 检查一个字符串是否有一个单词 SOMEWHERE 里面。
- 检查一个字符串是否有两个单词的任意组合。
我将如何做到这一点?你能告诉我这个具体例子的编码吗:
提示用户输入数据。switch 语句将“look box”作为一种情况进行检查,将“sleep”作为另一种情况进行检查。该程序不关心任何单词的顺序,但确实关心字母的顺序。
请详细解释一切。我刚开始编码。
编辑:谢谢你的所有答案。我知道有更好、更复杂、更有用的方法来处理这个问题,但它还没有达到我的水平。
lisp - 在 Casting SPEL 中推送项目位置
我正在学习 Lisp 中的 Casting SPEL,这是处理拾取对象的建议解决方案:
我是唯一一个发现这种效率低下的人吗?据我了解,每次玩家拿起一个物体时,这个功能都是push!
新cons
的。虽然这在像这样的小型游戏中可能不是主要问题,但如果要添加从库存中放下物品的选项,列表可能会无限增长......不应该替换of ,例如,而不是添加另一个副本?pair
*object-locations*
*object-locations*
pickup-object
cdr
(whiskey-bottle living-room)
pair
我是 Lisp 的新手,可能会弄错......有人可以解释我的假设是否正确,如果是的话,在 Lisp 文本冒险中处理拾取对象的最佳方法是什么?
java - 为基于文本的游戏继承类
我正在尝试为班级创建一个基于文本的游戏,但我一直在努力让我的主班 GCPUAPP 从我的 Artifact 班级中读取。
这是我为 GCPUAPP 类输入的代码:
它给了我一个关于“新工件”的错误。这是我在 Artifact 上的代码:
我是 Java 新手,所以我完全被卡住了。
javascript - Colossal Caves Adventure - 使用 javascript 访问数据源
我一直在玩弄创建原始 Colossal Caves Adventure 的 javascript 版本的想法,作为自学语言的一种方式。冒险的原始数据文件可以在这里找到 -
http://jerz.setonhill.edu/if/crowther/
我希望有经验的 javascripter 可以向我建议存储和访问文本数据文件(只有几百行长)的最佳方式。目前我正在考虑将文本嵌入到 html 页面中的隐藏元素中并以这种方式访问它,但我知道这缺乏优雅。你怎么认为?
java - JAVA:2D 游戏冒险。碰撞检测问题
这是关于JAVA中的动画。在所有图片上使用相同尺寸时我取得了成功。但是,如果我将所有图片尺寸保持在相同的尺寸(宽度和高度)上,我会在玩家打孔时遇到一些错误。在玩家的手接触敌人身体之前,敌人已经死亡
但是在我的情况下,空闲、运行和打孔的其他人则具有不同的维度。面向左侧的打孔动画变得非常奇怪。如果他的手向左打,但他的身体向右移动。这是因为我画的x&y是一样的。
我该如何解决?需要说明:D
我使用 png 因为支持透明
我认为这可以通过 2 个选项来解决 1. 修复我的碰撞检测 2. 在某些情况发生时修复我的图像的绘制位置