Esempio n. 1
0
        /// <summary>
        /// Calculates required piece count to finish for selected cue as twins.
        /// </summary>
        /// <param name="cue"></param>
        /// <returns></returns>
        private byte RequiredPieceCountTwin(OkeyCue cue)
        {
            byte minPieceRequired = RegularCuePiecesCount;

            byte twinsCount = 0;

            for (int i = 0; i < cue.Pieces.Count; i++)
            {
                for (int j = i + 1; j < cue.Pieces.Count; j++)
                {
                    if (!cue.Pieces[i].IsOkey && !cue.Pieces[j].IsOkey && cue.Pieces[i].PieceColor == cue.Pieces[j].PieceColor && cue.Pieces[i].PieceValue == cue.Pieces[j].PieceValue)
                    {
                        twinsCount++;
                    }
                }
            }

            // if cue has okey, use it
            if (cue.HasOkey)
            {
                twinsCount += cue.OkeyCount;
            }

            return(Convert.ToByte(minPieceRequired - Convert.ToByte(twinsCount * 2)));
        }
Esempio n. 2
0
        /// <summary>
        /// Calculates required piece count to finish for selected cue.
        /// </summary>
        /// <param name="cue"></param>
        /// <returns></returns>
        private byte RequiredPieceCount(OkeyCue cue)
        {
            byte minPieceRequired = RegularCuePiecesCount;

            // check for twins
            byte requiredPieceCount = RequiredPieceCountTwin(cue);

            if (requiredPieceCount < minPieceRequired)
            {
                minPieceRequired = requiredPieceCount;
            }

            // check for same color series
            List <OkeyPiece>    notInPerPieces = new List <OkeyPiece>();    // store pieces that not suitable for series
            List <SeriesPiece>  colorSeries    = new List <SeriesPiece>();  // all available color series in cue
            List <ValuesSeries> valueSeries    = new List <ValuesSeries>(); // all available value series in cue

            requiredPieceCount = RequiredPieceCountColorSeries(cue, colorSeries, notInPerPieces);

            requiredPieceCount -= SameValueSeriesPiecesCount(valueSeries, notInPerPieces);

            if (cue.HasOkey)
            {
                requiredPieceCount--;
            }

            if (requiredPieceCount < minPieceRequired)
            {
                minPieceRequired = requiredPieceCount;
            }

            return(minPieceRequired);
        }
Esempio n. 3
0
        /// <summary>
        /// Calculates required piece count to finish for selected cue as series.
        /// </summary>
        /// <param name="cue"></param>
        /// <returns></returns>
        private byte RequiredPieceCountColorSeries(OkeyCue cue, List <SeriesPiece> series, List <OkeyPiece> notInPerPieces)
        {
            // create series list for each color
            ColorSeries colorSeries = new ColorSeries();

            // select and fill pieces into series
            foreach (OkeyPiece piece in cue.Pieces)
            {
                foreach (SeriesPiece s in colorSeries.Series)
                {
                    if (piece.PieceColor == s.Color)
                    {
                        s.Pieces.Add(piece);
                    }
                }
            }

            int perCountInSeries = CalculatePerCountInSeries(colorSeries, series, notInPerPieces);

            return(Convert.ToByte(cue.Pieces.Count - (perCountInSeries * 3)));
        }