Пример #1
0
        /// <summary>
        /// 生成指定的FEN格式字符串
        /// </summary>
        /// <returns></returns>
        public virtual string Generator()
        {
            string[]      parms = new string[6];
            StringBuilder note  = new StringBuilder();

            for (int j = 7; j >= 0; j--)
            {
                int           i       = 0;
                StringBuilder rowNote = new StringBuilder();


                string str = Rows[j].ToString();
                foreach (char achar in str)// 11b11k1B = 2b2k1b
                {
                    int tmp = 0;
                    if (!int.TryParse(achar.ToString(), out tmp))
                    {
                        if (i != 0)
                        {
                            rowNote.Append(i).Append(achar);
                            i = 0;
                        }
                        else
                        {
                            rowNote.Append(achar);
                        }
                    }
                    else
                    {
                        i++;
                    }
                }
                if (i != 0)
                {
                    rowNote.Append(i);
                }
                note.Append(rowNote).Append('/');
            }
            parms[0]    = note.ToString().TrimEnd('/');
            note.Length = 0;

            parms[1] = Enums.FormGameSide(GameSide).ToString();

            if (WhiteKingCastlingAvailability | WhiteQueenCastlingAvailability | BlackKingCastlingAvailability | BlackQueenCastlingAvailability)
            {
                if (WhiteKingCastlingAvailability)
                {
                    note.Append('K');
                }
                if (WhiteQueenCastlingAvailability)
                {
                    note.Append('Q');
                }
                if (BlackKingCastlingAvailability)
                {
                    note.Append('k');
                }
                if (BlackQueenCastlingAvailability)
                {
                    note.Append('q');
                }
            }
            else
            {
                note.Append('-');
            }

            parms[2]    = note.ToString();
            note.Length = 0;
            if (EnPassantTargetPosition == Position.Empty)
            {
                parms[3] = "-";
            }
            else
            {
                parms[3] = EnPassantTargetPosition.ToString();
            }
            parms[4] = HalfMoveClock.ToString();
            parms[5] = FullMoveNumber.ToString();

            StringBuilder sb = new StringBuilder();

            foreach (string parm in parms)
            {
                sb.Append(parm).Append(' ');
            }
            return(sb.ToString());
        }