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>
This commit is contained in:
2026-05-02 15:32:54 +08:00
parent f897536a45
commit 96a94aaddf
25 changed files with 4631 additions and 363 deletions
+87
View File
@@ -0,0 +1,87 @@
cmake_minimum_required(VERSION 3.16)
project(Gobang VERSION 9.0 LANGUAGES C)
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)
# === 输出目录:与原 Makefile 保持一致 ===
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
# === 编译选项 ===
add_compile_options(-Wall -Wextra -O2)
add_compile_options(-finput-charset=UTF-8 -fexec-charset=UTF-8)
# === ENet(从源码编译静态库)===
set(ENET_DIR ${CMAKE_SOURCE_DIR}/libs/enet)
add_library(enet STATIC
${ENET_DIR}/callbacks.c
${ENET_DIR}/compress.c
${ENET_DIR}/host.c
${ENET_DIR}/list.c
${ENET_DIR}/packet.c
${ENET_DIR}/peer.c
${ENET_DIR}/protocol.c
${ENET_DIR}/win32.c
)
target_include_directories(enet PUBLIC ${ENET_DIR}/include)
# === IUP(预构建导入库)===
set(IUP_DIR ${CMAKE_SOURCE_DIR}/libs/iup-3.31_Win64_dllw6_lib)
add_library(iup SHARED IMPORTED)
set_target_properties(iup PROPERTIES
IMPORTED_IMPLIB ${IUP_DIR}/libiup.a
IMPORTED_LOCATION ${IUP_DIR}/iup.dll
INTERFACE_INCLUDE_DIRECTORIES ${IUP_DIR}/include
)
# === cJSONJSON处理库)===
add_library(cjson STATIC ${CMAKE_SOURCE_DIR}/libs/cJSON/cJSON.c)
target_include_directories(cjson PUBLIC ${CMAKE_SOURCE_DIR}/libs/cJSON)
# === 主可执行文件 ===
add_executable(gobang_gui
src/core/main.c
src/core/globals.c
src/core/config.c
src/core/gobang.c
src/core/ai.c
src/network/network.c
src/record/record.c
src/gui/gui_core.c
src/gui/gui_game.c
src/gui/gui_menu.c
src/gui/gui_replay.c
src/llm/llm_ai.c
)
target_include_directories(gobang_gui PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_link_libraries(gobang_gui PRIVATE
enet
cjson
iup
winhttp
ws2_32
winmm
gdi32
comdlg32
comctl32
uuid
ole32
)
# === 构建后拷贝 iup.dll 到 bin/ ===
add_custom_command(TARGET gobang_gui POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${IUP_DIR}/iup.dll
$<TARGET_FILE_DIR:gobang_gui>
COMMENT "拷贝 iup.dll 到输出目录"
)
# === 快捷运行目标 ===
add_custom_target(run
COMMAND gobang_gui
DEPENDS gobang_gui
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/bin
COMMENT "运行五子棋游戏"
)