Evg*_*ieT 0 c# variables function
抱歉,我无法在问题标题中更好地解释.我会在这里更好地定义我的问题.
这就是我正在做的事情 - 在我的游戏中,可以选择彼此使用物品.对于每对项目,游戏执行动作.
目前,游戏使用的变量有两个:"ItemUsed"和"ItemUsedOn".首先,游戏选择第一项 - 其id转到"ItemUsed",然后他选择第二项,它的id转到"ItemUsedOn".然后,有一个定义特定操作的空白.
一个简短的代码示例:
if (ItemUsed == "itm_cable")
{
if (ItemUsedOn == "itm_towel")
SubMain.ItemsMergedText = "To achieve what?";
else if (ItemUsedOn == "itm_wet_towel")
SubMain.ItemsMergedText = "No, water will damage it";
else if (ItemUsedOn == "itm_glass")
SubMain.ItemsMergedText = "I don't need to cut the cable";
}
if (ItemUsed == "itm_book_electronics")
{
if (ItemUsedOn == "itm_towel")
SubMain.ItemsMergedText = "Why?";
if (ItemUsedOn == "itm_wet_towel")
SubMain.ItemsMergedText = "No, water will damage the book";
else if (ItemUsedOn == "itm_soap")
SubMain.ItemsMergedText = "Wrong plan";
else if (ItemUsedOn == "itm_hair")
SubMain.ItemsMergedText = "It won't help";
}
Run Code Online (Sandbox Code Playgroud)
并且有很多这样的对.但是,这种方法存在问题.当两个项目组合时,它们的顺序无关紧要,例如"itm_toolbox"可以是"ItemUsed"而"itm_cable"可以是"ItemUsedOn",但也可以是相反的方式,结果将是相同的.怎么能实现这一目标?
如果出现以下情况,我确实尝试在每个"更大"中使用
else
CombineItems(ItemUsedOn, "itm_book_edda");
Run Code Online (Sandbox Code Playgroud)
但这并不总是有效,我找不到原因.
所以,我正在寻找的是获得2个变量的函数:
void CombineItems(string Item1, string Item2)
Run Code Online (Sandbox Code Playgroud)
然后在这些情况下给出相同的结果:
if (Item1="Tomato")&&(Item2="Cucumber")
Item3="Salad"
if (Item1="Cucumber")&&(Item2="Tomato")
Item3="Salad"
Run Code Online (Sandbox Code Playgroud)
我的问题:有没有更简单的方法,没有使用这么多"如果"?
谢谢你,Evgenie
我建议你自己创建一个eg UnorderedPair类型,它会覆盖.Equals和/或的行为==,这样:
new UnorderedPair("Tomato", "Cumcumber") == new UnorderedPair("Cucumber", "Tomato");
Run Code Online (Sandbox Code Playgroud)
然后,您可以将所有if语句缩减为简单字典:
combinedItems = new Dictionary<UnderedPair, string>
{
[new UnorderedPair("Tomato", "Cumcumber")] = "Salad",
[new UnorderedPair("Bread", "Filling")] = "Sandwich",
...
};
Run Code Online (Sandbox Code Playgroud)
并且您的确定文本的代码可以只是:
SubMain.ItemsMergedText = combinedItems[new UnorderedPair(ItemUsed, ItemUsedOn)];
Run Code Online (Sandbox Code Playgroud)