lua语言发牌逻辑

这段时间刚学习完lua语言的语法逻辑,所以手头一热乎就像做点什么东西,所以想到了又好写又简单的大家玩的扑克发牌思路。我们在生活中都打牌,然后打牌的时候都洗过牌。洗牌的步骤就是先整理牌,然后打乱牌顺序,然后就摸牌,最后剩下三张就是抢到地主的人拿的牌。

首先我们先整理下扑克牌中正常发牌的思路:1. 先将54张牌整理在一起2. 然后将这些牌随机打乱顺序3. 然后摸牌,留下最后三张是地主的牌

整理思路后,我们就可以开始搭建数据结构:

第一步:做一个专门放所有卡的信息table,代码如下:
card = {'f_2','h_2','m_2','r_2','f_3','h_3','m_3','r_3','f_4','h_4','m_4','r_4','f_5','h_5','m_5','r_5','f_6','h_6','m_6','r_6','f_7','h_7','m_7','r_7','f_8','h_8','m_8','r_8','f_9','h_9','m_9','r_9','f_10','h_10','m_10','r_10','f_J','h_J','m_J','r_J','f_Q','h_Q','m_Q','r_Q','f_K','h_K','m_K','r_K','f_A','h_A','m_A','r_A','XIAO','DA'}

注意:f_为方块,h_为黑桃,m_为梅花,r_为红桃。XIAO为小王,DA为大王

第二部:做一个专门放玩家牌的table,代码如下:
player1 = {}
player2 = {}
player3 = {}

还没有发牌和得到手牌,所以为空

第三步:做一个是地主的那三张牌,代码如下:
showCard = {}
在定义一个杂项,用来记录玩家卡牌和三张牌的数组下标
pid1 = 1
pid2 = 1
pid3 = 1
show = 1

注意:因为lua里的下标是从1开始的,和其他语言有点区别。

然后在发牌中,我是要在控制台打印的,所以这里先把打印卡牌的逻辑写好。

第四步:打印卡牌的逻辑
function printCard(...)local s = [[]]for k,v in pairs(...) dos = s..vs = s..' 'endprint(s)
end

这一段会遍历 … 带过来的数据然后打印到控制台

第五步:将随机种子设置好
function rSeed()math.randomseed( os.time() )math.random()math.random()math.random()math.random()
end

这里将随机种子设置好,randomseed(os.time())这里取系统时间作为种子参数设置

注意:最重要的是后面几个,因为lua这里的随机很坑爹,会出现随机出来的第一个值是固定的,所以我查了很多资料之后根本解决方案就是,在种子函数后面多使用几次math.random()方法即可。

第六步:随机打乱卡牌的顺序,即洗牌
function randCard( ... )local card = ...local len = #cardlocal times = len * 5while times > 0 dolocal rSub = math.random(len)card[1],card[rSub] = card[rSub],card[1]times=times-1end
end

这里我使用了一个很特别的打乱方法,首先我随机获得一个卡牌的下标,然后将这个下标指定的值和第一个元素的值进行交换,然后随机打乱个len*5次,即已经能够全部打乱了。这里就是模拟洗牌的过程。

第七步:发牌的过程
function faCard( ... )local card = ...local len = #cardfor i=1,len doif i <= 51 thenif i%3 == 1 thenplayer1[pid1] = card[i]pid1 = pid1 + 1    elseif i%3 == 2 thenplayer2[pid2] = card[i]pid2 = pid2 + 1elseif i%3 == 0 thenplayer3[pid3] = card[i]pid3 = pid3 + 1endelseshowCard[show] = card[i]show = show + 1endend
end

这里将三个玩家按顺序来发牌,第一个玩家就是当前牌下表与3求余为1,即给他,第二个是与3求余为2,第三个就是求余为0。与3求余就是只有三个玩家,所以与3求余了。

第八步:最后就是按顺序调用这些流程,然后打印各个玩家的卡牌了。
rSeed() --设置随机种子
print('In card group random before:')
printCard(card) --打印前的卡牌
randCard(card)  --将卡牌打乱,洗牌的过程
print('In card group random after:')
printCard(card) --洗牌后的卡牌
faCard(card)    --发牌给玩家print('\n')
print('-------')
print('show Card:')
printCard(showCard)
print('-------')
print('player1:')
printCard(player1)
print('-------')
print('player2:')
printCard(player2)
print('-------')
print('player3:')
printCard(player3)

最终看看运行流程:
这里就完美设计完成了。

[lua] 用lua实现扑克游戏发牌的逻辑代码相关推荐

  1. 集成Lua到你的Android游戏 - 转

    当前众多游戏引入脚本语言作为快速发布内容以及灵活扩展的解决方案,在寻找向Android应用集成Lua脚本语言的方案时,大量零碎的资料并没有向开发者指引一个明确的方向.在这里我把自己通过整合资料完成的方 ...

  2. 集成Lua到你的Android游戏(常见问题补充,解决,)

    在看这篇文章之前,先确定你已经看完了原作者的文章. 集成Lua到你的Android游戏 http://www.cnblogs.com/astin/archive/2011/07/26/2117590. ...

  3. 《魔兽世界插件》教程---21点扑克游戏 Blackjack

    1.效果图 因为我是新手,只能做一个非常简单的插件,21点扑克游戏.比较有趣吧,插件也可以做一个游戏?游戏中的游戏! 2.编写魔兽世界插件准备 首先你要一个最新的魔兽世界客户端,我的有26G大小.记得 ...

  4. 《魔兽世界插件》教程—21点扑克游戏 Blackjack

    1.效果图 因为我是新手,只能做一个非常简单的插件,21点扑克游戏.比较有趣吧,插件也可以做一个游戏?游戏中的游戏! 2.编写魔兽世界插件准备 首先你要一个最新的魔兽世界客户端,我的有26G大小.记得 ...

  5. java输入数量扑克牌排序_Java扑克游戏(多人多牌数比较游戏)的实现

    具体实现步骤如下: 实现扑克Card类,用于储存扑克牌,1-13代表点数,4-1代表花色(黑桃,红桃,梅花,分块) 实现扑克列表CardList类,用于实现生成一副牌,洗牌,发牌的功能 实现玩家Pla ...

  6. 45岁码农用不到2年时间撸出100款扑克游戏

    前言 扑克的玩法非常多,常见的就有斗地主.跑得快.五十K.锄大地.梭哈.十点半.二十一点.打千分.升级.拖拉机.双扣.保皇.斗牛.挖坑等等.在国内的不同地方,同类游戏的玩法也有不同讲究.粗略估计,国内 ...

  7. 扑克游戏的洗牌算法及简单测试

    2019独角兽企业重金招聘Python工程师标准>>> 我在学习<写给大家看的C语言书>这本书时,对书后面附录的一个扑克游戏程序非常感兴趣.源代码在帖子最后. PS:这本 ...

  8. C# 之 扑克游戏 -- 21点规则介绍和代码实现

    C# 之 扑克游戏 -- 21点规则介绍和代码实现 一,游戏介绍 1.1 游戏规则 1.2 牌点计算 1.3 判断胜负 二,游戏设计 2.1 游戏流程 2.2 玩家类 2.3 AI类 三,参考代码 一 ...

  9. 21点 小游戏 java代码_基于Java的21点扑克游戏的实现

    在上次写的比较牌点的扑克游戏上Java扑克游戏(多人多牌数比较游戏)的实现中,添加21点游戏规则,实现21点牌类游戏.具体实现步骤如下:[需要源代码的留QQ,大家一起探讨探讨哈,谢谢啦!] 抽象出规则 ...

最新文章

  1. 计算机应用基础计算配置教案,[定稿]计算机应用基础教案_Windows_XP版V8.1(全文完整版)...
  2. Python高级特性——迭代(Iteration)
  3. jQuery -- 光阴似箭(五):AJAX 方法
  4. 网络安全发展的趋势及措施
  5. Jenkins与代码上线解决方案
  6. DAG最长路问题 hdu-1224
  7. 中心对称数 java_【LeetCode(Java) - 246】中心对称数
  8. 全国dns服务器地址
  9. java学习之自定义异常
  10. npm 安装出错 npm ERR! request to https://registry.npmjs.org/express failed, reason: unable to verify th
  11. 浅谈InnoDB存储引擎下锁的分类
  12. 【FPGA】学习的32个开源网站
  13. 在Windows下安装和使用vim
  14. python-共现矩阵(共词矩阵)计算
  15. php sha1摘要算法,js 加密和摘要算法(base64、md5、sha1、rsa)
  16. cad旋转命令_如何将CAD图形旋转至水平位置?
  17. 中国家庭的七大饮食问题
  18. vs2010 添加向前导航/向后导航按钮
  19. WordPress爱导航主题 1.1.3 简约大气网站导航源码网址导航源码
  20. UE4-(光照)光照贴图大小及环境光遮蔽

热门文章

  1. 案例4加减乘除四则运算
  2. Mac 上编译MapBox Native gl
  3. 树莓派操作及搭建frp实现内网穿透
  4. 块存储、文件存储、对象存储这三者的区别
  5. Multisim基础 利用示波器观察二极管的正向电压
  6. poj 2152 树形dp(建立消防站)
  7. Codeforces 517 #A
  8. 《安富莱嵌入式周报》第293期:SEGGER开源其C/C++库源码emRun,丰富EMC电磁兼容资,OTA开源组件,2022 Github全球报告,内存安全指南
  9. 软件构造Lab6总结
  10. 机器学习之Javascript篇: 近邻(k-nearest-neighbor) 算法介绍