案例—扑克牌(Python)

模拟一个斗地主发牌程序,使用Python实现对三个玩家进行手牌的派发。

import random


# 定义扑克牌类
class PokerCard:
    def __init__(self, rank, suit):
        self.rank = rank  # 点数
        self.suit = suit  # 花色

    # 返回牌的显示名称
    def __str__(self):
        return f"{self.suit}{self.rank}"

    # 定义牌的排序规则
    def __lt__(self, other):
        rank_order = '345678910JQKA2'  # 定义点数大小
        suit_order = {'♠': 4, '♥': 3, '♦': 2, '♣': 1}  # 定义花色大小
        # 处理大小王的比较
        if self.rank in ['小王', '大王'] or other.rank in ['小王', '大王']:
            if self.rank == '大王':
                return False  # 大王最大
            elif other.rank == '大王':
                return True
            elif self.rank == '小王':
                return False  # 小王次大
            elif other.rank == '小王':
                return True

        if self.rank == other.rank:
            return suit_order[self.suit] > suit_order[other.suit]
        return rank_order.index(self.rank) < rank_order.index(other.rank)


# 定义发牌类
class DouDiZhu:
    def __init__(self):
        self.suits = ['♠', '♥', '♦', '♣']  # 花色
        self.ranks = ['3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', '2']  # 点数
        self.deck = self.create_deck()  # 生成一副牌
        self.landlord_cards = []  # 地主牌
        self.players = {'A': [], 'B': [], 'C': []}  # 玩家手牌

    # 生成扑克牌
    def create_deck(self):
        deck = [PokerCard(rank, suit) for suit in self.suits for rank in self.ranks]
        deck += [PokerCard('小王', ''), PokerCard('大王', '')]  # 添加大小王
        return deck

    # 洗牌
    def shuffle(self):
        random.shuffle(self.deck)

    # 发牌
    def deal(self):
        self.players['A'] = sorted(self.deck[:17])
        self.players['B'] = sorted(self.deck[17:34])
        self.players['C'] = sorted(self.deck[34:51])
        self.landlord_cards = sorted(self.deck[51:])

    # 打印玩家手牌
    def show_hands(self, player_name=None):
        if player_name:
            print(f"{player_name}:{' '.join(map(str, self.players[player_name]))}")
        else:
            for player in self.players:
                print(f"{player}:{' '.join(map(str, self.players[player]))}")

    # 打印地主牌
    def show_landlord_cards(self):
        print(f"地主牌:{' '.join(map(str, self.landlord_cards))}")


# 主函数
def main():
    print("********** 欢迎进入 XX 斗地主 **********")
    player_a = input("请输入玩家姓名:")
    player_b = input("请输入玩家姓名:")
    player_c = input("请输入玩家姓名:")

    game = DouDiZhu()

    print("洗牌中...")
    game.shuffle()
    print("洗牌完成!")

    print("发牌中...")
    game.deal()
    print("发牌完成!")

    print(f"{player_a}:{' '.join(map(str, game.players['A']))}")
    print(f"{player_b}:{' '.join(map(str, game.players['B']))}")
    print(f"{player_c}:{' '.join(map(str, game.players['C']))}")

    landlord = input("谁叫地主? ")

    game.show_landlord_cards()

    if landlord == player_a:
        game.players['A'] += game.landlord_cards
        game.players['A'].sort()
    elif landlord == player_b:
        game.players['B'] += game.landlord_cards
        game.players['B'].sort()
    elif landlord == player_c:
        game.players['C'] += game.landlord_cards
        game.players['C'].sort()

    print(f"{player_a}:{' '.join(map(str, game.players['A']))}")
    print(f"{player_b}:{' '.join(map(str, game.players['B']))}")
    print(f"{player_c}:{' '.join(map(str, game.players['C']))}")


if __name__ == "__main__":
    main()
### Python GUI 扑克牌游戏示例代码 对于构建基于Python的GUI扑克牌游戏,可以采用Tkinter或者Pygame库来实现图形化界面。下面分别介绍这两种方式下的基本框架。 #### 使用Tkinter创建简单的扑克牌游戏 Tkinter是Python的标准GUI工具包之一,在许多场景下能够快速搭建用户交互式的程序[^1]。 ```python import tkinter as tk from PIL import Image, ImageTk class CardGameApp(tk.Tk): def __init__(self): super().__init__() # 初始化窗口设置 self.title('Simple Poker Game') self.geometry('800x600') # 加载并显示一张测试图片作为示范 img_path = 'path_to_card_image.png' image = Image.open(img_path) photo = ImageTk.PhotoImage(image) label_img = tk.Label(self, image=photo) label_img.image = photo label_img.pack() if __name__ == '__main__': app = CardGameApp() app.mainloop() ``` 这段代码展示了如何利用`tkinter`建立一个基础的应用程序结构,并通过PIL加载图像资源到界面上展示出来。为了完整的游戏逻辑还需要进一步扩展此模板,比如加入更多的卡片管理功能以及玩家操作处理机制等。 #### 利用Pygame制作更复杂的扑克牌游戏 如果希望得到更加丰富的视觉效果和动画支持,则可以选择Pygame这个专为多媒体应用设计的强大第三方库来进行开发。 ```python import pygame import sys pygame.init() screen_width = 800 screen_height = 600 screen = pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption('Advanced Poker Game with Pygame') background_color = (255, 255, 255) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() screen.fill(background_color) # 这里放置绘制卡牌和其他UI组件的相关代码... pygame.display.flip() ``` 上述脚本初始化了一个固定大小的游戏窗口,并设置了退出条件以便正常关闭应用程序。实际游戏中应当在此基础上增加更多特性,例如读取或渲染具体的扑克牌面图案、响应用户的鼠标点击事件等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值