先定义一个连牌的结构,设置结构为组合的类型,中心牌型,牌索引,方便日后进行判断
public enum cbWeaveKind
{
TONGPAI, //同牌
LIANPAI, //连牌
}
public structtagKindItem
{
cbWeaveKind WeaveKind; //组合类型
public cbWeaveKind WeaveKind1
{
get { return WeaveKind; }
set { WeaveKind = value; }
}
int cbCenterCard; //中心扑克
public int CbCenterCard
{
get { return cbCenterCard; }
set { cbCenterCard = value; }
}
int[] cbValidIndex; //实际扑克索引
public int[] CbValidIndex
{
get { return cbValidIndex; }
set { cbValidIndex = value; }
}
public tagKindItem(cbWeaveKind WeaveKind, int cbCenterCard, int[] cbValidIndex)
{
this.WeaveKind = WeaveKind;
this.cbCenterCard = cbCenterCard;
this.cbValidIndex = cbValidIndex;
}
判断同牌的思路是:判断手牌中那个索引中的值大于等于3,就让他加入list中;
判断同牌的思路是:进行从左到右进行判断,判断一个索引的后两位是否有牌如果满足条件,存入list中;
public static List<tagKindItem> IsTONGANDLIANPAI(int[] cbCardIndex)//同牌和连牌的判断
{
List<tagKindItem> tagKindItem_list = new List<tagKindItem>(); //这个是连牌与同牌的集合
tagKindItem_list.Clear();
for (int i = 0; i < MAX_INDEX; i++) //这个是判断同牌
{
if (cbCardIndex[i] >= 3)
{
int[] index = new int[3];
for (int j = 0; j < index.Length; j++)
{
index[j] = i;
}
int value = IndexSwitchToCard(i);
tagKindItem_list.Add(new tagKindItem(cbWeaveKind.TONGPAI, value, index));
}
}
for (int i = 0; i < cbCardIndex.Length; i++) //这个是判断连牌
{
if ((i % 9) < 7) //如果取余后的值大于7,后两位有可能不是对同一个花色进行判断操作
{
if ( cbCardIndex[i] != 0 && cbCardIndex[i + 1] != 0 && cbCardIndex[i + 2] != 0)
{
for (int z = 0; z < cbCardIndex[i]; z++)
{
int[] index = new int[3];
int ii = i;
for (int j = 0; j < index.Length; j++)
{
index[j] = ii;
ii++;
}
int value = IndexSwitchToCard(i + 1);
tagKindItem_list.Add(new tagKindItem(cbWeaveKind.LIANPAI, value, index));
}
}
}
}
return tagKindItem_list;
}
下一章胡牌之对子