论文部分内容阅读
摘 要:黑白棋游戏软件是通过对实际黑白棋游戏规则的分析和理解,利用代码进行制作出的可供黑白棋对战的游戏软件。本文基于JAVA语言技术,通过研究计算机黑白棋游戏程序的运行流程,揭示黑白棋作为一个认知科学研究领域的日益增长的重要性,概括了所用到的人工智能技术。利用简单的黑白棋的开发过程对于人工智能的促进及影响。
关键词:信息技术;JAVA语言;黑白棋;人工智能
1 JAVA语言概述
JAVA语言是一种编程语言,最初是用来开发一些电器装置的程序,由于它的兴起引起了众多企业的关注,JAVA语言的发展又继续向网络编程方向拓展。而今,用JAVA编程已经成为技术员编程的一种新时尚,简单易学是该语言最基本的特点。由于JAVA技术具有卓越的通用性、高效性、平台移植性和安全性,被广泛应用于个人PC、移动电话和互联网。在云计算和移动互联网的产业环境下,JAVA更具备了显著优势和广阔前景。
2 人工智能
人工智能是一门具有革命性意义的一门科学,它的主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。而目前能够用来研究人工智能的主要物质手段以及能够实现人工智能技术的机器就是计算机。计算机系统于1997年进行了著名的“人机大战”,结果“深蓝”总比分获胜,比赛结果给人们留下了深深的思考,从意义上讲,实现了人类智力的计算机上的部分模拟。
3 JAVA语言开发黑白棋游戏的优点
目前基于JAVA语言开发的软件很广泛,选择使用JAVA语言的一个重要原因是因为JAVA语言实现的程序可以很好地移植到其他計算机上,并能很好地运行。其中 “黑白棋游戏”就是JAVA初学者典型的开发程序,下面就以该程序来举例说明JAVA语言对人工智能技术的影响。“黑白棋游戏”的设计与实现运用到了很多JAVA方面的知识,包括进行图形用户界面设计所需的JAVA GUI类、事件驱动程序设计、异常处理、多线程编程、网络通信等。
图1 黑白棋游戏棋盘
4 基于JAVA语言开发的黑白棋游戏系统的设计与实现
4.1 战术分析
黑白棋系统的设计与实现的工程中主要涉及两类用户:服务器端用户和客户端用户,本文将对客户端进行功能需求分析。根据黑白棋游戏规则,首先要制定开发游戏程序的战术分析。一般说来,下棋过程中,你必须尽量削减对手的行动力,同时增加自己的行动力,这种策略我们称为行动力原则(或行动力战术)。当一方达到或接近这个目标时,我们就称该棋手控制了棋局。另外这个战术的目的是迫使对方下坏棋,如果对方虽然可选位置很少,但每一步总有好棋,那战术目的就没有达成,你的目的就是让对方无好棋可下。又因为黑白棋规则规定只能在对方棋子相邻的空位下棋,这就可以推出另一个原则。对方棋子边上的空位越多,你下棋的选择也就越多,相反,如果你棋子边上的空位越少,对方可下的位置也就越少。根据需求,我们一般设计的流程图如图2。
基于流程图,游戏编程基本要包括以下几个模块:(1)主菜单模块:用于游戏前的主页面,包括初始化背景,游戏标题和基本菜单;(2)初始化游戏界面模块:用于初始化棋盘、初始化各种在后面用到的结构体、数组变量等;(3)人机对战模块:该模块是游戏实现人工智能的主要部分,其中包括计算机对棋盘的搜索、对当前局面的估值、并做出正确的反应。这一模块是黑白棋游戏程序的核心。
4.2 基于JAVA的黑白棋游戏的设计与实现的棋盘面板的设计思路
棋盘面板主要处理的是落子、棋子的绘制以及相应棋盘信息的处理。首先进行棋盘绘制,将调用paint()。棋局开始后,游戏玩家即可执棋落子,当轮到自己落子时,监听鼠标点击,判断鼠标点击的位置是否正确,当判断可以落子后,绘制棋子。
判断是棋子是否可落子的方法为:
Boolean MC_onedirec(Point liu,int a, int e,int q)
以上方法仅根据某一方向判断是否可落子,程序实现是要判断8个方向。通过该方式,检测鼠标点击位置的八个方向上是否存在允许落子的情况。当判断允许时,则调用draw_self()绘制棋子并反转相应的棋子。然后在棋盘上绘制相应的棋子。
根据落子信息绘制棋子方法:
Public void draw_stepofopponent(int i,int j,int colo)
每次落子都伴随着胜负的检查。判断游戏是否结束。方法为:public void getsuccess()
如果判断没有分出胜负,则游戏继续。若胜负已分,则显示结果。
以上就是对基于JAVA的黑白棋游戏的设计与实现中主要的设计细节的详细描述。
4.3 JAVA黑白棋的算法
估价函数:黑白棋中最重要的是电脑对局势的判断,如何写好这样的估价函数是黑白棋人工智能程序的重点。所谓的“金角银边草肚皮”,说明了子的位置的重要性是不同的。最最要的点是四个角,而和角相邻的三个点,则是不应该占领的,其次是四条边,占领后的好处也很多。当然了除了子的位置,自由度也比较重要。你的目标是限制对手的自由度(即棋步数量),同时增加自己的自由度。
搜索算法:如果只是凭估价函数来走棋,是很难赢的,好的AI必须能够向前看几步,看得越深,棋力就越强。这就涉及到博弈树搜索了,最经典是极大极小算法。Minimax算法常用于棋类等由两方较量的游戏和程序。该算法是一个零总和算法,即一方要在可选的选项中选择将其优势最大化的选择,另一方则选择令对手优势最小化的方法。而开始的时候总和为0。
5 黑白棋游戏程序开发对人工智能的启发以及现实技术问题
利用JAVA语言开发的的黑白棋游戏程序只是一个简单的开始,却体现了人工智能领域的一个研究热点,随着人工智能的广泛应用,无论是采取怎么样的算法,计算机的运算速度始终都是一个不可回避的问题。那么提高算法的精准度,避免无必要的搜索是计算机解决类似“下棋”技术需要解决的问题。
参考文献
[1]耿祥义,张跃平.JAVA2实用教程(第4版)[M].北京:清华大学出版社.
[2]张跃平,耿祥义.《Java 2实用教程(第4版)实验指导与习题解答[M].北京:清华大学出版社.
[3]高全泉.Java语言特点及其对人工智能技术的影响和促进[EB/OL]http://www.doc
88.com/p-28343811407.html
关键词:信息技术;JAVA语言;黑白棋;人工智能
1 JAVA语言概述
JAVA语言是一种编程语言,最初是用来开发一些电器装置的程序,由于它的兴起引起了众多企业的关注,JAVA语言的发展又继续向网络编程方向拓展。而今,用JAVA编程已经成为技术员编程的一种新时尚,简单易学是该语言最基本的特点。由于JAVA技术具有卓越的通用性、高效性、平台移植性和安全性,被广泛应用于个人PC、移动电话和互联网。在云计算和移动互联网的产业环境下,JAVA更具备了显著优势和广阔前景。
2 人工智能
人工智能是一门具有革命性意义的一门科学,它的主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。而目前能够用来研究人工智能的主要物质手段以及能够实现人工智能技术的机器就是计算机。计算机系统于1997年进行了著名的“人机大战”,结果“深蓝”总比分获胜,比赛结果给人们留下了深深的思考,从意义上讲,实现了人类智力的计算机上的部分模拟。
3 JAVA语言开发黑白棋游戏的优点
目前基于JAVA语言开发的软件很广泛,选择使用JAVA语言的一个重要原因是因为JAVA语言实现的程序可以很好地移植到其他計算机上,并能很好地运行。其中 “黑白棋游戏”就是JAVA初学者典型的开发程序,下面就以该程序来举例说明JAVA语言对人工智能技术的影响。“黑白棋游戏”的设计与实现运用到了很多JAVA方面的知识,包括进行图形用户界面设计所需的JAVA GUI类、事件驱动程序设计、异常处理、多线程编程、网络通信等。
图1 黑白棋游戏棋盘
4 基于JAVA语言开发的黑白棋游戏系统的设计与实现
4.1 战术分析
黑白棋系统的设计与实现的工程中主要涉及两类用户:服务器端用户和客户端用户,本文将对客户端进行功能需求分析。根据黑白棋游戏规则,首先要制定开发游戏程序的战术分析。一般说来,下棋过程中,你必须尽量削减对手的行动力,同时增加自己的行动力,这种策略我们称为行动力原则(或行动力战术)。当一方达到或接近这个目标时,我们就称该棋手控制了棋局。另外这个战术的目的是迫使对方下坏棋,如果对方虽然可选位置很少,但每一步总有好棋,那战术目的就没有达成,你的目的就是让对方无好棋可下。又因为黑白棋规则规定只能在对方棋子相邻的空位下棋,这就可以推出另一个原则。对方棋子边上的空位越多,你下棋的选择也就越多,相反,如果你棋子边上的空位越少,对方可下的位置也就越少。根据需求,我们一般设计的流程图如图2。
基于流程图,游戏编程基本要包括以下几个模块:(1)主菜单模块:用于游戏前的主页面,包括初始化背景,游戏标题和基本菜单;(2)初始化游戏界面模块:用于初始化棋盘、初始化各种在后面用到的结构体、数组变量等;(3)人机对战模块:该模块是游戏实现人工智能的主要部分,其中包括计算机对棋盘的搜索、对当前局面的估值、并做出正确的反应。这一模块是黑白棋游戏程序的核心。
4.2 基于JAVA的黑白棋游戏的设计与实现的棋盘面板的设计思路
棋盘面板主要处理的是落子、棋子的绘制以及相应棋盘信息的处理。首先进行棋盘绘制,将调用paint()。棋局开始后,游戏玩家即可执棋落子,当轮到自己落子时,监听鼠标点击,判断鼠标点击的位置是否正确,当判断可以落子后,绘制棋子。
判断是棋子是否可落子的方法为:
Boolean MC_onedirec(Point liu,int a, int e,int q)
以上方法仅根据某一方向判断是否可落子,程序实现是要判断8个方向。通过该方式,检测鼠标点击位置的八个方向上是否存在允许落子的情况。当判断允许时,则调用draw_self()绘制棋子并反转相应的棋子。然后在棋盘上绘制相应的棋子。
根据落子信息绘制棋子方法:
Public void draw_stepofopponent(int i,int j,int colo)
每次落子都伴随着胜负的检查。判断游戏是否结束。方法为:public void getsuccess()
如果判断没有分出胜负,则游戏继续。若胜负已分,则显示结果。
以上就是对基于JAVA的黑白棋游戏的设计与实现中主要的设计细节的详细描述。
4.3 JAVA黑白棋的算法
估价函数:黑白棋中最重要的是电脑对局势的判断,如何写好这样的估价函数是黑白棋人工智能程序的重点。所谓的“金角银边草肚皮”,说明了子的位置的重要性是不同的。最最要的点是四个角,而和角相邻的三个点,则是不应该占领的,其次是四条边,占领后的好处也很多。当然了除了子的位置,自由度也比较重要。你的目标是限制对手的自由度(即棋步数量),同时增加自己的自由度。
搜索算法:如果只是凭估价函数来走棋,是很难赢的,好的AI必须能够向前看几步,看得越深,棋力就越强。这就涉及到博弈树搜索了,最经典是极大极小算法。Minimax算法常用于棋类等由两方较量的游戏和程序。该算法是一个零总和算法,即一方要在可选的选项中选择将其优势最大化的选择,另一方则选择令对手优势最小化的方法。而开始的时候总和为0。
5 黑白棋游戏程序开发对人工智能的启发以及现实技术问题
利用JAVA语言开发的的黑白棋游戏程序只是一个简单的开始,却体现了人工智能领域的一个研究热点,随着人工智能的广泛应用,无论是采取怎么样的算法,计算机的运算速度始终都是一个不可回避的问题。那么提高算法的精准度,避免无必要的搜索是计算机解决类似“下棋”技术需要解决的问题。
参考文献
[1]耿祥义,张跃平.JAVA2实用教程(第4版)[M].北京:清华大学出版社.
[2]张跃平,耿祥义.《Java 2实用教程(第4版)实验指导与习题解答[M].北京:清华大学出版社.
[3]高全泉.Java语言特点及其对人工智能技术的影响和促进[EB/OL]http://www.doc
88.com/p-28343811407.html