这几天又做了牛牛游戏,在这里把相关算法写一下,与前几天写的赢三张的基本类似,所以大家也可以参考前几篇博客。

牛牛是一种简单却又非常有意思的棋牌游戏,主要是采用一副扑克牌其中的52张(除去大小王);第一局的庄家是随机产生,而后每局的庄家是上一轮游戏中的赢家,每局游戏系统自动洗牌后将5张牌均匀分给给各位玩家。玩家拿到牌后根据一定的游戏规则进行排列组合,庄家和闲家依次进行大小比较从而决定胜负。

牛牛的牌型比较里考虑到了花色的大小,即:

单牌比较: k>q>j>10>9>8>7>6>5>4>3>2>a。
花色比较:黑桃>红桃>梅花>方块。

同时不同的牌有一个算“牛”的数值含义,K Q J的数值是10,其他的等于自身数值。

所以为了方便计算,在定义牌信息类里面设三个参数,分别表示花色、牌值、数值

CardColor =
{Spade = 4,         --黑桃Heart = 3,         --红桃Plum  = 2,         --梅花Block = 1,         --方块
}CardValue =
{card_A = 1,card_2 = 2,card_3 = 3,card_4 = 4,card_5 = 5,card_6 = 6,card_7 = 7,card_8 = 8,card_9 = 9,card_10 = 10,card_J = 11,card_Q = 12,card_K = 13,
}CardCount =
{card_A = 1,card_2 = 2,card_3 = 3,card_4 = 4,card_5 = 5,card_6 = 6,card_7 = 7,card_8 = 8,card_9 = 9,card_10 = 10,card_J = 10,card_Q = 10,card_K = 10,
}

扑克的数据同样采用16进制双位数,一位表示花色,一位表示牌值

--扑克数据
CardData=
{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,
}g_CardsCount            = 52     --扑克数目
g_PerPlaCardCount       = 5      --每个玩家牌数

所以获取单牌信息的方法为:

  local 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,}
function cardTool.getCountbyValue(value)if value > 10 thenreturn 10elsereturn valueend
end

洗牌:

function cardTool.RandCardList()local bufferCount = #CardData;local randCount = 1;local position = 1;math.randomseed(os.time()) for i = 1,#CardData dolocal ranOne = math.random(1,#CardData+1-i)CardData[ranOne], CardData[#CardData+1-i] = CardData[#CardData+1-i],CardData[ranOne]endlocal cardBuffer = tabletool.deepcopy(CardData);return cardBuffer;
end

发牌:

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

两个cards的数据为:

table: 0072B4F8 {[1] => table: 0072B4F8 {[card_color] => 2[card_value] => 3[card_count] => 3}[2] => table: 0072B4F8 {[card_color] => 2[card_value] => 6[card_count] => 6}[3] => table: 0072B4F8 {[card_color] => 3[card_value] => 6[card_count] => 6}[4] => table: 0072B4F8 {[card_color] => 3[card_value] => 1[card_count] => 1}[5] => table: 0072B4F8 {[card_color] => 2[card_value] => 7[card_count] => 7}
}table: 0072B520 {[1] => table: 0072B520 {[card_color] => 2[card_value] => 9[card_count] => 9}[2] => table: 0072B520 {[card_color] => 2[card_value] => 11[card_count] => 10}[3] => table: 0072B520 {[card_color] => 2[card_value] => 13[card_count] => 10}[4] => table: 0072B520 {[card_color] => 2[card_value] => 8[card_count] => 8}[5] => table: 0072B520 {[card_color] => 3[card_value] => 13[card_count] => 10}
}

我们写一个牌的翻译函数

function cardTool.getCardNamebyCard(Card)local string=""if Card.card_color ==4 thenstring=string.."黑桃"elseif Card.card_color ==3 thenstring=string.."红桃"elseif Card.card_color ==2 thenstring=string.."梅花"elseif Card.card_color ==1 thenstring=string.."方块"elsestring="ERROR"endif Card.card_value==13 thenstring=string.."K"elseif Card.card_value==12 thenstring=string.."Q"elseif Card.card_value==11 thenstring=string.."J"elsestring=string..Card.card_valueendreturn string
endfunction cardTool.getCardNamebyCards(Cards)local string=""for i = 1,#Cards dostring=string..cardTool.getCardNamebyCard(Cards[i])endreturn string
end

