行业外的我,放下 python 许久,如今因为迷上日麻,想在上班摸鱼的时候,决心搞一个文字版的麻将,练习练习。

声明一下,本人的代码属于自学,代码很混乱,希望抛砖引玉

第一步,就是简单的建立 胡牌逻辑。在帖子里看到了一个大神写的简单逻辑。个人脑子不行,所以这里直接搬运一下。

原贴地址:https://www.cnblogs.com/guangzhao17/p/8167302.html,这里搬运一下,感谢大神

#_*_ coding=utf-8 _*_
import time, sys
import random  # 用于测试。# 公共参数,1套牌库,注意总共是4套。
pais = list(range(1, 10)) + list(range(11, 20)) + list(range(21, 30)) + list(range(31, 38, 2)) + list(range(41, 46, 2))
a = pais    #用于测试
def hepai(a: list):'''Judge cards hepai. For excample:a=[1,2,3,4,4]a=list,万:1-9,条:11-19,饼:21-29,东西南北风:31,33,35,37,中发白:41,43,45。'''a = sorted(a)   #重新排列# print(a)# 牌面检查,是否属于本函数规定的范围内。# pais=list(range(1,10))+list(range(11,20))+list(range(21,30))+list(range(31,38,2))+list(range(41,46,2))# print(pais)for x in set(a):    #拆为元素集if a.count(x) > 4:  # 某张牌的数量超过了4,是不正确的。return Falseif x not in pais:print('参数错误:输入的牌型{}不在范围内。\n万:1-9,条:11-19,饼:21-29,东西南北风:31,33,35,37,中发白:41,43,45。'.format(x))return False# 牌数检查。if len(a) % 3 != 2:print('和牌失败:牌数不正确。')return False# 是否有对子检查。double = []for x in set(a):if a.count(x) >= 2:double.append(x)# print(double)if len(double) == 0:# print('和牌失败:无对子')return False# 7对子检查(由于不常见,可以放到后面进行判断)# 对子的检查,特征1:必须是14张;特征2:一个牌型,有2张,或4张。特别注意有4张的情况。if len(a) == 14:for x in set(a):if a.count(x) not in [2, 4]:breakelse:##            print('和牌:7对子。',a)return True# 十三幺检查。if len(a) == 14:gtws = [1, 9, 11, 19, 21, 29, 31, 33, 35, 37, 41, 43,45]  # [1,9,11,19,21,29]+list(range(31,38,2))+list(range(41,46,2)) #用固定的表示方法,计算速度回加快。# print(gtws)for x in gtws:if 1 <= a.count(x) <= 2:passelse:breakelse:print('和牌:国土无双,十三幺!')return True# 常规和牌检测。a1 = a.copy()a2 = []  # a2用来存放和牌后分组的结果。for x in double:# print('double',x)# print(a1[0] in a1 and (a1[0]+1) in a1 and (a1[0]+2) in a1)a1.remove(x)a1.remove(x)a2.append((x, x))for i in range(int(len(a1) / 3)):# print('i-',i)if a1.count(a1[0]) == 3:# 列表移除,可以使用remove,pop,和切片,这里切片更加实用。a2.append((a1[0],) * 3)a1 = a1[3:]# print(a1)elif a1[0] in a1 and a1[0] + 1 in a1 and a1[0] + 2 in a1:  # 这里注意,11,2222,33,和牌结果22,123,123,则连续的3个可能不是相邻的。a2.append((a1[0], a1[0] + 1, a1[0] + 2))a1.remove(a1[0] + 2)a1.remove(a1[0] + 1)a1.remove(a1[0])# print(a1)else:a1 = a.copy()a2 = []# print('重置')breakelse:# print('和牌成功,结果:',a2)return True# 如果上述没有返回和牌成功,这里需要返回和牌失败。else:# print('和牌失败:遍历完成。')return False

这里的 hepai 函数较为简单,简单的判断是是否胡牌,以及特殊牌型七对子,国士的判断。缺少符数,翻数等的判断。后续想办法优化

