Download presentation
Presentation is loading. Please wait.
Published byAlisha Booker Modified over 8 years ago
2
基于 VC++ 的中国象棋程序开发 院:系:学号: 10703070428 姓名: 阎金金 指导老师: 黄贤英
3
中国象棋 - 背景篇 卡斯帕罗夫在与超级电脑 “ 深蓝 ” 对弈(右为 “ 深蓝 ” 现场操作者) 1997 年 5 月 11 日国际象棋世界冠军与 “ 深蓝 ” 较量 这是一场具有划时代意义的对弈 是人类智慧与机器思维的较量 结局却是国际象棋大师以微弱局势败北 自此人工智能揭开了世纪的序幕也是本讲的世界背景
4
中国象棋 - 界面篇 搜索引擎 虚拟棋盘 搜索深度 对弈模式 按钮功能 输出信息
5
中国象棋 - 设计篇一 棋盘表示: 一个可以人机交互的象棋游戏系统中,界面是不可或缺 的一部分。界面的实现是提供给用户与电脑进行交互的基础,无 论是人人还是人机对战都在界面中实现。 而界面的实现,其核心依赖于程序中的棋盘表示。棋盘 表示主要研究的用什么数据结构来表示棋盘上的信息。通常,这 与具体的棋类相关。一般,用来描述棋盘和棋子信息的是一个二 维数组。例如,可以用一个 9×10 个字节的二维数组来表示棋盘, 数组中每一个字节代表棋盘上的一个交点,对应的值表明这个交 点上放置的是一个什么棋子或是没有棋子
6
中国象棋 - 实现篇一 一、棋盘实现 ⑥ OnPaint 棋盘绘制 ⑦ OnRadioPc 人机对弈 ① OninitDialog 初始化棋盘数据 ② OnLButtonDown 左键响应 ③ OnLButtonUp 右键响应 ④ OnMouseMove 位置判定 ⑤ OnOk 设置确认 ⑧ OnRadioPp 人人对弈 ⑨ OnUndo 悔棋功能
7
中国象棋 - 设计篇二 走法生成: 着法生成就是针对玩家走法,电脑思考出所有可能的走 法的那部分算法。也就是用以通知其他模块下一步如何走的模块。 各种棋类游戏由于规则不同,伴随而来的着法生成的复杂度也有 很大区别。例如,五子棋的棋盘上任意空白点都是合法位置。因 此在五子棋的着法生成模块里,只要扫描棋盘身上的空白位置, 就可以找出所有符合规则的下一步;而在象棋中,你就需要仔细 的判断。比如马走日、象走田,你就需要检查是否有别马腿,堵 象眼等情况;再如兵只能前进不能后退。
8
中国象棋 - 实现篇二 一、生成走法 ① AddMove 合法走法入列 ② CreatePossibleMove 走法生成主程序 ③ Gen_BBishopMove 产生黑仕走法 ④ Gen_…… 均为产生相应棋子走法 ⑤ IsValidMove 判断该走法是否合法
9
中国象棋 - 设计篇三 估值核心: 本文的评估函数主要涉及以下内容: 棋子的价值评估: SideValue=Sum(PieceNumber × PieceValue) 棋子的灵活性与棋盘控制: Mobility=Sum(MoveNumber × MoveValue) 棋子关系的评估 与搜索算法配合: Value=RedValue - BlackValue
10
中国象棋 - 实现篇三 一、估值实现 ① AddPoint 添加位置 ② CanTouch 该步是否可行 ③ Eveluate 估值核心主程序 ④ GetBingValue 获取兵的值 ⑤ GetRelatePiece 获取相关位置
11
中国象棋 - 设计篇四 搜索算法: 普通的极大极小值算法看起来有一点笨,既然一方试图 取极大值而另一方试图取极小值 —— 也就是说 —— 我们总要检查 哪一方要取极大值而哪一方又要取极小值,以执行不同的动作。 Knuth 和 Moore 在 1975 年提出了负极大值( Negamax )方法,消 除了两方的差别,而且简洁优雅。使用负极大值方法,博弈双方 都取极大值。
12
中国象棋 - 实现篇三 一、估值实现 ① CsearchEngine 搜索引擎接口 ② IsGameOver 对弈是否结束 ③ MakeMove 执行走法 ④ SearchAGoddMove 产生一个最佳走法 ⑤ SetEveluator 设置估值算法 ⑥ SetMoveGenerator 设置走法算法 ⑦ UnMakeMove 撤销走法 ⑧ CNegamaxEngine 负极大值算法 ⑨ Calpha_BetaEngine a-β 算法
13
中国象棋 - 展示篇
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.