|
@@ -39,6 +39,24 @@ void Board::resetBoard(void)
|
|
|
}
|
|
|
|
|
|
|
|
|
+void Board::setEmpty(void)
|
|
|
+{
|
|
|
+ whitePawns = 0;
|
|
|
+ whiteRooks = 0;
|
|
|
+ whiteKnights = 0;
|
|
|
+ whiteBishops = 0;
|
|
|
+ whiteQueens = 0;
|
|
|
+ whiteKing = 0;
|
|
|
+
|
|
|
+ blackPawns = 0;
|
|
|
+ blackRooks = 0;
|
|
|
+ blackKnights = 0;
|
|
|
+ blackBishops = 0;
|
|
|
+ blackQueens = 0;
|
|
|
+ blackKing = 0;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
bool Board::tryToMove(Bitboard start, Bitboard end, Bitboard& b)
|
|
|
{
|
|
|
if (start & b)
|
|
@@ -63,7 +81,7 @@ void Board::setBoard(const std::string& fenPosition)
|
|
|
{'Q', &blackQueens},
|
|
|
{'K', &blackKing}
|
|
|
};
|
|
|
-
|
|
|
+ setEmpty();
|
|
|
for (auto character : fenPosition) {
|
|
|
if (character >= '0' && character <= '9') {
|
|
|
column += character - '0';
|
|
@@ -79,20 +97,52 @@ void Board::setBoard(const std::string& fenPosition)
|
|
|
else {
|
|
|
throw runtime_error("invalid piece type "s + character);
|
|
|
}
|
|
|
+ ++ column;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
+// a bit hacky, sry
|
|
|
std::string Board::getFenBoard(void) const
|
|
|
{
|
|
|
using namespace std;
|
|
|
stringstream str;
|
|
|
for (int row = 0; row < 8; row++) {
|
|
|
int counter = 0;
|
|
|
- for (int column; column < 8; column++) {
|
|
|
-
|
|
|
+ for (int column = 0; column < 8; column++) {
|
|
|
+ PieceType black = getBlackAtPosition({row, column});
|
|
|
+ PieceType white = getWhiteAtPosition({row, column});
|
|
|
+ //str << " " << Bitboard::fromIndex({row, column}) << " " << " ";;
|
|
|
+ //str << "row,column,index: " << row << "," << column << "," <<
|
|
|
+ // int(Index(row, column).index) << " ";
|
|
|
+
|
|
|
+ if (black == PieceType::EMPTY && white == PieceType::EMPTY)
|
|
|
+ ++ counter;
|
|
|
+ else if (counter > 0) {
|
|
|
+ str << counter;
|
|
|
+ counter = 0;
|
|
|
+ }
|
|
|
+ switch (black) {
|
|
|
+ case PieceType::PAWN: str << 'P'; break;
|
|
|
+ case PieceType::KNIGHT: str << 'N'; break;
|
|
|
+ case PieceType::BISHOP: str << 'B'; break;
|
|
|
+ case PieceType::ROOK: str << 'R'; break;
|
|
|
+ case PieceType::QUEEN: str << 'Q'; break;
|
|
|
+ case PieceType::KING: str << 'K'; break;
|
|
|
+ default:
|
|
|
+ switch (white) {
|
|
|
+ case PieceType::PAWN: str << 'p'; break;
|
|
|
+ case PieceType::KNIGHT: str << 'n'; break;
|
|
|
+ case PieceType::BISHOP: str << 'b'; break;
|
|
|
+ case PieceType::ROOK: str << 'r'; break;
|
|
|
+ case PieceType::QUEEN: str << 'q'; break;
|
|
|
+ case PieceType::KING: str << 'k'; break;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ if (counter > 0)
|
|
|
+ str << counter;
|
|
|
if (row != 7)
|
|
|
str << "/";
|
|
|
}
|