#pragma once #include #include #include "app_config.h" typedef uint8_t cell_t; enum { CELL_UNKNOWN, CELL_WATER, CELL_SHIP, CELL_MISS, CELL_HIT }; typedef uint8_t phase_t; enum { PHASE_LOBBY, PHASE_PREPARING, PHASE_IN_PROGRESS, PHASE_FINISHED, PHASE_REMATCH_WAIT }; typedef uint8_t role_t; enum { ROLE_PLAYER_1, ROLE_PLAYER_2, ROLE_SPECTATOR }; typedef uint8_t game_mode_t; enum { MODE_HUMAN, MODE_BOT }; typedef struct { uint8_t x; uint8_t y; } coordinate_t; typedef struct { uint8_t x; uint8_t y; uint8_t length; uint8_t hits; bool horizontal; } ship_t; typedef struct { cell_t cells[kBoardCellCount]; ship_t ships[kFleetShipCount]; uint8_t ships_alive; } board_t; typedef struct { uint32_t game_id; uint32_t version; phase_t phase; game_mode_t mode; uint8_t current_player; board_t boards[kPlayerCapacity]; } game_state_t; _Static_assert(kBoardCellCount == 100, "board contract changed"); _Static_assert(kFleetShipCount == 10, "fleet contract changed"); _Static_assert(kSessionCapacity == 10, "session contract changed"); _Static_assert(sizeof(coordinate_t) == 2, "coordinate must remain compact"); _Static_assert(sizeof(ship_t) <= 6, "ship grew beyond fixed budget"); _Static_assert(sizeof(board_t) <= 164, "board grew beyond fixed budget");