我正在实现Cluedo游戏的简单版本。
游戏中有3种类型的卡:角色卡,武器卡和房间卡。由于一张卡只不过是一个字符串(也就是说,卡中没有存储任何功能或信息,除了名称),所以我选择不使用Card接口(interface),每种类型都扩展了Card。相反,我在游戏中有三个枚举:
public enum Character {Scarlett, Mustard, White, Green, Peacock, Plum;}
public enum Weapon {Candlestick, Dagger, LeadPipe, Revolver, Rope, Spanner;}
public enum Room {Kitchen, Ballroom, Conservatory, BilliardRoom, Library, Study, Hall;}
但是,在一种情况下,将三种类型的卡放在一起并平均分配给游戏的每个玩家。例如,一个玩家可能有2个角色,2个武器和1个房间的牌,另一位玩家可能具有3个房间和2个角色的游戏,因此只要牌的总张数与哪种类型都没有关系。
这就是为什么我想知道是否有一种方法可以从Java的所有三个枚举中随机选择一个值?
还是我不应该首先做这三个枚举? (设计不良)
最佳答案
一种简单的方法是将所有枚举成员收集到单个Object[]
中,然后从中获取随机元素。
请注意,枚举也可以实现一个接口(interface),因此您甚至可以在所有枚举之间使用一些共享的API。通常,您会发现自己在枚举值的基础上编写了许多switch
语句。大部分可以通过针对此类接口(interface)方法的动态调度来代替。还要注意,每个枚举成员都可以提供自己的方法实现。