/** * @file gobang.h * @author ??????(3364451258@qq.com??15236416560@163.com??lhy3364451258@outlook.com) * @brief ????????????? * @version 3.0 * @date 2025-06-30 * * @copyright Copyright (c) 2025 * * @note ??????gobang.c??????????????????????????????? * @note ?????? * 1. ???5x5??25x25?????????? * 2. ????????????????AI???? * 3. ????????????????????? * 4. ???????????0-base???? * 5. ????????????????? * 6. ?????????????????????????????????? * 7. ???????????????????????? */ #ifndef GO_BANG_H #define GO_BANG_H #include #include #include #include #include #include // ???? /** * @brief ???????????? * @note 25x25????????????????????????????????????AI?????? */ #define MAX_BOARD_SIZE 25 // ????????????(5x5??25x25) /** * @brief ??????? * @note ???1/2???????????????????????????? */ #define PLAYER 1 // ??????????? #define AI 2 // AI???????? #define PLAYER1 1 // ???1???????? #define PLAYER2 2 // ???2???????? /** * @brief ?????????? * @note ??????PLAYER/AI?????? */ #define EMPTY 0 // ?????????? /** * @brief ????????? * @note ????????????????????????????? */ #define MAX_STEPS (MAX_BOARD_SIZE * MAX_BOARD_SIZE) // ?????????????????? // ?????????? extern int BOARD_SIZE; // ?????????????(???15) extern int board[MAX_BOARD_SIZE][MAX_BOARD_SIZE]; // ????????????? extern int step_count; // ????????????? extern bool use_forbidden_moves; // ????????????? extern int use_timer; // ???????????? extern int time_limit; // ?????????? extern const int direction[4][2]; /** * @brief ????????????? * @note ?????????????????AI?????? * @note ??????: * - player: ????????(PLAYER/AI) * - x/y: 0-based???????? */ typedef struct { int player; // ???????? int x, y; // ???????? } Step; extern Step steps[MAX_STEPS]; // ??????????????????? bool handle_player_turn(int current_player); /** * @brief ????????????? * @note ???????????????????????? * @note ??????: * - continuous_chess: ?????????????? * - check_start: ??????????????????(??????) * - check_end: ??????????????????(??????) */ typedef struct { int continuous_chess; // ???????????? bool check_start; // ???????????????????? bool check_end; // ???????????????????? } DirInfo; // ???????? /** * @brief ??????????????? */ void empty_board(); /** * @brief ???????????? */ void print_board(); /** * @brief ?????????????????????? * @param x ??????(0-base) * @param y ??????(0-base) * @return true ????????????? * @return false ???????????????? */ bool have_space(int x, int y); /** * @brief ??????????? */ void setup_board_size(); /** * @brief ?????????? * @note ???????????????????????? */ void setup_game_options(); /** * @brief ??????????? * @param player1 ???1???? * @param player2 ???2???? * @return int ?????????? */ int determine_first_player(int player1, int player2); /** * @brief ??????????? * @param x ??????(0-base) * @param y ??????(0-base) * @param player ????? * @return true ????? * @return false ??????? */ bool is_forbidden_move(int x, int y, int player); /** * @brief ?????????? * @param x ??????(0-base) * @param y ??????(0-base) * @return true ?????? * @return false ???????(????????) */ bool player_move(int x, int y, int player); /** * @brief ??????????????????????????? * @param x ????????? * @param y ????????? * @param dx ??????????(-1,0,1) * @param dy ??????????(-1,0,1) * @param player ?????(PLAYER/AI) * @return DirInfo ??????????????????????????? */ DirInfo count_specific_direction(int x, int y, int dx, int dy, int player); /** * @brief ???????????????????????????? * @param x ??????(0-base) * @param y ??????(0-base) * @param player ?????(PLAYER/AI) * @return true ?????????? * @return false ???????????? */ bool check_win(int x, int y, int player); /** * @brief ?????????? * @return true ?????? * @return false ???????(????????) * @note ????????AI???????????? */ bool return_move(int steps_to_undo); /** * @brief ??????????? * ???????????????????????? */ void review_process(int game_mode); /** * @brief ??????????????????????? * @param player ??????????(PLAYER/AI) * @return int ???(???????????????) */ int evaluate_performance(int player); /** * @brief ????????????? * @param x ?????? * @param y ?????? * @param player ????? * @return int ????????? */ int calculate_step_score(int x, int y, int player); /** * @brief ??????????????????? * @param filename ??????????? * @return int ??????: * 0: ??? * 1: ????????? * 2: ???????? * 3: ?????????? */ int save_game_to_file(const char *filename, int game_mode); /** * @brief ???????????????????? */ void handle_save_record(int game_mode); /** * @brief ??????????????? * @param filename ??????????? * @return true ?????? * @return false ??????? */ int load_game_from_file(const char *filename); #endif // GO_BANG_H