gpt4 book ai didi

c# - 将已实例化的对象作为新对象传递

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:15 24 4
gpt4 key购买 nike

这个问题可能听起来很奇怪,也请原谅我,因为我的程序流程可能是错误的,但是非常感谢任何对我的情况的帮助!

我有一个名为 EnemyFighter 的类,它包含所有信息,如生命值、攻击强度等。当程序启动时,它会将不同类型的敌人添加到列表中,如下所示:

// Build enemies
Enemies = new Dictionary<int, EnemyFighter>();

Enemies.Add(1, new EnemyFighter());
Enemies[1].Name = "Beaver";
Enemies[1].SetLevel(1);

Enemies.Add(2, new EnemyFighter());
Enemies[2].Name = "Unicorn";
Enemies[2].SetLevel(3);

然后我有敌人组,所以你可以打多个敌人,也许两个海狸让我们说:

// Enemy groups
EnemyGroups = new List<EnemyFighter[]>();

EnemyGroups.Add(new EnemyFighter[] { Enemies[1] }); // Beaver
EnemyGroups.Add(new EnemyFighter[] { Enemies[1], Enemies[1] }); // Beaver x2
EnemyGroups.Add(new EnemyFighter[] { Enemies[2] }); // Unicorn

但是当我去运行应用程序时,在攻击其中一个敌人时(当对付两个海狸时)我意识到我正在攻击“两个”因为本质上两个“海狸”是同一个对象。

有人可以建议我更好的方法来设置这种情况,我有一个对象模板,但想将它的唯一版本传递到列表中。像这样:

EnemyGroups.Add(new EnemyFighter[] { new Enemies[1], new Enemies[1] });

再次感谢任何帮助提前致谢!

最佳答案

“复制”对象不是一件小事,在大多数情况下也是不可取的。

在这种情况下,最简洁的方法可能是做这样的事情:

public class EnemyPrototype
{
public string Name { get; set; }
public int Level { get; set; }
}

public class EnemyProvider
{
private Dictionary<string, EnemyPrototype> _prototypes =
new Dictionary<string, EnemyPrototype>();

public void AddPrototype(string key, EnemyPrototype prototype)
{
_prototypes[key] = prototype;
}

public EnemyFighter GetEnemy(string key)
{
var prototype = _prototypes[key];

var fighter = new EnemyFighter();
fighter.Name = prototype.Name;
fighter.SetLevel(prototype.Level);

return fighter;
}
}

现在你可以像这样创建你的新敌人原型(prototype)(假设一个名为 _provider 的私有(private) EnemyProvider 实例成员 - 调整到你的结构):

_provider = new EnemyProvider();
_provider.AddPrototype("Beaver", new EnemyPrototype {Name = "Beaver", Level = 1});

然后像这样得到一个新的:

var enemy = _provider.GetEnemy("Beaver");

所以添加你的两个海狸变成:

EnemyGroups.Add(new EnemyFighter[] { _provider.GetEnemy("Beaver"),
_provider.GetEnemy("Beaver") });

您还可以向您的 EnemyProvider 类添加一个方法,让您传递一个 int 并返回一组敌人!

关于c# - 将已实例化的对象作为新对象传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33414321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com