Lua–棋牌游戏开发(概念性设计二)

1:获取"棋牌工具.lua"文件,文件后return CardUtils

参考上一篇博文链接:Lua–棋牌游戏开发(概念性设计一)

local CardUtils = require "棋牌工具" -- 加载文件
2:牌的类型定义
local CardsType =
{-- 键值对 = 值Single = 1, -- 单张DuiZi = 2, -- 对子ShunZi = 3, -- 顺子LianDui = 4, -- 连对Three = 5, -- 三张ThreeTakeOne = 6, -- 三带一ThreeTakeTwo = 7, -- 三带二FourTakeTwo = 8, -- 四带二FeiJi = 9, -- 三张(333444)/三张带一(33344455/33344445)/三带二(3334445566)Boom = 10, -- 炸弹BoomBoom = 11, -- 王炸None = 12 -- 不符合牌型
}
3:记牌器:将选中的牌转换成(牌值对应数量的键值对)
local DDZLogic = {}function DDZLogic:toCardMap(selectedCards)local map = {}-- 键值size对应选中牌的数量map.size = #selectedCardsfor i = 1,20 domap[i] = 0endfor i = 1,#selectedCards dolocal value = CardUtils:getCardValue(selectedCards[i])map[value] = map[value] + 1endreturn map
end
4:判断是否是单张

