麻将算法(二)牌型转换以及接牌
来源:互联网 发布:java怎么用hadoop 编辑:程序博客网 时间:2024/04/30 13:48
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;
}
{
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;
}
阅读全文
0 0
- 麻将算法(二)牌型转换以及接牌
- 麻将算法(三)碰牌以及杠牌
- 麻将听牌算法
- 麻将胡牌算法
- C++数据结构与算法——麻将胡牌算法(二:完全胡牌算法)
- 麻将算法(四)吃牌
- 麻将的胡牌算法
- 麻将胡牌的算法
- 通用麻将胡牌算法
- 麻将简单胡牌算法
- node.js——麻将算法(六)简易版麻将出牌AI1.0
- node.js——麻将算法(七)简易版麻将出牌AI2.0
- 麻将的和牌、听牌以及一向听(即能否打一张牌进行立直)的算法。
- 判断麻将和牌的算法(转载)
- 判断麻将和牌的算法(转载)
- 麻将算法(五)胡牌之M选N
- 麻将算法(七)胡牌之对子判断
- 麻将听牌的算法(java)
- J
- opencv之视频播放控制
- sourceInsight4 破解笔记(完美破解)
- 【第八周项目2】建立链串算法库
- 结构体成员赋值-标记化结构体初始化语法-结构体成员前面加小数点
- 麻将算法(二)牌型转换以及接牌
- 23种设计模式全解析
- mysql 多列索引的生效规则
- 【LOJ】6002 「网络流 24 题」最小路径覆盖 二分图
- JAVA三大框架的由来
- 十进制表示
- 前端题记
- 1_unity中使用lua标准化过程
- luogu P3101 [USACO14JAN]滑雪等级Ski Course Rating