温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
程序
编制
相关
资料
说明
“人机大战黑白棋”相关资料说明
黑白棋(Reversi、Othello),也叫苹果棋,翻转棋,是一个经典的策略性游戏,相信一些人并不陌生。“人机大战黑白棋”在棋盘格式、走法、胜负判断上与传统的黑白棋游戏没有区别,只是增加的几种不同的开局方式,以求增加一些变化及趣味性。由于编程水平有限,对黑白棋又不是很了解,做出来的东西自己都不很满意,无奈时间所胜不多,只能用它来充数了。
“人机大战黑白棋”支持双人游戏与人机对战,共有十种不同的开局方式供大家选择,其中第一种是传统的黑白棋开局。人机对战中电脑棋手走棋采取用历史启发增强的负极大值搜索引擎,前50来步棋采取一般性搜索,后10来步棋采用终局搜索,也就是一直搜索到棋局的最后一步。一般搜索最大层数设为7层(与一些优秀软件十几层的搜索相差很远),终局搜索最大层数设为11层。下面是一些变量和子程序说明:
1、定义数量类型:
---------------------------------------------------------------------
自定义数据类型:棋子点
备注:棋子坐标
成员:横坐标 数据类型:短整数型
成员:纵坐标 数据类型:短整数型
---------------------------------------------------------------------
自定义数据类型:一步走法
备注:一步走法的信息
成员:落子点 数据类型:棋子点
成员:棋子类型 数据类型:短整数型
成员:被吃棋子个数 数据类型:短整数型
成员:被吃棋子点 数据类型:棋子点 数组:30
成员:历史得分 数据类型:整数型
2、全局变量:
(1)全局变量:棋局 数据类型:短整数型 数组:8,8 备注:存储当前棋局:1.黑子,2.白子,0.无子
(2)全局变量:走法库 数据类型:一步走法 数组:16,30 备注:用于存储搜索引擎产生所有走法
(3)全局变量:玩家全部走法 数据类型:一步走法 数组:2,30 备注:用于存储玩家所有可能的走法
(3)全局变量:玩家全部走法数量 数据类型:短整数型 数组:2 备注:存储玩家所有走法的数量
(4)全局变量:是否正在进行游戏 数据类型:短整数型 备注:是否正确进行游戏:0.未进行,1.正在进行,2.游戏暂停
(5)全局变量:游戏类型 数据类型:短整数型 备注:当前进行的游戏类型:1.双人游戏,2.人机对战
(6)全局变量:是否玩家先走 数据类型:短整数型 备注:玩家是否先走棋:1.玩家先走,2.电脑先走(仅在人机对战中有效)
(7)全局变量:该谁下 数据类型:短整数型 备注:目前该哪一方走棋:1.黑棋,2.白棋
(8)全局变量:开局库 数据类型:文本型 数组:10 备注:存储开局信息
(9)全局变量:开局库号 数据类型:短整数型 备注:当前开局库的编号
(10)全局变量:白棋子数 数据类型:短整数型 备注:白棋已下的子数
(11)全局变量:黑棋子数 数据类型:短整数型 备注:黑棋已下的子数
(12)全局变量:历史得分表 数据类型:整数型 数组:8,8 备注:用于历史启发提高搜索速度,存储历史得分
(13)全局变量:搜索深度 数据类型:短整数型 备注:搜索的深度
(14)全局变量:终局搜索步数 数据类型:短整数型 备注:当还剩下多少步时进入终局搜索
(15)全局变量:先手 数据类型:短整数型 备注:谁先下:2.人,1.计算机
(16)全局变量:最佳走法 数据类型:一步走法 备注:搜索出的一步走法
(17)全局变量:黑棋用时 数据类型:长整数型 备注:黑棋用时秒数
(18)全局变量:白棋用时 数据类型:长整数型 备注:白棋用时秒数
(19)全局变量:落子记录 数据类型:一步走法 数组:64 备注:存储全部走棋记录
(20)全局变量:战况 数据类型:整数型 数组:2,3 备注:存储本次游戏的胜负信息
3、子程序说明:
(1)子程序:产生玩家所有走法
返回值类型:短整数型
备注:产生所有可能的走法,返回走法数量,用于玩家下子
参数:棋子类型 数据类型:短整数型 备注:将要下的棋子类型
(2)子程序:初始化
备注:开始新游戏,初始化棋局
参数:当前关卡 数据类型:短整数型 备注:当前关卡
(3)子程序:创建所有走法
返回值类型:短整数型
备注:创建所有走法,返回走法数量,用于搜索引擎
参数:深度 数据类型:短整数型 备注:深度
参数:棋子类型 数据类型:短整数型 备注:棋子类型
(4)子程序:创建一步走法
返回值类型:逻辑型
备注:创建一个点位的走法,不能下子返回假
参数:落子位置 数据类型:棋子点 <参考> 备注:将要下子的位置
参数:落子类型 数据类型:短整数型 备注:将要走的棋子类型
参数:走法 数据类型:一步走法 <参考> 备注:保存走法的变量
(5)子程序:负极大值搜索
返回值类型:整数型
备注:历史启发增强的负极大值搜索
参数:深度 数据类型:短整数型 备注:搜索深度
参数:棋子类型 数据类型:短整数型 备注:棋子类型
参数:下界 数据类型:整数型 备注:搜索下界
参数:上界 数据类型:整数型 备注:搜索上界
参数:无棋可走 数据类型:逻辑型 备注:对方是否已无棋可走
(6)子程序:复制走法
备注:复制一步法走
参数:源走法 数据类型:一步走法 备注:要复制的走法
参数:目标走法 数据类型:一步走法 备注:目标走法
目标走法.落子点.横坐标 = 源走法.落子点.横坐标
目标走法.落子点.纵坐标 = 源走法.落子点.纵坐标
目标走法.棋子类型 = 源走法.棋子类型
目标走法.历史得分 = 源走法.历史得分
目标走法.被吃棋子个数 = 源走法.被吃棋子个数
复制数组 (目标走法.被吃棋子点, 源走法.被吃棋子点)
(7)子程序:估值函数
返回值类型:整数型
备注:评估一个棋局的分值
参数:棋子类型 数据类型:短整数型 备注:模子类型
(8)子程序:历史得分排序
备注:将所有走法按历史得分从大到小排序
参数:走法数 数据类型:短整数型 备注:所有走法的数量
参数:深度 数据类型:短整数型 备注:搜索深度
(9)子程序:落子
返回值类型:逻辑型
备注:下子,在棋盘上走出一步棋
参数:落子位置 数据类型:棋子点 备注:下棋子的位置
(10)子程序:能否下子
返回值类型:逻辑型
备注:判断一个点位能否下子,能下子返回真,不能下子返回假
参数:落子位置 数据类型:棋子点 <参考> 备注:将要下子的位置
参数:落子类型 数据类型:短整数型 备注:将要走的棋子类型
(11)子程序:退回一步
备注:退回一步棋,用于搜索引擎
参数:走棋方法 数据类型:一步走法 <参考> 备注:一步走棋方法
(12)
子程序:显示可走棋位置
备注:显示所有可走棋的位置
参数:棋子类型 数据类型:短整数型 备注:将要走的棋子类型
参数:走法数量 数据类型:短整数型 备注:所有走法数量
(13)子程序:终局搜索
返回值类型:整数型
备注:当达到终局搜索步数时搜索到当前棋局的最后一步
参数:深度 数据类型:短整数型 备注:搜索深度
参数:棋子类型 数据类型:短整数型 备注:棋子类型
参数:下界 数据类型:整数型 备注:搜索下界
参数:上界 数据类型:整数型 备注:搜索上界
参数:无棋可走 数据类型:逻辑型 备注:对方是否已无棋可走
(14)子程序:走出一步
备注:走一步棋,用于搜索引擎
参数:走棋方法 数据类型:一步走法 <参考> 备注:一步走棋方法