我正在构建一个游戏,其中我创建了一个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))
所以我要做的是为Game()
类中的每个计算机化播放器实例化一个新的ComputerPlayer()
对象,如果我总是想要相同数量的播放器,我可以很容易地使用它:
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()
类将拥有控制游戏逻辑的主要方法,因此它是创建我的个人电脑播放器的正确类吗
如有任何其他意见、问题或建议,将不胜感激。游戏将是“街头垃圾”顺便说一句。谢谢
你让它听起来像名字只是用于电脑播放器。 既然如此,为什么不把它放在ComputerPlayer类中,跳过使用super呢
另外,如果您创建的计算机播放器超过len(name)个,那么您的代码将出错
相关问题 更多 >
编程相关推荐