五子棋内容参考_第1页
五子棋内容参考_第2页
五子棋内容参考_第3页
五子棋内容参考_第4页
五子棋内容参考_第5页
已阅读5页,还剩2页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1最先在棋盘的横向、竖向、斜向形成连续的相同色五个棋子的一方为胜利。3 子棋起源于古代中国,发展于日本,风靡于欧洲。对于它与围棋的关系有两种 说法,一说早于围棋,早在 “尧造围棋”之前,民间就已有五子棋游戏;一说 源于围棋,是围棋发展的一个分支。在中国的文化里,倍受人们的青睐。本世纪 初五子棋传入欧洲并迅速风靡全欧。通过一系列的变化,使五子棋这一简单的游 戏复杂化、规范化,而最终成为今天的职业连珠五子棋, 同时也成为一种国际比 赛棋。j 基于五子棋游戏设计:对局中拔子、中途退场均判为负6 基于五子棋游戏设计进行游戏设计之前,首先决定的第一个问题就是,使用什 么开发环境来编写环境 ? 自己虽然比

2、较熟悉 java 语言,但是实际开发项目经验 很少,所以决定用 jcreator, 其拥有高亮语法编辑、使用向导以及完全定制的用户 界面,最主要的是能够自动查找文件于 main 方法或html 文件以支持 java 小 应用程序,然后启动相应的工具。其.2 本课题研究的意义近次确定整个程序的结构框架。由于 applet 运行速度较慢,如果在加上算法搜 索时间,显然不符合程序的设计要求,决定用 java 应用程序开发 .整个程序的功 能实现流程是这样的:网络对战涉及算法较少,所以先实现网络部分,实现基本 的棋盘和棋子的类,添加判断胜负条件,这部是基础,也是很重要的,电脑 ai 也在这些基础上添加

3、上来的。这个题目的 2 个功能包括 2 个重要算法,电脑ai 和胜负条件,胜负条件运算量不大,有固定的模式。难点是人工智能,可以这样 说,人工智能的好坏决定了这个题目的完成深度。所以,大部份时间花在 ai 算 法的研究和改进上,对于算法我掌握的不多,研究了一些国内的五子棋算法,参 考了一些游戏设计算法,详细比较各种算法的优缺点,而且参考了现代五子棋比 赛的各种规则和技巧,尽量联系实际,努力提高电脑 ai。1 个题目核心是人工智能和 socekt 编程,。并且人工智能中的博弈部分,由于 采用了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技术,正 在各行各业广泛渗透。智能已经成为当今各

4、种新产品、新装备的发展方向。所以, 趁着这个机会,对人工智能中比较容易实现的人机博弈进行了解研究学习, 也是很实用且很有必要的 1关键词:深度搜索;估值;电脑 ai ;五子棋;算法2来越多的具有智能的机器进入了人类的生活,人工智能的重要性如今显而易见。 自己对人工智能比较感兴趣, 而五子棋游戏程序的开发实现这个课题, 正好提供 给我这样一个研究的机会,通过对人工智能中博弈方面的研究(人机对弈),让 我在简单的人机对弈全局设计, 以及具体到相关算法上有了深入的了解。 人工智 能属于计算机科学的领域, 它以计算机技术为基础, 近几十年来, 它的理论和技 术已经日益成熟, 应用领域也正在不断扩大,

5、显示出强大的生命力。 人工智能大 致可以分成几个学科, 它们每一个都是独特的, 但是它们常常又互相结合起来完 成设计任务,这时,这些学科之间的差别就变的很模糊。人工智能在专家系统, 自然语言理解, 自动定理证明, 自动程序设计, 人工智能在机器人学、 模式识别、 物景分析、数据库的智能检索、机器下棋(实质上是博弈论问题)和家用电器智 能化等领域都有广泛的应用。而这个课题就是和人工智能中的博弈论领域紧密相 关的。这摘要 五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧, 以及研究简单的人工智能,决定用 java 开发五子棋游戏。主要完成了人机对战 和玩家之间联网对战 2 个功

6、能。网络连接部分为 socket 编程应用,客户端和服 务器端的交互用 class message 定义,有很好的可扩展性,客户端负责界面维 护和收集用户输入的信息, 及错误处理。 服务器维护在线用户的基本信息和任意 两个对战用户的棋盘信息, 动态维护用户列表。 在人机对弈中通过深度搜索和估 值模块,来提高电脑棋手的智能。 分析估值模块中的影响精准性的几个要素, 以 及提出若干提高精准性的办法, 以及对它们搜索的节点数进行比较, 在这些算法 的基础上分析一些提高电脑 ai 方案,如递归算法、电脑学习等。算法的研究有 助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作 用。1