上述牌信息转换的牌为:

  梅花3梅花6红桃6红桃1梅花7梅花9梅花J梅花K梅花8红桃K

以上就是牌值数据相关的处理函数,下一章我们实现判定牌型的相关函数。

lua——牛牛牌型处理相关算法(上)——牌值数据相关推荐

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

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

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

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

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

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

  4. 中医证型关联规则----apriori算法挖掘及plotly数据可视化

    中医证型关联规则挖掘 建模流程 导入常用包 可视化统计分析 数据离散化处理 生成结果数据表 分类变量可视化 导出算法所需格式 导入apriori算法 结果展示 结果说明 建模流程 导入常用包 from ...

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

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

  6. 德州扑克实践之二------判断牌型

    实践二------牌型判断 起始 现在到了,第二步,上一步我们已经做好了发牌模块,有了手牌,就需要判断牌型了,平时打扑克时,我们需要使用大脑进行判断自己手里的牌属于那种类型的,现在我们需要通过程序来进 ...

  7. 棋牌游戏通用牌型数值化方案

    棋牌游戏通用牌型数值化方案 1. 数值化方案背景: 游戏中,要对各个玩家的牌进行比较,排序.通常情况下,我们会这样组织数据: BYTE cbCardData[PlayerCount][CardCoun ...

  8. 打牌(求牌型方案数)

    问题描述 有 A × B 张扑克牌.每张扑克牌有一个大小(整数,记为a,范围区间是 0 到 A - 1)和一个花色(整数,记为b,范围区间是 0 到 B - 1. 扑克牌是互异的,也就是独一无二的,也 ...

  9. 炸金花游戏功能的实现(发牌,计算牌型,比牌)——python2.7

    最近在尝试做一款棋牌类游戏项目,看到炸金花的玩法后,就自己先写出炸金花的基本功能实现,给那些python爱好者参考一下. 炸金花是民间非常流行的一种扑克牌玩法,它具有独特的比牌规则,玩家按照规则以手中 ...

  10. 斗地主AI算法——第六章の牌型判断

    本章实现了上一章提到的检查当前是否只是一手牌函数ins_SurCardsType /* 检查剩余的牌是否只是一手牌是: 返回手牌类型数据 不是:返回错误类型(cgERROR) */ CardGroup ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第15期)
  2. 2018中国AI英雄风云榜:投出你心目中的中国AI领军人!
  3. java文件分割合并_java实现文件分割与合并 类示例源码
  4. JAVA中常用的异常处理情况
  5. is not allowed to connect to this MySQL server解决办法
  6. 计算机科学与技术专业用英语怎么写,计算机科学与技术专业专业英文简历模板...
  7. 电脑不能打字_意外收到一台ThinkPad T400笔记本电脑,简单升级后,办公没问题...
  8. boost创建线程池_Java并发 之 线程池系列 (1) 让多线程不再坑爹的线程池
  9. 计算机网络使用的通信线路分为两类,计算机网络技术阶段测试题
  10. 电脑快捷键大全 Alt
  11. Beamer简易教学 | 4 文本盒子
  12. Travis CI 简介
  13. 授权(authorization)的设计思路
  14. Oracle数据库创建定时任务
  15. 国外军事信息网站爬虫源
  16. Tomcat 启动报错: Failed to execute goal org.apache.tomcat.maven:tomcat7 Could not start Tomcat
  17. docx poi 原理_使用POI读写word docx文件
  18. CoAP协议学习笔记(一)
  19. 数据仓库维度建模——事实表设计
  20. 秒懂Java代理与动态代理模式

热门文章

  1. 行人重识别论文阅读14-Learning by Aligning- Visible-Infrared Person Re-identification
  2. 验证码图片不显示解决问题
  3. 14种鼻型图解_十种鼻型分类图详细解析
  4. 电脑版微信防撤回大全
  5. 儿童手表电话卡遇到问题需要怎么解决
  6. Dynamics AX 2012 的工业物联网解决方案
  7. 短视频搬运软件:抖音批量解析下载一个作者所有视频
  8. 2018PS cc版本最新最实用学习笔记
  9. Win7 安装.Net 4.7.2 失败
  10. RabbitMQ数据丢失