********************************************************************

作者比较喜欢玩斗地主,所以经常搜集一些网友斗地主的心得,下面这一篇,我感觉写得不错,特转载,与网友分享。原文链接

棋牌游戏推荐:JJ比赛

我比较喜欢在这上面玩,可以赢话费,而且积累的金币其实是可以兑换成人民币的,网上有人回收。

********************************************************************

声明:本博客的文章,主要是探究斗地主游戏算法的计算机实现。顺便介绍其中的本质性内容。如有游客照此操练,输了家当,本博客概不负责。

  要在一轮斗地主游戏中获胜,手持的牌,需要具备一定的条件。首先是各中牌型需要有控制力,通常,炸弹、顶级牌型是有控制力的牌;其次,各种牌型的资源消耗要足够小。请看下面的例子,来深入理解这段话。

  为简化问题的描述,假设是双人游戏,用红方与黑方来表示。红方手持7、6、5三个单子,而黑方手持8、6、5三个单子,轮到红方出牌。在此残局中,红方先出6能获胜,出5、7都失败。看起来很简单,但为什么出6能获胜,这其中包含的道理是什么?

  要说清楚其中的道理,先要做点铺垫工作。

  首先我们假设,对于最小的单子3,当发出这张单子后,如果要收回控制权,那么手中必须要有顶级大牌,通常,对于单子,顶级大牌就是大王(暂时不考虑炸弹),这时,我们就定义,3消耗了一个完整资源,反过来,也就是说,3的资源产生能力为负值,我们用记号3(-1)来表示。括弧中的-1表示负资源。

  以此类推,单子5,6,7,8的资源产生能力简记为 5(-0.9)、6(-0.8)、7(-0.7)、8(-0.6)。这样假设后,通过简单累加括弧中数字,我们就可以得到红方与黑方的资源产生能力,如下,

  红方资源产生能力 = 5(-0.9) + 6(-0.8) + 7(-0.7) = -0.9 - 0.8 - 0.7 = -2.4
  黑方资源产生能力
= 5(-0.9) + 6(-0.8) + 8(-0.6) = -0.9 - 0.8 - 0.6 = -2.3

  另外,黑方的8,在此残局中,是顶级大牌,属于具有绝对控制权的一张牌,其资源产生能力是正的,算作+1,这样:
红方资源产生能力 = -2.4,
黑方资源产生能力 = -1.3.

  从上面的两个数字中可以看到,红方牌的资源产生能力比黑方弱,表面上看,红方似乎必败。当然,如果是黑方先手,黑红具有资源优势,只要黑方不先出8,红方是没有赢的可能的。这里,红方具有优先决定权,他需要决策出哪张牌。那么红方的决策依据是什么?

  我们来观察双方各自出掉一张牌后的,手中持有牌的资源产生能力,

红方

出牌/ 剩余牌的资源产生能力
5
-1.5
6
-1.6
7 -1.7

黑方
出牌/ 剩余牌的资源产生能力
5
-1.4 -0.4(加算牌张8的绝对控制力)
6
-1.5 -0.5(加算牌张8的绝对控制力)
8
-1.7 -2.7(加算牌张8的绝对控制力)

上述计算结果,我们用图表来表示,看得更清楚一点

  从上图,我们可以看到,当黑方某牌张消失后,黑方剩余牌的资源产生能力将严重恶化,至少不比红方占有,此变化点出现在第二手牌之后。这是黑方的死穴。这样,红方的决策目标就是寻找这样的死穴。
红方先手出5,黑方盖过6后,黑方剩余牌的资源产生能力仍然强于红方。而红方先手出6后,黑方的任何决策都将导致资源产生能力的严重恶化。这充分体现了老子在道德经中所描述的“天之道损有余而补不足”,用在此场合,就是要消耗对方的资源。

  实际上,在斗地主过程中,各位游客也都是这样实践的。这篇文章要说的一个规律是,手持三手同种牌型的先手方,出中间张,胜算概率最大。