7、 引言1.1 课题背景五子棋是起源于中国古代的传统黑白棋种之一。 现代五子棋日文称之为连珠,英 译为 renju ,英文称之为 gobang 或 fir(five in a row 的缩写),亦有连五子、五子 连、串珠、五目、五目碰、五格等多种称谓。五子棋起源于古代中国,发展于日本,风靡于欧洲。对于它与围棋的关系有两种 说法,一说早于围3棋,早在 “尧造围棋”之前,民间就已有五子棋游戏;一说 源于围棋,是围棋发展的一个分支。在中国的文化里,倍受人们的青睐。本世纪 初五子棋传入欧洲并迅速风靡全欧。通过一系列的变化,使五子棋这一简单的游 戏复杂化、规范化,而最终成为今天的职业连珠五子棋, 同时也成

8、为一种国际比 赛棋。java 语言是当今最为流行的程序设计语言之一 作为一门非常优秀和极为健壮的 编程语言, 它同时具有的面向对象,与平台无关,分布式应用,安全,稳定和多 线程等优良的特征,使用 java 语言,不仅可以开发出功能强大的大型应用程序,而且 java 语言本身突出的跨平台的特性也使得它特别适合于 internet 上的应用 开发,可以这样说, java 的出现使得所开发的应用程序“一次编写,处处可用”的 实现成为了可能。1.2 本课题研究的意义 近来随着计算机的快速发展,各种各样的电脑游戏层出不穷,使得我们能有更多 的娱乐项目,而棋类游戏能起到锻炼人的思维和修身养性的作用, 而且

9、棋类游戏 水平颇高,大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表;其它像围棋的“手淡”、象棋的“将族”等也以其 优秀的人工智能深受棋迷喜爱。越来越多的具有智能的机器进入了人类的生活,人工智能的重要性如今显而易 见。自己对人工智能比较感兴趣, 而五子棋游戏程序的开发实现这个课题, 正好 提供给我这样一个研究的机会, 通过对人工智能中博弈方面的研究 (人机对弈), 让我在简单的人机对弈全局设计, 以及具体到相关算法上有了深入的了解。 人工 智能属于计算机科学的领域, 它以计算机技术为基础, 近几十年来,它的理论和 技术已经日益成熟, 应用领域也正在不

10、断扩大, 显示出强大的生命力。 人工智能 大致可以分成几个学科, 它们每一个都是独特的, 但是它们常常又互相结合起来 完成设计任务, 这时,这些学科之间的差别就变的很模糊。 人工智能在专家系统, 自然语言理解, 自动定理证明, 自动程序设计, 人工智能在机器人学、 模式识别、 物景分析、数据库的智能检索、机器下棋(实质上是博弈论问题)和家用电器智 能化等领域都有广泛的应用。而这个课题就是和人工智能中的博弈论领域紧密相 关的。这个题目核心是人工智能和 socekt 编程,。并且人工智能中的博弈部分,由于 采用了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技术,正 在各行各业广泛渗透。

11、 智能已经成为当今各种新产品、 新装备的发展方向。 所以, 趁着这个机会, 对人工智能中比较容易实现的人机4博弈进行了解研究学习, 也是 很实用且很有必要的。1.3 本课题的研究方法在进行游戏设计之前, 首先决定的第一个问题就是, 使用什么开发环境来编写环 境 ? 自己虽然比较熟悉 java 语言,但是实际开发项目经验很少,所以决定用 jcreator, 其拥有高亮语法编辑、使用向导以及完全定制的用户界面,最主要的是 能够自动查找文件于 main 方法或 html 文件以支持java 小应用程序,然后启 动相应的工具。其次确定整个程序的结构框架。由于 applet 运行速度较慢,如果在加上算法

12、搜 索时间,显然不符合程序的设计要求,决定用 java 应用程序开发 .整个程序的功 能实现流程是这样的: 网络对战涉及算法较少, 所以先实现网络部分, 实现基本 的棋盘和棋子的类,添加判断胜负条件,这部是基础,也是很重要的,电脑 ai 也在这些基础上添加上来的。这个题目的 2 个功能包括 2 个重要算法,电脑ai和胜负条件,胜负条件运算量不大,有固定的模式。难点是人工智能,可以这样说,人工智能的好坏决定了这个题目的完成深度。所以,大部份时间花在ai 算法的研究和改进上, 对于算法我掌握的不多, 研究了一些国内的五子棋算法, 参 考了一些游戏设计算法, 详细比较各种算法的优缺点, 而且参考了现