function DDZLogic:isSingle(cards) -- cards:记牌后的结果return 1 == cards.size
end
5:判断是否是对子
function DDZLogic:isDuiZi(cards)-- 判断张数if cards.size ~= 2 thenreturn falseend-- 遍历所有的牌值对应的数量,如果不等于0,判断是否等于2for i = 1,20 dolocal cardNum = cards[i] -- 得到当前牌值对应的数量if cardNum ~= 0 thenreturn 2 == cardNumendend
end
6:判断是否是顺子
function DDZLogic:isShunZi(cards)if cards.size < 5 thenreturn falseendfor i = 1,20 dolocal cardNum = cards[i]if 1 == cardNum then-- 遍历从i开始到i+cards.size - 1对应的数量都为1for j = 1,cards.size - 1 dolocal cardNum = cards[i + j]if cardNum ~= 1 thenreturn falseendendreturn true -- 整个循环完成,返回trueendendreturn false -- 没有单张
end
7:判断是否是连对
function DDZLogic:isLianDui(cards)if cards.size%2 ~=0 or cards.size<6 thenreturn falseendfor i = 1,20 dolocal cardNum = cards[i]if 2 == cardNum then-- 遍历for j = 1,cards.size/2-1  dolocal cardNum = cards[i + j]if cardNum ~= 2 thenreturn falseendendreturn trueendendreturn false
end
8:判断是否是三张
--判断是否是三张
function DDZLogic:isThree(cards)if cards.size~=3 thenreturn falseendfor i=1,20 dolocal cardNum=cards[i]if cardNum ==3 thenreturn trueendendreturn false
end
9:判断是否是三带一
function DDZLogic:ThreeTakeOne(cards)if cards.size~=4 thenreturn falseend
local issingle=0
local isThree=falsefor i=1,20 dolocal cardNum=cards[i]if cardNum ==3 thenisThree=trueendif cardNum == 1 thenissingle=issingle+1endendif issingle==1 and isThree==true thenreturn trueelsereturn falseend
end
10:判断是否是三带二
function DDZLogic:ThreeTakeTwo(cards)if cards.size~=5 thenreturn falseend
local istwo=false
local isThree=falsefor i=1,20 dolocal cardNum=cards[i]if cardNum ==3 thenisThree=trueendif cardNum == 1 thenistwo=trueendendif istwo==true and isThree==true thenreturn trueelsereturn falseend
end
11:判断是否是四带二
function DDZLogic:FourTakeTwo(cards)if cards.size~=6 thenreturn falseend
local istwo=false
local isfour=falsefor i=1,20 dolocal cardNum=cards[i]if cardNum ==4 thenisfour=trueendif cardNum == 2 thenistwo=trueendendif istwo==true and isfour==true thenreturn trueelsereturn falseend
end
12:判断是否是飞机
function DDZLogic:FeiJi(cards)if cards.size < 6 thenreturn falseend-- 3 * n(333444) --666888if cards.size % 3 == 0 thenlocal feijiLength = cards.size / 3 -- 飞机的总长度local length = 0 -- 记录的长度for i = 1,20 dolocal cardNum = cards[i]if 3 == cardNum thenlength = length + 1 -- 飞机数量+1if feijiLength == length thenreturn trueendelselength = 0endendend-- (3 + 1)* n(33344456 / 33334445 / 33334444/555666777333)if cards.size % 4 == 0 thenlocal feijiLength = cards.size / 4 -- 飞机的总长度local length = 0 -- 记录的长度for i = 1,20 dolocal cardNum = cards[i]if cardNum >= 3 thenlength = length + 1 -- 飞机数量+1if feijiLength == length thenreturn trueendelselength = 0endendend-- (3 + 2)* n(3334445566)if cards.size % 5 == 0 thenlocal feijiLength = cards.size / 5local length = 0for i = 1,20 dolocal cardNum = cards[i]if 3 == cardNum thenlength = length + 1if feijiLength == length then-- 从i往后到20,所有的牌值对应的数量不能1和3for j = i + 1,20 dolocal cardNum = cards[j]if 1 == cardNum or 3 == cardNum thenreturn falseendendreturn true -- 后面的牌对应的数量没有出现1和3endelse -- 0 1 2 4if 1 == cardNum then -- 当出现数量为1return falseendif length > 0 then -- 之前已经出现了3张return falseendendendendreturn false
end
13:判断是否是炸弹
--判断是否是炸弹
function DDZLogic:Boom(cards)if cards.size~=4 thenreturn falseendfor i=1,20 dolocal cardNum=cards[i]if cardNum ==4 thenreturn trueend      endreturn falseend
14:判断是否是王炸
--判断是否是王炸
function DDZLogic:BoomBoom(cards)if cards.size~=2 thenreturn falseendlocal cardNum1=cards[18]local cardnum2=cards[19]if cardNum1==1 and cardnum2 ==1 thenreturn trueelsereturn falseendend
15:获取牌的类型
function DDZLogic:getCardsType(selectedCards) -- 获取选中牌的类型local cards = self:toCardMap(selectedCards) -- 转为记牌器--单张if self:isSingle(cards) thenreturn CardsType.Singleend--对子if self:isDuiZi(cards) thenreturn CardsType.DuiZiend--顺子if self:isShunZi(cards) thenreturn CardsType.ShunZiend--连队if self:isLianDui(cards) thenreturn CardsType.LianDuiend--三张if self:isThree(cards) thenreturn CardsType.Threeend--三带一if self:ThreeTakeOne(cards) thenreturn CardsType.ThreeTakeOneend--三带二if self:ThreeTakeTwo(cards) thenreturn CardsType.ThreeTakeTwoend--四带二if self:FourTakeTwo(cards) thenreturn CardsType.FourTakeTwoend--飞机if self:FeiJi(cards) thenreturn CardsType.FeiJiend--炸弹if self:Boom(cards) thenreturn CardsType.Boomend--王炸if self:BoomBoom(cards) thenreturn CardsType.BoomBoomend--不符合return CardsType.None
end

测试用例

local selectedCards = {0x03,0x14,0x25,0x26,0x37}
local type = DDZLogic:getCardsType(selectedCards)
print(type)

