吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5660|回复: 18
收起左侧

[Python 转载] 炸金花小程序脚本

  [复制链接]
miracle2016 发表于 2021-7-15 15:10
[Python] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# coding:utf-8
# coding:utf-8
import random
 
 
def pokers():
    # 生成2-11的列表
    num = list(i for i in range(2, 11))
    # 加上J Q K A
    num.extend('JQKA')
    # 定义扑克牌的花色
    color = ('梅花', '方块', '红桃', '黑桃')
    # 生成一副52张的牌的列表并返回
    poker = [(m, n) for m in num for n in color]
    # 返回扑克牌
    return poker
 
 
# 生成玩家列表
def sure_names():
    # 输入玩家姓名,或者自动生成5个玩家
    x = input('自己输入玩家姓名或者\n输入N则自动生成五个玩家').strip()
    gamers = []
    if x in ['N', 'n']:
        # 列表生成式生成5个玩家
        gamers = [f'玩家{i + 1}' for i in range(5)]
    else:
        # 增加刚输入的玩家
        gamers.append(x)
        # 一直让用户输入玩家姓名直到输入N,n 输入结束,或者超过14个玩家结束并生成玩家列表
        while True:
            gamer = input('请输入玩家姓名:\n 输入N则结束输入')
            if gamer not in ['N', 'n']:
                gamers.append(gamer)
                length_gamer = len(gamers)
                if length_gamer > 14:
                    print('人数过多,牌不够分了')
                    break
            else:
                break
    # 返回玩家列表
    return gamers
 
 
# 给每个玩家发牌:
def hand_out_card(gamers, one_poker):
    # 定义一个玩家的空字典用来存储玩家和他们的牌
    gamer_pork = {}
    for i in gamers:
        # 判断一下剩余的扑克牌数量
        # print(len(one_poker))
        # 每个人随机发三张牌,并将发掉的牌从牌堆里剔除掉以免发重
        gamer_pork[i] = [one_poker.pop(random.randint(0, len(one_poker) - 1)) for i in range(3)]
        # 打印每个人手里的扑克牌
        # print(gamer_pork)
    # 返回每个人手里的牌的字典
    return gamer_pork
 
 
class GamerPork(object):
    def __init__(self, gamer_pork):
        # 获取玩家姓名
        self.name = gamer_pork[0]
        # 获取玩家的扑克牌
        self.pork = gamer_pork[1]
        # 定义一个新的玩家处理后的牌列表
        self.new_pork = []
        # 将处理后的牌按分类,大小,花色定义
        self.i_type = None
        self.max_number = None
        self.max_colour = None
        self.data = None
 
    # 定义函数用来分类玩家手上的牌属于豹子还是同花顺等
    def class_pork(self):
        # 定义一个可以将牌中不能识别的字符串全部替换能识别的字段
        deal_pork_resign = {'J': 11, 'Q': 12, 'K': 13, 'A': 14, '红桃': 4, '方块': 3, '黑桃': 2, '梅花': 1}
        for i in self.pork:
            if i[0] in deal_pork_resign:
                new_pork_list_number = deal_pork_resign[i[0]]
            else:
                new_pork_list_number = i[0]
            if i[1] in deal_pork_resign:
                new_pork_list_colour = deal_pork_resign[i[1]]
            else:
                new_pork_list_colour = i[1]
            self.new_pork.append((new_pork_list_number, new_pork_list_colour))
 
    def deal_pork(self):
        # 重新排列组合一下牌的数值以及花色
        new_pork_number = sorted({i[0] for i in self.new_pork})
        new_pork_colour = sorted({i[1] for i in self.new_pork})
        # 牌的类型豹子为5,顺金为4, 顺子为3, 对子为2,单牌为1
        # 定义豹子类型,并将牌值也一并传入列表
        # 判断是否为豹子
        if len(new_pork_number) == 1:
            self.i_type = 5
            self.max_number = new_pork_number[0]
            # 豹子不存在花色大小的问题
            self.max_colour = new_pork_colour[2]
        # 判断是否为对子
        elif len(new_pork_number) == 2:
            self.i_type = 2
            # 这里取第二张牌必定是对子的那个
            self.max_number = new_pork_number[1]
            # 判断花色
            if self.new_pork[0][0] == self.new_pork[1][0]:
                self.max_colour = max(self.new_pork[0][1], self.new_pork[1][1])
            if self.new_pork[0][0] == self.new_pork[2][0]:
                self.max_colour = max(self.new_pork[0][1], self.new_pork[2][1])
            if self.new_pork[2][0] == self.new_pork[1][0]:
                self.max_colour = max(self.new_pork[2][1], self.new_pork[1][1])
        else:
            # 判断是否为顺子
            if new_pork_number[2] - new_pork_number[1] == 1 and new_pork_number[2] - new_pork_number[0] == 2:
                # 判断是否为顺金,顺金则花色只有一种
                if len(new_pork_colour) == 1:
                    self.i_type = 4
                    self.max_number = new_pork_number[2]
                    # 顺金也不存在花色大小的问题
                    self.max_colour = new_pork_colour[0]
                # 顺子
                else:
                    self.i_type = 3
                    self.max_number = new_pork_number[2]
                    # 顺子的最大的数字的花色
                    for i, v in enumerate(self.new_pork):
                        if new_pork_number[2] == v[0]:
                            self.max_colour = self.new_pork[i][1]
            # 判断是否为单数
            else:
                self.i_type = 1
                self.max_number = new_pork_number[2]
                # 最大数的花色
                for i, v in enumerate(self.new_pork):
                    if new_pork_number[2] == v[0]:
                        self.max_colour = self.new_pork[i][1]
        self.data = (self.i_type, self.max_number, self.max_colour)
 
