A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秋几 初级黑马   /  2018-10-7 17:07  /  959 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import random


class Poke:
    # 定义初始化牌列表和每个玩家发牌后手里牌数的列表
    pokes = []
    player1 = []
    player2 = []
    player3 = []
    last = None

    # 每一张牌为一个对象,给它属性花色和数字
    def __init__(self, flower, num):
        self.flower = flower
        self.num = num

    # 返回一张扑克牌,包含花色和数字
    def __str__(self):
        return "%s%s" % (self.flower, self.num)

    # 因为洗牌,发牌,初始化牌都是针对所有牌操作的,
    # 所以定义为类方法比较好,单个牌洗牌发牌的意义不大

    # 初始化牌
    @classmethod
    def init_poke(cls):
        flowers = ("♠", "♥", "♣", "♦")
        nums = ("2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A")
        kings = {"big": "大王", "small": "小王"}
        for f in flowers:
            for n in nums:
                p = Poke(f, n)
                cls.pokes.append(p)
        cls.pokes.append(kings["big"])
        cls.pokes.append(kings["small"])

    # 洗牌  第一种方法 从牌的第一张开始,随机生成一张互换位置,相当于互换54
    @classmethod
    def wash_poke(cls):
        for i in range(53):
            num1 = random.randint(0, 53)
            Poke.pokes, Poke.pokes[num1] = Poke.pokes[num1], Poke.pokes

    # 洗牌  第二种方法 牌分成两部分,第一部分的选择一张随机插入到后面一部分
    @classmethod
    def wash1_poke(cls):
        for i in range(28, 54):
            Poke.pokes.insert(i, Poke.pokes.pop(0))

    # 发牌
    @classmethod
    def send_poke(cls):
        while True:
            if len(Poke.pokes) <= 3:
                break
            Poke.player1.append(Poke.pokes.pop(0))
            Poke.player2.append(Poke.pokes.pop(0))
            Poke.player3.append(Poke.pokes.pop(0))
        Poke.last = tuple(Poke.pokes)  # 因为底牌不变,做成元组会比较好一点

    # 显示牌的序列状态,在没有发牌以前临时使用
    @classmethod
    def show(cls):
        for a in cls.pokes:
            print(a, end="\t")
        print()

    # 显示玩家以及底牌
    @classmethod
    def player_show(cls):
        print("第一位玩家的牌是:", end="")
        for a in cls.player1:
            print(a, end="\t")
        print()
        print("第二位玩家的牌是:", end="")
        for a in cls.player2:
            print(a, end="\t")
        print()
        print("第三位玩家的牌是:", end="")
        for a in cls.player3:
            print(a, end="\t")
        print()
        print("最后的底牌是:", end="")
        for a in cls.last:
            print(a, end="\t")
        print()


Poke.init_poke()
Poke.show()
# Poke.wash_poke()  # 第一种洗牌方式
Poke.wash1_poke()  # 第二种洗牌方式
Poke.show()
Poke.send_poke()
Poke.player_show()

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马