Lua--棋牌游戏开发(概念性设计二相关推荐

  1. 手机棋牌游戏开发的流程是怎样的?

    最近几年,随着网络游戏的兴起,棋牌手游开发也越来越受欢迎,在国内,几乎随处可见从事手游和手游的公司.不过,虽然公司和产品很多,但效果也不一样,区别就在于,他们能不能掌握好这款游戏的关键.那么,在手机上 ...

  2. 棋牌游戏开发UI设计师如何打造受玩家欢迎的界面

    棋牌游戏由于其简单的玩法规则,深受群众喜欢,但这只是棋牌游戏开发侧重的一方面,如果玩家连最开始的下载试玩欲望都没有,又如何了解你的游戏规则呢,因此棋牌游戏开发界面设计,也是影响其是否能够受大众认可的重 ...

  3. 都有哪些影响棋牌游戏开发价位的因素

    棋牌游戏的开发成本一直是投资者关心的问题.不同的游戏开发商在棋牌游戏开发市场上提供不同的价格.有的低到几千,有的会达到一万多,有的甚至想要几十万.为什么同样的棋牌游戏开发,价格差距会如此巨大.影响开发 ...

  4. 越多的人入局棋牌游戏开发行业,游戏产品突出竞技元素

    目前现有的棋牌游戏产品是如何搭建竞技类棋牌游戏产品的,我们也需要供给参考一些企业网上的棋牌游戏开发公司产品,但当棋牌游戏设计行业的可见的红利在慢慢消退,棋牌竞技游戏也有很多值得思考的是发展其他的事情. ...

  5. python3.7魔塔游戏_基于Funcode平台的“火锅版魔塔”游戏开发与设计

    2019 年第 2 期 信息与电脑 China Computer & Communication 软件开发与应用 基于 Funcode 平台的"火锅版魔塔"游戏开发与设计 ...

  6. 棋牌游戏开发不可缺少的四大技术支持

    随着近几年棋牌游戏大火,棋牌游戏开发技术也在与时俱进,逐步成熟.很多欠缺这方面专业知识的人,都认为其开发是高深莫测,非一般人所能尝试.今天摩天游科技小编凭借十年开发经验,给大家说说棋牌游戏开发所需要的 ...

  7. 游戏开发入门(二)游戏中的设计模式

    视频链接:游戏开发入门(二)游戏中的设计模式(3节课 时常:约2小时40分钟) 该视频主要围绕游戏中常见的设计模式展开讲解并实践,需要大家多多实践与理解 笔记与总结(请先学习视频内容): 1.有必要深 ...

  8. 棋牌游戏开发可持续发展 需重视长期运营优化

    近几年,创业者纷纷转入棋牌游戏开发行业,希望在此领域大展拳脚.但是对很多技术小白来说,棋牌游戏开发的价格一直是一个波动的数值,令大家摸不着头脑,这么多开发公司,为啥价格各不相同呢?影响一款棋牌游戏价格 ...

  9. 高质量的棋牌游戏开发如何改善好用户体验?

    很多投资者在自己的棋牌游戏开发完成后,鼓足干劲开始运营推广,但是过了一阵的努力,收效甚微,感觉没有想象中的那么顺利,摩天游科技通过十年开发经验发现,很多投资者的棋牌游戏产品往往是表面上花哨,但是实际内 ...

最新文章

  1. python安装pip_Python的pip安装总是失败怎么办?
  2. ARM启动代码中_main 与用户主程序main()的区别
  3. Transformer architecture的解释
  4. 解决ubuntu16.04 qt5.9.1无法输入中文
  5. HttpNotificationChannel 云端推送信息实现
  6. hash函数MurmurHash
  7. 网卡是如何将包转换成电信号并发送到网线中的
  8. cisco2811 路由器修改密码
  9. 如何打开mo文件并修改 PoEdit
  10. 如何快速在PDF中查找内容?PDF快速查找内容
  11. Oracle WebLogic Server 12c: Node Manager配置与使用
  12. vue 去掉黄色警告
  13. 网页怎么与服务器进行连接,如何实现网页与服务器的连接
  14. (九)苏世民:我的经验和教训:苏世民成功投资的十五条法则
  15. 《强化学习周刊》第55期:LB-SGD、MSP-DRL对抗鲁棒强化学习
  16. Python3记录--个人常用函数及资源(持续更新)
  17. leetcode周赛,希望咸鱼,有一天可以薅到羊毛
  18. 超神学院之天河战役计算机,《超神学院之雄兵连 第1季 天河战役篇》
  19. 如果用某些暴力软件来强行卸载客户端结果会怎样?
  20. Oracle存储过程以及游标嵌套实际使用

热门文章

  1. 体素转换为点云(VRN)
  2. Urllib2的使用,提供接口
  3. 2018十大最热门编程语言排行榜出炉,Java竟不是第一!
  4. 查看mysql数据库最大连接数和已经连接的数量
  5. 数字电位器X9312
  6. 【python】算法设计:回文素数
  7. Java--十大排序算法之归并排序
  8. 2019年寒假 纪中培训总结
  9. 如何参与到开源优测-积微速成计划任务
  10. Android P 如何挂载system镜像到根目录