예제 #1
0
        /// <summary>
        /// Checks if the specified game must be retained accordingly to the specified filter
        /// </summary>
        /// <param name="rawGame">          PGN Raw game</param>
        /// <param name="iAvgELO">          Game average ELO</param>
        /// <param name="filterClause">     Filter clause</param>
        /// <returns>
        /// true if must be retained
        /// </returns>
        private bool IsRetained(PgnGame rawGame, int iAvgELO, FilterClause filterClause)
        {
            bool   bRetVal = true;
            string strGameResult;
            string strGameDate;

            if (iAvgELO == -1)
            {
                bRetVal = filterClause.m_bIncludesUnrated;
            }
            else if (filterClause.m_bAllRanges)
            {
                bRetVal = true;
            }
            else
            {
                iAvgELO = iAvgELO / 100 * 100;
                bRetVal = filterClause.m_hashRanges.ContainsKey(iAvgELO);
            }
            if (bRetVal)
            {
                if (!filterClause.m_bAllPlayers || !filterClause.m_bAllEnding)
                {
                    GetPGNGameInfo(rawGame, out strGameResult, out strGameDate);
                    if (!filterClause.m_bAllPlayers)
                    {
                        if (!filterClause.m_hashPlayerList.ContainsKey(rawGame.BlackPlayer) &&
                            !filterClause.m_hashPlayerList.ContainsKey(rawGame.WhitePlayer))
                        {
                            bRetVal = false;
                        }
                    }
                    if (bRetVal && !filterClause.m_bAllEnding)
                    {
                        if (strGameResult == "1-0")
                        {
                            bRetVal = filterClause.m_bEndingWhiteWinning;
                        }
                        else if (strGameResult == "0-1")
                        {
                            bRetVal = filterClause.m_bEndingBlackWinning;
                        }
                        else if (strGameResult == "1/2-1/2")
                        {
                            bRetVal = filterClause.m_bEndingDraws;
                        }
                        else
                        {
                            bRetVal = false;
                        }
                    }
                }
            }
            return(bRetVal);
        }
예제 #2
0
 /// <summary>
 /// Gets the information about a PGN game
 /// </summary>
 /// <param name="rawGame">          Raw PGN game</param>
 /// <param name="strGameResult">    Result of the game</param>
 /// <param name="strGameDate">      Date of the game</param>
 private static void GetPGNGameInfo(PgnGame rawGame,
                                    out string strGameResult,
                                    out string strGameDate)
 {
     if (!rawGame.attrs.TryGetValue("Result", out strGameResult))
     {
         strGameResult = null;
     }
     if (!rawGame.attrs.TryGetValue("Date", out strGameDate))
     {
         strGameDate = null;
     }
 }
예제 #3
0
        /// <summary>
        /// Get game description
        /// </summary>
        /// <param name="pgnGame">  PGN game</param>
        /// <returns></returns>
        protected virtual string GetGameDesc(PgnGame pgnGame)
        {
            StringBuilder strb;

            strb = new StringBuilder(128);
            strb.Append(pgnGame.WhitePlayer ?? "???");
            strb.Append(" against ");
            strb.Append(pgnGame.BlackPlayer ?? "???");
            strb.Append(" (");
            strb.Append((pgnGame.WhiteELO == -1) ? "-" : pgnGame.WhiteELO.ToString());
            strb.Append("/");
            strb.Append((pgnGame.BlackELO == -1) ? "-" : pgnGame.BlackELO.ToString());
            strb.Append(") played on ");
            strb.Append(pgnGame.Date ?? "???");
            strb.Append(". Result is ");
            strb.Append(pgnGame.GameResult ?? "???");
            return(strb.ToString());
        }
예제 #4
0
 /// <summary>
 /// Write a PGN game in the specified output stream
 /// </summary>
 /// <param name="pgnBuffer">    PGN buffer</param>
 /// <param name="writer">       Text writer</param>
 /// <param name="pgnGame">      PGN game</param>
 private void WritePGN(PgnLexical pgnBuffer, TextWriter writer, PgnGame pgnGame)
 {
     writer.Write(pgnBuffer.GetStringAtPos(pgnGame.StartingPos, pgnGame.Length));
 }