/// <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()); }