13、代五子棋比 赛的各种规则和技巧,尽量联系实际,努力提高电脑 ai。1:黑棋先行,白棋随后。从天元开始相互顺序落子。 2:最先在棋盘的横向、竖向、斜向形成连续的相同色五个棋子的一方为胜利。3: 黑棋禁手判负、 白棋无禁手。 黑棋禁手包括 “三、 三 ”; “四、四 ”;“长连”。黑 方只能用 “四、三 ”去取胜。4:如分不出胜负,则定位平局。 5:对局中拔子、中途退场均判为负 6:五连与禁手同时形成,先五为胜。7:黑方禁手形成时,白方应立即指出。若白方未发现或发现后不立即指正,反 而继续落子,则不能判黑方负。五子棋是由两个人在一盘棋上进行对抗的竞技运动。 在对局开始时, 先由执黑棋 的一方将一枚

14、棋子的落在 “天元 ”上,然后由执白棋的一方在黑棋周围的交叉点上 落子。如此轮流落子直到某一方首先在棋盘的直线 横线或斜线上形成连续的五 子或五子以上, 则该方就算获胜。 但是五子棋的特点是先行的一方优势很大。 因 此,在职业比赛种对黑方做了种种限制, 以利公平竞争。 黑白双5方的胜负结果必 须按照职业五子棋的规则要求来决定。.1 课题背景 五子棋是起源于中国古代的传统黑白棋种之一。 现代五子棋日文称之为连珠, 英 译为renju ,英文称之为 gobang 或 fir(five in a row 的缩写),亦有连五子、五子 连、串珠、五目、五目碰、五格等多种称谓。五 ava 语言是当今最为流

15、行的程序设计语言之一 作为一门非常优秀和极为健壮 的编程语言, 它同时具有的面向对象,与平台无关,分布式应用,安全,稳定和 多线程等优良的特征,使用 java 语言,不仅可以开发出功能强大的大型应用程 序, 而且 java 语言本身突出的跨平台的特性也使得它特别适合于 internet 上的 应用开发,可以这样说, java 的出现使得所开发的应用程序 “一次编写,处处可 用”的实现成为了可能。1 来随着计算机的快速发展,各种各样的电脑游戏层出不穷,使得我们能有更多 的娱乐项目, 而棋类游戏能起到锻炼人的思维和修身养性的作用,而且棋类游戏 水平颇高, 大有与人脑分庭抗礼之势。其中战胜过国际象棋

16、世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表; 其它像围棋的 “手淡”、象棋的“将族”等也以其 优秀的人工智能深受棋迷喜爱。越.3 本课题的研究方法在 .1.1 规则及解释1:黑棋先行,白棋随后。从天元开始相互顺序落子。 2:黑棋禁手判负、白棋无禁手。黑棋禁手包括 “三、三 ”;“四、四 ”;“长连”。黑 方只能用 “四、三 ”去取胜。4:如分不出胜负,则定位平局。 5:五连与禁手同时形成,先五为胜。 7:黑方禁手形成时,白方应立即指出。若白方未发现或发现后不立即指正,反 而继续落子,则不能判黑方负。五子棋是由两个人在一盘棋上进行对抗的竞技运动。 在对局开始时, 先由执黑棋 的一方将一枚

17、棋子的落在 “天元 ”上,然后由执白棋的一方在黑棋周围的交叉点上 落子。如此轮流落子直到某一方首先在棋盘的直线 横线或斜线上形成连续的五 子或五子以上, 则该方就算获胜。 但是五子棋的特点是先行的一方优势很大。 因 此,在职业比赛种对黑方做了种种限制, 以利公平竞争。 黑白双方的胜负结果必 须按照职业五子棋的规则要求来决定。近来随着计算机的快速发展, 各种棋类游戏被纷纷请进了电脑, 使得那些喜爱下棋, 又常常 苦于没有对手的棋迷们能随时过足棋瘾。 而且这类软件个个水平颇高, 大有与人脑分庭抗礼 之势。其中战胜过国际象棋世界冠军-卡斯帕罗夫的 “深蓝 ”便是最具说服力的代表;其它像 围棋的“手淡

