feat(gui): 添加主菜单和游戏模式选择界面

- 新增 GUI 主菜单,支持玩家对战、人机对战、复盘模式和设置选项
- 新增游戏设置对话框,可配置棋盘大小、禁手、计时器和 AI 难度
- 重构 GUI 游戏窗口,集成悔棋、保存和返回菜单功能
- 更新 Makefile 以支持 PowerShell 并添加新源文件编译
- 调整窗口尺寸为 1000x800 以提供更好的游戏体验
This commit is contained in:
2026-03-17 15:41:48 +08:00
parent d796065bb9
commit 0baab8bec6
11 changed files with 740 additions and 140 deletions
+21 -17
View File
@@ -3,14 +3,18 @@
# 编译器设置
CC = gcc
# 显式指定 Shell 为 PowerShell
SHELL = D:/PowerShell/PowerShell-7.5.4/PowerShell.exe
.SHELLFLAGS = -NoProfile -Command
CFLAGS = -Wall -Wextra -std=c17 -O2 -Iinclude -finput-charset=UTF-8 -fexec-charset=UTF-8
LDFLAGS = -lws2_32
# IUP路径设置
IUP_PATH = libs/iup-3.31_Win64_dllw6_lib
IUP_INCLUDE = -I$(IUP_PATH)/include
IUP_INCLUDE = "-I$(IUP_PATH)/include"
# IUP链接库: iup, gdi32, comdlg32, comctl32, uuid, ole32
IUP_LIBS = -L$(IUP_PATH) -liup -lgdi32 -lcomdlg32 -lcomctl32 -luuid -lole32
IUP_LIBS = "-L$(IUP_PATH)" -liup -lgdi32 -lcomdlg32 -lcomctl32 -luuid -lole32
# 目录设置
SRC_DIR = src
@@ -20,7 +24,8 @@ BIN_DIR = bin
# 源文件
COMMON_SOURCES = $(SRC_DIR)/main.c $(SRC_DIR)/gobang.c $(SRC_DIR)/ai.c $(SRC_DIR)/config.c \
$(SRC_DIR)/game_mode.c $(SRC_DIR)/globals.c $(SRC_DIR)/init_board.c \
$(SRC_DIR)/network.c $(SRC_DIR)/record.c $(SRC_DIR)/ui.c $(SRC_DIR)/gui.c
$(SRC_DIR)/network.c $(SRC_DIR)/record.c $(SRC_DIR)/ui.c $(SRC_DIR)/gui.c \
$(SRC_DIR)/gui_menu.c
GUI_SOURCES = $(COMMON_SOURCES)
CONSOLE_SOURCES = $(COMMON_SOURCES)
@@ -35,10 +40,10 @@ GUI_TARGET = $(BIN_DIR)/gobang_gui.exe
# 默认目标
all: directories $(CONSOLE_TARGET) $(GUI_TARGET)
# 创建目录
# 创建目录 (PowerShell 语法)
directories:
-mkdir $(OBJ_DIR)
-mkdir $(BIN_DIR)
if (!(Test-Path "$(OBJ_DIR)")) { New-Item -ItemType Directory -Path "$(OBJ_DIR)" | Out-Null }
if (!(Test-Path "$(BIN_DIR)")) { New-Item -ItemType Directory -Path "$(BIN_DIR)" | Out-Null }
# 控制台版本
$(CONSOLE_TARGET): $(COMMON_OBJECTS)
@@ -47,18 +52,17 @@ $(CONSOLE_TARGET): $(COMMON_OBJECTS)
# GUI版本
$(GUI_TARGET): $(COMMON_OBJECTS)
$(CC) $(CFLAGS) $(IUP_INCLUDE) -o $@ $^ $(IUP_LIBS) $(LDFLAGS)
copy $(subst /,\,$(IUP_PATH))\iup.dll $(BIN_DIR) 2>nul || echo Warning: Could not copy iup.dll
Copy-Item -Path "$(subst /,\,$(IUP_PATH))\iup.dll" -Destination "$(BIN_DIR)" -Force
# 通用目标文件编译规则
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) $(IUP_INCLUDE) -c -o $@ $<
# 清理规则
# 清理规则 (PowerShell 语法)
clean:
-del /Q $(OBJ_DIR)\*.o $(BIN_DIR)\*.exe $(BIN_DIR)\*.dll
-rmdir $(OBJ_DIR)
-rmdir $(BIN_DIR)
if (Test-Path "$(OBJ_DIR)") { Remove-Item -Path "$(OBJ_DIR)" -Recurse -Force }
if (Test-Path "$(BIN_DIR)") { Remove-Item -Path "$(BIN_DIR)" -Recurse -Force }
# 只编译控制台版本
console: directories $(CONSOLE_TARGET)
@@ -67,17 +71,17 @@ gui: directories $(GUI_TARGET)
# 安装规则(可选)
install: all
@echo Installing executables...
copy $(CONSOLE_TARGET) C:\Program Files\Gobang\ 2>nul || echo Install directory not found
copy $(GUI_TARGET) C:\Program Files\Gobang\ 2>nul || echo Install directory not found
Write-Host "Installing executables..."
Copy-Item -Path "$(CONSOLE_TARGET)" -Destination "C:\Program Files\Gobang\" -Force
Copy-Item -Path "$(GUI_TARGET)" -Destination "C:\Program Files\Gobang\" -Force
# 运行控制台版本
run-console: $(CONSOLE_TARGET)
.\$(CONSOLE_TARGET)
& ".\$(CONSOLE_TARGET)"
# 运行GUI版本
run-gui: $(GUI_TARGET)
.\$(GUI_TARGET)
& ".\$(GUI_TARGET)"
# 帮助信息
help: