问题描述
我正在开发一款 RPG 视频游戏。正如在大多数 RPG 游戏中所做的那样,如果您想要一个干净的界面,您可以尝试突出显示与玩家特别相关的某些文本。
例如,每次我想说“此攻击造成 30 冰冷伤害”时,我都会有这样的字符串:
“这次攻击造成 $VALUE$。”
$VALUE$ 将被实时替换为 “30 [ICON] 冰霜伤害”:
- [ICON] 将是寒冷伤害类型(例如蓝色雪花)的图标。
- 数字(在本例中为 30)将以粗体显示。
- “冷害”字样将带有浅蓝色阴影。
这一切都已经完成了,并且运行良好。然而,随着更多效果、技能、攻击类型和角色的加入,我的代码很膨胀。现在,我的字符串解析器有一堆静态方法,例如:
public static string Colddamage(int amount)
{
return <a formatted string for cold damage>
}
事情是这样的:攻击类型遵循这种格式。技能、效果、武器以及介于两者之间的所有内容也是如此,包括角色(我们展示了一张小肖像并突出显示了名称)。
================================
话虽如此,以下是我的(可能的)解决方案:
我改变了我的 StringsParser 类,所以我可以这样做:
public static string FancyUpMyText(int amount,string text,string colorHex,string iconRef)
{
return <a formatted string for anything you want>
}
但是,看看这 4 个参数。这将严重混淆代码。 更不用说并非所有都遵循相同的格式。有时,我想说“30 [ICON] 冰霜伤害”。有时是“[ICON] Attack +10”。我需要一个更具体的解决方案,否则我最终会得到 15 个方法,每个方法都有一堆参数,所有这些方法在它们庞大而臃肿的 return 语句中只有微小的变化。
或者,我可以添加一个 "IFancydisplay" 接口并让他们都实现它。但是,我需要方法是静态的,因为我们已经使用访问者模式来处理许多情况,并且我并不总是可以获取整个对象的信息我在所有情况下。使用“ClassdamageCold.GetFancyText(30);”会很棒,但我不能在接口上创建静态方法
所以,作为这个 C#,多重继承是不可能的,并且在代码中散布着如此多的元素,这些元素应该共享一个共同的行为......
是否有任何我可以使用的模式,或者此时我的 StringsParser 是否会膨胀而被遗忘?
注意:某些对象将有多种方法(例如“生命值 +30”和“15% 生命值”),因此访问者可能不是这里的最佳选择。如果可以,我会创建多个接口(IFancydisplayPercentage、IFancydisplayInteger...),每个接口有 1 个方法,并根据每个类的需要实现它们。
请帮忙:)
在此先非常感谢您!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)