python实现斗地主(发牌、展示牌)详细注释

python实现斗地主(发牌、展示牌)

import random

# 定义类
class Poker():
    # 定义扑克
    poke = []
    # 玩家的手牌
    playerOne = []
    playerTwo = []
    playerThree = []
    # 底牌
    holeCards = []

    # 初始化类时需要传递两个参数,
    def __init__(self, num, flower):
        self.num = num
        self.flower = flower

    # 重写方法,当调用Poker.poke时,相当于调用此方法
    def __str__(self) -> str:
        return f'{self.flower}{self.num}'

    @classmethod  # 可以通过类名调用,在类加载时初始化
    def prepareCards(cls):
        # 王
        king = ['大王', '小王']
        # 花色
        flower = ['♥', '♣', '♦', '♠']
        # 牌
        num = ['3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', "2"]
        # 双重循环,使用列表的追加方法,将牌添加到Poker里面,实际上是调用了Poker的__init__方法
        for n in num:
            for f in flower:
                # cls相当于Poker
                cls.poke.append(Poker(n, f))
        # 将王追加到扑克中
        cls.poke.append(king[0])
        cls.poke.append(king[1])

    @classmethod  # 洗牌方法
    def shuffle(cls):
        # 调用random包里面的shuffle方法,无返回值  return None
        random.shuffle(cls.poke)

    @classmethod  # 发牌
    def deal(cls):
		# 将已经打乱的牌,进行循环发牌,理解着就是一次发17张,因为索引是从0开始,所以start = 0
        for i in range(0, 54):
            if i < 17:
                # print(i)
                cls.playerOne.append(cls.poke[i])
			# 将17到34这牌发给玩家2
            if 17 <= i < 34:
                # print(i)
                cls.playerTwo.append(cls.poke[i])
            if 34 <= i < 51:
                # print(i)
                cls.playerThree.append(cls.poke[i])
			# 底牌
            if i >= 51:
                cls.holeCards.append(cls.poke[i])

    @classmethod
    def showPoke(cls):
        print('玩家1的牌:')
        for i in cls.playerOne:
            print(f'{i}', end=' ')
        print()
        print('玩家2的牌:')
        for i in cls.playerTwo:
            print(f'{i}', end=' ')
        print()
        print('玩家3的牌:', end='\n')
        for i in cls.playerThree:
            print(f'{i}', end=' ')
        print()
        print("底牌")
        for i in cls.holeCards:
            print(i, end=' ')


# 初始化
Poker.prepareCards()
# 打乱牌
Poker.shuffle()
# # 发牌
Poker.deal()
# # 展示牌
Poker.showPoke()

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我们开始实现斗地主游戏的主界面和发牌。 首先,我们需要安装必要的包: ```python pip install pygame ``` 接下来,我们先来实现主界面。创建一个 `main.py` 文件,并输入以下代码: ```python import pygame # 初始化pygame pygame.init() # 游戏窗口大小 WIDTH, HEIGHT = 800, 600 # 颜色定义 BLACK = (0, 0, 0) WHITE = (255, 255, 255) # 创建游戏窗口 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("斗地主") # 游戏循环 while True: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() # 绘制背景 screen.fill(WHITE) # 更新屏幕 pygame.display.update() ``` 在这个代码中,我们使用 `pygame` 模块创建了一个游戏窗口,并在游戏循环中处理了退出事件。同时,我们也绘制了一个白色的背景。 接下来,我们需要添加一些图片资源。在项目根目录下创建一个名为 `assets` 的文件夹,并在其中添加以下图片资源: - `background.png`: 游戏背景图片 - `start_button.png`: 开始按钮图片 接着修改 `main.py` 文件,添加以下代码: ```python import pygame # 初始化pygame pygame.init() # 游戏窗口大小 WIDTH, HEIGHT = 800, 600 # 颜色定义 BLACK = (0, 0, 0) WHITE = (255, 255, 255) # 加载图片资源 background_img = pygame.image.load("assets/background.png") start_button_img = pygame.image.load("assets/start_button.png") # 创建游戏窗口 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("斗地主") # 游戏循环 while True: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() # 绘制背景 screen.blit(background_img, (0, 0)) # 绘制开始按钮 screen.blit(start_button_img, (WIDTH // 2 - start_button_img.get_width() // 2, HEIGHT // 2 - start_button_img.get_height() // 2)) # 更新屏幕 pygame.display.update() ``` 在这个代码中,我们使用 `pygame.image.load()` 函数加载了两张图片资源,并在游戏循环中分别绘制了背景和开始按钮。 接下来,我们需要实现点击开始按钮后的发牌动画。我们先来创建一个 `Poker` 类,表示一张扑克。在 `main.py` 文件中添加以下代码: ```python class Poker: def __init__(self, value, suit): self.value = value self.suit = suit self.image = pygame.image.load(f"assets/{value}_of_{suit}.png") ``` 在这个代码中,我们定义了一个 `Poker` 类,表示一张扑克。该类有 `value` 和 `suit` 两个属性,分别表示值和花色。同时,我们也加载了该扑克的图片资源。 接下来,我们需要创建一个 `Deck` 类,表示一副扑克。在 `main.py` 文件中添加以下代码: ```python import random class Deck: values = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"] suits = ["spades", "hearts", "clubs", "diamonds"] def __init__(self): self.cards = [Poker(value, suit) for suit in self.suits for value in self.values] def shuffle(self): random.shuffle(self.cards) def deal(self, num_players=3): hands = [[] for _ in range(num_players)] for i in range(3): for j in range(num_players): hands[j].append(self.cards.pop()) return hands ``` 在这个代码中,我们定义了一个 `Deck` 类,表示一副扑克。该类有 `cards` 属性,表示所有的扑克。同时,我们也定义了 `shuffle()` 方法,表示洗操作;`deal()` 方法,表示发牌操作。 现在,我们已经可以发牌了。我们修改 `main.py` 文件,添加以下代码: ```python import time # ... # 创建一副扑克 deck = Deck() # 洗 deck.shuffle() # 发牌 hands = deck.deal() # 发牌动画 for i in range(3): for j in range(len(hands)): for k in range(i + 1): screen.blit(hands[j][k].image, (WIDTH // 2 - hands[j][k].image.get_width() // 2, HEIGHT // 2 - hands[j][k].image.get_height() // 2)) pygame.display.update() time.sleep(0.1) ``` 在这个代码中,我们先创建了一副扑克,并洗。接着发牌,并使用 `blit()` 函数在屏幕上绘制每一张。为了让发牌更加生动,我们使用了 `time.sleep()` 函数来控制每张绘制的时间间隔。 现在,我们已经实现斗地主游戏的主界面和发牌功能。运行 `main.py` 文件,即可开始游戏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值