Mert Us Matthew Hannay Logan Starr
Dependencies: mbed 4DGL-uLCD-SE
Diff: main.cpp
- Revision:
- 8:928d5d33258f
- Parent:
- 7:9e01c9a334dc
- Child:
- 9:1f33c0f299ae
--- a/main.cpp Wed Nov 16 01:06:20 2022 +0000 +++ b/main.cpp Thu Nov 17 18:18:21 2022 +0000 @@ -67,6 +67,7 @@ std::vector<boardPos> getMoves(int row, int column) { std::vector<boardPos> moves; + std::vector<boardPos> lineMoves; Piece movingPiece = getPiece(row, column); bool isWhite; switch(movingPiece) { @@ -86,118 +87,34 @@ case wQ: case bQ: isWhite = movingPiece == wQ; - for (int i = 1; ; i++) { - if (validMove(isWhite, row + i, column + i)) { - moves.push_back((boardPos) { - row + i, column + i - }); - } else { - break; - } - } - for (int i = 1; ; i++) { - if (validMove(isWhite, row - i, column + i)) { - moves.push_back((boardPos) { - row - i, column + i - }); - } else { - break; - } - } - for (int i = 1; ; i++) { - if (validMove(isWhite, row + i, column - i)) { - moves.push_back((boardPos) { - row + i, column - i - }); - } else { - break; - } - } - for (int i = 1; ; i++) { - if (validMove(isWhite, row - i, column - i)) { - moves.push_back((boardPos) { - row - i, column - i - }); - } else { - break; - } - } - for (int i = 1; ; i++) { - if (validMove(isWhite, row + i, column)) { - moves.push_back((boardPos) { - row + i, column - }); - } else { - break; - } - } - for (int i = 1; ; i++) { - if (validMove(isWhite, row, column + i)) { - moves.push_back((boardPos) { - row, column + i - }); - } else { - break; - } - } - for (int i = 1; ; i++) { - if (validMove(isWhite, row, column - i)) { - moves.push_back((boardPos) { - row, column - i - }); - } else { - break; - } - } - for (int i = 1; ; i++) { - if (validMove(isWhite, row - i, column)) { - moves.push_back((boardPos) { - row - i, column - }); - } else { - break; - } - } + lineMoves = movesInLine(isWhite, row, column, 1, 0); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); + lineMoves = movesInLine(isWhite, row, column, -1, 0); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); + lineMoves = movesInLine(isWhite, row, column, 0, 1); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); + lineMoves = movesInLine(isWhite, row, column, 0, -1); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); + lineMoves = movesInLine(isWhite, row, column, 1, 1); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); + lineMoves = movesInLine(isWhite, row, column, -1, 1); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); + lineMoves = movesInLine(isWhite, row, column, 1, -1); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); + lineMoves = movesInLine(isWhite, row, column, -1, -1); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); break; case wB: case bB: isWhite = movingPiece == wB; - for (int i = 1; ; i++) { - if (validMove(isWhite, row + i, column + i)) { - moves.push_back((boardPos) { - row + i, column + i - }); - } else { - break; - } - } - for (int i = 1; ; i++) { - if (validMove(isWhite, row - i, column + i)) { - moves.push_back((boardPos) { - row - i, column + i - }); - } else { - break; - } - } - for (int i = 1; ; i++) { - if (validMove(isWhite, row + i, column - i)) { - moves.push_back((boardPos) { - row + i, column - i - }); - } else { - break; - } - } - for (int i = 1; ; i++) { - if (validMove(isWhite, row - i, column - i)) { - moves.push_back((boardPos) { - row - i, column - i - }); - } else { - break; - } - } + lineMoves = movesInLine(isWhite, row, column, 1, 1); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); + lineMoves = movesInLine(isWhite, row, column, -1, 1); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); + lineMoves = movesInLine(isWhite, row, column, 1, -1); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); + lineMoves = movesInLine(isWhite, row, column, -1, -1); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); break; case wN: case bN: @@ -220,42 +137,14 @@ case wR: case bR: isWhite = movingPiece == wR; - for (int i = 1; ; i++) { - if (validMove(isWhite, row + i, column)) { - moves.push_back((boardPos) { - row + i, column - }); - } else { - break; - } - } - for (int i = 1; ; i++) { - if (validMove(isWhite, row, column + i)) { - moves.push_back((boardPos) { - row, column + i - }); - } else { - break; - } - } - for (int i = 1; ; i++) { - if (validMove(isWhite, row, column - i)) { - moves.push_back((boardPos) { - row, column - i - }); - } else { - break; - } - } - for (int i = 1; ; i++) { - if (validMove(isWhite, row - i, column)) { - moves.push_back((boardPos) { - row - i, column - }); - } else { - break; - } - } + lineMoves = movesInLine(isWhite, row, column, 1, 0); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); + lineMoves = movesInLine(isWhite, row, column, -1, 0); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); + lineMoves = movesInLine(isWhite, row, column, 0, 1); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); + lineMoves = movesInLine(isWhite, row, column, 0, -1); + moves.insert(moves.end(), lineMoves.begin(), moves.end()); break; case w: case b: @@ -280,7 +169,31 @@ } return moves; } + + // returns a vector of board positions that a piece can move in a line + std::vector<boardPos> movesInLine(bool isMovingPieceWhite, int row, int column, int rowChange, int columnChange) + { + std::vector<boardPos> moves; + for (int i = 1; ; i++) { + // check if piece can move to location + if (validMove(isMovingPieceWhite, row + i * rowChange, column + i * columnChange)) { + moves.push_back((boardPos) { + row + i * rowChange, column + i * columnChange + }); + // if piece is capturable, stop moving beyond it + if (getPiece(row + i * rowChange, column + i * columnChange) != e) + { + break; + } + // if unable to move, break out + } else { + break; + } + } + return moves; + } + // returns if a piece can move to a given location bool validMove(bool isMovingPieceWhite, int row, int column) { if (row < 0 || row > 7 || column < 0 || column > 7) { @@ -632,6 +545,17 @@ pixelCoord tl = getTopLeftOfSquare(row, column); uLCD.rectangle(tl.x, tl.y, tl.x + 15, tl.y + 15, SELECTED_COLOR); } + + // draws the movement border around square + void moveSquare(boardPos pos) + { + moveSquare(pos.row, pos.column); + } + void moveSquare(int row, int column) + { + pixelCoord tl = getTopLeftOfSquare(row, column); + uLCD.rectangle(tl.x, tl.y, tl.x + 15, tl.y + 15, MOVE_COLOR); + } }; // game variables @@ -641,16 +565,12 @@ { 3, 4 }; -boardPos selectedPos = (boardPos) -{ - 3, 4 -}; +boardPos selectedPos; // callbacks void joyStickUp() { - if (cursorPos.row < 7) - { + if (cursorPos.row < 7) { boardPos nextPos; nextPos.row = cursorPos.row + 1; nextPos.column = cursorPos.column; @@ -662,8 +582,7 @@ void joyStickDown() { - if (cursorPos.row > 0) - { + if (cursorPos.row > 0) { boardPos nextPos; nextPos.row = cursorPos.row - 1; nextPos.column = cursorPos.column; @@ -675,8 +594,7 @@ void joyStickLeft() { - if (cursorPos.column > 0) - { + if (cursorPos.column > 0) { boardPos nextPos; nextPos.row = cursorPos.row; nextPos.column = cursorPos.column - 1; @@ -688,8 +606,7 @@ void joyStickRight() { - if (cursorPos.column < 7) - { + if (cursorPos.column < 7) { boardPos nextPos; nextPos.row = cursorPos.row; nextPos.column = cursorPos.column + 1; @@ -701,7 +618,17 @@ void joyStickPressed() { - // state machine goes here + switch(state) { + case whiteSelecting: + selectedPos = cursorPos; + break; + case whitePickedUp: + break; + case blackSelecting: + break; + case blackPickedUp: + break; + } } int main()