2. 題解✨
編寫程式, 4名牌手打牌,計算機隨機將52張牌(不含大小鬼)發給4名牌手,在螢幕上顯示每位牌手的牌。
設計出3個類:card類、hand類和poke類。
card類
代表一張牌,其中facenum欄位指出是牌面數字1~13,suit欄位指出的是花色,值「梅」為梅花,「方」為方塊,「紅」為紅心,「黑」為黑桃。
hand類
代表一手牌,可以認為是一位牌手手裡的牌,其中cards列表變數儲存牌手手裡的牌。可以增加牌、清空手裡的牌、把一張牌給別的牌手。
poke類
代表一副牌,可以把一副牌看作是有52張牌的牌手,所以繼承hand類。
this is a module with classes for playing cards.
牌手 1
:紅桃6 黑桃6 梅花a 方片6 黑桃2 梅花10 紅桃3 方片4 方片10 黑桃j 紅桃q 紅桃10 紅桃8
牌手 2
:梅花j 梅花9 紅桃7 紅桃2 方片k 黑桃k 梅花3 方片7 黑桃q 黑桃10 梅花q 梅花8 黑桃7
牌手 3
:梅花2 方片a 黑桃3 方片9 黑桃4 紅桃k 紅桃j 梅花7 紅桃4 方片2 梅花4 梅花6 紅桃5
牌手 4
:黑桃5 紅桃9 方片8 梅花5 方片j 黑桃a 梅花k 方片5 黑桃9 方片3 黑桃8 方片q 紅桃a
# card類:一張牌
class
card
:"""a playing card.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 # 牌面數字1~13
self.suit = suit # 花色
self.is_face_up = face_up # 是否顯示牌的正面,true為正面,false為反面
def__str__
(self)
:# 重寫print()方法,列印一張牌的資訊
if self.is_face_up:
rep = self.suit + self.rank
else
: rep =
'xx'
return rep
defpic_order
(self)
:# 牌的順序號
if self.rank ==
'a':
facenum =
1elif self.rank ==
'j':
facenum =
11elif self.rank ==
'q':
facenum =
12elif self.rank ==
'k':
facenum =
13else
: facenum =
int(self.rank)
if self.suit ==
'梅花'
: suit =
1elif self.suit ==
'方片'
: suit =
2elif self.suit ==
'紅桃'
: suit =
3else
: suit =
4return
(suit -1)
*13+ facenum
defflip
(self)
:# 翻牌方法
self.is_face_up =
not self.is_face_up
# hand類:一手牌
class
hand
:"""a hand of playing cards hand"""
def__init__
(self)
: self.cards =
# cards列表變數儲存牌手手裡的牌
def__str__
(self)
:# 重寫print()方法,列印出牌手的所有牌
if self.cards:
rep =
''for card in self.cards:
rep +=
str(card)
+'\t'
else
: rep =
'無牌'
return rep
defclear
(self)
:# 清空手裡的牌
self.cards =
defadd
(self, card)
:# 增加手裡的牌
defgive
(self, card, other_hand)
:# 把一張牌給其他選手
self.cards.remove(card)
other_hand.add(card)
# poke類:一副牌
# 繼承hand類
class
poke
(hand)
:"""poke類代表一副牌,可以看做是有52張牌的牌手,所以繼承hand類。由於其中cards列表變數要儲存52張牌
而且要發牌,洗牌,所以增加方法如下方法:"""
defpopulate
(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)
# 打亂牌的順序
defdeal
(self, hands, per_hand=13)
:# 將牌發給玩家,每人預設13張牌
for rounds in
range
(per_hand)
:for hand in hands:
if self.cards:
top_card = self.cards[0]
self.cards.remove(top_card)
hand.add(top_card)
# self.give(top_card,hand) #上兩句可以用此句替換
else
:print
('不能繼續發牌了,牌已經發完了!'
)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)
# 發給每人13張牌
n =1for hand in players:
print
('牌手'
, n, end=
':')
print
(hand)
n = n +
1
Python用100行實現撲克牌發牌小程式
案例 將一副不含大小王的撲克牌隨機分發給4位玩家,每人13張 示例 class card 一張牌 ranks a 2 3 4 5 6 7 8 9 10 j q k 牌面數字a k suits 牌面花色 def init self,rank,suit,face up true self.rank ra...
撲克牌的隨機發牌程式
乙個撲克牌遊戲 準確的說就是 鬥地主 本來是打算取0 53的隨機數,取過的就做乙個標識,迴圈直至全部完。但是細想一下,效率實在是太低了,最後決定用亂序的方式,感覺還不錯。不知道還有沒有更好的辦法,請大家多多指教!using system using system.collections namesp...
模擬撲克牌的洗牌發牌
在記憶體中模擬出一副牌,然後模擬洗牌,發牌等動作 流程 構建一副牌儲存到乙個陣列中 洗牌 建立玩家 向玩家發牌 輸出每個玩家的牌 include include include include include 一副牌的數量 define card count 54 定義撲克的花色,黑,紅,梅,方,小...