static CardInfo CheckFive(int[] card) { var info = CheckDragon(card); if (info != null) { return(info); } int a = card[1]; if (card[0] == a) { if (a == card[2] && a == card[3]) { int c = card.Length; info = new CardInfo(); info.type = CardType.FourStrapsA; info.num = a; info.len = c; return(info); } } else if (a == card[2]) { if (a == card[3] && a == card[4]) { int c = card.Length; info = new CardInfo(); info.type = CardType.FourStrapsA; info.num = card[c - 1]; info.len = c; return(info); } } return(null); }
public static CardInfo DeckAnalysis(int[] cards) { int len = cards.Length; int[] nums = new int[len]; for (int i = 0; i < len; i++) { if (cards[i] < 52) { nums[i] = cards[i] % 13; } else { nums[i] = cards[i]; } } Array.Sort(nums); switch (len) { case 1: CardInfo inf = new CardInfo(); inf.type = CardType.Single; inf.num = nums[0]; return(inf); case 2: if (cards[0] == 52 && cards[1] == 53) //王炸 { inf = new CardInfo(); inf.type = CardType.Bomb; inf.num = 14; return(inf); } else { return(CheckDouble(nums)); } case 3: return(CheckThree(nums)); case 4: return(CheckFour(nums)); case 5: return(CheckFive(nums)); case 6: return(CheckSix(nums)); default: if (len % 2 == 1) { return(CheckOdd(cards)); } else { return(CheckEven(cards)); } } }
static CardInfo CheckPlane(int[] card) { int c = card.Length; if (card[c - 1] == 13) { return(null); } bool start = false; int len = 0; int end = 0; for (int i = 0; i < c - 3; i++) { int a = card[i]; if (a == card[i + 1] && a == card[i + 2]) { start = true; len++; i += 2; } else if (start) { end = i; break; } } int r = c - len * 3; if (r == 0) { CardInfo info = new CardInfo(); info.type = CardType.Plane; info.num = card[end - 1]; info.len = c; return(info); } if (r == len) { CardInfo info = new CardInfo(); info.type = CardType.ThreeBandOne; info.num = card[end - 1]; info.len = c; return(info); } if (r == len * 2) { int s = end - len * 3; int l = s / 2; for (int i = 0; i < l; i++) { int t = i * 2; if (card[t] != card[t + 1]) { return(null); } } s = c - end; l = s / 2; for (int i = 0; i < l; i++) { int t = end + i * 2; if (card[t] != card[t + 1]) { return(null); } } CardInfo info = new CardInfo(); info.type = CardType.ThreeBandTow; info.num = card[end - 1]; info.len = c; return(info); } return(null); }
bool OutCard(int [] cards, int seat) { if (seat != CurrentSeat) { return(false); } Array.Sort(cards); int a = cards[0]; for (int i = 1; i < cards.Length; i++) { if (a == cards[i]) { return(false); } a = cards[i]; } List <int> ca = Cards[CurrentSeat]; for (int i = 0; i < cards.Length; i++) { if (!ca.Contains(cards[i])) { return(false); } } var card = FightingLandlord.DeckAnalysis(cards); if (card == null) { return(false); } if (CurrentCard == null) { CurrentCard = card; CurrentSeat++; if (CurrentSeat >= 3) { CurrentSeat = 0; } passCount = 0; return(true); } else { if (card.type == CardType.Bomb) { if (card.num > CurrentCard.num) { CurrentCard = card; CurrentSeat++; if (CurrentSeat >= 3) { CurrentSeat = 0; } passCount = 0; return(true); } return(false); } else { if (card.type != CurrentCard.type) { return(false); } if (card.num > CurrentCard.num) { CurrentCard = card; CurrentSeat++; if (CurrentSeat >= 3) { CurrentSeat = 0; } passCount = 0; return(true); } return(false); } } }
public void SeatLord(int seat) { CurrentSeat = seat; CurrentCard = null; passCount = 0; }