洗牌,接牌都有了,那就再来个扔牌。扔牌的思路:如果传入的时牌索引直接找到手牌中的这个位置,将个数-1;如果传入的是牌值,通过牌型转换后再进行以上操作:
public static void RemoveCard(int[] cbCardIndex, int cbRemoveCardindex)
{
if (cbCardIndex[cbRemoveCardindex] > 0)
{
cbCardIndex[cbRemoveCardindex]--;
}
}
利用以上的方法可以做到扔牌和接牌的方法,下面要做的是怎么去判断碰牌与杠牌:
我的思路是将碰过的牌、杠过牌存在一个list里面,list中保存的是一个结构, List<FrontageItem> ,FrontageItem这个结构中对应分别是类型、牌索引、玩家:
public enum cbFrontage
{
PENGPAI,
GANGPAI,
}
public structFrontageItem
{
private cbFrontage cbFron;
public cbFrontage CbFron
{
get { return cbFron; }
set { cbFron = value; }
}
private int cardindex;
public int CardINdex
{
get { return cardindex; }
set { cardindex = value; }
}
private int Player;
public int Player1
{
get { return Player; }
set { Player = value; }
}
public FrontageItem(cbFrontage CbFron, int CardIndex, int Player)
{
this.cbFron = CbFron;
this.cardindex = CardIndex;
this.Player = Player;
}
}
在判断决定碰牌时,手里一定会有2张这样的牌,把这两张牌减掉后,加入List<FrontageItem>里面:
//这个是碰牌的核心代码
//
//
public static void IS_WIK_PENG(bool ispeng, int[] cbCardIndex, int index, int player, List<FrontageItem> Frontage)
{
if (ispeng)
{
cbCardIndex[index] = cbCardIndex[index] - 2;
Frontage.Add(new FrontageItem(cbFrontage.PENGPAI, index, player));
}
}
在判断决定杠牌时,会有两种可能,一是手里一定会有3张这样的牌,把这三张牌减掉后,加入List<FrontageItem>里面,还有一种可能就是已经碰过了,现在可以进行杠牌操作了,这种可能的解决办
法就是找到这个碰的牌,将他的类型转化成杠牌,手牌不用进行改变:
//这个是杠牌的核心代码
//
//
public static void IS_WIK_GANG(bool ispeng, int[] cbCardIndex, int index, int player, List<FrontageItem> Frontage) //这个判断是否去杠牌牌的方法
{
int number = 0;
int Ynumber = 0;
List<int> other = new List<int>();
foreach (FrontageItem card in Frontage)
{
other.Add(card.CardINdex);
}
if (ispeng)
{
if (other.Contains(index))
{
foreach (FrontageItem card in Frontage)
{
number++;
if (card.CardINdex == index)
{
Ynumber = number;
}
}
Frontage[Ynumber].CbFron = cbFrontage.GANGPAI;
}
else
{
if (player == 2)
{
cbCardIndex[index] = cbCardIndex[index] - 4;
Frontage.Add(new FrontageItem(cbFrontage.GANGPAI, index, player));
}
else
{
cbCardIndex[index] = cbCardIndex[index] - 3;
Frontage.Add(new FrontageItem(cbFrontage.GANGPAI, index, player));
}
}
}
}
碰牌和杠牌做完后再来个吃牌,吃牌请看下章:
public static void RemoveCard(int[] cbCardIndex, int cbRemoveCardindex)
{
if (cbCardIndex[cbRemoveCardindex] > 0)
{
cbCardIndex[cbRemoveCardindex]--;
}
}
利用以上的方法可以做到扔牌和接牌的方法,下面要做的是怎么去判断碰牌与杠牌:
我的思路是将碰过的牌、杠过牌存在一个list里面,list中保存的是一个结构, List<FrontageItem> ,FrontageItem这个结构中对应分别是类型、牌索引、玩家:
public enum cbFrontage
{
PENGPAI,
GANGPAI,
}
public structFrontageItem
{
private cbFrontage cbFron;
public cbFrontage CbFron
{
get { return cbFron; }
set { cbFron = value; }
}
private int cardindex;
public int CardINdex
{
get { return cardindex; }
set { cardindex = value; }
}
private int Player;
public int Player1
{
get { return Player; }
set { Player = value; }
}
public FrontageItem(cbFrontage CbFron, int CardIndex, int Player)
{
this.cbFron = CbFron;
this.cardindex = CardIndex;
this.Player = Player;
}
}
在判断决定碰牌时,手里一定会有2张这样的牌,把这两张牌减掉后,加入List<FrontageItem>里面:
//这个是碰牌的核心代码
//
//
public static void IS_WIK_PENG(bool ispeng, int[] cbCardIndex, int index, int player, List<FrontageItem> Frontage)
{
if (ispeng)
{
cbCardIndex[index] = cbCardIndex[index] - 2;
Frontage.Add(new FrontageItem(cbFrontage.PENGPAI, index, player));
}
}
在判断决定杠牌时,会有两种可能,一是手里一定会有3张这样的牌,把这三张牌减掉后,加入List<FrontageItem>里面,还有一种可能就是已经碰过了,现在可以进行杠牌操作了,这种可能的解决办
法就是找到这个碰的牌,将他的类型转化成杠牌,手牌不用进行改变:
//这个是杠牌的核心代码
//
//
public static void IS_WIK_GANG(bool ispeng, int[] cbCardIndex, int index, int player, List<FrontageItem> Frontage) //这个判断是否去杠牌牌的方法
{
int number = 0;
int Ynumber = 0;
List<int> other = new List<int>();
foreach (FrontageItem card in Frontage)
{
other.Add(card.CardINdex);
}
if (ispeng)
{
if (other.Contains(index))
{
foreach (FrontageItem card in Frontage)
{
number++;
if (card.CardINdex == index)
{
Ynumber = number;
}
}
Frontage[Ynumber].CbFron = cbFrontage.GANGPAI;
}
else
{
if (player == 2)
{
cbCardIndex[index] = cbCardIndex[index] - 4;
Frontage.Add(new FrontageItem(cbFrontage.GANGPAI, index, player));
}
else
{
cbCardIndex[index] = cbCardIndex[index] - 3;
Frontage.Add(new FrontageItem(cbFrontage.GANGPAI, index, player));
}
}
}
}
碰牌和杠牌做完后再来个吃牌,吃牌请看下章: