import random
#牌类,54张牌,大小,花色,大小王
class Card:
def __init__(self):
self.card_number=None
self.card_color=None
self.card_king=None
#棋牌类,每个玩家的牌列表,3份牌
class Game:
def __init__(self):
self.card=None
#玩家类,发牌,换牌
class Person:
def __init__(self):
self.player1 = None
self.player2 = None
self.player3 = None
def changeCard(self):#换牌操作
self.player1, self.player2 = self.player2, self.player1
self.player2, self.player3 = self.player3, self.player2
#牌库,牌的数目
#类的实例化
a=Card()
a.card_color = ['♠', '♣', '♥', '♦']
a.card_number = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
a.card_king = ['RJ','BJ'] # RJ:red joker,BJ:black joker
game1,game2,game3=Game(),Game(),Game()
game1.card,game2.card,game3.card=" "," ",""
card_list=[]#牌列表,存储54张牌
for i in a.card_king:
card_list.append(i)
for i in a.card_color:
for j in a.card_number:
card_list.append(i+j)
#发牌
for i in range(17):
pai1=random.choice(card_list)
card_list.remove(pai1)
pai2 = random.choice(card_list)
card_list.remove(pai2)
pai3 = random.choice(card_list)
card_list.remove(pai3)
game1.card = game1.card + pai1 + " "
game2.card = game2.card + pai2 + " "
game3.card = game3.card + pai3 + " "
#换牌
p=Person()
p.player1=game1
p.player2=game2
p.player3=game3
print("交换前")
print("玩家1:",p.player1.card)
print("玩家2:",p.player2.card)
print("玩家3:",p.player3.card)
p.changeCard()
print("交换后:")
print("玩家1:",p.player1.card)
print("玩家2:",p.player2.card)
print("玩家3:",p.player3.card)
思路:首先定义三个类:牌类,54张牌,存储牌的花色,大小,大小王;棋牌类,即每个玩家的手牌;玩家类,实现换牌与发牌功能。每个类中都使用了构造函数,使用了实例变量。然后就是对类的实例化,首先对牌类实例化,对每张牌赋值;然后对玩家的手牌实例化,运用for循环的嵌套对牌进行遍历,然后就是发牌,17张牌依次发放,每发一张牌就从牌的列表中删除这张牌;最后,对玩家类实例化,给每个玩家发牌,然后进行交换。
遇到的问题:
1.
def changeCard(self):#换牌操作 self.player1, self.player2 = self.player2, self.player1 self.player2, self.player3 = self.player3, self.player2
换牌操作时,我写成了下面的形式:
def changeCard(self): # 换牌操作 self.player1 = self.player2 self.player2= self.player1
这是犯了一个错误,这个错误代码实际上这两个值都是self.player2的,这就是一个错误,导致我后来牌并没有交换;这就是一个细节问题
2.把牌存入列表中进行遍历
card_list=[]#牌列表,存储54张牌 for i in a.card_king: card_list.append(i) for i in a.card_color: for j in a.card_number: card_list.append(i+j)
这一步没有想到,听了老师提示的思路,才尝试着慢慢写出来,先把牌放入一个列表中,然后运用for循环遍历,然后使用append()方法依次将牌加入列表中