一个数组中的许多枚举C#

时间:2013-10-01 20:44:03

标签: c# arrays enums unity3d

我一直在寻找如何制作一个包含许多不同枚举的数组。

我要做的是使用例如

的枚举
public enum playerTeam
{
    Red,
    Blue
};

和另一个

public enum currentWeapon
{
    Knife,
    Gun,
    Rifle,
    Shotgun,
    SniperRifle,
    RocketLauncher,
    Grenade,
    Molotov,
    FlameThrower,
    ProximityMine,
    RemoteMine
};

然后将它们分配给一个名为

的数组

Players[]

然后能够循环遍历数组并设置每个枚举的值。我之前使用过没有数组的枚举。设置/获取播放器的数据。 但现在我要将我的项目扩展到多人游戏。我无法弄清楚如何将枚举添加到一个数组。因为这会使代码更容易处理。

这真的很难解释,希望你们明白......

3 个答案:

答案 0 :(得分:4)

我建议您创建一个包含PlayerWeapon成员的班级Team。然后使用播放器实例执行操作。

class Player
{
    Weapon CurrentWeapon {get; set;}
    Team Team {get; set;}
}

答案 1 :(得分:0)

考虑到C#允许你做什么,这是一种看待事物的奇怪方式。最好的是,为了达到你想要的效果,你可以使用将键映射到值(玩家到武器/团队)的东西,比如System.Collections.Generic.Dictionary

但实际上没有必要这样做。 Player类应该在两个字段中包含该信息:

class Player
{
   ...
   private Team currentTeam;
   private Weapon currentWeapon;
   ...
}

根据你对枚举的命名和你的想法来判断,我认为你也应该从头到尾都遵循C#和OOP的学习资源。

答案 2 :(得分:0)

这有点荒谬,因为团队绝对不是武器(wtf是currentWeapon。而不是武器)但如果你问如何使用枚举和位标志你可以写

[Flags]
public enum Weapon
{
    ...
    WeaponMask = 0xFF
    IsBlueTeam = 0x0100
}

允许你这样做

switch(player[i] & WeaponMask) { case SomeWeapon: ... }
isBlueTeam = (player[i] & IsBlueTeam) != 0 //assuming its either blue or read