棋牌 lua牛牛算法和大小比较

local Logic = {}local Define = {}
Define.CardData = {0x0D, 0x1D, 0x2D, 0x3D,  --K --方块,梅花,红桃,黑桃 --0x0F,--大王 --0x0E,--小王0x0C, 0x1C, 0x2C, 0x3C,  --Q0x0B, 0x1B, 0x2B, 0x3B,  --J0x0A, 0x1A, 0x2A, 0x3A,  --100x09, 0x19, 0x29, 0x39,  --90x08, 0x18, 0x28, 0x38,  --80x07, 0x17, 0x27, 0x37,  --70x06, 0x16, 0x26, 0x36,  --60x05, 0x15, 0x25, 0x35,  --50x04, 0x14, 0x24, 0x34,  --40x03, 0x13, 0x23, 0x33,  --30x02, 0x12, 0x22, 0x32,  --20x01, 0x11, 0x21, 0x31,  --1
}--牛牛牌型
Define.CardType = {NoNiu       = 0,   -- 无牛NiuOne      = 1,  -- 牛一NiuTwo      = 2,  -- 牛二NiuThree    = 3,  -- 牛三NiuFour     = 4,  -- 牛四NiuFive     = 5,  -- 牛五NiuSix      = 6,  -- 牛六NiuSeven    = 7,  -- 牛七NiuEight    = 8,  -- 牛八NiuNine     = 9,  -- 牛九NiuNiu      = 10,     -- 牛牛Niu4Color   = 11,   -- 四花牛Niu5Color   = 12,  -- 五花牛NiuBomb     = 13,    -- 炸弹牛Niu5Little  = 14,   -- 五小牛
}--洗牌函数
local function Shuff()local cards = {}table.move(Define.cardData, 1, #Define.cardData, #cards+1, cards)local len = #cardsfor i = 1, len dolocal m = math.random(1, len)cards[i], cards[m] = cards[m], cards[i]endreturn cards
endLogic.random_cards = Shuff() --洗牌--获取牌点数
local function GetCardNum(card)return card % 16
end--获取花色
local function GetCardColor(card)return card / 16
end--对每个玩家的手牌进行排序
function Logic.SortCard(cards)table.sort(cards,function(first,second)if not first or not second then return false endif first % 16 > second % 16 then return true endif first % 16 < second % 16 then return false endif first / 16 > second / 16 then return true endif first / 16 < second / 16 then return false endreturn falseend)
end--五小牛
function Logic.IsFiveSmallNiu(nCards)if GetCardNum(nCards[1]) >= 5 thenreturn 0endlocal addvalue = 0for _,card in ipairs(nCards) doaddvalue = addvalue + GetCardNum(card)if addvalue > 10 thenreturn falseendendreturn true
end-- 炸弹牛
function Logic.IsBombNiu(nCards)if GetCardNum(nCards[1]) == GetCardNum(nCards[4]) thenreturn trueelseif GetCardNum(nCards[2]) == GetCardNum(nCards[5]) thenreturn trueendreturn false
end-- 五花牛
function Logic.IsFiveColorNiu(nCards)if GetCardNum(nCards[5]) <= 10 thenreturn falseendreturn true
end-- 四花牛
function Logic.IsFourColorNiu(nCards)if GetCardNum(nCards[5]) < 10 or GetCardNum(nCards[4]) <= 10 thenreturn falseendreturn true
endfunction Logic.GetCard(card)local value = GetCardNum(card)if value > 10 thenreturn 10endreturn value
end--其它牛
function Logic.IsOtherNiu(nCards)local ModNum = 0local nCardNum = #nCardsfor i = 1,nCardNum doModNum = ModNum + Logic.GetCard(nCards[i])endModNum = ModNum % 10  --5张牌的余数for i = 1,nCardNum - 1 dofor j = i + 1,nCardNum do--2张牌的余数和5张牌的余数比较,如果相等,则剩下的3张余数必然是0,这样剩下的3张牌就能组成牛if(Logic.GetCard(nCards[i]) + Logic.GetCard(nCards[j]))%10 == ModNum thenif ModNum == 0 thenreturn 10elsereturn ModNumendendendendreturn 0
end-- 获取牌类型
function Logic.GetCardType(nCards)assert(#nCards == 5)Logic.SortCard(nCards) --对每个玩家的手牌进行排序if Logic.IsFiveSmallNiu(nCards) then --五小牛判断return Define.CardType.Niu5Littleendif Logic.IsBombNiu(nCards) then --炸弹牛判断return Define.CardType.NiuBombendif Logic.IsFiveColorNiu(nCards) then --五花牛判断return Define.CardType.Niu5Colorendif Logic.IsFourColorNiu(nCards) then --四花牛判断return Define.CardType.Niu5Colorendreturn Logic.IsOtherNiu(nCards) --其他牛判断
end--计算牌值,用于比较牌大小
function Logic.GetCmpValue(cards, cardType)Logic.SortCard(cards) --对每个玩家的手牌进行排序local maxCard = GetCardNum(cards[1])*100 + GetCardColor(cards[1]) * 10return cardType * 10000 + maxCard
end--[[tValue 的结构tValue = {nPlayId = 玩家id,CmpValue = 玩家的牌值,   --该值通过  Logic.GetCmpValue  获取}
]]
--通过该接口,可以把所有玩家的牌进行从大到小排序
function Logic.SortAllUsers(tValue)table.sort(tValue,function(first,second)if not first or not second then return false endreturn (first.CmpValue > second.CmpValue)end)
end

lua牛牛算法和大小比较相关推荐

  1. java实现牛牛算法

    package com.sgh;import java.util.Arrays; import java.util.Random;import org.junit.Test;/*** 牛牛算法* jq ...

  2. 算法时间复杂度大小排序

    算法时间复杂度大小排序:

  3. golang牛牛算法规则与聊天功能

    最近刚看了一下gf的框架,下载了demo后发现有个现成的聊天室功能,就拿来改成了一个简单的牛牛棋牌功能 作用也很简单,就是有一个聊天室,如果输入111 ,就进入到游戏,满足2人输入了111后,就分别给 ...

  4. C++算法 | 比较大小

    C++算法 学过C语言的对这句话应该不陌生:程序=算法+数据结构,C++作为一门既可以面向过程也可以面向对象的语言,这样理解也是没有问题的. C++当作为面向过程时,应该包括两部分:一是对数据的描述, ...

  5. 微博URL短地址lua生成算法

    短地址(Short URL),或 叫短网址.短链接等等 ,就是比较短的URL地址. 借助短地址,可以将原来冗长的网址替换成简短的网址,让使用者可以更容易分享链接. 在Web 2.0的今天,不得不说,这 ...

  6. lua sha256算法函数封装

    module(..., package.seeall)--sha256算法 function sha256(str)local resty_sha256 = require "resty.s ...

  7. java牛牛算法_Java算法题——牛牛消消乐

    import java.util.*;public classSolution {/*** 返回两次操作后,数组元素之和的最小值 *@paramnums int整型一维数组 这你你需要操作的数组 *@ ...

  8. 超强跑得快机器人智能算法深度研究与设计

    上一篇斗地主机器人算法的设计是自主研究学习的,没有做细节上的优化,但最近公司刚好要上线跑得快,也需要我编写跑得快ai算法.于是我直接采用斗地主的算法框架来写这个ai,可以说主体设计没有变,但是呢细节上 ...

  9. AliCloudDenoise 语音增强算法:助力实时会议系统进入超清音质时代

    简介:近些年,随着实时通信技术的发展,在线会议逐渐成为人们工作中不可或缺的重要办公工具,据不完全统计,线上会议中约有 75% 为纯语音会议,即无需开启摄像头和屏幕共享功能,此时会议中的语音质量和清晰度 ...

  10. Centerface:开源实用的边缘设备无锚人脸检测与对齐算法

    点击我爱计算机视觉标星,更快获取CVML新技术 昨天Github上 ywlife 开源了 CenterFace:实用的边缘设备无锚人脸检测与对齐算法,引起了很多52CV群友的关注,开源不到一天,已经1 ...

最新文章

  1. 阿里巴巴宣布开源限流降级中间件——Sentinel
  2. C++学习003-#define 自定义宏
  3. 通过Visual Studio 2005的项目模板来加速开发过程
  4. 深入出不来nodejs源码-编译启动
  5. 【分布式】Zookeeper请求处理
  6. 强调模型可复现性!英伟达与伦敦国王学院开源医学AI框架 MONAI
  7. hadoop服务器系统设置win10,win10系统hadoop安装配置的设置技巧
  8. 数学家、数学轶事与数学史话
  9. php 正则预搜索?=
  10. maven 配置远程仓库服务器密码
  11. AJDK-Wisp协程
  12. 新浪微博技术架构分析-转载
  13. 群控成为微商月入百万的神器
  14. sql 节假日判断(春节、中秋、国庆、周末等)
  15. 湖北户外帐篷在野外户外需要注意的方面
  16. 七分钟学会 HTML 网页制作
  17. java spring ioc 实例_Spring 源码阅读(IOC容器)-bean的实例化以及注入
  18. 如何自定义设置虚拟机的的IP地址
  19. 三角函数专题【高阶辅导】
  20. 记一则SQL 数据库状态(可疑)(紧急)解决方案

热门文章

  1. 图像坐标球面投影_坐标、投影及坐标转换
  2. bobsmith电路阻抗原理_网络变压器的介绍分类及工作原理
  3. 上顿号符号_顿号在键盘上怎么打?每日一答
  4. python case用法_Python Switch Case三种实现方法代码实例
  5. 微信聊天记录的图片在哪查看
  6. 案例|工业物联网解决方案•智慧水务云平台
  7. 真香啊,手把手教你使用 Python 获取基金信息
  8. 【asp.net core 系列】6 实战之 一个项目的完整结构
  9. Easyx——基于easyx的c语言简单动画入门
  10. 争冠,在路上?还是渐行渐远?