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);
        }
Esempio n. 4
0
        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);
                }
            }
        }
Esempio n. 5
0
 public void SeatLord(int seat)
 {
     CurrentSeat = seat;
     CurrentCard = null;
     passCount   = 0;
 }