扑克牌项目


这是一个完整的扑克牌项目,包含创建、洗牌、发牌和游戏模拟功能。

python

import random

class Card:

表示一张扑克牌的类

suits = ["♠", "♥", "♦", "♣"]

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

]

def __init__(self, suit, rank):

self.suit = suit

self.rank = rank

def __str__(self):

return f"{self.suits[self.suit]}{self.ranks[self.rank]}

def __repr__(self):

return self.__str__

def get_value(self):

获取牌的点数

if self.rank >= 9: # J, Q, K, A

if self.rank == 12: # A

return (1, 11) # A可以是1点或11点

return 10

return self.rank + 2

class Deck:

表示一副扑克牌的类

def __init__(self):

self.cards = []

self.create_deck

def create_deck(self):

创建一副标准的52张扑克牌

self.cards = []

for suit in range(4):

for rank in range(13):

self.cards.append(Card(suit, rank))

def shuffle(self):

洗牌

random.shuffle(self.cards)

def deal_card(self):

从牌堆顶部发一张牌

if len(self.cards) > 0:

return self.cards.pop

return None

def __len__(self):

return len(self.cards)

def __str__(self):

return f"牌堆中有 {len(self)} 张牌

class Player:

表示一个玩家

def __init__(self, name):

self.name = name

self.hand = []

self.chips = 1000 # 初始筹码

def receive_card(self, card):

接收一张牌

self.hand.appendand.append(card)

def clear_hand(self):

清空手牌

self.hand = []

def get_hand_value(self):

计算手牌总点数

value = 0

aces = 0

for card in self.hand:

card_value = card.get_value

if isinstance(card_value, tuple): # A

value += 11

aces += 1

else:

value += card_value

# 处理A的点数

while value > 21 and aces > 0:

value -= 10

aces -= 1

return value

def place_bet(self, amount):

amount):

下注

if amount

self.chips -= amount

return amount

else:

bet = self.chips

self.chips = 0

return bet

def win_bet(self, amount):

赢得下注

self.chips += amount

def __str__(self):

hand_str = ", ".join(str(card) for card in self.hand)

return f"{self.name}: {hand_str} (点数: {self.get_hand_value})

class PokerGame:

简单的扑克游戏类

def __init__(self, player_names):

self.deck = Deck

self.deck.shuffle

self.players = [Player(name) for name in player_names]

self.dealer = Player("庄家")

def deal_initial_cards(self):

发初始牌

for _ in range(2):

for player in self.players + [self.dealer]:

player.receive_card(self.deck.deal_card)

def player_turn(self, player):

玩家回合

print(f"\

{player.name}的回合:")

print(player)

while player.get_hand_value

action = input("要牌(h)还是停牌(s)? ").lower

if action == 'h':

player.receive_card(self.deck.deal_card)

print(player)

if player.get_hand_value > 21:

print(f"{player.name} 爆牌了!")

!")

break

elif action == 's':

break

def dealer_turn(self):

庄家回合

print(f"\

{self.dealer.name}的回合:")

print(self.dealer)

# 庄家规则家规则: 点数小于17必须继续要牌

while self.dealer.get_hand_value

self.dealer.receive_card(self.deck.deal_card)

print(self.dealer)

if self.dealer.get_hand_value > 21:

print(f"{self.dealer.name} 爆牌了!")

break

def determine_winners(self):

确定赢家

dealer_value = self.dealer.get_hand_value

print("\

=== 游戏结果 ===")

print(f"庄家: {dealer_value}")

for player in self.players:

player_value = player.get_hand_value

print(f"{player.name}: {player_value}")

if player_value > 21:

print(f"{player.name} 输掉了下注")

elif dealer_value > 21 or player_value > dealer_value:

print(f"{player.name} 赢了!")

player.win_bet(20) # 简单起见,固定赔率

elif player_value

print(f"{player.name} 输掉了下注")

else:

print(f"{player.name} 平局")

局")

def play_round(self):

进行一轮游戏

# 重置牌局

self.deck = Deck

self.deck.shuffle

for player in self.players + [self.dealer]:

player.clear_hand

# 下注

print("\

=== 下注阶段 ===")

for player in self.players:

print(f"{player.name} 的筹码: {player.chips}")

bet = int(input(f"{player.name} 请下注 (1-{min(100, player.chips)}): "))

player.place_bet(bet)

# 发牌

self.deal_initial_cards

# 玩家回合

for player in self.players:

self.player_turn(player)

# 庄家回合

self.dealer_turn

# 结算

self.determine_winners

def demonstrate_poker_functions:

演示扑克牌的基本功能

print("=== 扑克牌功能演示 ===\

)

# 创建一副牌并洗牌

deck = Deck

print("初始牌堆:", deck)

deck.shuffle

print("洗牌后:", deck)

# 展示前5张牌

print("\

前5张牌:")

for i in range(5):

card = deck.deal_card

print(f"第{i+1}张: {card}, 点数: {card.get_value}")

print("\

发牌后剩余:", deck)

扑克牌项目

# 创建玩家并发牌

print("\

=== 玩家示例 ===")

player1 = Player("小明")

player2 = Player("小红")

# 重置牌堆

deck = Deck

deck.shuffle

# 发两张牌给每个玩家

for _ in range(2):

player1.receive_card(deck.deal_card)

player2.receive_card(deck.deal_card)

print(player1)

print(player2)

def main:

主函数

print("欢迎来到扑克牌游戏!")

# 演示基本功能

demonstrate_poker_functions

# 是否开始游戏

start_game = input("\

是否开始游戏? (y/n): ").lower

if start_game == 'y':

player_count = int(input("请输入玩家数量: "))

player_names = []

for i in range(player_count):

name = input(f"请输入玩家{i+1}的名字: ")

player_names.append(name)

game = PokerGame(player_names)

while True:

game.play_round

continue_game = input("\

是否继续下一轮? (y/n): ").lower

if continue_game != 'y':

break

# 检查是否有玩家没有筹码

active_players = [p for p in game.players if p.chips > 0]

if not active_players:

悟空德州

print("所有玩家都没有筹码了,游戏结束!")

break

if __name__ == "__main__":

main

项目特点

1. 完整的扑克牌系统:

  • `Card` 类表示单表示单张扑克牌
  • `Deck` 类表示一副完整的扑克牌
  • `Player `Player` 类表示玩家
  • 2. 核心功能:

  • 创建和创建和洗牌
  • 发牌
  • 计算手牌点数
  • 处理特殊牌型(如A可算作1或11)
  • 3. 游戏模拟:

  • 简单的21点游戏逻辑
  • 玩家与庄家对战
  • 筹码管理
  • 4. 扩展性:

  • 易于添加新游戏规则
  • 支持多个玩家
  • 模块化设计便于维护
  • 使用方法

    1. 运行程序后,会先演示基本的扑克牌功能

    2. 可以选择开始游戏,输入玩家数量和名称

    3. 每轮游戏中玩家可以下注、要牌或停牌

    4. 游戏会持续直到玩家选择退出或没有筹码

    这个项目展示了面向对象编程的基本原则,适合学习Python类和对象的概念。