Mert Us Matthew Hannay Logan Starr

Dependencies:   mbed 4DGL-uLCD-SE

Revision:
1:cd78922f70fa
Parent:
0:d16cc59110a3
Child:
2:80f1d1056ae4
diff -r d16cc59110a3 -r cd78922f70fa main.cpp
--- a/main.cpp	Mon Nov 07 20:43:45 2022 +0000
+++ b/main.cpp	Mon Nov 07 20:47:53 2022 +0000
@@ -1,12 +1,153 @@
-#include "mbed.h"
+#include <bitset>
+
+enum Piece : u_int8_t {e, wK, bK, wQ, bQ, wR, bR, wB, bB, wN, bN, w, b};
+
+struct coord {
+    uint8_t x;
+    uint8_t y;
+}
+
+class Board {
+private: 
+    std::bitset<256> boardState;
+    const uint32_t BOARD_DARK_COLOR = 0x769656;
+    const uint32_t BOARD_LIGHT_COLOR = 0xbaca44;
+    const uint32_t HOVER_COLOR = 0x0000ff;
+    const uint32_t SELECTED_COLOR = 0xff8800;
+
+    // piece sprites (12 x 12)
+    uint32_t* spritePawn(bool white, bool light) {
+        uint32_t X = white ? 0xffffff : 0x000000;
+        uint32_t _ = light ? BOARD_LIGHT_COLOR : BOARD_DARK_COLOR;
+        return {_, _, _, _, _, X, X, _, _, _, _, _,
+                _, _, _, _, X, X, X, X, _, _, _, _,
+                _, _, _, X, X, X, X, X, X, _, _, _,
+                _, _, _, X, X, X, X, X, X, _, _, _,
+                _, _, _, _, X, X, X, X, _, _, _, _,
+                _, _, _, _, _, X, X, _, _, _, _, _,
+                _, _, _, _, _, X, X, _, _, _, _, _,
+                _, _, _, _, X, X, X, X, _, _, _, _,
+                _, _, _, X, X, X, X, X, X, X, _, _,
+                _, X, X, X, X, X, X, X, X, X, X, _,
+                X, X, X, X, X, X, X, X, X, X, X, X,
+                X, X, X, X, X, X, X, X, X, X, X, X}; 
+    }
+
+    uint32_t* spriteRook(bool white, bool light) {
+        uint32_t X = white ? 0xffffff : 0x000000;
+        uint32_t _ = light ? BOARD_LIGHT_COLOR : BOARD_DARK_COLOR;
+        return {X, _, _, _, _, _, _, _, _, _, _, _,
+                X, X, X, X, X, X, X, X, X, X, X, X,
+                X, X, _, _, _, _, _, _, _, _, _, _,
+                _, _, _, _, _, _, _, _, _, _, _, _,
+                _, _, _, _, _, _, _, _, _, _, _, _,
+                _, _, _, _, _, _, _, _, _, _, _, _,
+                _, _, _, _, _, _, _, _, _, _, _, _,
+                _, _, _, _, _, _, _, _, _, _, _, _,
+                _, _, _, _, _, _, _, _, _, _, _, _,
+                _, _, _, _, _, _, _, _, _, _, _, _,
+                _, _, _, _, _, _, _, _, _, _, _, _,
+                _, _, _, _, _, _, _, _, _, _, _, _}; 
+    }
+    
+public:
+    std::bitset<256> getBoardState() {
+        return boardState;
+    }
+
+    void setBoardState(std::bitset<256> newBoardState) {
+        boardState = newBoardState;
+    }
 
-DigitalOut myled(LED1);
+    // initializes the starting board state
+    Board() {
+        placePiece(wR, 0, 0);
+        placePiece(wN, 0, 1);
+        placePiece(wB, 0, 2);
+        placePiece(wQ, 0, 3);
+        placePiece(wK, 0, 4);
+        placePiece(wB, 0, 5);
+        placePiece(wN, 0, 6);
+        placePiece(wR, 0, 7);
+        placePiece(bR, 7, 0);
+        placePiece(bN, 7, 1);
+        placePiece(bB, 7, 2);
+        placePiece(bQ, 7, 3);
+        placePiece(bK, 7, 4);
+        placePiece(bB, 7, 5);
+        placePiece(bN, 7, 6);
+        placePiece(bR, 7, 7);
+        for (int i = 0; i < 8; i++) {
+            placePiece(w, 1, i);
+            placePiece(b, 6, i);
+        }
+    }
+
+    // returns the piece at a given location
+    Piece getPiece(int row, int column) {
+        return (boardState >> (4 * (column + 8 * row))) & 15u;
+    }
+
+    /*  puts the bit representation of a piece at the set position of the board
+        assumes that the position of the board is emptied beforehand
+    */ 
+    void placePiece(Piece piece, int row, int column) {
+        boardState = boardState | (piece << (4 * (column + 8 * row)));
+    }
+
+    /*  removes a piece from the set position of the board
+        returns the bit representation of the piece
+    */
+    Piece removePiece(int row, int column) {
+        Piece removedPiece = (boardState >> (4 * (column + 8 * row))) & 15u;
+        boardState = boardState & ~(15u << (4 * (column + 8 * row)));
+    }
+
+    /*  moves a piece from one position to another
+        returns the captured piece
+    */
+    Piece movePiece(int startRow, int startColumn, int endRow, int endColumn) {
+        Piece movingPiece = removePiece(startRow, startColumn);
+        Piece capturedPiece = removePiece(endRow, endColumn);
+        placePiece(movingPiece, endRow, endColumn);
+        return capturedPiece;
+    }
+
+    // calculates the advantage difference for the board state
+    float calculateBoardState() {
+        return 0.0;
+    }
+
+    coord getTopLeftOfSquare(int row, int column) {
+        coord topLeft;
+        topLeft.x = 16 * column;
+        topLeft.y = 112 - 16 * row;
+    }
+
+    // removes selection border around square
+    void unselectSquare(int row, int column) {
+        coord tl = getTopLeftOfSquare(row, column);
+        uint64_t color;
+        if ((row + column) % 2 == 0) {
+            color = BOARD_DARK_COLOR;
+        } else {
+            color = BOARD_LIGHT_COLOR;
+        }
+        //uLCD.rectangle(tl.x, tl.y, tl.x + 15, tl.y + 15, color);
+    }
+
+    void hoverSquare(int row, int column) {
+        coord tl = getTopLeftOfSquare(row, column);
+        //uLCD.rectangle(tl.x, tl.y, tl.x + 15, tl.y + 15, HOVER_COLOR);
+    }
+
+    // draws selection border around square
+    void selectSquare(int row, int column) {
+        coord tl = getTopLeftOfSquare(row, column);
+        //uLCD.rectangle(tl.x, tl.y, tl.x + 15, tl.y + 15, SELECTED_COLOR);
+    }
+}
 
 int main() {
-    while(1) {
-        myled = 1;
-        wait(0.2);
-        myled = 0;
-        wait(0.2);
-    }
-}
+    return 0;
+}
\ No newline at end of file