Files
Gobang-Game/include/gobang.h
T
Serendipity 96a94aaddf feat: 集成大模型AI、重构构建系统并修复多项代码质量问题
- 构建系统:Makefile 迁移至 CMakeLists.txt,支持 cJSON 和 WinHTTP
- 项目结构:src/ 按功能拆分为 core/、gui/、network/、record/、llm/ 子目录
- 新功能:集成大模型 AI(WinHTTP + cJSON,兼容 OpenAI 协议),支持异步请求
- 渲染修复:IupDraw* 替换为 Windows GDI,修复画布黑屏问题
- 网络修复:ENet 初始化幂等化,实现真实 get_local_ip() (Winsock)
- 代码质量:删除死代码 (dfs/count_threats_in_direction),修复头文件守卫,
  sprintf→snprintf 防溢出,strncpy 安全终止,GDI 资源泄漏修复

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-02 15:32:54 +08:00

91 lines
2.5 KiB
C

/**
* @file gobang.h
* @brief 五子棋游戏头文件
* @note 本文件定义了五子棋游戏的主要数据结构、函数和全局变量。
* 它包含了游戏棋盘的表示、玩家操作、规则检查以及AI决策等功能。
*/
#ifndef GOBANG_H
#define GOBANG_H
#include <stdio.h>
#include <stdbool.h>
#include "config.h"
#include "type.h"
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
// 函数原型
// --- 游戏核心逻辑 ---
/**
* @brief 初始化棋盘,将所有位置设置为空(EMPTY)
*/
void empty_board();
/**
* @brief 检查指定坐标是否为有效落子点(在棋盘内且为空)
* @param x 待检查的行坐标 (0-based)
* @param y 待检查的列坐标 (0-based)
* @return 若位置有效且为空则返回true,否则返回false
*/
bool have_space(int x, int y);
/**
* @brief 判断一个落子是否为禁手
* @param x 落子的行坐标 (0-based)
* @param y 落子的列坐标 (0-based)
* @param player 当前玩家的标识
* @return 如果是禁手则返回true,否则返回false
*/
bool is_forbidden_move(int x, int y, int player);
/**
* @brief 执行一次玩家落子操作
* @param x 落子的行坐标 (0-based)
* @param y 落子的列坐标 (0-based)
* @param player 当前玩家的标识
* @return 若落子成功则返回true,否则(位置无效或被占用)返回false
*/
bool player_move(int x, int y, int player);
/**
* @brief 计算在特定方向上的棋子连续信息
* @param x 起始点的行坐标
* @param y 起始点的列坐标
* @param dx x方向的增量 (-1, 0, or 1)
* @param dy y方向的增量 (-1, 0, or 1)
* @param player 玩家标识
* @return 返回一个包含连续棋子信息的 DirInfo 结构体
*/
DirInfo count_specific_direction(int x, int y, int dx, int dy, int player);
/**
* @brief 检查在某点落子后,该玩家是否获胜
* @param x 落子的行坐标 (0-based)
* @param y 落子的列坐标 (0-based)
* @param player 当前玩家的标识
* @return 如果获胜则返回true,否则返回false
*/
bool check_win(int x, int y, int player);
/**
* @brief 悔棋功能,撤销指定步数
* @param steps_to_undo 要撤销的步数(每步包含双方各一次落子)
* @return 若悔棋成功则返回true,否则返回false
*/
bool return_move(int steps_to_undo);
/**
* @brief 计算并返回一步棋的得分
* @param x 落子的行坐标
* @param y 落子的列坐标
* @param player 玩家标识
* @return 该步棋的得分
*/
int calculate_step_score(int x, int y, int player);
#endif // GOBANG_H