牛牛的比牌规则为:

单牌比较: k>q>j>10>9>8>7>6>5>4>3>2>a。
花色比较:黑桃>红桃>梅花>方块。
牌型比较:无牛<有牛<牛牛<银牛<金牛<炸弹<五小牛。

无牛牌型比较:取其中最大的一张牌比较大小,牌大的赢,大小相同比花色。
有牛牌型比较:比牛数;牛数相同庄吃闲。
牛牛牌型比较:取其中最大的一张牌比较大小,牌大的赢,大小相同比花色。
银牛牌型比较:取其中最大的一张牌比较大小,牌大的赢,大小相同比花色。
金牛牌型比较:取其中最大的一张牌比较大小,牌大的赢,大小相同比花色。
炸弹之间大小比较:取炸弹牌比较大小。
五小牛牌型比较:庄吃闲。
五小牛>炸弹>金牛>银牛>牛牛>有牛>没牛

与之前赢三张比牌的思路一样,也是分为相同牌型和不同牌型两种情况考虑,若不同牌型则能很快的返回输赢状况,否则分别根据不同的判定规则进行相关处理。

比较单牌时我们可以通过之前排序的 compByCardsValue函数,不过注意这个函数当前者小于后者返回的是true。

--banker_Cards  庄家
--other_Cards  闲家
--return 庄家是否赢
function cardTool.bankeriswin(banker_Cards, other_Cards)local banker_Cards_Type = cardTool.getTypebyCards(banker_Cards)local other_Cards_Type = cardTool.getTypebyCards(other_Cards)if banker_Cards_Type ~= other_Cards_Type thenreturn banker_Cards_Type>other_Cards_Typeendif banker_Cards_Type ==CardType.SMALL_NIU thenreturn trueendif banker_Cards_Type ==CardType.BOMB thenreturn banker_Cards[3].card_value > other_Cards[3].card_valueendif banker_Cards_Type ==CardType.GOLD_NIU thenreturn compByCardsValue(other_Cards[5],banker_Cards[5])endif banker_Cards_Type ==CardType.SILVER_NIU thenreturn compByCardsValue(other_Cards[5],banker_Cards[5])endif banker_Cards_Type ==CardType.NIU_NIU thenreturn compByCardsValue(other_Cards[5],banker_Cards[5])endif banker_Cards_Type ==CardType.NOT_NIU thenreturn compByCardsValue(other_Cards[5],banker_Cards[5])endreturn true
end

再写出完整测试代码:

require"cardvalue"
local cardTool=require"cardtool"
require"print_t"
local tabletool = require "tabletool"local luabit = require"bit"local cardBuffer =cardTool.RandCardList()--[[
cardBuffer[1]=2
cardBuffer[2]=4+16
cardBuffer[3]=6
cardBuffer[4]=10+16
cardBuffer[5]=12+32cardBuffer[6]=6+48
cardBuffer[7]=7+16
cardBuffer[8]=9
cardBuffer[9]=10+32
cardBuffer[10]=12+48
]]local cards1={}
local cards2={}for i=1,10,1 dolocal cardColor = luabit.band(cardBuffer[i] , 0xF0)/16+1local cardValue = luabit.band(cardBuffer[i] , 0x0F)local cardCount = cardTool.getCountbyValue(cardValue)local cardinfo ={card_value = cardValue,card_color = cardColor,card_count = cardCount,}if i >5 thencards2[i-5] = cardinfoelsecards1[i] = cardinfoendend--print_t(cards1)
--print_t(cards2)--print_t(cardTool.getCardNamebyCards(cards1))
--print_t(cardTool.getCardNamebyCards(cards2))print_t(cardTool.getCardTypeNamebyType(cardTool.getTypebyCards(cards1)))
print_t(cardTool.getCardNamebyCards(cards1))print_t(cardTool.getCardTypeNamebyType(cardTool.getTypebyCards(cards2)))
print_t(cardTool.getCardNamebyCards(cards2))print_t(cardTool.bankeriswin(cards1,cards2))

输出:

  牛一方块1黑桃2梅花3方块5红桃K没牛黑桃4黑桃5黑桃8梅花9红桃Jtrue

ps    print_t为我自己写的可以输出table类型的方法

