コード例 #1
0
        private string ConstructSouthHand(HandsNorthSouth strHand, Auction auction, string shapeLengthStr)
        {
            string strControls = GetAuctionForControlsWithOffset(auction, new Bid(3, Suit.Diamonds));

            if (!controlsAuctions.TryGetValue(strControls, out var possibleControls))
            {
                return($"Auction not found in controls. controls: {strControls}. NorthHand: {strHand.NorthHand}. SouthHand: {strHand.SouthHand}");
            }
            var matches = GetMatchesWithNorthHand(shapeLengthStr, possibleControls, strHand.NorthHand);

            switch (matches.Count())
            {
            case 0:
                return($"No matches found. Possible controls: {string.Join('|', possibleControls)}. NorthHand: {strHand.NorthHand}. SouthHand: {strHand.SouthHand}");

            case 1:
            {
                var southHandStr = HandWithx(strHand.SouthHand);
                var shapeStr     = matches.First();

                if (shapeStr == southHandStr)
                {
                    return($"Match is found: {shapeStr}. NorthHand: {strHand.NorthHand}. SouthHand: {strHand.SouthHand}");
                }
                else
                {
                    return($"SouthHand is not equal to expected. Expected: {shapeStr}. Actual {southHandStr}. NorthHand: {strHand.NorthHand}. SouthHand: {strHand.SouthHand}");
                }
            }

            default:
                return($"Multiple matches found. Matches: {string.Join('|', matches)}. NorthHand: {strHand.NorthHand}. SouthHand: {strHand.SouthHand}");
            }
        }
コード例 #2
0
        private void AddHandAndAuction(HandsNorthSouth strHand, Auction auction)
        {
            var suitLengthSouth = strHand.SouthHand.Split(',').Select(x => x.Length);
            var str             = string.Join("", suitLengthSouth);

            if (IsFreakHand(str))
            {
                return;
            }

            var strAuction = auction.GetBidsAsString(Player.South, x => x.Value[Player.South].fase == Fase.Shape);

            AddHandPerAuction(str, strAuction);

            var suitLengthNorth = strHand.NorthHand.Split(',').Select(x => x.Length);
            var suitLengthNS    = suitLengthNorth.Zip(suitLengthSouth, (x, y) => x + y);

            var longestSuit = (Suit)(3 - suitLengthNS.ToList().IndexOf(suitLengthNS.Max()));

            statistics.AddOrUpdateDeclarer(auction.GetDeclarer(longestSuit));
            statistics.AddOrUpdateContract(auction);

            // Start calculating hand
            expectedSouthHands.AppendLine(ConstructSouthHand(strHand, auction, shapeAuctions[strAuction]));
        }
コード例 #3
0
ファイル: Form1.cs プロジェクト: eddovandenboom/TOSR
        private HandsNorthSouth ShuffleRandomHand()
        {
            var handsNorthSouth = new HandsNorthSouth();
            var cards           = Shuffling.FisherYates(26).ToList();

            var orderedCardsNorth = cards.Take(13).OrderByDescending(x => x.Suit).ThenByDescending(c => c.Face, new FaceComparer());

            handsNorthSouth.NorthHand = Common.GetDeckAsString(orderedCardsNorth);

            unOrderedCards = cards.Skip(13).Take(13).ToList();
            var orderedCardsSouth = unOrderedCards.OrderByDescending(x => x.Suit).ThenByDescending(c => c.Face, new FaceComparer());

            handsNorthSouth.SouthHand = Common.GetDeckAsString(orderedCardsSouth);

            return(handsNorthSouth);
        }