c# – 文本冒险中的编码交互
编辑:如果你不能麻烦地阅读这个庞大的问题,那么我最后总结一下.
我正在为C#编写一个文本冒险的“框架”,作为编码练习.在此框架中,可能的操作由“交互”类定义. 潜在的“可操作”物品是库存物品(棍,枪,剑),环保物品(墙壁,门,窗)和人物(人,动物).它们中的每一个具有作为交互列表的属性.目前,交互基本上是一个“动作/响应”名称值对.当您键入“粉碎窗口”时,它会查看播放器可用的所有可能的可操作项目,并与主题匹配(在本例中为“窗口”).然后,它的作用是“粉碎”,并在“窗口中的交互列表”(环境项目)中查找,以获取“粉碎”操作的响应,然后将其写入控制台. 这一切都完成了,但这里是我被困的一点: 一个行动有许多潜在的后果,每个潜在的互动不同.这些是: – 通过查看交互作用来返回描述动作结果的响应,可能是第二个主题 无论是 – 返回描述以前更改的响应 – 区域的描述已更改. – 从库存或环境中添加/删除项目 – 可以移动的方向及其导致的区域发生变化 – 玩家移动到一个新的区域 我需要以某种方式确定特定交互应该调用哪些后果,并调用它们.一个行动可能会潜在地使用这些后果,或只是一个. 例如,如果该项目是瓶子: “用水填满瓶子”首先会回复一个描述你已经用水充满瓶子的回应.然后用“一瓶水”项目取代“瓶子”物品. 说你当时要做“在窗口扔一瓶水”.这更复杂.它会首先返回一个描述发生的事件的响应,瓶子和窗户都会粉碎,水会遍布各处.该瓶将从玩家的库存中移除. 正如你所看到的,我需要一种通用的方式,可以在每个“交互”基础上定义,该操作的后果将如何,并更新其他对象,如物料,播放器(库存)和面积适当. 如果这不清楚,我很抱歉,如果有任何问题,我会尽力澄清. 编辑:有没有办法为我定义一个交互方法,我可以传递一些方法来调用(和他们的参数)?返回的初始响应将是默认的强制性后果,然后如果指定可能会有额外的响应. 例如,在上面的例子中,对于第一次交互,“填充水”,我会告诉它返回一个响应(“你已经用水填充了瓶子”),还可以调用一个ReplaceItem方法来代替“瓶“主题与”一瓶水“. 对于第二次交互,我会告诉它返回响应(“瓶子通过空气进入…”),调用RemoveFromInventory对动作的主题,调用瓶子上的UpdateStatus(“瓶子被砸”)和窗口(“窗口被粉碎”),并调用UpdateAreaDescription来更改当前区域的描述(“您正在一个窗口中放置一个房间,玻璃碎片”). 这听起来很可行吗为了所有不同的可能的相互作用,我试图保持尽可能的通用. 编辑2:进一步澄清,并试图总结问题: 在我的游戏中,有可动物体(瓶,墙,约翰).每个Actionable对象都有一个列表 我想要解决的问题是,互动也需要做许多其他事情,不同 “抛玻璃瓶” “把玻璃瓶扔在窗户” 当我创建交互时,如何更改其执行的其他操作,例如状态更改 如果您需要更多的上述操作示例,请告诉我,我会再做一些. 解决方法
我想你应该决定一定数量的动词,你会认识到,然后每一个对象决定哪些动词能够响应.
锁定对象识别动词 >看 这样一来,您可以一般地处理它无法识别的动词,例如“您不能<动词>< object>,并处理它用事件或其他任何事物识别的动词. 编辑 根据你的评论,我显然只是扫描你的问题(对我来说太久了).不过,我看不出有什么区别,真的.关键是,一个对象参与一个事件.从瓶子的角度来看,它被墙壁撞击.从墙的角度来看,它被一瓶砸了.这两个对象都将有一个动词列表,他们将以某种方式响应. 所以如果你打算让墙壁响应任何被抛出的对象,那么你需要在它的列表中添加一个Collide动词.你会想要指定哪些对象应该关心碰撞,也可能是每个对象应该如何应对特定的力量等等. 但原则是一样的.对于任何事件,都有一些参与者,每个参与者都会有一些关心的刺激,对于那些刺激,它将具有某些刺激来源的对象.如果它是一个它关心的动词,但它的起源不是它关心的对象,那么它将有效地忽略它 – 或者以一些香草的方式做出回应. 瓶参与与墙的碰撞.瓶子在动词列表中列出了碰撞交互类型.它可能有一个单一的对象,它关心碰撞,或者它可能有一个值Any,或AnySolid,或任何.有一百万种建筑方式.在任何情况下,墙也参与并可能在动词列表中有碰撞交互类型.但是它只关心与大锤物体的碰撞 – 或者是具有10或更大质量的AnySolid … 你也可以用接口来做.你可以有一个LootableObject来实现ICollidible接口,或者什么.当任何可疑(例如,瓶子)执行其碰撞方法时,它将需要某些参数:它是多么脆弱,它接收多少力量,碰撞物体是否关心事物等等. 它可能充满液体,因此它将实现具有溢出方法的IContainer界面,以及具有Drink方法的IConsumeable界面.它可能是一个实现具有Unlock(obj Key)方法和Pick(int PickSkill)方法的ILockable接口的锁.这些方法中的每一种都可以在对象和其他参与者的交互中产生一些状态变化.如果你喜欢,你可以用Events来完成. 基本上你需要决定你想要的(un)可预测性水平,然后组成一个交互矩阵(不一定是物理学,而是你打算在一个锁定事件,一个碰撞事件,一个饮酒事件上进行的任何一种互动)涉及某些可预测的属性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |