http://topic.csdn.net/u/20120515/23/CE378105-FA76-4A08-A4D3-DE61109F4909.html

斗地主算法之点选牌

PS:最近找了2个朋友主准备把斗地主游戏重写,由于种种原因今天还没有开始,所以先把基本的算法写一写,为以后写项目做准备。如果你对斗地主游戏比较感兴趣可以关注我们(项目人员(QQ网名):麦麦,KelJony, °つ陌途 ),以后我们将在博客中写一些关于斗地主方面的东西!!  
博客地址: http://blog.csdn.net/wojiushi3344

地主源码下载

  在地主点选牌的算法中,我们只要点击每张牌的可见区域,它的状态就会随之变化。我们通过上图可以发现,每张牌选中之后它会遮盖前面3张牌的可见区域,而后面3张牌会影响自身的可见区域,所以每张牌点选之后与前面3张和后面3张牌有关系(一共就是6张)。第一张牌除外,第一张牌选中之后只有它自己的可见区域会发生变化,因为第一张牌前面没有任何牌。这样我们就可以定义下面几个变量来记录每次点选牌之后的可见区域。

CRECT NormalRect; //正常情况下的可见矩形区域
CRECT TopOrDown; //自己选中或者邻居选中的可见区域
int CardWidth;//牌的宽度
int CardHigh;//牌的高度
int CheckHigh;//选中之后的向上高度
int CardSpacing;//牌之间的间距

在最开始什么牌也没有点选的时候每张牌有个正常的可见区域,我们用NormalRect来记录,它的值就是NormalRect.setRect(牌的X坐标,牌的Y坐标,牌的X坐标+CardSpacing(牌之间的间距),牌的Y坐标+CardHigh)。下面我们可以分几种情况来讨论可见区域的变化。

第一种:在牌的队列中只有自己被选中,会响应自己的可见区域,和前面一张牌的下部分可见区域(图中蓝色框选出来的部分)。
这种是最简单的,自己被选中的时候,首先改变的正常的可见区域然后+选中之后的可见区域。
选中之后我们改变的就是牌的Y坐标:牌的Y坐标=牌的Y坐标-CheckHigh(选中之后的向上高度)
然后代入下面
NormalRect.setRect(牌的X坐标,牌的Y坐标,牌的X坐标+CardWidth,牌的Y坐标+CardHigh);//这个就是改变之后的正常可见区域。
下面是具体的4个点的坐标计算
X1=牌的X坐标- CardSpacing(牌之间的间距)
Y1=牌的Y坐标
X2=牌的X坐标+CardWidth
Y2=Y1+CheckHigh(选中之后的向上高度)
选中之后的可见区域:TopOrDown.setRect(x1,y1,x2,y2);

然后改变前面一张牌下部分的可见区域。
X1=牌的X坐标+ CardSpacing(牌之间的间距)
Y1=牌的Y坐标+CheckHigh-CheckHigh(选中之后的向上高度)
X2=牌的X坐标+ CardSpacing(牌之间的间距)*2
Y2=牌的Y坐标+CheckHigh;
TopOrDown.setRect(x1,y1,x2,y2);

前面一张牌的正常可见区域不变。

第二种:在牌的队列中会影响其他牌的可见区域
这个可以分二种情况来讨论
1 前面三张牌有被选中的(选中之后前面牌的可见区域会被影响)
当前面3张牌中有选中状态的牌,它们的可见区域会被影响,正常的可见区域不会被影响。而影响的可见区域也只是X2被改变了,影响的可见区域我们可以用一个公式来表示
X2=((checkCardIndex(选中牌的索引) - forntCardindex(前面选中牌的索引))-1)*CardSpacing(牌之间的间距)。

2后面3张牌有被选中的(会影响自身得可见区域)
当我们选中牌的时候,后面三张牌有有被选中的时候。我们首先用第一种:在牌的队列中只有自己被选中的方法来计算出正常的可见区域和可见区域。而选中之后被后面影响的也只有X2,我们同样用一个公式来表示。
X2=( BackCardindex(后面选中牌的索引)-(checkCardIndex(选中牌的索引) )-1)*CardSpacing(牌之间的间距)。

这样当我们选中牌的时候既要改变自身得可见区域也要改变前面3张被选牌的可见区域。
点选牌的时候得遍历每张牌的正常可见区域和邻居选择之后给自己改变的可见区域。

【分享】地主算法之点选牌相关推荐

  1. 12123选牌漏洞_12123选牌漏洞是什么?新车牌号自编自选技巧

    最近网上出现了一个所谓的12123选牌漏洞,简单来说,就是每次自己选择的车牌号输入系统之后因为不能使用就会致使用户第二次选择,为了减少次数的限制,用户可以将浏览器后退重新进行选择.当然,它也是有一定时 ...

  2. 淮安掼蛋源码之--选牌与出牌

    原文:淮安掼蛋源码之--选牌与出牌 "掼蛋"一直是人们茶余饭后经久不衰的娱乐项目之一,淮安掼蛋 偶尔带点"彩头"(数额不大的钱财输赢)以增加刺激也是正常的事.本 ...

  3. 斗地主AI算法——第六章の牌型判断

    本章实现了上一章提到的检查当前是否只是一手牌函数ins_SurCardsType /* 检查剩余的牌是否只是一手牌是: 返回手牌类型数据 不是:返回错误类型(cgERROR) */ CardGroup ...

  4. java斗地主怎么出牌_斗地主滑动选牌出牌(Cocos Creator)

    本文主要讲解以下几个方面: card model 滑动处理 阴影 选择 出牌 Card Model 首先,牌有两个属性:数字.花型: ps:本文现在是,用数字和花型来组成一张牌,有空可以再用另一种形式 ...

  5. 斗地主滑动选牌出牌(Cocos Creator)

    转载自:https://www.jianshu.com/p/29883621184c 本文主要讲解以下几个方面: card model 滑动处理 阴影 选择 出牌 Card Model   首先,牌有 ...

  6. cocos creator实现棋牌游戏滑动选牌的功能

    最近在玩cocos creator,打算学着做一款类似双扣游戏的棋牌,名字叫文成三星,比双扣还要多一扣,因为需要三幅牌,在我们老家比较流行这种玩法. 目前实现了绝大部分的逻辑,效果如下: 有一点不好的 ...

  7. 美食类短视频如何定位?分享四种类型,选对适合的方向很重要

    美食类短视频如何定位?分享四种类型,选对适合的方向很重要 人人都是"干饭人",所以美食类短视频从来都是不会缺少粉丝的.但是这并不说明做美食类短视频的小伙伴们可以随心所欲的做内容,比 ...

  8. 棋牌游戏开发之地主算法判断牌型

    棋牌游戏开发咨询 QQ:325131039 棋牌游戏开发咨询交流群: 490287966 由于近年来网络棋牌游戏的火爆导致个各个地区的特色棋牌游戏进入开发的红火时期,也有越来越多的团队个人开始研究棋牌 ...

  9. 算法工程师当前选哪个方向好?

    公众号关注 "视学算法" 设为 "星标",消息即可送达! 链接:https://www.zhihu.com/question/398876586 编辑:深度学习 ...

最新文章

  1. Hello Jsilk
  2. java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息...
  3. 谷歌将比特币现金汇率纳入货币信息搜索
  4. log4j无法打印日志的问题
  5. HDU 5950——Recursive sequence
  6. SQL SERVER重置自动编号列(标识列)
  7. html 文件上传与移除,Vue采用input实现文件上传与删除
  8. 002A demo of the Spectral Co-Clustering algorithm
  9. springboot 项目中在普通类中调用dao层的mapper 出现空指针异常
  10. MPLS virtual private network OptionC实验(华为设备)
  11. 扩展欧几里得算法——java
  12. SFR算法详解(三)——浅析关于SFR的一些物理意义及原理
  13. 贴片铝电容识别及型号_电路板上的贴片电容怎样核实它的型号及参数是多少
  14. MNN源码阅读之模型转换
  15. TOEFL wordlist 35
  16. zabbix Lack of free swap space
  17. 小学计算机写字板教案,小学第二册信息技术《第9课走进“写字板”》教学参考...
  18. 大数据之电信项目架构
  19. 【分享】参加一个0元小白理财训练营开营第1天的学习笔记
  20. 我对ACM初学者想说的话

热门文章

  1. 如何设计优秀的应用图标?苹果教你这六招
  2. 设置浏览器滚动条宽度、高度
  3. 干货 | 肖特基二极管4大特性
  4. Matlab基础之坐标轴操作汇总(新加网格线设置)
  5. 集线器、网桥、交换机、路由器区别的简单讲解
  6. word论文怎么让2级标题的编号自动匹配1级标题
  7. 倾斜摄影模型压平,裁剪,遮罩,水面倒影,大雪覆盖
  8. shutdown命令
  9. 毕业设计:小米手机在京东的数据分析和爬虫
  10. 基于asp.net180动态IT培训网站