18、”、象棋的 “将族”等也以其优秀的人工智能深受棋迷喜爱;而我们今天将向大家 介绍的是五子棋的算法。当我们与电脑对战时, 您知道这些软件是怎样象人脑一样进行思考的吗?前不久我曾编 写过一个五子棋的游戏,在这里就以此为例和大家一起探讨探讨。总的来说(我们假定您熟悉五子棋的基本规则) ,要让电脑知道该在哪一点下子,就要 根据盘面的形势,为每一可能落子的点计算其重要程度,也就是当这子落下后会形成什么棋 型(如:“冲四 ”、“活三 ”等),然后通览全盘选出最重要的一点,这便是最基本的算法。当 然,仅靠当前盘面进行判断是远远不够的, 这样下棋很容易掉进玩家设下的陷阱, 因为它没 有考虑以后的变化。 所以在

19、此基础上我们加入递归调用,即:在电脑中预测出今后几步的各 种走法,以便作出最佳选择,这也是我们下棋时常说的 “想了几步 ”。如此一来您的程序便具 有一定的水平了。什么?不信!过来试试吧!总体思路弄清之后,下面进行具体讨论: 一:数据结构 先来看看数据结构,我们需要哪些变量? 首先得为整个棋盘建立一张表格用以记录棋子信息,我们使用一个15*15的二维数 组Table1515 (15*15是五子棋棋盘的大小),数组的每一个元素对应棋盘上的一个交 叉点,用 0表示空位、 1代表己方的子、 2代表对方的子;这张表也是今后分析的基础。在此 之后还要 为电脑和玩家双方 各建立一张棋型 表Computer1

20、5154和Player15154,用6来存放棋型数据,就是刚才所说的重要程度,比如用20代表 “冲四”的点,用15代表“活三”的点,那么在计算重要性时, 就可以根据20 15得出前者比后者重要,下子时电脑便会自动选择 “冲四 ”的点。那为什么棋型表要使用三维数组呢?因为棋盘上的每 一个点都可以与横、竖、左斜、右斜四个方向的棋子构成不同的棋型,所以一个点总共有4个记录;这样做的另一个好处是可以轻易判断出复合棋型,例如:如果同一点上有2个 15就是双三、有一个 15和一个 20就是四三。怎么样!3个数组构成了程序的基本数据骨架,今后只要再加入一些辅助变量便可以应 付自如了。应该不会太难吧?OK!有

21、了这么多有用的数据,我们就可以深入到程序的流程 中去了。二:程序流程 我们主要讨论五子棋的核心算法,即:人工智能部分,而其他像图形显示、键盘鼠标控 制等,因较为简单,所以就不作过多介绍了。首先,请仔细阅读图1:我们看到本程序由六个基本功能模块构成,各模块的详细分析如下:(1)初始化: 首先,建立盘面数组Table1515、对战双方的棋型表Computer15154和Player15154并将它们清零以备使用;然后初始化显示器、键盘、鼠等输入输出设备 并在屏幕上画出棋盘。(2)主循环控制模块:控制下棋顺序,当轮到某方下子时,负责将程序转到相应的模 块中去,主要担当一个调度者的角色。(3)玩家下子

22、:当轮到玩家下时,您通过键盘或鼠标在棋盘上落子,程序会根据该点 的位置,在Table1515数组的相应地方记录 2,以表明该子是玩家下的。(4)盘面分析填写棋型表:本程序核心模块之一,人工智能算法的根本依据!其具体 实现方法如下:您在下五子棋时,一定会先根据棋盘上的情况,找出当前最重要的一些点位,如“活三 ”、“冲四 ”等;然后再在其中选择落子点。 但是, 电脑不会像人一样分析问题, 要让 它知道哪是 “活三”、 哪是 “冲四”,就得在棋盘上逐点计算,一步一步的教它。先来分析己方的棋型,我们从棋盘左上角出发,向右逐行搜索,当遇到一个空白点时,以它为中心向左挨个查找, 如果遇到己方的子则记录然后继续, 如果遇到对方的子、 空白点 或边界就停止查找。左边完成后再向右进行同样的操作;最后把左右两边的记录合并起来, 得到的数据就是该点横向上的棋型,然后把棋型的编号填入到Computerxyn中就行了 (x、y代表坐标,n=0、1、2、3分别代表横、竖、左斜、右斜四个方向) 。而其他三个方 向的棋型也可用同样的方法得到, 当搜索完整张棋盘后, 己方棋型表也就填写完毕了。 然后 再用同样的方法填写对方棋型表。注意:所有棋型的编号都要事先定义好,越重要的号数越大!OK!怎么样?有点累了吧?不过千万别泄气!因为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论