Skip to content

Monkeypox966/C-program-gomoku

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C-program-gomoku

《基于 Raylib 的五子棋人机对战系统》设计报告

1. 系统功能说明

本系统是一款基于 C 语言和 Raylib 图形库开发的五子棋游戏,旨在提供流畅的交互体验和具有挑战性的人机对战功能。系统主要包含以下功能:

双模式对战:

PVP(人人对战):支持两名玩家在同一台设备上轮流落子,系统自动判定胜负。

PVE(人机对战):玩家与内置 AI 进行对弈。AI 具备不同难度分级,能够进行智能攻防。

图形化交互界面 (GUI):

提供可视化的主菜单,支持模式选择。

游戏界面包含标准 15x15 棋盘(含天元、星位标记)。

实时显示当前落子方、步数统计以及游戏结果(胜利/失败提示)。

美观的 UI 控件,包括圆角按钮、鼠标悬停变色效果、落子音效等。

辅助功能:

悔棋功能:支持撤销上一步(PVE 模式下自动撤销一回合,即玩家和 AI 各撤一步)。

重开局:无需重启程序即可快速开始新的一局。

难度选择:在 PVE 模式下,玩家可以通过键盘快捷键选择 AI 的思考深度(简单/普通/困难)。

2. 使用说明

启动游戏:运行 gomoku.exe,进入欢迎主菜单。

模式选择:

点击界面上的 "PVP" 按钮进入双人对战模式。

点击 "PVE" 按钮进入难度选择界面,按下键盘数字键 1(简单)、2(中等)或 3(困难)即可开始人机对战。

游戏操作:

悔棋:点右侧控制面板的 "Regret" 按钮可撤销最近一步。

重开:点击 "Restart" 按钮清空棋盘重新开始。

胜负判定:当任意一方在横、竖、斜方向连成 5 子时,游戏结束,屏幕显示获胜方,并伴随胜利音效。

3. 程序结构

本系统采用模块化设计,将图形界面、游戏逻辑、AI 算法分文件管理,降低了耦合度。

3.1 核心文件结构

main.c: 程序入口,负责主窗口初始化、资源加载、主菜单逻辑及模式分发。

game.c: 负责游戏核心流程控制(PVP/PVE 循环)、图形绘制(棋盘、棋子、UI)、交互响应(鼠标点击)。

aimove.c: AI 核心算法。包含 Minimax 算法与 Alpha-Beta 剪枝的实现。

score.c: 局面估值。利用哈希表对当前棋型进行评分,为 AI 提供决策依据。

judge.c: 规则判定。负责检查是否有五子连珠以及是否平局。

gomoku.h: 全局头文件。统一定义常量、数据结构、全局变量及函数声明。

3.2 关键函数及参数说明

int main() [main.c]

功能:初始化 Raylib 窗口和音频设备,处理主菜单事件,根据用户选择调用 PVP() 或 choose_dif()。

int PVP() / int PVE() [game.c]

功能:游戏主循环。处理每一帧的输入、逻辑更新和画面绘制。

struct move ai_move(int a, int b, int turn, int deep) [aimove.c]

功能:基于 Alpha-Beta 剪枝的 Minimax 递归搜索函数。

参数:

a: Alpha 值(下界)。

b: Beta 值(上界)。

turn: 当前回合(1为AI,0为人)。

deep: 剩余搜索深度(对应难度)。

返回:最佳落子位置 struct move。

int score(void) [score.c]

功能:遍历棋盘,计算当前局面的总分。

实现:使用 build_table 预构建哈希表,通过方向向量 dx, dy 扫描棋型。

int check_win() / int judge() [game.c / judge.c]

功能:判断游戏状态。

返回:0(进行中)、1/2(某方获胜)、-1(平局)。

About

运用minimax和alpha-beta剪枝算法实现单人五子棋游戏

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages