public string GetPathXmlFile(ProjectE project, FileE file) { string relPath = @"..\..\..\"; string directoryPart = AppDomain.CurrentDomain.BaseDirectory + relPath; string directory = Path.GetFullPath(directoryPart); directory += project.ToString() + @"\Data\" + file.ToString() + ".xml"; return(directory); }
internal static char FileNotation(FileE file) { return((char)('a' + (byte)file)); }
internal static bool IsValid(FileE file) { return(((byte)file & 0xF8) == 0); //~0x07 }
internal static string ToString(Board board) { if (board == default(Board)) { Debug.Assert(false, "Null or Empty FEN"); return(string.Empty); } StringBuilder fenString = new StringBuilder(); #region Pieces for (RankE rank = RankE.Rank_8; ; --rank) { byte emptySqr = 0; for (FileE file = FileE.File_A; file <= FileE.File_H; ++file) { bool isPiece = false; for (ColorE color = ColorE.White; color <= ColorE.Black; ++color) { Bitboard occupy = board.Occupies[(byte)color]; SquareE sqr = Square._Square(file, rank); if (BitBoard.GetSquare(occupy, sqr)) { for (PieceE type = PieceE.Pawn; type <= PieceE.King; ++type) { Bitboard piece = board.Pieces[(byte)type]; if (BitBoard.GetSquare(piece, sqr)) // occupy & piece { isPiece = true; if (emptySqr > 0) { fenString.Append(emptySqr); emptySqr = 0; } fenString.Append(Piece.mapPiece[(byte)color, (byte)type]); break; } } } } if (!isPiece) { ++emptySqr; } } if (emptySqr > 0) { fenString.Append(emptySqr); emptySqr = 0; } if (rank == RankE.Rank_1) { break; } fenString.Append(rankSep); } #endregion fenString.Append(recordSep); #region OnMove switch (board.OnMove) { case ColorE.White: fenString.Append('w'); break; case ColorE.Black: fenString.Append('b'); break; case ColorE.NoColor: default: fenString.Append('-'); break; } #endregion fenString.Append(recordSep); #region Castle if (board.Castle[(byte)ColorE.White].AnyCastle || board.Castle[(byte)ColorE.Black].AnyCastle) { if (board.Castle[(byte)ColorE.White].ShortCastle) { fenString.Append('K'); } if (board.Castle[(byte)ColorE.White].LongCastle) { fenString.Append('Q'); } if (board.Castle[(byte)ColorE.Black].ShortCastle) { fenString.Append('k'); } if (board.Castle[(byte)ColorE.Black].LongCastle) { fenString.Append('q'); } } else { fenString.Append('-'); } #endregion fenString.Append(recordSep); #region EnPassant SquareE ep = board.EnPassant; if (Square.IsValid(ep)) { fenString.Append(ep.ToString().ToLower()); } else { fenString.Append('-'); } #endregion fenString.Append(recordSep); #region HalfMove Clock fenString.Append(board.HalfMoveClock); #endregion fenString.Append(recordSep); #region FullMove Counter fenString.Append(board.FullMoveCount); #endregion return(fenString.ToString()); }
internal static SquareE _Square(FileE file, RankE rank) { Debug.Assert(File.IsValid(file), "Not 0-7"); Debug.Assert(Rank.IsValid(rank), "Not 0-7"); return((SquareE)(((byte)rank << 3) + (byte)file)); }
// TODO:: //internal Bitboard AttacksTo( Bitboard occupied, SquareE sqr, ColorE side ) //{ // //Bitboard knights, kings, bishopsQueens, rooksQueens; // //knights = pieceBB[ nWhiteKnight ] | pieceBB[ nBlackKnight ]; // //kings = pieceBB[ nWhiteKing ] | pieceBB[ nBlackKing ]; // //rooksQueens = // //bishopsQueens = pieceBB[ nWhiteQueen ] | pieceBB[ nBlackQueen ]; // //rooksQueens |= pieceBB[ nWhiteRook ] | pieceBB[ nBlackRook ]; // //bishopsQueens |= pieceBB[ nWhiteBishop ] | pieceBB[ nBlackBishop ]; // //return (arrPawnAttacks[ nWhite ][ sqr ] & pieceBB[ nBlackPawn ]) // // | (arrPawnAttacks[ nBlack ][ sqr ] & pieceBB[ nWhitePawn ]) // // | (arrKnightAttacks[ sqr ] & knights) // // | (arrKingAttacks[ sqr ] & kings) // // | (bishopAttacks(occupied, sqr) & bishopsQueens) // // | (rookAttacks(occupied, sqr) & rooksQueens) // // ; // ColorE oppside = ColorE.NoColor; // if( side == ColorE.White ) // { // oppside = ColorE.Black; // } // else if( side == ColorE.Black ) // { // oppside = ColorE.White; // } // Bitboard sideOccupied = Occupies[ (byte) side ]; // Bitboard rooksQueens = Pieces[ (byte) PieceE.Rook ] | Pieces[ (byte) PieceE.Queen ]; // Bitboard bishopsQueens = Pieces[ (byte) PieceE.Bishop ] | Pieces[ (byte) PieceE.Queen ]; // return (MoveAttack._PawnAttacks[ (byte) sqr, (byte) side ] & (Pieces[ (byte) PieceE.Pawn ] & Occupies[ (byte) oppside ])) // | (MoveAttack._PawnAttacks[ (byte) sqr, (byte) oppside ] & (Pieces[ (byte) PieceE.Pawn ] & Occupies[ (byte) side ])) // | (MoveAttack._KnightMoves[ (byte) sqr ] & Pieces[ (byte) PieceE.Knight ]) // | (MoveAttack._KingMoves[ (byte) sqr ] & Pieces[ (byte) PieceE.King ]) // | (MoveAttack._RookMoves[ (byte) sqr ] & rooksQueens) // | (MoveAttack._BishopMoves[ (byte) sqr ] & bishopsQueens); //} public override string ToString() { StringBuilder sboard = new StringBuilder(); sboard.AppendLine(" +-+-+-+-+-+-+-+-+"); //SquareE begSqr = SquareE.A8; //SquareE endSqr = SquareE.H1; //for( SquareE sqr = begSqr; ; Square.BackwardInc(ref sqr) ) //{ // if( (byte) sqr % File.Files == 0 ) // { // if( sqr != begSqr ) sboard.AppendLine(); // sboard.Append(Rank.mapRank[ (byte) sqr / File.Files ]); // } // bool isPiece = false; // sboard.Append(" "); // for( ColorE color = ColorE.White; color <= ColorE.Black; ++color ) // { // Bitboard occupy = Occupies[ (byte) color ]; // for( PieceE type = PieceE.Pawn; type <= PieceE.King; ++type ) // { // Bitboard piece = Pieces[ (byte) type ]; // if( BitBoard.GetSquare(occupy & piece, sqr) ) // { // //if( isPiece ) sboard.Append('x'); // '*' // isPiece = true; // sboard.Append(Piece.mapPiece[ (byte) color, (byte) type ]); // break; // } // } // } // if( !isPiece ) // sboard.Append("."); // if( sqr == endSqr ) // break; //} for (RankE rank = RankE.Rank_8; ; --rank) { sboard.Append(Rank.mapRank[(byte)rank]); for (FileE file = FileE.File_A; file <= FileE.File_H; ++file) { bool isPiece = false; sboard.Append(" "); for (ColorE color = ColorE.White; color <= ColorE.Black; ++color) { Bitboard occupy = Occupies[(byte)color]; SquareE sqr = Square._Square(file, rank); if (BitBoard.GetSquare(occupy, sqr)) { for (PieceE type = PieceE.Pawn; type <= PieceE.King; ++type) { Bitboard piece = Pieces[(byte)type]; if (BitBoard.GetSquare(piece, sqr)) // occupy & piece { //if( isPiece ) sboard.Append('x'); // '*' isPiece = true; sboard.Append(Piece.mapPiece[(byte)color, (byte)type]); break; } } } } if (!isPiece) { sboard.Append("."); } } if (rank == RankE.Rank_1) { break; } sboard.AppendLine(); } sboard.AppendLine().Append(" +-+-+-+-+-+-+-+-+").AppendLine(); sboard.Append(" "); foreach (char file in File.mapFile) { sboard.Append(" " + file); } return(sboard.ToString()); }