1.游戏介绍
四名牌手打牌,电脑随机將52张牌(不合大、小王)发给四名牌手,并在屏幕上显示每位牌手的牌。
2.程序设计步骤
设计类
发牌程序设计出三个类: Card类、Hand类和Poke类。 Card类
Card类代表一张牌,其中,FaceNum字段指的是牌面数字1~13,Suit字段指的是花色,”梅”为梅花,”方”为方块,”红”为红桃,”黑”为黑桃。 Hand类
Hand类代表手牌(一个玩家手里拿的牌),可以认为是一位牌手手里的牌,其中,cards列表变量存储牌手手中的牌。可以增加牌、清空手里的牌、把一张牌给别的牌手等操作。
Poke类
Poke类代表一副牌,我们可以将一副牌看作是有52张牌的牌手,所以继承Hand类。由于其中cards列表变量要存储52张牌,而且要进行发牌、洗牌操作,所以增加如下的方法。 主程序
主程序比较简单,因为有四个牌手,所以生成players列表存储初始化的四位牌手。生成一副牌的对象实例poke1,调用populate()方法生成有52张牌的一副牌,调用huffle()方法洗牌打乱顺序,调用deal(players,13)方法分别给每位玩家发13张牌,最后示四位牌手所有的牌。
3.部分代码注释
1.定义扑克牌的牌面: 牌面数字:1—13 梅为梅花,方为方钻,红为红心,黑为黑桃
2.定义翻牌方法
3.定义牌的顺序号
4.生成一副牌
5.洗牌
6.给玩家发牌,每人默认13张牌
4.参考代码
""" A playing card"""
RANKS=["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
SUITS=["梅","方","红","黑"]
def __init__(self,rank,suit,face_up=True):
self.rank=rank
self.suit=suit
self.is_face_up=face_up
def __str__(self):
if self.is_face_up:
rep=self.suit+self.rank
else:
rep="XX"
return rep
def flip(self):
self.is_face_up=not self.is_face_up
def pic_order(self):
if self.rank=="A":
FaceNum=1
elif self.rank=="J":
FaceNum=11
elif self.rank=="Q":
FaceNum=12
elif self.rank=="K":
FaceNum=13
else:
FaceNum=int(self.rank)
if self.suit=="梅":
Suit=1
elif self.suit=="方":
Suit=2
elif self.suit == "红":
Suit = 3
else:
Suit=4
return (Suit-1)*13+FaceNum
class Hand():
"""A hand of playing cards."""
def __init__(self):
self.cards=[]
def __str__(self):
if self.cards:
rep=""
for card in self.cards:
rep+=str(card)+"\t"
else:
rep="无牌"
return rep
def clear(self):
self.cards=[]
def add(self,card):
self.cards.append(card)
def give(self,card,other_hand):
self.cards.remove(card)
other_hand.add(card)
class Poke(Hand):
"""A deck of playing cards"""
def populate(self):
for suit in Card.SUITS:
for rank in Card.RANKS:
self.add(Card(rank,suit))
def shuffle(self):
import random
random.shuffle(self.cards)
def deal(self,hands,per_hand=13):
for rounds in range(per_hand):
for hand in hands:
top_card=self.cards[0]
self.cards.remove(top_card)
hand.add(top_card)
if __name__=="__main__":
print("This is a module with classes for playing cards.")
players=[Hand(),Hand(),Hand(),Hand()]
poke1=Poke()
poke1.populate()
poke1.shuffle()
poke1.deal(players,13)
n=1
for hand in players:
print("牌手",n,end=":")
print(hand)
n=n+1
input("\nPress the enter key to exit.")
来源:oschina
链接:https://my.oschina.net/u/4460885/blog/3207787