diff --git a/Board.cpp b/Board.cpp index 77cbd8e..780b465 100644 --- a/Board.cpp +++ b/Board.cpp @@ -7,7 +7,6 @@ // defined by the Mozilla Public License, v. 2.0. #include "Board.hpp" -#include "inc/strFuncs.hpp" /* * This is how the chessboard is organized in memory @@ -86,21 +85,6 @@ void Board::setupInitialPosition() { return; } -int setupFromFEN(std::string strFEN) { - std::string field1, field2, field3, field4, field5, field6; - std::vector splitFEN = split(strFEN, ' '); - if(splitFEN.size() != 6) { // a valid FEN *must* contain 6 fields - return -1; - } - field1 = splitFEN[0]; - field2 = splitFEN[1]; - field3 = splitFEN[2]; - field4 = splitFEN[3]; - field5 = splitFEN[4]; - field6 = splitFEN[5]; - return 0; -} - void Board::movePiece(Square from, Square to) { return; } diff --git a/Board.hpp b/Board.hpp index 4076b32..4b9f818 100644 --- a/Board.hpp +++ b/Board.hpp @@ -35,7 +35,6 @@ class Board { void setupInitialPosition(); Piece *getPieceAt(Square square); void movePiece(Square from, Square to); - int setupFromFEN(std::string strFEN); bool isInBounds(Square square) const; bool isEmpty(Square square) const; uint64_t serialBoard = 0xFFFF00000000FFFF; // opening position diff --git a/Piece.cpp b/Piece.cpp index 251e5e9..bab48ec 100644 --- a/Piece.cpp +++ b/Piece.cpp @@ -44,6 +44,7 @@ std::vector King::getLegalMoves(const Square &from, const Board &board) co Square targetSquare = {ra, fi}; if(targetSquare.isValid()) { const auto &target = board.boardGrid[r][f]; // examine the target square + if(!target) { // if square is empty (NULL) moveList.push_back({from, targetSquare}); // then it's potentially a legal move } else if(target && target->getColour() != this->getColour()) { // if it's occupied with a piece of opposite colour @@ -67,8 +68,8 @@ std::vector King::getLegalMoves(const Square &from, const Board &board) co * _1___2__ * ___K____ * _5___6__ - * __7_8___ - * + * __7_8___ + * */ std::vector> knightAttacks = { {-1, -2}, // 1 @@ -89,7 +90,7 @@ std::vector King::getLegalMoves(const Square &from, const Board &board) co bool diagonal = (abs(dir[0]) + abs(dir[1]) == 2) ? 1 : 0; // check if diagonal bool knight = (abs(dir[0]) + abs(dir[1]) == 3) ? 1 : 0; // check if knight attack while(r >= 0 && r < 8 && f >= 0 && f < 8) { - auto &target = board.boardGrid[r][f]; // access the square we're examining + auto &target = board.boardGrid[r][f]; // check what's at the square we're examining if(!target) { // empty square, continue continue; @@ -97,18 +98,14 @@ std::vector King::getLegalMoves(const Square &from, const Board &board) co if(target && (target->getColour() != this->getColour())) { // is it occupied & an enemy? if((target->getPieceType() == QUEEN || target->getPieceType() == BISHOP) && diagonal) { // we are being attacked diagonally on this square, so remove it - moves.to.rank = INVALID_RANK; moves.to.file = INVALID_FILE; + //moves.to.rank = 255; moves.to.file = 255; // mark as invalid??? } - else if(target->getPieceType() == KNIGHT && knight) { + if(target->getPieceType() == KNIGHT && knight) { // we are being attacked by a knight, so remove it - moves.to.rank = INVALID_RANK; moves.to.file = INVALID_FILE; + //moves.to.rank = 255; moves.to.file = 255; } - else if(target->getPieceType() == ROOK || target->getPieceType() == QUEEN && (!diagonal && !knight)) { + if(target->getPieceType() == ROOK && (!diagonal && !knight)) { // again, being attacked, remove it - moves.to.rank = INVALID_RANK; moves.to.file = INVALID_FILE; - } - if(target->getPieceType() == PAWN && (abs(r - startSquare.rank) == 1 && abs(f - startSquare.file) == 1)) { - moves.to.rank = INVALID_RANK; moves.to.file = INVALID_FILE; } } if(target && (target->getColour() == this->getColour())) { @@ -118,17 +115,13 @@ std::vector King::getLegalMoves(const Square &from, const Board &board) co if(!knight) { r += dir[0]; f += dir[1]; - } else + } else { break; + } } } + } - // will this actually work? - moveList.erase( - std::remove_if(moveList.begin(), moveList.end(), - [&](const auto &x) { - return !x.to.isValid(); - })); return moveList; } diff --git a/Piece.hpp b/Piece.hpp index 7f24412..245b81a 100644 --- a/Piece.hpp +++ b/Piece.hpp @@ -11,7 +11,6 @@ #pragma once #include -#include #include #include #include @@ -28,15 +27,11 @@ enum PieceColour { }; enum Rank { - R1 = 0, R2 = 1, R3 = 2, R4 = 3, R5 = 4, R6 = 5, R7 = 6, R8 = 7, INVALID_RANK = 255 + R1 = 0, R2 = 1, R3 = 2, R4 = 3, R5 = 4, R6 = 5, R7 = 6, R8 = 7 }; enum File { - A = 0, B = 1, C = 2, D = 3, E = 4, F = 5, G = 6, H = 7, INVALID_FILE = 255 -}; - -enum CastleSide { - KINGSIDE = 1, QUEENSIDE = 2 + A = 0, B = 1, C = 2, D = 3, E = 4, F = 5, G = 6, H = 7 }; struct Square { @@ -106,18 +101,11 @@ class King : public Piece { return inCheck; } - bool checkForCastle(enum CastleSide side) const { - if(side == KINGSIDE) { - return canCastleKS; - } else if(side == QUEENSIDE) { - return canCastleQS; - } else { - return false; - } + bool checkForCastle() const { + return canCastle; } protected: - bool canCastleQS = true; - bool canCastleKS = true; + bool canCastle = true; bool inCheck = false; }; diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml index 2a6fe8d..5e860ab 100644 --- a/nbproject/configurations.xml +++ b/nbproject/configurations.xml @@ -7,7 +7,6 @@ Board.hpp Piece.hpp NeoPixel.hpp - inc/strFuncs.hpp Piece.cpp NeoPixel.cpp graphics.cpp - strFuncs.cpp