点击注册
点击注册
.
16
2022
03

Python实现炸金花游戏

发布日期:2022-03-16 13:09    点击次数:111

Python实现炸金花游戏

在B站学习Python的视频上,遇到一个题目,挺有意思,试着实现了一下,记录下来!题目如下:#### 游戏规则:一付扑克牌,去掉大小王,每个玩家发3张牌,最后比大小棋牌游戏,看谁赢。有以下几种牌:豹子:三张一样的牌,如3张6.顺金:又称同花顺,即3张同样花色的顺子, 如红桃 5、6、7顺子:又称拖拉机,花色不同,但是顺子,如红桃5、方片6、黑桃7,组成的顺子对子:2张牌一样单张:单张最大的是A这几种牌的大小顺序为, **豹子>顺金>顺子>对子>单张**#### 需程序实现的点:先生成一付完整的扑克牌给5个玩家随机发牌统一开牌,比大小,输出赢家是谁阅读提示:先从main()函数往回看,是如何调用的!#!/usr/bin/env python 3.9.5 # -*- coding: utf-8 -*- # @Time : 2021/6/17 10:25 # @Author : CG Zhang # @Site : # @File : 炸金花游戏.py # @Software: PyCharm # @Note : import random class Cards: '''生成一副新牌''' def __init__(self): flower = ["桃", "心", "梅", "方"] numb = [ "2","3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"] self.cards = [f+n for f in flower for n in numb] def __str__(self): return self.cards def get(self, n:int): ''' 定义取牌属性 :param n: 取牌张数 :return: 随机牌 ''' if not n > len(self.cards): card = random.sample(self.cards, n) for _c in card: self.cards.remove(_c) #取走之后要从总数里面删除 return card else: print("牌不够了!") class Player: '''self: New 玩家''' def __init__(self, name, card): self.name = name self.card = card def __str__(self): return self.name,self.card def score_flower(_data:list): ''' :param _data: 给牌计分 :return: 同花 = 623505 分 ''' if _data[0] == _data[1] == _data[2]: #同花 return 623505 else: return 0 def score_numbs(_data:list): ''' :param _data: exmp: in: ["8","5","12"], out: 1797 给牌值计分,基础分原则要求比下一级的最大值要大1 :return:炸弹 = 1249965 + 权重分 ( max: AAA = 1252918, min: 222 = 1249979), *顺金 = 626460 + 顺子 ( max: 同花QKA = 1249964, min: 同花A23 = 670785), *同花 = 623505 + 权重分 ( max: 同花JKA = 626459, min: 同花245 = 623519), 常规顺子 = 44325 * 权值( max:14,min:2) + 权重分 ( max: QKA = 623504, min: 234 = 88662), 特殊顺子 = 44325 ( 即:A23 = 固定分:44325), 对子 = 2955 * 权值( max:14,min:2) + 权重分 ( max: AAK = 44324, min: 223 = 5924), 单张 = 权重分( max:AAA = 2954分,min:222 = 14分) ''' _data = sorted(_data , reverse = False) #升序排列 _wi = _data[0] ** 1 + _data[1] ** 2 + _data[2] ** 3 # 牌值加权算法 if _data[0] == _data[1] == _data[2]: #炸弹 return 1249965 + _wi elif _data[0]+1 == _data[1] == _data[2]-1 : # 常规顺子 return 44325 * _data[2] + _wi # 加权算法:基础分*最大牌值 elif _data[0]+1 == _data[1] == _data[2]-11: # 特殊顺子,即:A23 return 44325 elif _data[0] == _data[1] or _data[1] == _data[2]: #对子 return 2955 * _data[1] + _wi # 加权算法:基础分*对子的单牌值 else: return _wi #单张 def slicer(card:list): ''' :param card: 给3张牌按照花色和数字进行切片,如 ['桃2', '桃A', '方10'] ==> flower:['桃', '桃', '方']、numb:['2', '14', '10'] :return: 返回牌值 ''' flower = [c[0] for c in card] numb = list(map(lambda s:int(s) if s.isdigit() else {'J':11,'Q':12,'K':13,"A":14}[s] , [c[1:] for c in card])) return score_flower(flower) + score_numbs(numb) def compare(_data:dict): ''' :param _data: in: exmp: {'张三': 1433, '李四': 2216, '王五': 23485, '李六': 2923, '孙七': 1797} :return: 比较字典中的values,返回打印最大的keys,即赢家 ''' winer = max([v for k,v in _data.items()]) for k,v in _data.items(): if v == winer: print(f"{k},赢!") # 这样写可保证,如果赢家牌都一样,都能打印 def main(): '''本游戏支持多人一起玩,但人数不能超过17,取牌数量仅支持3(否者没算法支持)''' cards = Cards() players = ["张三", "李四", "王五", "李六", "孙七"] result = {} for name in players: player = Player(name,cards.get(3)) #每人取3张牌 print(player.name,":",player.card) #发牌 result.update({ player.name : slicer(player.card) }) print("-" * 70) print(result) print("-" * 70) compare(result) #比较 if __name__ == '__main__': main()运行效果如下:张三 : ['心7', '桃9', '梅9']李四 : ['方5', '方Q', '心6']王五 : ['心4', '心9', '心J']李六 : ['梅4', '梅7', '桃4']孙七 : ['梅Q', '心Q', '心10']----------------------------------------------------------------------{'张三': 27412, '李四': 1769, '王五': 624921, '李六': 12183, '孙七': 37342}----------------------------------------------------------------------王五,赢!

