我正在用C#Windows形式创建一个游戏,我将在游戏中有9个不同的角色供玩家选择(使用单选按钮)。我有一个名为PlayerChar的变量。每当玩家选择一个角色时,我会将角色的名字存储在该变量中。另外,每个角色我有9个不同的班级。我想要做的是,让程序从所选字符的类中创建一个对象。但我不知道如何使用变量PlayerChar作为我的班级名称。
PlayerChar obj = new PlayerChar();
这基本上就是我想要做的。我也尝试使用Activator.CreateInstance:
PlayerChar myObj = Activator.CreateInstance(PlayerChar);
答案 0 :(得分:2)
你正在以错误的方式解决问题。你不需要从一个类名变量创建播放器;变量可以是任何东西,你只需要将它与构造正确类的对象的方法相匹配。这是使用某种工厂完成的。
例如,这是一个从字符串创建Player
个实例的迷你工厂:
Player CreatePlayerInstance(string type)
{
var creatorMap = new Dictionary<string, Func<Player>>() {
{ "foo", () => new FooPlayer() },
{ "bar", () => new BarPlayer() },
};
return creatorMap[type]();
}
显然没有错误检查或任何事情,但这是核心思想。您可以通过多种方式扩展和修改它,具体取决于您的目标。
答案 1 :(得分:1)
试试这个
initrd
答案 2 :(得分:1)
让PlayerChar
成为所有角色类的基类。
public class PlayerChar
{
...
}
public class WarriorChar : PlayerChar
{
...
}
public class RangerChar : PlayerChar
{
...
}
public class ClericChar : PlayerChar
{
...
}
然后使用开关块或顺序if块来使用正确的字符子类实例化播放器对象。
PlayerChar myObj = null;
if (warriorButton.IsSelected)
myObj = new WarriorChar();
else if (rangerButtom.IsChecked)
myObj = new RangerChar();
else if (clericButton.IsChecked)
myObj = new ClericChar();
...
(不要使用Activator
类来实例化你的对象,除非你完全理解Activator
做了什么,并且有充分考虑使用它的原因。十分之九它被那些试图使用他们的代码的人所使用,最终只会使事情过于复杂。)
答案 3 :(得分:-2)
选项1
创建两个全局变量来存储您的信息。然后使用if语句来分配不同的字符和类。
选项2
创建一系列方法来使用表单中的全局变量来操作和存储数据。
选项3
为您的角色创建一个C#类文件,为您的类创建另一个。
使用方法创建两个C#类文件,并从主程序或需要它们的地方调用它们。