def judge_winner(gamer_pork_list):
    # 按照data进行降序排列
    gamer_pork_list.sort(key=lambda x : x.data, reverse=True)
 
    winner = gamer_pork_list[0].name
    return winner
 
def main():
    # 首先生成一副扑克牌
    one_poker = pokers()
    # 确定玩家人数及其姓名
    gamers = sure_names()
    # 打印玩家列表
    print(gamers)
    print('='*100)
    # 发牌
    gamer_pork_dicts = hand_out_card(gamers, one_poker)
    # 输出每个人手里的牌
    print(gamer_pork_dicts)
    print('=' * 100)
    # 定义一个处理后的玩家集合
    gamer_pork_list = []
    for k in gamer_pork_dicts.items():
        gamer = GamerPork(k)
        gamer.class_pork()
        gamer.deal_pork()
        gamer_pork_list.append(gamer)
    # 判断谁是赢家
    winner = judge_winner(gamer_pork_list)
    print(f'最后的大赢家为{winner}')
 
 
if __name__ == '__main__':
    main()

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
cabbage7 + 1 + 1 谢谢@Thanks!
joivyhnman + 1 + 1 热心回复!
ll52wj1pjo + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| miracle2016 发表于 2021-7-17 08:48
joivyhnman 发表于 2021-7-15 15:27
很厉害啊。一直在学python。就是总是对类编程,和函数编程。搞不明白。函数编程还能理解点,涉及到类编程, ...

类你也可以理解成一个容器,跟字典其实是一样的,self.x 就是字典的键,self.x= ??? ???就是字典的值,然后你就明白了,想要啥就直接调用类的键就可以得到类的值,类下面的def 就是类的方法,你可以通过方法给类的键赋值,我的理解就是这样,希望可以帮到你
 楼主| miracle2016 发表于 2021-7-15 15:11
炸金花小程序脚本,,欢迎指教!

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
jwqwerty + 1 + 1 我很赞同

查看全部评分

joivyhnman 发表于 2021-7-15 15:27
很厉害啊。一直在学python。就是总是对类编程,和函数编程。搞不明白。函数编程还能理解点,涉及到类编程,就懵逼了。
287166966 发表于 2021-7-15 16:27
炸金花百分比赢了
bdcpc 发表于 2021-7-15 16:35
厉害了我的哥。
Super丶张德帅 发表于 2021-7-15 16:37
怎么才能玩炸金花啊
 楼主| miracle2016 发表于 2021-7-17 08:48

这个可能需要前段的知识,把代码图形化,或者做个pygame,然后就可以玩了
joivyhnman 发表于 2021-7-17 09:13
miracle2016 发表于 2021-7-17 08:48
类你也可以理解成一个容器,跟字典其实是一样的,self.x 就是字典的键,self.x= ??? ???就是字典的值,然 ...

谢谢。有点感觉了。
闭上的眼镜 发表于 2021-7-17 09:51
感谢分享!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-5-25 18:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表