我想制作一个游戏,其中“纸牌”是游戏中各种纸牌的类别。 “玩家”作为一个类,其中包含要包含纸牌对象的纸牌列表。 “游戏”作为一个类,其中包含要包含玩家对象的玩家列表。 因此,当我创建游戏对象时,一切正常。 将玩家对象附加到游戏对象中后,一切正常。 问题-但是,当纸牌对象附加在播放器对象中时。所有纸牌对象都附加在所有玩家中
我正在使用PyCharm和Python3.6.2(v3.6.2:5fd33b5)
class game:
players=[]
class player:
cards=[]
class card:
def __init__(self,number,suit,player):
self.number=number
self.suit=suit
self.player=player
if __name__ == "__main__":
g=game()
for i in range(0,4):
g.players.append(player())
for i in range(0,52):
g.players[i%4].cards.append(card(i%13,i/13,i%4))
预期-据我所知,每个玩家都应该包含13张牌。
答案 0 :(得分:0)
这样做的原因是您如何定义player
类; cards
被定义为 class 变量,这意味着player
的每个实例都共享相同的cards
变量。由于每个玩家应该拥有不同的牌,cards
应该是一个 instance 变量,如下所示:
class player:
def __init__(self):
self.cards=[]
顺便说一句:通常最好给您的班级起首字母大写的名称,例如Game
,Class
和Player
。
答案 1 :(得分:0)
您可以按照以下过程进行操作:
class Game:
def __init__(self):
self.players = []
class Player:
def __init__(self):
self.cards = []
class Card:
def __init__(self, number, suit, player):
self.number = number
self.suit = suit
self.player = player
def __str__(self):
card_string = f'{self.suit}\'s {self.number} of player {self.player}'
return card_string
if __name__ == "__main__":
g = Game()
for i in range(0, 4):
g.players.append(Player())
for i in range(0, 52):
g.players[i % 4].cards.append(Card(int(i % 13), int(i / 13), int(i % 4)))
print(Card(int(i % 13), int(i / 13), int(i % 4)))