通过RPG库存,如何在保持模块化的同时根据角色类别类型显示道具
本文关键字:角色 显示 类型 库存 RPG 模块化 通过 | 更新日期: 2023-09-27 18:12:36
所以我正在制作一款游戏,玩家将拥有许多具有不同"职业"的单位,例如骑士,Paige,炼金术士等。我目前正在制作一个库存系统,并遇到了一个关于代码模块化和维护良好代码的小问题。下面是到目前为止我的代码布局:
我有一个装备类,每个武器都有一个实例,每个装备都有一个类型;假设"shortsword"answers"greatsword"是两种装备。此外,骑士职业的角色可以装备巨剑和短剑,但佩姬类型的角色只能装备短剑
使用每个字符拥有的Job类来组织作业(使用存储在字符类中的List)。库存类应该访问角色并获得工作,然后请求该工作可以装备的所有物品。
我目前的原型在装备类中使用了一个名为EquipType的字符串字段,该字段将存储这些"短剑/巨剑"字符串。然后,作业类将有一个列表字段,该字段将被发送到库存类,并使用字符串匹配获取项目。
然而,这在维护代码方面很烦人,因为我为装备和工作类都重新输入字符串,不是很优雅。我在考虑使用枚举,因为这将允许我通过枚举类型获取项,但这会损害代码的模块化和一些不应该耦合的事情(也许?? ?)-全局枚举无论如何都是不好的实践。此外,枚举将非常大(15-20个元素)。
对于这样的库存系统,是否有更清晰、更优雅的方法?
由于您正在使用c#,您可能希望采用更面向对象的设计方法。而不是使用字符串或枚举值,创建类型来表示设备项目和字符。每种类型的对象(实例)都是跟踪它们是什么的事物本身,而不是字符串或枚举(尽管它们可能有一个字符串属性,例如"Name")。然后,每个类型都有允许对象交互的方法。例如,您可能有:
public class Equipment { }
public class Sword : Equipment { }
public class GreatSword : Sword { }
public class Character
{
public virtual Boolean Wield(Equipment e)
{
// do wield logic...
return true;
}
}
public class Paige : Character
{
public override Boolean Wield(Equipment e)
{
if (e is GreatSword)
{
return false;
}
return base.Wield(e);
}
}
允许您在每个角色类中添加新类型和自定义行为。你接下来要面对的问题是,你的使用逻辑不仅取决于装备类型,还取决于装备和角色类型。这是一个众所周知的问题,被归类为"双重调度"。在c#中解决这个问题的一种方法是称为访问者模式的设计模式。
在此之后,在执行玩家状态和世界状态方面存在一些记录在案的问题。这个StackOverflow问题是关于用这些设计模式创建RPG的,值得你一读。
我不是一个c#的人,但在面向对象的概念,你应该有两个抽象类1. 设备2. 字符
每个设备类型都应该是继承父类equipment的类每个字符类型都应该继承父类字符。
由于业务逻辑不是很清楚,所以我可以想到2个选项:选项1:字符可以有一个列表类型设备&;每次你实例化角色时,你也可以决定这个角色允许使用哪些装备。把它添加到列表中。
Option2:可以创建关联类来存储字符&设备。