相关棋牌游戏技巧
棋牌游戏资讯


Powered by 真人棋牌游戏 @2013-2022 RSS地图 HTML地图

网站统计——

  • 谷歌搜索留痕推广
  • 谷歌搜索留痕排名技术
  • 谷歌快速排名
  • 留痕方法
  • 谷歌搜索快速方法
  • google搜索留痕程序
  • 谷歌快速排名
  • 澳门太阳城
  • 最大博彩公司
  • 谷歌搜索关键词排名
  • 搜索留痕程序
  • 谷歌排名出售
  • 谷歌蜘蛛池排名
  • 搜索留痕软件
  • 缅甸果敢赌场
  • 电子游艺规则
  • 谷歌留痕推广
  • google引流程序
  • 谷歌快速排名
  • google引流程序
  • 留痕推广
  • 大西洋城赌场
  • 买球地址
  • 搜索留痕
  • 搜索留痕程序出售
  • 谷歌蜘蛛池排名技术
  • 留痕程序
  • 如何提高google搜索排名
  • 数字币博彩
  • 洗钱方法
  • Google留痕收录
  • 最新谷歌搜索留痕排名
  • 搜索留痕
  • Google留痕收录
  • google搜索留痕
  • 数字币博彩网站
  • 足球投注平台
  • 博彩推广话术
  • 推广引流方法
  • 引流方法
  • 博彩推广话术
  • 网上博彩推广引流
  • 数字币赌场
  • 皇冠现金网
  • 蜘蛛池排名
  • 谷歌蜘蛛池
  • 留痕程序出售
  • google搜索留痕程序
  • 比特币网上赌场
  • 洗钱平台
  • 搜索留痕
  • 博彩推广方式
  • 网上博彩推广
  • 快速排名
  • 搜索留痕程序
  • bbin平台大全
  • 体育博彩公司排名
  • 留痕排名技术
  • 最新谷歌关键词排名
  • 推广渠道
  • 谷歌快速排名
  • 博彩推广
  • 世界杯赌球地址
  • 皇冠博彩公司
  • 谷歌排名出售
  • 博彩引流渠道
  • 搜索留痕程序
  • google搜索留痕
  • 引流渠道
  • 果敢网上赌场
  • 世界杯赌球
  • 搜索留痕方法
  • 博彩搜索留痕
  • 博彩引流
  • 博彩引流
  • 搜索留痕
  • 缅甸网上赌场
  • 欧洲杯赌球
  • 谷歌搜索排名
  • 留痕程序
  • 网上博彩推广引流
  • 留痕技术
  • 搜索留痕技术出售
  • 澳门威尼斯人网上赌场
  • 外围博彩
  • 博彩网站推广
  • 推广引流
  • 留痕程序出售
  • 谷歌推广引流技术
  • 推广引流方法
  • 美国在线赌场
  • 沙巴体育投注平台
  • 最新谷歌搜索留痕
  • 谷歌蜘蛛池排名技术
  • 网站推广方法
  • 留痕程序出售
  • 博彩推广方法
  • 菠菜论坛
  • 买球平台
  • 谷歌搜索留痕
  • 蜘蛛池排名
  • 博彩公司推广渠道
  • 谷歌搜索留痕
  • 博彩公司推广渠道
  • 真钱游戏
  • 网上赌球地址
  • 赌球平台推荐
  • 赌球网址
  • 博彩包网
  • 买球app
  • 澳门博彩公司
  • 威尼斯人赌场
  • 博彩平台推荐
  • 美国博彩网站
  • 缅甸实体赌场
  • 柬埔寨网上赌场
  • 柬埔寨在线赌场
  • 韩国博彩
  • 支持人民币的博彩公司
  • 世界五大比特币交易所
  • 欧易是哪个国家的
  • 中币跑路
  • 亚洲博彩公司
  • 合法网上赌场
  • 马尼拉赌场
  • 支持人民币的博彩公司
  • 大陆博彩平台
  • 澳门新葡京娱乐城
  • 老挝赌场
  • 世界赌场排名
  • 网上博彩公司排行
  • 菠菜论坛
  • 东南亚赌博网站
  • 虚拟币博彩
  • 澳门百家乐网址
  • 网上博彩导航
  • 区块链百家乐游戏
  • 马来西亚博彩公司
  • 越南赌场
  • 区块链百家乐
  • 香港娱乐场
  • 澳大利亚赌博网站
  • 足球赔率
  • 菲律宾网上赌场
  • 数字币博彩网站
  • 足球投注网站
  • 百家乐论坛
  • 皇冠体育博彩公司
  • 网上赌博网站
  • 网上博彩推广话术
  • 谷歌搜索快速方法
  • 网上博彩推广话术
  • 数字币赌场
  • 皇冠博彩公司
  • 世界杯博彩公司
  • 英国博彩公司
  • 网上博彩合法化
  • 新加坡赌场
  • 比特币网上赌场
  • 怎么洗钱
  • 加密货币博彩平台
  • 世界杯赌球网址
  • 网上赌球地址
  • 博彩推广方式
  • 印度尼西亚博彩公司
  • 国际包网
  • bbin平台直营
  • 亚洲体育博彩平台
  • 越南博彩公司
  • 百家乐路单
  • 澳门博彩官网
  • 博彩网推荐
  • 澳门太阳城网址
  • 百家乐网址
  • 世界杯赌球网址
  • 皇冠博彩网址
  • 洗钱方法
  • 买球网站
  • 欧洲杯赌球平台
  • 皇冠现金网
  • 外围赌球平台
  • 果敢赌场
  • 买球技巧
  • 全球最大博彩公司
  • 电子游艺
  • 真人电子游戏
  • 骰宝游戏规则
  • 亚洲体育博彩平台
  • 澳门在线赌场
  • 缅甸赌场地址
  • 赌球平台
  • 赌场如何赢钱
  • 世界杯买球网站
  • 真人牌九游戏
  • 世界杯买球官网
  • 时时彩平台
  • 六合彩预测
  • 威尼斯人网上赌场
  • 外围赌球网站
  • 赌博网址
  • 彩票群
  • 微信赌博群
  • 韩国首尔赌场
  • 赌钱游戏
  • 美国网上赌场
  • bbin官网
  • 沙巴体育官网
  • 博彩平台推荐
  • 数字币博彩网站
  • 比特币网上赌场
  • 世界赌场名单
  • 美国赌场攻略
  • 菠菜论坛排名
  • 菠菜论坛排名
  • 缅甸网上赌场
  • 支持人民币的博彩公司