【斗地主技巧】斗地主算法逻辑中的天之道<转>的更多相关文章

  1. php中奖算法逻辑

    最近公司有两个活动, 一个是砸蛋活动, 另一个是转盘活动. 后台这边需要做接口进行对接,当用户在前台点击进行抽奖的时候,发送AJAX请求给后台,后台进行业务处理包括记录用户中奖信息,然后返回json格 ...

  2. 提升代码幸福度,五个技巧减少js开发中的if else语句

     壹 ❀ 引 在JavaScript开发中,条件判断语句的使用频率是极高的,而对于条件判断简单易读的if else应该都是大家的首选.可是代码写的久了,我们总是希望自己的代码看着能更为简洁规范(逼格更 ...

  3. 【Unity3D技巧】在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信 (二) : 引入中间层NotificationCenter

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 一对多的观察者模式机制有什么缺点? 想要查看 ...

  4. Hystrix降级逻辑中如何获取触发的异常

    通过之前Spring Cloud系列教程中的<Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)>一文,我们已经知道如何通过Hystrix来保护自己的服务不被外 ...

  5. 从App业务逻辑中提炼API接口

    2.1 从App业务逻辑中提炼API接口 业务逻辑思维导图 功能-业务逻辑思维导图 基本功能模块关系 功能模块接口UML(设计出API) 在设计稿标注API 编写API文档 2.2 设计API的要点 ...

  6. Aho-Corasick automaton(AC自动机)解析及其在算法竞赛中的典型应用举例

    摘要: 本文主要讲述了AC自动机的基本思想和实现原理,如何构造AC自动机,着重讲解AC自动机在算法竞赛中的一些典型应用. 什么是AC自动机? 如何构造一个AC自动机? AC自动机在算法竞赛中的典型应用 ...

  7. loadrunner 技巧-模拟Run Logic中的随机Action运行

    技巧-模拟Run Logic中的随机Action运行 by:授客 QQ:1033553122   可以这样做,Run-time Settings,删除Action7,然后在其它Action比如Acti ...

  8. 算法 数组中出现次数最多的数字 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. 分页技巧__在项目中使用QueryHelper辅助对象实现分页效果

    分页技巧__在项目中使用QueryHelper辅助对象实现分页效果 QueryHelper 用于辅助拼接HQL语句 addCondition("t.type=?", "精 ...

随机推荐

  1. hdu 1159 Common Subsequence(LCS最长公共子序列)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  2. Git 提供篇

    1. Git自动补全 假使你使用命令行工具运行Git命令,那么每次手动输入各种命令是一件很令人厌烦的事情.为了解决这个问题,你可以启用Git的自动补全功能,完成这项工作仅需要几分钟. 为了得到这个脚本 ...

  3. Unity 图片的灰度处理

    我们平时在做项目时,经常遇到按钮的点击而且还要区分悬浮,点击,禁用的状态,美术要针对一张图片做多个状态图片,资源图片的数量也就增大了,那么打出的包的大小也就跟着上去了,所以我们可以针对原始图片进行Sh ...

  4. Git服务器 gitweb与gitLab的区别

    昨天我们已经把Git服务器搭建完成了,工程的上传与下载都可以了,不过有些人不喜欢使用git命令进行操作.所以我们就搭建一个可视化操作的环境!配置gitweb和gitlab两种访问方式! 一,配置git ...

  5. html_day3

    总结学习html的第一天 表格的结构说明 <table></table> <tr></tr> <td></td> <th& ...

  6. html_day2

    总结下今天学的HTML知识.单词 跑马灯标记 <marquee></marquee>属性: direction:滚动的方向 取值:left .right. up. down b ...

  7. NO.14 两个div并排,左边为绝对宽度,右边为相对宽度

    两个div并排,左边为绝对宽度,右边为相对宽度,这个问题,我也经常遇到,我一般的处理方法是将最大的容器padding-left固定宽度,左边的固定宽度的一块position:absolute,然后ri ...

  8. C#索引器:在集合或数组中取出某一个元素 举例 _【转】

    Garmmar: [访问修饰符] 数据类型 this[参数列表] { get { 获取索引器的内容 } set { 设置索引器的内容 } } Eg: <span style="font ...

  9. 第1个linux命令——echo

    功能:在显示器上显示一段文字,一般起到一个提示的作用. 语法:echo [-ne][字符串]    或   echo [--help][--version] 详细说明:echo会将输入的字符串送往标准 ...

  10. _BLOCK_TYPE_IS_VALID错误

    _BLOCK_TYPE_IS_VALID宏用来检测这个内存块在当前堆上是否有效,但是这里的指针是一个临时变量,临时变量是在栈上分配的,函数清理栈时会自动回收这些内存,程序员无需管理. new 和 ma ...