Commit 441854e2 by jabapo

### cleaned up king move and pawn move. Added accountig for other king when moving...

`cleaned up king move and pawn move. Added accountig for other king when moving king. Started a bit of logic for castling`
parent ae9568e7
 ... ... @@ -31,7 +31,7 @@ class Game{ int movecol = move[0] - 97; int moverow = (int(move[1]) - 48) - 1; Piece movingpiece = chessboard.getPiece(startcol,startrow); if(1 == 0 ){ if (movingpiece.c == Color::White && whitecheck || movingpiece.c == Color::Black && blackcheck){ //evaluate enemy pieces attacking king //three ways of removing check: //1. moving king to SAFE square: CANNOT castle ... ... @@ -74,7 +74,6 @@ class Game{ // startr > 7 || startc > 7 || endr > 7 || endc > 7) return false; //invalid move if the piece at the end is the same color if (chessboard.checkTileColor(endc,endr) == p.c) return false; if (p.c == Color::White && whitecheck || p.c == Color::Black && blackcheck) return false; // TODO: use MoveCheck() correctly if (p.t == Type::Rook){ // check if same row/column. Travels in a straight line. // Column or row has to be empty for it to move. ... ... @@ -92,16 +91,11 @@ class Game{ else if(p.t == Type::Bishop){ //check column. Column or row has to be empty for it to move. if (abs(startr - endr) != abs(startc - endc)) return false; return !chessboard.checkDiagonalO(startr,startc,endr,endc); //TODO: Bishop capture is not correct. Will eval false when attempting to capture !chessboard.checkDiagonalO(startr,startc,endr,endc); //TODO: Bishop capture is not correct. Will eval false when attempting to capture } else if(p.t == Type::Pawn){ // check direction of movement if (p.c == Color::White && endr <= startr) return false; if (p.c == Color::Black && endr >= startr) return false; // must be regular capture if end tile is occupied if (chessboard.checkTileO(endc, endr)) { return abs(startr - endr) == 1 && abs(startc - endc) == 1; } if ((p.c == Color::White && endr <= startr) || (p.c == Color::Black && endr >= startr)) return false; // moving straight forward if (startc == endc) { // moving one space ... ... @@ -150,8 +144,23 @@ class Game{ } else if(p.t == Type::King){ //check if near other king. cannot be right next to a king int x = abs(startr - endr); int y = abs(startc - endc); if(p.c == Color::White){ if(abs(endr - blackking.second) < 2 && abs(endc - blackking.first) < 2){ return false; } whiteking = {endc,endr}; whitekingmove = true; } else { if(abs(endr - whiteking.second) < 2 && abs(endc - whiteking.first) < 2){ return false; } blackking = {endc,endr}; blackkingmove = true; } return (x < 2 && y < 2); } else{ ... ... @@ -174,17 +183,21 @@ class Game{ .. .. bQ .. ==> .. .. bQ .. wK .. .. wR ==> .. wR wK .. */ if(side == Color::Black){ //need to check tiles if they are occupied first (this checks the pieces between king and queenside rook) if(dir == 'q' && chessboard.checkRowO(7,1,3)){ //now need to check if any of these squares are being attacked } else if(dir == 'k' && chessboard.checkRowO(7,4,7)){ int row; side == Color::Black ? row = 7 : row = 0; if(blackkingmove && side == Color::Black) return false; else if(whitekingmove && side == Color::White) return false; if(dir == 'q' && !chessboard.checkRowO(row,1,3)){ //now need to check if any of these squares are being attacked if(kingchecks[row][2].second || kingchecks[row][1].second){return false;} if(chessboard.getPiece(row,0).t != Type::Rook) return false; } } return false; else if(dir == 'k' && !chessboard.checkRowO(row,5,6)){ if(kingchecks[row][5].second || kingchecks[row][6].second){return false;} if(chessboard.getPiece(row,7).t != Type::Rook){return false;} } } //R: checks living pieces, and observes whether or not the OPPOSITE king is now in check. //M: black check or white check ... ... @@ -206,7 +219,7 @@ class Game{ Color WhoMoves(){ return (blackmoves < whitemoves) ? Color::White : Color::Black; return (blackmoves < whitemoves) ? Color::Black : Color::White; } private: Board chessboard; ... ... @@ -216,9 +229,13 @@ class Game{ // marks the tile that can be captured en passant; updated in MovePiece() with: // new coord of Pawn if Pawn moves two spaces forward, (-1,-1) for all other moves Coord enpassant = { -1, -1 }; Coord whiteking = { 4, 0}; Coord blackking = { 4, 7}; // this checks if the king is under attack bool blackcheck = false; bool whitecheck = false; bool whitekingmove = false; bool blackkingmove = false; // keeps track of moves (might need to move ths) to see who moves next int blackmoves = 0; int whitemoves = 0; ... ...
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!