public static int[] Cards =
                {
                    0x01,  0x02,  0x03,  0x04,  0x05,  0x06,  0x07,  0x08,  0x09,//万
                    0x01,  0x02,  0x03,  0x04,  0x05,  0x06,  0x07,  0x08,  0x09,//万
                    0x01,  0x02,  0x03,  0x04,  0x05,  0x06,  0x07,  0x08,  0x09,//万
                    0x01,  0x02,  0x03,  0x04,  0x05,  0x06,  0x07,  0x08,  0x09,//万
                    0x11,  0x12,  0x13,  0x14,  0x15,  0x16,  0x17,  0x18,  0x19,//条
                    0x11,  0x12,  0x13,  0x14,  0x15,  0x16,  0x17,  0x18,  0x19,//条
                    0x11,  0x12,  0x13,  0x14,  0x15,  0x16,  0x17,  0x18,  0x19,//条
                    0x11,  0x12,  0x13,  0x14,  0x15,  0x16,  0x17,  0x18,  0x19,//条
                    0x21,  0x22,  0x23,  0x24,  0x25,  0x26,  0x27,  0x28,  0x29,//筒
                    0x21,  0x22,  0x23,  0x24,  0x25,  0x26,  0x27,  0x28,  0x29,//筒
                    0x21,  0x22,  0x23,  0x24,  0x25,  0x26,  0x27,  0x28,  0x29,//筒
                    0x21,  0x22,  0x23,  0x24,  0x25,  0x26,  0x27,  0x28,  0x29,//筒
}

private const int MASK_COLOR = 0xF0; //花色掩码
        private const int MASK_VALUE = 0x0F; //数值掩码

继上个章节之后,洗完牌后将牌堆做了一个新的排序,每次接牌的时候只需要按照牌堆的顺序依次接收即可,牌堆中的索引与牌值并没有相互对应:例如索引0代表的时一万,索引9代表的也是一万,

因此我们需要做一个将牌堆中的值转化为手牌中索引的方法,和索引转化为牌值的方法:
//(索引->牌值) 的核心代码:
//
//
        public static int IndexSwitchToCard(int index)  //(索引->牌值) 
        {
            int value = 0;
                value = ((index / 9) << 4) | (index % 9 + 1);
            return value;
        }
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
//(牌型->索引) 的核心代码:
//
//
     public static int SwitchToCardIndex(int _cardValue)  //(牌型->索引)  
        {
            CardsOfIndex = ((_cardValue & MASK_COLOR) >> 4) * 9 + (_cardValue & MASK_VALUE) - 1;
            return CardsOfIndex;
        }

对牌值转化为索引进行验证:
(一)假设传进的牌值为:0x11;(他对应手牌的索引为9)
(二)_cardValue & MASK_COLOR得到0x10再降其向右移动四位得到结果为0001,再乘9得到结果为:1001;
(三)_cardValue & MASK_VALUE得到0x01:0001再减去1得到0,和(二)相加后得到9。得以验证;

下面进行发牌的方法,打过麻将的都知道在第一次接牌的时候每个人手中的牌数为13张附上代码:

public static int[] Dealcard(int[] cbCardIndex)    //这个是第一次发牌的方法,一人接13张牌cbCardIndex返回一个手牌的索引
        {
            for (int i = 0; i < 13; i++)
            {
                int value = Cards[IndexIncard];
                int index = SwitchToCardIndex(value);
                cbCardIndex[index]++;
                IndexIncard++;
            }
            return cbCardIndex;
        }

只有庄家手中的会多接一张牌,再附上单个接牌的方法,这里返回的时接收到的那张牌索引
    public static int GetCard(int[] cbCardIndex)   //这个是接牌的方法
        {
            int value = Cards[IndexIncard];
            int index = SwitchToCardIndex(value);
            cbCardIndex[index]++;
            IndexIncard++;
            return index;
        }

