lua牛牛算法和大小比较
棋牌 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牛牛算法和大小比较相关推荐
- java实现牛牛算法
package com.sgh;import java.util.Arrays; import java.util.Random;import org.junit.Test;/*** 牛牛算法* jq ...
- 算法时间复杂度大小排序
算法时间复杂度大小排序:
- golang牛牛算法规则与聊天功能
最近刚看了一下gf的框架,下载了demo后发现有个现成的聊天室功能,就拿来改成了一个简单的牛牛棋牌功能 作用也很简单,就是有一个聊天室,如果输入111 ,就进入到游戏,满足2人输入了111后,就分别给 ...
- C++算法 | 比较大小
C++算法 学过C语言的对这句话应该不陌生:程序=算法+数据结构,C++作为一门既可以面向过程也可以面向对象的语言,这样理解也是没有问题的. C++当作为面向过程时,应该包括两部分:一是对数据的描述, ...
- 微博URL短地址lua生成算法
短地址(Short URL),或 叫短网址.短链接等等 ,就是比较短的URL地址. 借助短地址,可以将原来冗长的网址替换成简短的网址,让使用者可以更容易分享链接. 在Web 2.0的今天,不得不说,这 ...
- lua sha256算法函数封装
module(..., package.seeall)--sha256算法 function sha256(str)local resty_sha256 = require "resty.s ...
- java牛牛算法_Java算法题——牛牛消消乐
import java.util.*;public classSolution {/*** 返回两次操作后,数组元素之和的最小值 *@paramnums int整型一维数组 这你你需要操作的数组 *@ ...
- 超强跑得快机器人智能算法深度研究与设计
上一篇斗地主机器人算法的设计是自主研究学习的,没有做细节上的优化,但最近公司刚好要上线跑得快,也需要我编写跑得快ai算法.于是我直接采用斗地主的算法框架来写这个ai,可以说主体设计没有变,但是呢细节上 ...
- AliCloudDenoise 语音增强算法:助力实时会议系统进入超清音质时代
简介:近些年,随着实时通信技术的发展,在线会议逐渐成为人们工作中不可或缺的重要办公工具,据不完全统计,线上会议中约有 75% 为纯语音会议,即无需开启摄像头和屏幕共享功能,此时会议中的语音质量和清晰度 ...
- Centerface:开源实用的边缘设备无锚人脸检测与对齐算法
点击我爱计算机视觉标星,更快获取CVML新技术 昨天Github上 ywlife 开源了 CenterFace:实用的边缘设备无锚人脸检测与对齐算法,引起了很多52CV群友的关注,开源不到一天,已经1 ...
最新文章
- 阿里巴巴宣布开源限流降级中间件——Sentinel
- C++学习003-#define 自定义宏
- 通过Visual Studio 2005的项目模板来加速开发过程
- 深入出不来nodejs源码-编译启动
- 【分布式】Zookeeper请求处理
- 强调模型可复现性!英伟达与伦敦国王学院开源医学AI框架 MONAI
- hadoop服务器系统设置win10,win10系统hadoop安装配置的设置技巧
- 数学家、数学轶事与数学史话
- php 正则预搜索?=
- maven 配置远程仓库服务器密码
- AJDK-Wisp协程
- 新浪微博技术架构分析-转载
- 群控成为微商月入百万的神器
- sql 节假日判断(春节、中秋、国庆、周末等)
- 湖北户外帐篷在野外户外需要注意的方面
- 七分钟学会 HTML 网页制作
- java spring ioc 实例_Spring 源码阅读(IOC容器)-bean的实例化以及注入
- 如何自定义设置虚拟机的的IP地址
- 三角函数专题【高阶辅导】
- 记一则SQL 数据库状态(可疑)(紧急)解决方案