我正在构建一个游戏,其中我创建了一个ComputerPlayer()
类的Players()
类。我在Players()
类中使用了一个名单列表,用于子类中的构造函数,每次实例化时为每个计算机播放器随机获取一个名称,并pop()
将其关闭,因此名称可以'被分配两次。代码如下:
class Players(object):
names = ['Carl', 'James', 'Bob', 'Jamal', 'Kris', 'Andy', 'Rupert', 'Gerald', 'Pat',
'Gloria', 'Hannah', 'Priscilla', 'Sarah', 'Silvia']
class ComputerPlayer(Players):
def ___init___(self):
self.name = super(ComputerPlayer, self).names.pop(randint(0, len(super(ComputerPlayer, self).names) - 1))
所以我要做的是为ComputerPlayer()
类中的每个计算机化播放器实例化一个新的Game()
对象,如果我总是想要相同数量的玩家,我可以很容易地做到:< / p>
class Game(object):
def ___init___(self):
self.player1 = ComputerPlayer()
self.player2 = ComputerPlayer()
self.player3 = ComputerPlayer()
或者如果我希望人类玩家能够选择他们想要对抗多少计算机对手,我可以将参数传递给Game()
并执行:
def __init___(self, num):
self.players = []
for x in range(0,num):
self.players.append(ComputerPlayer())
当我第一次开始这个问题时,我想知道是否有办法访问ComputerPlayer()
的每个实例并引用它的随机分配名称,但正如我写的那样,我意识到没有真正的好处要做到这一点,它可能会使事情变得不必要地复杂化;这些名字只是为了向人类玩家展示,让游戏感觉更“人性化”。
但是,虽然我知道我在super()
课程中正确使用ComputerPlayer()
,但它是否必然是首选的方式它?使用对Players().names
的直接引用也很有用,它会缩短那段丑陋的代码。
Game()
类将拥有控制游戏逻辑的主要方法,因此创建我的个人计算机播放器的正确类是什么?
任何其他意见,问题或建议将不胜感激。这场比赛将是“街头骰子”顺便说一句。谢谢!
答案 0 :(得分:1)
你听起来好像名字只是用于电脑播放器。 那么为什么不将它放在ComputerPlayer类中并跳过使用super?
如果您创建的计算机播放器数量超过len(名称),则代码将出现错误