4.5 python 实战之扑克牌游戏 2021-06-20

本文通过Python实现了一款扑克牌游戏,包括生成扑克牌、发牌、洗牌和整理玩家手牌等功能。玩家可以选择执行不同的操作,如打印所有牌、发牌、洗牌和整理牌等。游戏支持多个玩家,并且在洗牌后会根据数字和花色对牌进行排序。
摘要由CSDN通过智能技术生成

前面我们讲了python的爬虫,其实python也可以制作游戏,又好玩又有趣,这一章带大家来做一个小游戏来体验一下:
下面我们在代码中来了解更多细节:

游戏规则:

一副扑克牌52张(除了大小王), 4个玩家在玩,模拟系统发牌、洗牌和整理牌,具体需求如下:
【1】先按照顺序打印出一副扑克牌
【2】在没有洗牌的情况下,输出发到四个玩家的扑克牌
【3】实现对扑克牌的洗牌,然后输出发到四个玩家的扑克牌
【4】对于洗牌后的四个玩家的扑克牌进行整理
整理规则:
1:数字从小到大 (3、4、5、6、7、8、9、10、J、Q、K、A、2)
2:在数字相同的情况下,按照花色(黑、红、梅、方)的顺序

"""
扑克牌游戏
"""
import time
import random

# 扑克牌的基础数据
POKER_DICT = {
    'number': ('3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', '2'),
    # 对应的索引排序 便于我们后面做整理排序
    #  0    1    2    3    4    5    6     7    8    9    10   11   12
    'type': ("♠", "♥", "♦", "♣")
    #  0   1    2    3
}


# 比如: 黑桃10  -->  10 00
#    	方块6   -->   06 02


class PokerGame:
    # 构造函数
    def __init__(self, poker_number: int = 1, person_number: int = 4):
        self.poker_number = poker_number  # 几付扑克牌
        self.person_number = person_number  # 玩家数量
        # 定义变量存储数据
        self.poker_list = []
        # 定义集合存储玩家的牌
        self.person_poker_list = []  # [[第一个玩家],[2],[3],[4]]
        # 定义集合存储整理完玩家的牌
        # self.person_sorted_poker_list = [] # 整理完的4个玩家的牌

    def start(self):
        print("正在启动游戏.....")
        time.sleep(2)  # 让程序暂停2秒
        print("游戏已启动")
        while True:
            print("\n" + "=" * 40 + "扑克牌游戏" + "=" * 40)
            input_number = input("请选择要执行的操作【1-生成牌 2-打印所有牌 3-打印玩家牌 4-发牌 5-洗牌 6-整理牌 7-退出】:")
            # 根据输入的数字,来进行条件选择
            if input_number == "1":
                # 生成牌
                print("正在生成扑克牌.....")
                time.sleep(2)  # 让程序暂停2秒
                self.build()
                print("扑克牌生成完成!")
            elif input_number == "2":
                # 打印所有的牌
                print("正在打印所有的扑克牌.....")
                self.print_all_poker(self.poker_list)
            elif input_number == "3":
                # 打印玩家的牌
                print("正在打印玩家的扑克牌.....")
                self.print_person_poker()
            elif input_number == "4":
                # 发牌
                print("正在发牌.....")
                self.deal_poker()
                print("发牌完毕.....")
            elif input_number == "5":
                # 洗牌
                print("正在洗牌.....")
                random.shuffle(self.poker_list)  # 把list集合打乱
                print("洗牌完毕.....")

            elif input_number == "6":
                # 整理牌
                print("正在整理玩家的牌.....")
                self.person_sorted_poker()
                print("玩家的牌整理完毕.....")

            elif input_number == "7":
                # 退出
                print("游戏已退出,再见!")
                break
            else:
                print("输入的数字不符合要求,请重新输入!")

    def build(self):
        """生成扑克牌"""
        # 定义一个Poker数字
        poker_number = []
        # 生成
        for number in range(13):
            poker_number.append("%02d" % number)
        # 定义Poker花色
        poker_type = ["00", "01", "02", "03"]
        # 生成牌  几付牌--》数字--》花色
        for pair in range(self.poker_number):
            for number in poker_number:
                for type in poker_type:
                    self.poker_list.append(number + type)

    def print_all_poker(self, print_list: list):
        """打印所有的牌"""
        for one_poker in print_list:
            # 0601 --> 红桃9
            print("%s%s" % (POKER_DICT['type'][int(one_poker[2:])], POKER_DICT['number'][int(one_poker[:2])]), end="\t")

    def deal_poker(self):
        """发牌"""
        for person_index in range(self.person_number):
            # 定义一个玩家的临时的集合 第一次:0  第二次:1  第三次:2, 第四次:3
            temp_list = []
            # 遍历牌
            for index in range(len(self.poker_list)):
                # 根据索引判断
                if index % self.person_number == person_index:  # 第一玩家:0  4   8  12   16
                    # 附加到这个玩家的集合                        # 第二玩家:1  5  9  13   17
                    temp_list.append(self.poker_list[index])  	# 第三玩家: 2  6  10  14  18
                    											# 第四玩家:3   7  11  15  19
            # 把这个玩家的牌添加到集合
            self.person_poker_list.append(temp_list)

    def print_person_poker(self):
        """打印玩家的扑克"""
        for index, value in enumerate(self.person_poker_list):
            # 换行:
            print()
            # 打印提示
            print("第%d个玩家的牌:" % (index + 1), end="")
            self.print_all_poker(self.person_poker_list[index])

    def person_sorted_poker(self):
        """整理玩家手上的牌"""
        # 遍历
        for one_person_poker in self.person_poker_list:
            # 附加到整理好的牌中
            one_person_poker.sort()  # 改变原来的集合


if __name__ == '__main__':
    # 实例化一个游戏
    game01 = PokerGame(1,3)
    # 开始游戏
    game01.start()

# 知识点:条件选择 ,循环,  List,  Dict ,  面向对象的思维

我们来看一下运行的结果:
在这里插入图片描述

代码是完整的,大家可以自己运行试试哦

下一章爬虫与反爬虫

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值