赢三张,我们东北管这个叫拖拉机。其他的几个名称是违规的。。

是一个简单粗暴的扑克牌(dubo)游戏。玩家每人三张牌,通过特定的牌型规则进行比大小。(押注什么的就不说了,具体详细规则请参考百度)

最近一直深陷在各种扑克玩法的牌型逻辑处理中,对比了一下,觉得赢三张应该算是比较简单的了,于是在这里写出一些牌型逻辑处理的算法。有些也适用于其他的扑克牌玩法。

注:语言为lua

首先是扑克牌的权值数据:对于这类花色有特殊意义的扑克玩法,一般常用的数据结构是采用16进制双位数,一位表示花色,一位表示牌值

例如:

CardData=
{0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,   --黑桃 2 - A(14)0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,   --红桃 2 - A0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,   --樱花 2 - A0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,   --方块 2 - A
}

然后使用位运算&可以方便的获取花色及牌值

lua语言里是band,需要导入bit模块。

即:

luabit = require"bit"
local cardType = luabit.band(CardData[i] , 0xF0)
local cardVal = luabit.band(CardData[i] , 0x0F)

得到的值对应的牌:

CardColor =
{Spade = 0,         --黑桃Heart = 16,         --红桃Plum  = 32,         --梅花Block = 48,         --方块
}CardValue =
{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,card_A = 14,
}

扎金花游戏没有大小王,故总牌数为52

g_CardsCount            = 52     --扑克数目
g_PerPlaCardCount       = 3      --每个玩家牌数

下面我们写出一个简单的洗牌发牌测试函数

洗牌:

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]=6
--cardBuffer[2]=7+16
--cardBuffer[3]=7--cardBuffer[4]=5+16
--cardBuffer[5]=7+32
--cardBuffer[6]=7+48local cards1={}
local cards2={}for i=1,6,1 dolocal cardColor = luabit.band(cardBuffer[i] , 0xF0)local cardValue = luabit.band(cardBuffer[i] , 0x0F)local cardinfo ={card_value = cardValue;card_Color = cardColor;}if i >3 thencards2[i-3] = cardinfoelsecards1[i] = cardinfoendend

输出两组牌:

table: 00444950 {[1] => table: 00444950 {[card_Color] => 48[card_value] => 2}[2] => table: 00444950 {[card_Color] => 16[card_value] => 9}[3] => table: 00444950 {[card_Color] => 0[card_value] => 14}
}table: 00444978 {[1] => table: 00444978 {[card_Color] => 32[card_value] => 2}[2] => table: 00444978 {[card_Color] => 32[card_value] => 4}[3] => table: 00444978 {[card_Color] => 32[card_value] => 12}
}

为了方便查看结果,我们写个翻译函数

function cardTool.getCardNamebyCard(Card)local string=""if Card.card_Color ==0 thenstring=string.."黑桃"elseif Card.card_Color ==16 thenstring=string.."红桃"elseif Card.card_Color ==32 thenstring=string.."梅花"elseif Card.card_Color ==48 thenstring=string.."方块"elsestring="ERROR"endif Card.card_value==14 thenstring=string.."A"elseif 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

上文中两组牌即为:

  方块2红桃9黑桃A梅花2梅花4梅花Q

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

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

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

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

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

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

  3. 【唠叨两句】如何将一张树型结构的Excel表格中的数据导入到多张数据库表中...

    小弟昨天遇到一个相对比较棘手的问题,就像标题说的那样.如何将一张树型结构的Excel表格中的数据导入到多张数据库表中,在现实中实际是七张数据库表,这七张表之间有着有着相对比较复杂的主外键关系,对于我这 ...

  4. 机器人运动学轨迹规划(三)----S型曲线规划算法

    写在前面:机器人运动学轨迹规划(二)里介绍了T型曲线规划算法,本文主要介绍S型速度曲线算法.同T型速度曲线相比,S形曲线更加平滑,避免了T形曲线在速度拐点引起的电机和drive train的冲击,但是 ...

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

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

  6. ARCGIS多张影像提取同一条直线上的值(3D analyst剖面线无法解决)——以山西省NDVI为例!

    ARCGIS剖面线成图是非常好的一个工具,但是会出现一个问题,也就是你每次所进行的画线功能仅仅能作为一张图像使用,即使你改变也了分析影像,出来的结果也无济于事!具体问题如下: 剖面提问题: 第一个剖面 ...

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

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

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

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

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

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

最新文章

  1. 几种任务调度的 Java 实现方法与比较
  2. 如何在SAP Cloud for Customer自定义BO中创建访问控制
  3. 照抄不翻车:抗住千万流量的大型分布式系统架构设计
  4. html js定义json对象,javascript中的json及对象
  5. PAT甲级1120 Friend Numbers:[C++题解]set去重且有序
  6. 阅读 嘀嗒嘀嗒 微信公共号
  7. 苹果或在2021年新iPhone上增加屏下Touch ID
  8. 小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_21、SpringBoot2.x配置全局异常返回自定义页面...
  9. 如何取消服务器自动关机,XP系统怎么取消自动关机?
  10. hitb-2017 1000levels writeup
  11. 读书202101『股票大作手回忆录』
  12. python 定义变量x格式_Python变量
  13. 如何批量删除PDF文件中的页面
  14. php视频降清晰度,HTML5视频播放器-video-js(带清晰度切换) | 小灰灰博客
  15. 计算机视觉编程——基本的图像操作和处理
  16. 【Pytorch】内存够用但还是 RuntimeError: CUDA out of memory 问题解决
  17. 【Duilib自定义控件】水平布局的滚动扩展布局,实现菜单的可滑动效果
  18. Html table添加空行
  19. 硬盘数据迁移软件哪款好用?强烈推荐它!
  20. 藏不住了!来 WICC,你会看懂今天的融云

热门文章

  1. 49 FI配置-财务会计-固定资产-与总账集成-分配总帐科目
  2. SAP MM模块-实施顾问岗位-面试手册-面试准备
  3. 【Pytorch】expand()用法==》扩展某个维度
  4. nn.dropout()的用法,随机失活
  5. Bootstrap-CSS-表单
  6. html5里面em是什么单位,HTML5中单位em的理解
  7. python不同数据类型的式子_Python 基础篇:数据类型、数据运算、表达
  8. phpcms搜索功能(案例一)- 代码剥离篇
  9. wordpress插件-really-simple-ssl插件解决网站开启ssl证书后,图片不能正常显示
  10. 某狸子订单系统豪华版/商城/前台程序/会员模块/增加分销模块