Python撲克牌發牌(用類實現)

2021-10-06 02:25:28 字數 4169 閱讀 9237

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 定義撲克的花色,黑,紅,梅,方,小...