我正在将游戏项目的代码从 Python 移植到 C#。现在我在翻译一段特定的代码时遇到了麻烦,游戏会在其中检查两艘太空飞船是友好还是敌对。派系通过整数标识。使用敌对或友好派系编号列表。
检查敌意或友好的功能是(Python):
def is_hostile_faction(ownF, oppF):
hostile_factions = { 1:[5], 2:[4,5], 3:[5], 4:[2,5], 5:[1,2,3,4], 6:[5], 7:[8,9,10], 8:[5,7,9,10], 9:[7,8,10], 10:[7,8,9]}
if oppF in hostile_factions[ownF]:
return True
else:
return False
和
def is_allied_faction(ownF, oppF):
allied_factions = { 1:[1,2], 2:[1,2,3], 3:[3], 4:[4], 5:[5], 6:[1,2,3,6], 7:[7], 8:[8], 9:[9], 10:[10] }
if oppF in allied_factions[ownF]:
return True
else:
return False
分别。到目前为止,很容易。我如何在 C# 中重新创建相同的函数而不编写丑陋的代码,例如:
List<int> faction1hostiles = new List<int> {5};
List<int> faction2hostiles = new List<int> {4,5};
// etc
Dictionary<int,List<int>> hostileFactions = new Dictionary<int,List<int>();
hostileFactions.Add(faction1hostiles);
hostileFactions.Add(faction2hostiles);
// etc
public void isHostile(int ownF, int oppF) {
if (hostileFactions[ownF].Contains(oppF)) {
return true; }
else { return false; }
}
// same for friendly factions
以前的代码是 Python(Panda3D 框架),目标代码是 C#(Unity3D 框架)。考虑到 Python 代码的简单性,即动态创建数据结构,C# 必须有一个同样简单的解决方案吗?