用 python 实现 简单AI 双人日麻(文字版)之一 建立胡牌逻辑相关推荐

  1. 用 python 实现简单AI 双人日麻(文字版)之三 加入COM出牌

    这一章主要是增加COM的角色出牌 第一步:添加COM出牌 实现电脑摸牌,出牌的逻辑 def com_output(a:list): #实现电脑摸牌,随机出牌#global Paia.append(Pa ...

  2. Python——调用百度AI实现图片上文字识别

    Python--调用百度AI实现图片上文字识别 简介 步骤 安装百度AI库 注册百度AI开放平台 调用glob库 调用AipOcr库识别文字 可能会遇到的问题 批量操作 简介 Python免费调用百度 ...

  3. Python利用百度AI提取图片中的文字信息

    Python利用百度AI提取图片中的文字信息 安装百度AI : pip install baidu-aip 到https://console.bce.baidu.com/ai/创建文字识别应用,获取A ...

  4. ~ 如何用C++自制一个日麻游戏 ~(二)听牌判断算法 § 1 判断听牌(附带C#实现)

    导入 -- 什么环节只要用算法判断一次,就能知道是否听牌立直.还差什么牌就可以荣和自摸? -- 只要在缺一张手牌(如1.4.7.10.13张时)的情况下判断是否听牌.听哪些牌,就可以为上面的复杂判断提 ...

  5. 【LeetCode Python实现】二次元日麻游戏 雀魂麻将

    想要看更加舒服的排版.更加准时的推送 关注公众号"不太灵光的程序员" 每日八点有干货推送,微信随时解答你的疑问 公众号"不太灵光的程序员" 同时发布<二次 ...

  6. python程序-30分钟学会用Python编写简单程序

    原标题:30分钟学会用Python编写简单程序 参与文末每日话题讨论,赠送异步新书 异步图书君 学习目标 知道有序的软件开发过程的步骤. 了解遵循输入.处理.输出(IPO)模式的程序,并能够以简单的方 ...

  7. 适合小学生python的书_小学生开始学Python,最接近AI的编程语言:安利一波Python书单...

    原标题:小学生开始学Python,最接近AI的编程语言:安利一波Python书单 AlphaGo 都在使用的 Python 语言,是最接近 AI 的编程语言. 教育部考试中心近日发布了"关于 ...

  8. 我花了两年,从不懂Python变成了AI工程师

    2020-01-23 11:08:57 赖可 发自 凹非寺量子位 报道 | 公众号 QbitAI 想做机器学习的工作,却觉得自己没有专业技能? 有一位小哥,从不知道Python到找到AI工程的工作,用 ...

  9. Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储

    原 Python+OpenCv实现AI人脸识别身份认证系统(2)--人脸数据采集.存储 2019年07月02日 08:47:52 不脱发的程序猿 阅读数 602更多 所属专栏: 人脸识别身份认证系统设 ...

最新文章

  1. numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 f
  2. 利用找因子来找方程解的个数
  3. linux oracle脚本编写,Linux 脚本编写基础(一)--语法
  4. COM 组件设计与应用(六)
  5. 282. 给表达式添加运算符
  6. 用python绘制叠加等边三角形_python 叠加等边三角形的绘制的实现
  7. Spring Boot 框架介绍和使用
  8. lombok slfj 中_lombok @Slf4j注解
  9. PHP 结构控制 if else / switch / while / do while
  10. 在WSL2上运行nVIDIA Nsight
  11. 南京邮电大计算机科学与技术,计算机科学与技术专业培养目标与毕业要求-南京邮电大学计算机学院.PDF...
  12. Appium安装手册详解
  13. 太阳电池IV测试软件,太阳能电池IV测试系统
  14. jenkins测试人员的使用
  15. 8CRM客户案例分享
  16. 产品经理如何实现自我提升
  17. IPMI用户名密码忘记了怎么处理?
  18. 【个人使用篇】github代码管理
  19. Opencv3.2移植到arm板
  20. DDNS动态域名解析IPv6地址

热门文章

  1. MySQL limit 1,1的含义
  2. MySQL运行原理与基础架构
  3. ZOJ 3587 Marlon's String
  4. php小偷cookie,ptcms小说小偷程序 最新EXP漏洞
  5. 百度地图定位+卫星定位
  6. 如何秒下单?python的淘宝秒杀抢购下单源码参考
  7. 往recovery添加应用程序
  8. V-REP 建立简洁模型教程
  9. 红利逐渐消失殆尽的互联网下半场,前路何方?
  10. 计算机怎样检查视力,电脑视力表同样测视力 测试方法要正确