游戏动态

二维阵列中的扑克奇旅

2025-12-17 12:36:06

下面我将使用Python创建一个二维数组来表示一副标准的52张扑克牌,并展示如何操作和使用这个数据结构。

python

class PokerDeck:

def __init__(self):

self.suits = ["♠", "♥", "♦", "♣"] # 花色: 黑桃、红心、方块、梅花

self.ranks = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]

self.deck = self.create_deck

def create_deck(self):

创建一副完整的扑克牌

deck = []

for suit in self.suits:

suit_cards = []

for rank in self.ranks:

suit_cards.append(f"{rank}{suit}")

deck.append(suit_cards)

return deck

def display_deck(self):

显示整副扑克牌

print("完整扑克牌:")

for i, suit in enumerate(self.deck):

print(f"{self.suits[i]}花色: ", end="")

for card in suit:

print(f"{card} ", end="")

print

def shuffle_deck(self):

洗牌

  • 打乱二维数组中每行的顺序"""
  • import random

    shuffled_deck = []

    for suit in self.deck:

    二维阵列中的扑克奇旅

    random.shuffle(suit)

    shuffled_deck.append(suit)

    悟空德州官网入口

    self.deck = shuffled_deck

    def deal_card(self, suit_index=None, rank_index=None):

    发牌

  • 从特定位置或随机位置发一张牌"""
  • if suit_index is None or rank_index is None:

    suit_index = random.randint(0, len(self len(self.suits)-1)

    rank_index = random.randint(0, len(self.ranks)-1)

    # 检查该位置的牌是否还在

    while len(self.deck[suit_index])

    suit_index = (suit_index + 1) % len(self.suits)

    rank_index = 0

    return self.deck[suit_index].pop(rank_index)

    _index)

    def reset_deck(self):

    重置牌堆

  • 恢复完整的52张牌"""
  • self.deck = self.create_deck

    # 演示代码

    if __name__ == "__main__":

    poker = PokerDeck

    # 显示原始扑克牌

    print("原始扑克牌:")

    poker.display_deck

    print("\

    + "="*50 + "\

    )

    # 洗牌

    poker.shuffle_deck

    print("洗牌后的扑克牌:")

    poker.display_deck

    print("\

    + "="*50 + "\

    )

    # 发几张牌

    print("随机发5张牌:")

    for i in range(5):

    card = poker.deal_card

    print(f"第{i+1}张牌: {card}")

    print("\

    + "="*50 + "\

    )

    # 显示剩余牌

    print("发牌后剩余的扑克牌:")

    poker.display_deck

    代码解释

    1. PokerDeck类:封装了扑克牌的所有操作

  • `suits`:存储四种花色
  • `ranks`:存储13种牌面值
  • `deck`:二维数组,存储完整的扑克牌
  • 2. 主要方法

  • `create_deck`:初始化完整的52张扑克牌
  • `display_deck`:以易读格式显示整副牌
  • `shuffle_deck`:洗牌功能
  • `deal_card`:从牌堆中发牌
  • `reset_deck`:重置牌堆为初始状态
  • 运行结果示例

    原始扑克牌:

    ♠花色: A♠ 2♠ 3♠ 4♠ 5♠ 6♠ 7♠ 8♠ 9♠ 10♠ J♠ Q♠ K♠

    ♥花色: A♥ 2♥ 3♥ 4♥ 5♥ 6♥ 7♥ 8♥ 9♥ 10♥ J♥ Q♥ K♥

    ♦花色: A♦ 2♦ 3♦ 4♦ 5♦ 6♦ 7♦ 8♦ 9♦ 10♦ J♦ Q♦ K♦

    ♣花色: A♣ 2♣ 3♣ 4♣ 5♣ 6♣ 7♣ 8♣ 9♣ 10♣ J♣ Q♣ K♣

    ==================================================

    洗牌后的扑克牌:

    ♠花色: 5♠ 8♠ J♠ 2♠ Q♠ 3♠ 9♠ K♠ 7♠ A♠ 4♠ 6♠ 10♠

    ♥花色: 10♥ 4♥ 8♥ A♥ 7♥ 2♥ 9♥ Q♥ 6♥ 3♥ J♥ 5♥ K♥

    ♦花色: 7♦ 5♦ Q♦ 10♦ 8♦ 4♦ 3♦ J♦ A♦ 2♦ 6♦ K♦ 9♦

    ♣花色: 9♣ K♣ 8♣ 3♣ 7♣ 6♣ 2♣ 10♣ Q♣ 4♣ A♣ J♣ 5♣

    ==================================================

    随机发5张牌:

    第1张牌: 6♣

    第2张牌: 4♥

    第3张牌: 9♠

    第4张牌: 3♦

    第5张牌: 10♥

    ==================================================

    发牌后剩余的扑克牌:

    ♠花色: 5♠ 8♠ J♠ 2♠ Q♠ 3♠ K♠ 7♠ A♠ 4♠ 10♠

    ♥花色: 8♥ A♥ 7♥ 2♥ 9♥ Q♥ 6♥ J♥ 5♥ K♥

    ♦花色: 7♦ 5♦ Q♦ 10♦ 8♦ 4♦ J♦ A♦ 2♦ K♦ 9♦

    ♣花色: 9♣ K♣ 8♣ 3♣ 7♣ 2♣ 10♣ Q♣ 4♣ A♣ J♣

    这种二维数组结构非常适合表示扑克牌,因为它自然地反映了扑克牌的组织方式:按花色分组,每组包含相同花色的所有牌面值。

    Copyright © 悟空德州.