lua——牛牛牌型处理相关算法(下)——牌型比较相关推荐

  1. lua——赢三张牌型处理相关算法(下)——牌型比较

    上文中我们已经实现了赢三张牌型的判定方法,同时我们也给出了一个枚举结构CardType.不难理解,若两组牌不是同一牌型的话,直接根据枚举的值进行比对就可以了.若是相同牌型还需要进行进一步的判断.所以我 ...

  2. lua——赢三张牌型处理相关算法(上)——牌值数据

    赢三张,我们东北管这个叫拖拉机.其他的几个名称是违规的.. 是一个简单粗暴的扑克牌(dubo)游戏.玩家每人三张牌,通过特定的牌型规则进行比大小.(押注什么的就不说了,具体详细规则请参考百度) 最近一 ...

  3. lua——赢三张牌型处理相关算法(中)——牌型判定

    赢三张的牌型大题分为6种:单牌<对子<顺子<同花<同花顺<豹子. CardType = {UNDEFINE=0, --单牌DUI_ZI =1, --对子SHUN_ZI = ...

  4. python斗地主出牌算法_斗地主之用蚁群算法整理牌型:如何进行牌力估计

    我们在前面讲到过,各牌手的牌力估计就是我们在用蚁群算法构造最优牌型时的启发性知识.启发性知识其实就是我们利用自己的经验对事物做出的判优性评估,或者说就是对事物价值的判断. 原则上,应用蚁群算法需要用到 ...

  5. 斗地主之用蚁群算法整理牌型-如何进行牌力估计

    我们在前面讲到过,各牌手的牌力估计就是我们在用蚁群算法构造最优牌型时的启发性知识.启发性知识其实就是我们利用自己的经验对事物做出的判优性评估,或者说就是对事物价值的判断. 原则上,应用蚁群算法需要用到 ...

  6. Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)

    Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...

  7. 棋牌游戏开发之地主算法判断牌型

    棋牌游戏开发咨询 QQ:325131039 棋牌游戏开发咨询交流群: 490287966 由于近年来网络棋牌游戏的火爆导致个各个地区的特色棋牌游戏进入开发的红火时期,也有越来越多的团队个人开始研究棋牌 ...

  8. 活动报名 | 北京交通大学魏云超:连续学习下像素理解的相关算法介绍

    活动议程 日期:11月24日(周四) 时间 主题 14:30-14:35 开场简介 穆亚东  北京大学研究员.长聘副教授.博士生导师.北大博雅青年学者,青源会会员 14:35-15:20 连续学习下像 ...

  9. 算法题 牌型判断 Java

    题目 德州扑克的花型由 N 张扑克牌组成 0<N<8,可以组成的牌型按照价值从高到低来区分分别为: 皇家同花顺:最高为 Ace (一点)的同花顺. 如 A K Q J 10 的同花顺 同花 ...

  10. 带癞子麻将查表判断胡牌高效率低内存算法

    同事曾问我麻将判定输赢有没有什么高效的方法,他说他随手写的三个癞子的情况下判定要6秒多.我当时只想他是需要循环 34 * 34 * 34(共有 34 种麻将) 次并依次判定输赢,这肯定不是个好方法,后 ...

最新文章

  1. HBA and WWN
  2. 2012是团购移动电商年
  3. Pocket pc模拟器与PC机传输文件的方法
  4. 接收udp数据_聊聊UDP、TCP和实现一个简单的JAVA UDP小Demo
  5. 非常详细的Exchange 功能路线图
  6. wex5 app应用 定时退出
  7. 657. 机器人能否返回原点
  8. 随机样本一致性:一种用于图像分析和自动制图的模型拟合模型(3)--(P3P的迭代解)
  9. 【优化预测】基于matlab粒子群算法优化BP神经网络预测【含Matlab源码 F003期】
  10. CentOS7 时间与网络时间同步
  11. Linux鼠标回报率修改,鼠标回报率怎么调? 设置鼠标回报率的三种方法
  12. 用火箭送快递?淘宝宣布联合蓝箭航天起启动“宝箭”计划...
  13. Excel VBA快速去除Excel中的所有公式
  14. 猎人网吧的游戏更新VBS(转)
  15. PHP审计-RIPS
  16. oracle表空间datafile,orale tablespacedatafile -- oracle表空间
  17. 手机号86注册不了谷歌?无法验证手机号如何100%解决!
  18. 2020年CISP每日一练
  19. 地面分辨率,空间分辨率(GSD为地面采样间隔)
  20. 百家游坛发起苹果APP推广者大会 揭行业潜规则

热门文章

  1. 基于 FPGA 的 SATA 3.0 IP 核简介
  2. 国内服务器带宽价格是多少?国内服务器带宽为什么贵?
  3. phpstuday2018下载
  4. 漫谈数据仓库中的元数据管理
  5. python画球面_matplotlib中的球面坐标图
  6. 在IGBT的开启过程中,IGBT的电压降低,电流上升,在IGBT的关断过程中IGBT的电压上升,电流下降,在一段时间内,电压和电流均不为0,由于功率等于电压乘以电流,即P=U×I,因此将产生损耗,开
  7. win7安装cuda纪录
  8. Entity Framework Core系列教程-2安装EF Core
  9. [异能程序员]第二章 上头条(第二更)
  10. 低成本、低功耗、小体积433MHz数字量无线控制器