src/chess/game-info.h

changeset 78
ceb9197b3c6d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/chess/game-info.h	Mon Jun 02 19:40:24 2025 +0200
@@ -0,0 +1,124 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2016 Mike Becker. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   1. Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *
+ *   2. Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef GAME_INFO_H
+#define GAME_INFO_H
+
+#include <stdint.h>
+
+#define WHITE 0x10
+#define BLACK 0x20
+#define opponent_color(color) ((color)==WHITE?BLACK:WHITE)
+
+#define PIECE_MASK 0x0F
+#define COLOR_MASK 0x30
+
+#define PAWN   0x01
+#define ROOK   0x02
+#define KNIGHT 0x03
+#define BISHOP 0x04
+#define QUEEN  0x05
+#define KING   0x06
+
+#define WPAWN   (WHITE|PAWN)
+#define WROOK   (WHITE|ROOK)
+#define WKNIGHT (WHITE|KNIGHT)
+#define WBISHOP (WHITE|BISHOP)
+#define WQUEEN  (WHITE|QUEEN)
+#define WKING   (WHITE|KING)
+#define BPAWN   (BLACK|PAWN)
+#define BROOK   (BLACK|ROOK)
+#define BKNIGHT (BLACK|KNIGHT)
+#define BBISHOP (BLACK|BISHOP)
+#define BQUEEN  (BLACK|QUEEN)
+#define BKING   (BLACK|KING)
+
+typedef uint8_t Board[8][8];
+
+struct movetimeval {
+    uint64_t tv_sec;
+    int32_t tv_usec;
+};
+
+typedef struct {
+    uint8_t piece;
+    uint8_t fromfile;
+    uint8_t fromrow;
+    uint8_t tofile;
+    uint8_t torow;
+    uint8_t promotion;
+    uint8_t check;
+    uint8_t capture;
+    struct movetimeval timestamp;
+    struct movetimeval movetime;
+    char string[8];
+} Move;
+
+typedef struct MoveList MoveList;
+
+struct MoveList {
+    Move move;
+    MoveList* next;
+};
+
+typedef struct {
+    uint8_t servercolor;
+    uint8_t timecontrol;
+    uint16_t time;
+    uint16_t addtime;
+} GameInfo;
+
+typedef struct {
+    Board board;
+    MoveList* movelist;
+    MoveList* lastmove;
+    unsigned int movecount; /* number of (half-)moves (counting BOTH colors) */
+    _Bool checkmate;
+    _Bool stalemate;
+    _Bool remis;
+    _Bool resign;
+} GameState;
+
+
+#define is_game_running(gamestate) !((gamestate)->checkmate || \
+    (gamestate)->resign || (gamestate)->stalemate || (gamestate)->remis)
+
+/**
+ * Initializes a game state and prepares the chess board.
+ * @param gamestate the game state to initialize
+ */
+void gamestate_init(GameState *gamestate);
+
+/**
+ * Cleans up a game state and frees the memory for the movement list.
+ * @param gamestate the game state to clean up
+ */
+void gamestate_cleanup(GameState *gamestate);
+
+#endif

mercurial