麻将算法(二)牌型转换以及接牌相关推荐

  1. python斗地主出牌算法_斗地主之用蚁群算法整理牌型:如何进行牌力估计

    我们在前面讲到过,各牌手的牌力估计就是我们在用蚁群算法构造最优牌型时的启发性知识.启发性知识其实就是我们利用自己的经验对事物做出的判优性评估,或者说就是对事物价值的判断. 原则上,应用蚁群算法需要用到 ...

  2. 【吟风听云】推锅扑克牌型规则说明(端锅子牌型说明/扑克版牌九规则)

    #Y0101 浮生无事一朝轻,且吟尘风听闲云 --<吟风听云集>@CuPhoenix [阅前敬告] <吟风听云集>收录尘世闲闻,供君同赏 仅代表该内容可能存在的某一版本,不保证 ...

  3. 纸牌游戏的牌型分析和出牌策略

    前段时间遇到这个问题,想了一些,也搜了一些,发现网上也只是零星讲了一些笼统思想,复杂的我也没看懂,便自己去尝试写了一些代码来处理这个问题.还是先说明一下适用场景,只是针对一副牌去掉大小王,规则是常见的 ...

  4. 斗地主之用蚁群算法整理牌型-如何进行牌力估计

    我们在前面讲到过,各牌手的牌力估计就是我们在用蚁群算法构造最优牌型时的启发性知识.启发性知识其实就是我们利用自己的经验对事物做出的判优性评估,或者说就是对事物价值的判断. 原则上,应用蚁群算法需要用到 ...

  5. 德州扑克实践之二------判断牌型

    实践二------牌型判断 起始 现在到了,第二步,上一步我们已经做好了发牌模块,有了手牌,就需要判断牌型了,平时打扑克时,我们需要使用大脑进行判断自己手里的牌属于那种类型的,现在我们需要通过程序来进 ...

  6. erlang实现麻将胡牌以及癞子胡牌算法

    判断胡牌 麻将胡牌其实是按照nAAA + mABC + DD的套路,算法判断也很好实现,找出DD,然后剩下的牌都能形成AAA或者ABC即可胡牌.本文只介绍麻将普通胡牌的算法,该算法经过验证可判断除特殊 ...

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

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

  8. 麻将算法(三)碰牌以及杠牌

    洗牌,接牌都有了,那就再来个扔牌.扔牌的思路:如果传入的时牌索引直接找到手牌中的这个位置,将个数-1:如果传入的是牌值,通过牌型转换后再进行以上操作:     public static void R ...

  9. 算法题 牌型判断 Java

    题目 德州扑克的花型由 N 张扑克牌组成 0<N<8,可以组成的牌型按照价值从高到低来区分分别为: 皇家同花顺:最高为 Ace (一点)的同花顺. 如 A K Q J 10 的同花顺 同花 ...

  10. 十三水牌型 图片_十三水特殊牌型是什么 最齐全的十三水特殊牌型介绍

    1.至尊清龙:同花且A至K齐全的牌.最大牌型.若巧遇别家也有时,则以和局论,不输不赢.赢每家108水 2.十三水(一条龙) A至K齐全若巧遇别家也有一条龙时,则以和局论,不输不赢. 赢每家36水 3. ...

最新文章

  1. 樊登高效休息法读书心得_《读懂一本书:樊登读书法 》作者:樊登
  2. 刷新aspx页面的六种方法
  3. s()++php,jquery siblings()函数正确用法
  4. 如何跟程序员谈一场没有Bug的恋爱
  5. 【转】IAR与Keil两款开发工具区别
  6. 关于项目中属性配置文件的改进
  7. acrgis api for javaScript中的portal查询
  8. iphone-common-codes-ccteam源代码 CCTestMacros.m
  9. http status 404 – 未找到_从零开始搭建自己的网站004添加404处理页面
  10. 清华,北大坐实亚洲大学Top2,泰晤士2020亚洲大学榜
  11. nosql----redis数据恢复方案
  12. 无法访问udemy.com怎么办?
  13. spring mvc 前台属性数据的传递和后台属性数据的接收
  14. Verilog数字信号处理---基础1
  15. 应急响应常用的工具说明
  16. 常用的 T-SQL 语言
  17. 手把手教您国外如何充值支付宝/微信教程
  18. 这几款app疫情期间活跃度为何如此高?方法太可了吧
  19. Android直播开发之旅(15):libjpeg库的编译移植与使用
  20. PDR步行者航位推算

热门文章

  1. DA转换器原理及应用(报告)
  2. 数据科学数据清理和可视化,适合使用python的初学者
  3. 朴素贝叶斯与贝叶斯信念网络
  4. 信奥赛1990:【19CSPS提高组】划分
  5. xp系统桌面图标出现阴影
  6. python nan变成0_python nan怎么解决
  7. google 图片搜索API
  8. flex实现三栏布局
  9. oracle recover 状态,Oracle RAC undotbs表空间recover状态的恢复
  10. 计算机现在追寻谁的原理,一路追寻-CS考研经验总结_计算机与软件_考研论坛(kaoyan.com)...