




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
太原理工大学毕业设计(论文)用纸围棋游戏的设计与实现摘要围棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏。主要完成了人机对战和玩家之间联网对战2个功能。网络连接部分为Socket编程应用,客户端和服务器端的交互用ClassMessage定义,有很好的可扩展性,客户端负责界面维护和收集用户输入的信息,及错误处理。服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户列表。在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高电脑AI方案,如递归算法、电脑学习等。算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。关键词:围棋,信息自动化,游戏,java
DesignandImplementationofchessgameABSTRACTGoasachesstournamentsportisverypopularinthefolk,inordertoknowtherenjurulesandtechniques,andartificialintelligenceresearchsimple,decidedtouseJavagobanggamedevelopment.Maincompletedtheman-machinebetweennetworkingandmultiplayergamewithtwofunctions.NetworkconnectionpartsforSocketprogrammingapplications,clientandtheservertointeractwiththeClassMessagedefinition,hasgoodscalability,theclientisresponsibleforthemaintenanceandcollectinformationofuserinputinterface,anderrorhandling.Thebasicinformationoftheservermaintenanceonlineusersandanytwoagainsttheuser'sinformationboard,dynamicmaintenanceuserlist.Throughdeepsearchandvaluationinman-machinegamemodule,toimprovecomputerchessplayer'sintelligence.Analysisofseveralfactorsthathaveeffectontheprecisionofthevaluationmodule,andputsforwardsomeimprovetheprecisionofthemethod,aswellastothenumberofnodesinthesearchtocomparethem,onthebasisofthesealgorithmsanalyzesomeimproveAIscheme,suchasrecursivealgorithm,computerlearning,etc.Algorithmresearchhelpstounderstandtheprogramstructure,enhancethelogicalthinkingability,intheotherartificialintelligencealsohasagreatreferencefunction.Keywords:Go,InformationAutomation,Games,Java目录摘要 iABSTRACT ii第1章绪论 11.1背景 11.2设计内容 2第2章围棋对弈系统 42.1围棋概述 42.1.1围棋定义 42.1.2开发围棋的任务及目的 52.2主要系统介绍 52.3本章小结 6第3章围棋对弈系统的设计 73.1系统需求分析 73.2系统开发及运行环境 83.3系统主要功能要求 83.4系统总体结构 93.5本章小结 10第4章围棋对弈系统的具体实现 114.1界面设计 114.2输赢判断设计 144.3程序设计及调试运行 154.4本章小结 15第5章结束语 16参考文献 17致谢 18附录 19译文资料 33中文译文 47第1章绪论1.1背景围棋是一种智力游戏,起源于中国。中日韩是现今围棋的三大支柱,但近年来日本围棋逐步衰弱,形成了中韩争霸的局面。围棋是中华民族传统文化中的瑰宝,它体现了中华民族对智慧的追求,古人常以“琴棋书画”论及一个人的才华和修养,其中的“棋”指的就是围棋。被人们形象地比喻为黑白世界的围棋,是我国古人所喜爱的娱乐竞技活动,同时也是人类历史上最悠久的一种棋戏。由于它将科学、艺术和竞技三者融为一体,有着发展智力,培养意志品质和机动灵活的战略战术思想意识的特点,因而,几千年来长盛不衰,并逐渐地发展成了一种国际性的文化竞技活动。围棋是一种策略性二人棋类游戏,使用格状棋盘及黑白二色棋子进行对弈。目前围棋流行于亚太,覆盖世界范围,是一种非常流行的棋类游戏。中国围棋规则是数子法,围棋的本质是:谁的占地面积大谁获胜。围棋的规则十分简单,却拥有十分广阔的落子空间,使得围棋变化多端,比其它棋类复杂深奥。这就是围棋的魅力所在。下围棋对人脑的智力开发很有帮助,可增强一个人的计算能力、创造能力、思维能力、判断能力,也能提高人的注意力和控制力。下围棋对儿童少年的智力发展起到积极作用,使他们能更好的分析事物。Java语言是当今最为流行的程序设计语言之一作为一门非常优秀和极为健壮的编程语言,它同时具有的面向对象,与平台无关,分布式应用,安全,稳定和多线程等优良的特征,使用Java语言,不仅可以开发出功能强大的大型应用程序,而且Java语言本身突出的跨平台的特性也使得它特别适合于Internet上的应用开发,可以这样说,Java的出现使得所开发的应用程序“一次编写,处处可用”的实现成为了可能。近来随着计算机的快速发展,各种各样的电脑游戏层出不穷,使得我们能有更多的娱乐项目,而棋类游戏能起到锻炼人的思维和修身养性的作用,而且棋类游戏水平颇高,大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表。越来越多的具有智能的机器进入了人类的生活,人工智能的重要性如今显而易见。自己对人工智能比较感兴趣,而围棋游戏程序的开发实现这个课题,正好提供给我这样一个研究的机会,通过对人工智能中博弈方面的研究(人机对弈),让我在简单的人机对弈全局设计,以及具体到相关算法上有了深入的了解。人工智能属于计算机科学的领域,它以计算机技术为基础,近几十年来,它的理论和技术已经日益成熟,应用领域也正在不断扩大,显示出强大的生命力。人工智能大致可以分成几个学科,它们每一个都是独特的,但是它们常常又互相结合起来完成设计任务,这时,这些学科之间的差别就变的很模糊。人工智能在专家系统,自然语言理解,自动定理证明,自动程序设计,人工智能在机器人学、模式识别、物景分析、数据库的智能检索、机器下棋(实质上是博弈论问题)和家用电器智能化等领域都有广泛的应用。而这个课题就是和人工智能中的博弈论领域紧密相关的。
这个题目核心是人工智能和Socekt编程,。并且人工智能中的博弈部分,由于采用了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技术,正在各行各业广泛渗透。智能已经成为当今各种新产品、新装备的发展方向。所以,趁着这个机会,对人工智能中比较容易实现的人机博弈进行了解研究学习,也是很实用且很有必要的。1.2设计内容此设计是一个小游戏(围棋)的实现,主要运用了GUI(用户图形界面)API(应用程序借口)来实现。此程序没有用到图片的引用,棋盘和棋子的设计完全是应用函数绘制,再加入复选框,按钮,标签及实现本游戏的用户界面布局。在页面上通过单纯的JCreator实现的下棋程序,能够实现提子,打劫等简单的下棋功能。更好的掌握java编程以及布局和设计。通过课程设计把课堂上讲的内容融会贯通,学会设计程序、开发应用软件、开发系统软件等各项工作。通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。一、棋盘盘面有纵横各十九条等距离、垂直交叉的平行线,共构成19×19=361个交叉点(以下简称为“点”)。在盘面上标有几个小圆点。称为星位,中央的星位又称“天元”。二、棋子棋子分黑白两色。均为扁圆形。棋子的数量以黑子181、白子180个为宜。三、围棋的下法1、对局双方各执一色棋子,黑先白后,交替下子,每次只能下一子。2、棋子下在棋盘的点上。3、棋子下定后,不得向其他点移动。4、轮流下子是双方的权利,但允许任何一方放弃下子权。四、棋子的气一个棋子在棋盘上,与它直线紧邻的空点是这个棋子的“气”。棋子直线紧邻的点上,如果有同色棋子存在,则它们便相互连接成一个不可分割的整体。它们的气也应一并计算。棋子直线紧邻的点上,如果有异色棋子存在,这口气就不复存在。如所有的气均为对方所占据,便呈无气状态。无气状态的棋子不能在棋盘上存在,也就是第四条——提子。五、提子把无气之子提出盘外的手段叫“提子”。提子有二种:1、下子后,对方棋子无气,应立即提取。2、下子后,双方棋子都呈无气状态,应立即提取对方无气之子。六、计算胜负1、贴3又3/4子的规则第一步,把死子捡掉。第二步,只数一方围得点(叫做目)并记录下来(一般围得点以整十目为单位),再数刚才那一方的子数并记录下来,再把目数和子数加起来。第三步,如果数的是黑棋,再减去3又3/4子,如果数的是白棋,再加上3又3/4子。第四步,结果和180又1/2(棋盘361个点的一半)比较,超过就算胜,否则判负。2、让先与让子让先不贴目,让子要贴还让子数的一半(就当被让方是预先收了单官)。第2章围棋对弈系统2.1围棋概述网络围棋在中国的出现几乎跟随着互联网同步成长,1998年,联众率先推出了网络围棋对弈。几年来各大网络围棋平台先后上线,出身各异,水平也参差不齐。根据网络资料显示,截止2007年底,中国网络围棋平台平均在线人数达6万人。
大型的游戏平台如QQ游戏、联众游戏中都有围棋游戏。也就是说QQ围棋、联众围棋都是镶嵌在其游戏平台之上。依靠游戏平台用户人数的优势,这两个平台围棋用户人数占据了网络围棋用户的半数之多。
但根据专业人士分析:这部分用户无论在产品使用深度和对围棋的认知上是绝对的新手,浅尝辄止,他们大多是过客。同时他们的围棋软件本身也不够专业。专业的网络围棋平台才是中国网络围棋普及和发展的出路。
目前国内的专业网络围棋平台,大致可分使用韩产软件和国产软件两大类。国内专业围棋平台的领军人物弈城、TOM,便是使用韩产软件的代表。两平台能够实现中韩对垒的特性,为他们吸引了不少高水平的棋手,并受到棋友的广泛认可。但他们同样有一个死穴,就是两家皆为购买韩国软件,不掌握主动权,因此根本无法保证软件的及时更新,容易受制于韩方。“弈城事件”便将这个致命缺点暴露无疑。
经典的围棋系统有:Handtalk,Goemate,Wulu,他是陈志行的作品,曾多次获得过冠军。在他的指导下一个研究小组编写了乌鹭(WUIU),也在比赛中取得过亚军。Handtalk是用汇编语言编写的,执行速度快,程序本身也不大。由于程序并不大,可以推侧出其所用到的模式资料也不多。Handtalk在大多数的情况下都不会失误,作者本人曾提到他是用到一种类似人类棋手在下围棋时常用到的手割法来帮助判断的。Handtalk与其它的程序明显不同的地方是它的攻杀能力特别强,在大多数的比赛中,都是通过吃掉对方几块棋而获胜。这是由于程序的棋块安危判断能力、形势判断能力、眼位判断能力和模式匹配能力都很强的关系.这些系统的好坏,跟设计者的棋力关系很大。2.1.1围棋定义围棋是人生的模拟。开局时,盘上一片空白,就好像一个刚刚有了自觉意识的小孩,睁开了懵懂的双眼,开始了自己的人生之路。开局时,你可以有各种选择,自由度最大,走哪一步都不会让你立刻输掉。布局基本上是兴趣的显示,有喜欢大模样的,那是寄希望于未来的做法;有现实地捞空的;有顺应对方的思路,不知不觉中达到自己目的的;也有处处与对方作对,即使自己不爽,也要给对方添堵的。由于棋盘的广大,不可能面面俱到地行棋。过程中,对局者不断地在判断、取舍,好像人生开始在选择自己的道路了。看着这里想要,那里也想要,可是没法面面俱到,终究只能选取一条路。有时候,你的招法对路,越走越畅,有的时候就有问题,想要的没要到,越下越添堵。优势时,好比人生得意时,心情很爽,最好一直就这么下去;劣势时,千方百计寻找对手的破绽,伺机翻盘。心理毅力强的人,总能把弦绷得紧紧的,一直像甲鱼一样咬住对手;心理软弱的人,很早就放弃抵抗,认输投降。优势时被对方翻盘了,就好像原本胜券在握的一件事情,被自己搞砸了,懊悔痛恨都没有用;大败的棋,忽然找到对手的漏勺又赢了回来,就好像本已被逼到绝境,却又咸鱼翻生,大获全胜,心情之爽,难以表达!由于围棋的棋盘相对比较广大,过程也较反复,一盘棋下来,通常势均力敌的对手都会有不止一次的获胜机会。这种翻来覆去的体验,非常象人生经历的一种浓缩、抽象。人生,是不可重复的,因此在迈出想要尝试的一步时,有可能随之而来的,是非常惨痛的代价。而围棋的过程,可以让你在做出种种尝试后付出最少的代价--大不了输一盘棋么?推掉再来就是了。围棋还含有艺术、哲学的成份,以及创造世界的哲理。通过学习围棋,你不仅享受到其中的乐趣,而且还会开拓一个更加美好的世界。2.1.2开发围棋的任务及目的随着Intemet的普及,网络游戏己经成为大家耳濡目染的新生事物。网络游戏从出现到现在发展的时间很短,但是其发展速度却非常之快。现在,可以说网络游戏已经成为人们休闲、娱乐的有效方式。网络游戏种类很多,目前主要分战略类、RPG类、棋牌类等几种,常见的棋牌类游戏有中国象棋、国际象棋、围棋、桥牌、拱猪、麻将等。网络游戏具有如下特征:2.2主要系统介绍主要功能包括:
能实现联机对战,和单机版游戏对战。
开始游戏之后:
1、用户双方自行选择白棋和黑棋。
2、任何一方可以随时随地认输,游戏结束。
4、要实现围棋最基本吃掉对方的法则。
此设计为本人原创作品。其中包括:源程序,可执行程序,论文,录像,使用说明。(1)有一个或多个游戏服务器启动特定游戏服务;(2)游戏者到游戏网站下载客户端程序并申请游戏账号。然后启动客户端程序通过某种网络协议连接游戏服务器。(3)客户端负责处理客户端显示和操作界面,具有简单的逻辑处理功能力,同时负责接收发送与服务器端交互的数据包。(4)服务器程序负方处理服务器端逻辑、游戏逻辑、客户之间的网络信息传递,以及数据库之间的数据读取保存工作。同时服务器端还要承担客户端数据的接收、转发工作。(5)网络游戏常用的网络协议有Internet的TCP/IP协议、适用于局域网(如红色警报联网等采用)的IPX协议。虽然目前很多围棋游戏正在运行,但是使用java平台开发的游戏少之又少,这就使得围棋客户端的运行平台十分有限,不能满足今后发展的需求,如移动客户端,就基本上没有。因此开发一套基于java的围棋系统十分必要。2.3本章小结这一章介绍了当前围棋应该具备的功能模块,并提供了市面上比较流行的围棋系统作为参考。在这一章中,我们可以了解什么是围棋系统,当前围棋系统的市场需求,还有一个围棋系统应该的开发目标。第3章围棋对弈系统的设计这一章时介绍开发环境和用到的开发工具,系统主要的功能设计,系统的数据流程图。3.1系统需求分析1.设计流程(图3-1)图3-1设计流程图2.运行流程(带流程图3-2)图3-2运行流程图3.2系统开发及运行环境硬件平台:惠普6450B软件平台:操作系统:Windows7旗舰版。开发工具包:JDKVersion1.6.0_13MyEclipse8.5分辨率:最佳效果1024×768像素。3.3系统主要功能要求系统设计目标如下:
主要功能包括:
1、能够在局域网上实现多人在线对战。
2、能够实现单机版游戏对战。
开始游戏之后:
1、用户双方选择白棋和黑棋。
2、任何一方可以随时随地认输,游戏结束。
3、要实现围棋最基本吃掉对方的法则。此设计为本站原创作品。其中包括:源程序,可执行程序,论文,录像,使用说明。3.4系统总体结构如图3-3系统功能结构图图3-3系统功能结构图privatevoidjbInit()throwsException{choice1.setBackground(newColor(236,190,98));button1.setBackground(newColor(236,190,98));//try//{//UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//}catch(Exceptione){e.printStackTrace();}this.setResizable(false);newThread(this).start();//启动监听线程this.PORT=1976;this.isInitiative=false;//是否主动连接this.stopFlag=false;//是否继续监听的标志this.choice1.addItem("黑");this.choice1.addItem("白");LastPoint=newPoint();messagePoint=newPoint();this.setSize(470,450);this.setTitle("围棋大战制造者:郭欣");this.panelGo.setEnabled(false);//开始之前屏蔽掉盘面checkbox1.addMouseListener(newjava.awt.event.MouseAdapter(){publicvoidmouseClicked(MouseEvente){checkbox1_mouseClicked(e);}});this.goStartPoint=this.panelGo.getLocation();//this.setLayout(borderLayout1);panel1.setLayout(borderLayout2);checkbox1.setCheckboxGroup(checkboxGroup1);checkbox1.setLabel("单机");checkbox2.setCheckboxGroup(checkboxGroup1);checkbox2.setLabel("联机");checkbox2.addMouseListener(newjava.awt.event.MouseAdapter(){publicvoidmouseClicked(MouseEvente){checkbox2_mouseClicked(e);}});label1.setText("对方地址");button1.setLabel("连接");3.5本章小结通过对围棋游戏的编写,使自己对java语言有了更深的了解。让我渐渐体会到了JAVA的博大精深。以及怎么学习JAVA,怎么学习计算机语言,怎样对问题进行解决和运用JAVAGUI,查找JAVAAPI的使用都用了更进一步的理解。也更加熟悉和了解了java开发工具Eclipse的使用同时,程序在编写完毕之后还有很多地方需要完善。例如:可以把另一方选择为电脑方,让电脑自动下,也可以给游戏添加背景音乐;甚至可以修改成网络游戏,用户可以在网上对战。总之,有很多地方可以扩充和完善。在此次设计过程中我也学到了许多了关于计算机方面的知识,编程能力有了很大的提高。第4章围棋对弈系统的具体实现界面是系统之间最直接的交互界面,界面的友好性体现了软件设计的质量,并在很大程度上决定了软件是否成功。4.1界面设计系统主界面如图4-1(修改前),图4-2(修改后)图4-1主界面修改前//画棋盘voidpaintChessboard(Graphicsg,PointstartPoint,intinterval){intpX=startPoint.x;intpY=startPoint.y;intLINELENGTH=interval*18;inti;for(i=0;i<19;i++){g.drawLine(pX+i*interval,pY,pX+i*interval,pY+LINELENGTH);g.drawLine(pX,pY+i*interval,pX+LINELENGTH,pY+i*interval);}g.fillOval(pX+interval*3-3,pY+interval*3-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*9-3,pY+interval*3-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*15-3,pY+interval*3-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*3-3,pY+interval*9-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*9-3,pY+interval*9-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*15-3,pY+interval*9-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*3-3,pY+interval*15-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*9-3,pY+interval*15-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*15-3,pY+interval*15-3,(int)(interval-14),(int)(interval-14));g.drawRect(pX-3,pY-3,366,366);}图4-2主界面修改后关键代码: voidinitMyHash(PointstartPoint,intinterval){Oneone;Pointkey;//逻辑点标志inti,j;//定义i,jfor(i=1;i<=19;i++)for(j=1;j<=19;j++)//循环{key=newPoint(i,j);one=newOne();//创建对象one.posX=startPoint.x+(i-1)*interval;//相邻点处理,获取one.posY=startPoint.y+(j-1)*interval;//相邻点处理。获取//获取相邻点one.pointAround[0]=newPoint(i,j-1);//上one.pointAround[1]=newPoint(i,j+1);//下one.pointAround[2]=newPoint(i-1,j);//左one.pointAround[3]=newPoint(i+1,j);//右if(i==1)one.pointAround[2]=one.OUT;//左的周围if(i==19)one.pointAround[3]=one.OUT;//右的周围if(j==1)one.pointAround[0]=one.OUT;//上的周围if(j==19)one.pointAround[1]=one.OUT;//下的周围myHash.put(key,one);//我的我的哈希表并且在里键入关键字}}//更新盘面publicvoidpaint(Graphicsg){PointstartPoint=STARTPOINT;//创建对象,开始点intinterval=INTERVAL;//定义成员变量this.paintChessboard(g,startPoint,interval);//棋盘的操作this.paintChessman(g,startPoint,interval);//棋子的操作}//画棋盘4.2输赢判断设计中国规则又称数子规则,子空皆地,主要在春兰杯及中国国内使用。它规定“双方下子完毕的棋局,计算胜负采用数子法。先将双方死子全部清理出盘外,然后对一方的活棋(包括活棋围住的点)以子为单位进行计数。双方活棋之间的空点各得一半,一个点即为一子。胜负的基准以棋局总点数的一半180又1/2点为归本数。凡一方活棋与所属空点的总和大于此数者为胜,小于此数者为负,等于此数者为和。采用贴子方式的棋局,胜负标准另行规定。”关于贴子的规定:“为了抵消黑方先手的效率,现行全国性正式比赛在终局计算胜负时,黑方需贴出三又四分之三子。”因此,黑184又1/4,白176又3/4为双方分别获胜的基数。简言之,就黑方至少185以上方为获胜,反之白方胜对终局有以下规定:一、棋局下到双方一致确认着子完毕,为终局。二、对局中,有一方中途认输,为终局。关于终局判断的规定: 一、除总则第七条的规定外,凡比赛一方弃权或因各种原因被裁判员判负、判和的对局,也作终局处理。二、双方确认的终局,确认的次序应是,先由轮走方,后是对方以异色棋子一枚放于已方棋盘右下角的线外。4.3程序设计及调试运行利用JSP“一次编写,各处运行”的编程优点,按功能模块结构设计菜单,布置各明细模块工作界面,编写各个模块的程序代码,进行编译连接运行,经过反复调试修改,以达到系统功能要求。这个过程具有大量的工作量,应仔细对每个程序细节进行分析思考、编写程序并调试,做到程序简洁清楚,尽量避免可能潜在的程序错误,并在必要的地方加以注释,以便于程序阅读和修改。每个Java源文件都包含一个单一的公共类或接口。若私有类和接口与一个公共类相关联。可以将它们和公共类放入同个源文件。公共类必须是这个文件中的第一个类和接口。4.4本章小结本章介绍了系统的具体实现和部分关键代码。1.一个新的系统,从页面到数据库再到配置文件,建议统一使用UTF-8。2.setCharacterEncodingFilter只对post请求有效,get一律忽略。3.JavaScript和Ajax乱码的避免,注意JavaScript默认是ISO8859的编码,避免JS/AJAX乱码和GET一样,不要在URL里面使用中文,实在避免不了,就只能在生成链接的时候转码,绝对不能想当然的认为SetCharacterEncodingFilter会帮你做什么事情。4.如果在本项目中采用了get方式提交请求并附加参数,结果导致编码乱码,原因是Tomcat默认请求编码是ISO8859,需要在Tomcat的配置文件server.xml添加一个参数,URIEncoding=”UTF-8”,这样请求中附件的参数就会以UTF-8来进行编码。5.Ajax请求乱码使用Ajax,JS也是默认使用ISO8859编码,所以在进行请求时遇到中文参数需要进行编码,此类做到代码简洁清楚,尽量避免可能潜在的程序错误如:varurl="GetSelectListAction.do?queryData=subTrade"+"&queryId="+encodeURI(obj.value)+"&r="+Math.random();这里有两个地方需要注意:第一个地方是encodeURI(),方法,可以将参数进行转码,默认是转化为UTF-8,如果需要转为其他码制,需要在方法中添加第二个参数。第二个地方是Math.random(),由于Ajax有缓存机制,在接受请求的时候第一时间先判断该请求的地址是否被访问过,如果被访问过则直接使用缓存中的内容返回,这个东西很讨厌,客户在访问过一次出错后以后每次出现的都是这个错误,所以在请求中给其增加一个时间戳,只要可以随机生成一个不同的字串就可以,保证Ajax每次都去访问服务器。第5章结束语围棋对弈系统的研究与实现为进一步进行计算机博弈打下了一定的基础。但该系统目前仍有许多问题亟待解决,例如,对死活库的建立,可以为将来系统进一步判断死活打下基础,达到真正智能化,并进一步实现“人-机”对弈。毋庸置疑,这是一个很有研究价值的领域。多次获得计算机围棋世界冠军的“手谈”开发者陈志行教授在《电脑围棋门径》中提到了设计计算机围棋的方法:第一,显示棋盘棋子及其他必须显示的内容;设置黑白选择、进子及有关的功能。第二,设置计算和记录棋子串气数的功能,赋予提子和禁着的功能。第三,设计一种函数,表征每个棋子对周围的影响,用以划分势力范围,作为静态形式判断的基础。第四,要对盘上各着点分别试进黑子和白子,比较进子前后的静态形势,以估算该点的进子价值,成为着点选择的基本依据。还要设置棋谱记录、计时、发声、显示形式对比、计算胜负等功能。“首先必需完成前两个部分,其次先解决后两个部分,这样程序就算是基本会下棋了”。围棋对弈系统的设计完成了前三个部分,故本系统下一步的工作要解决第四部分的内容,分别对棋局中的各点着黑子和白子,并对落子前后的静态局面形势进行比较,进而估算该点的着子价值,以此作为基本依据进行着点选择,其中还包括算法优化问题,以进一步提高系统的效率。参考文献[1]冯博.Java网络编程实例教程,清华大学出版社,,2005.1[2]赵文靖编著.Java程序设计基础与上机指导.清华大学出版社,2006[3](美)RogersCadenhead.Java编程入门经典.梅兴文译.第4版.人民邮电出版社,2007[4](美)BruceEckel编.《Java编程思想第3版》.机械工业出版社,2005[5]陈国君等编著.Java2程序设计基础.清华大学出版社,2006[6]朱喜福等编.Java程序设计.人民邮电出版社,2005[7](美)DougLea著.Java并发编程:设计原则与模式.中国电力出版社译。2004[8]李芝兴,杨瑞龙编.《Java程序设计之网络编程》.清华大学出版社,2006[9]赵越超.应用JSP技术开发Web应用程序[J].中国金融电脑.2002[10]王淑荣,赵晋松,范慧敏,白小军.JSP技术在WEB应用中的研究[J].西北电力技术2003[11]AndreaSteelman,JoelMurach.Murach'sJavaServletsandJSP[M].2011.[12]MichaelGehond.LogicProgrammingandNonmonotonicReasoning[M]德国.SpringerBerlin/Heidelberg.2007[13]WattsDJ.SmallWorlds.Thedynamicsofnetworksbetweenorderandrandomness[P].America:56A2579BB6,l999-05-13.致谢感谢行文至此,我的这篇论文已接近尾声;岁月如梭,我四年的大学时光也即将敲响结束的钟声。离别在即,站在人生的又一个转折点上,心中难免思绪万千,一种感恩之情油然而生。生我者父母。感谢生我养我,含辛茹苦的父母。是你们,为我的学习创造了条件;是你们,一如既往的站在我的身后默默的支持着我。没有你们就不会有我的今天。谢谢你们,我的父亲母亲!
在这四年中,老师的谆谆教导、同学的互帮互助使我在专业技术和为人处事方面都得到了很大的提高。感谢软件学院在我四年的大学生活当中对我的教育与培养,感谢太原理工大学软件的所有专业老师,没有你们的辛勤劳动,就没有我们今日的满载而归,感谢上海杰普软件公司对我的培养,感谢大学四年曾经帮助过我的所有同学。在制作毕业设计过程中我曾经向老师们和同学们请教过不少的问题,老师们的热情解答和同学们的热心帮助才使我的毕业设计能较为顺利的完成。在此我向你们表示最衷心的感谢。 附录源代码/*************************MainWindow**********************/importjava.awt.*;//importjavax.swing.*;importjava.awt.event.*;import.*;importjava.io.*;publicclassMainWindowextendsFrameimplementsRunnable{GopanelGo=newGo();ImagemyImage;intPORT;SocketsendSocket;//主动连接SocketPrintWriterwriter;//用来发送messagebooleanstopFlag;booleanisInitiative;PointmessagePoint;PointgoStartPoint=null;PointyellowPoint=null;booleanstepColor=true;PointLastPoint=null;//移除黄点时,判断位置变动BorderLayoutborderLayout1=newBorderLayout();Panelpanel1=newPanel();Panelpanel2=newPanel();BorderLayoutborderLayout2=newBorderLayout();Panelpanel3=newPanel();CheckboxGroupcheckboxGroup1=newCheckboxGroup();Checkboxcheckbox1=newCheckbox();Checkboxcheckbox2=newCheckbox();Labellabel1=newLabel();TextFieldtextField1=newTextField();Buttonbutton1=newButton();Labellabel2=newLabel();Choicechoice1=newChoice();Buttonbutton2=newButton();GridLayoutgridLayout1=newGridLayout();BorderLayoutborderLayout3=newBorderLayout();publicMainWindow(){try{jbInit();}catch(Exceptione){e.printStackTrace();}}privatevoidjbInit()throwsException{choice1.setBackground(newColor(236,190,98));button1.setBackground(newColor(236,190,98));//try//{//UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//}catch(Exceptione){e.printStackTrace();}this.setResizable(false);newThread(this).start();//启动监听线程this.PORT=1976;this.isInitiative=false;//是否主动连接this.stopFlag=false;//是否继续监听的标志this.choice1.addItem("黑");this.choice1.addItem("白");LastPoint=newPoint();messagePoint=newPoint();this.setSize(470,450);this.setTitle("围棋大战制造者:郭欣");this.panelGo.setEnabled(false);//开始之前屏蔽掉盘面checkbox1.addMouseListener(newjava.awt.event.MouseAdapter(){publicvoidmouseClicked(MouseEvente){checkbox1_mouseClicked(e);}});this.goStartPoint=this.panelGo.getLocation();//this.setLayout(borderLayout1);panel1.setLayout(borderLayout2);checkbox1.setCheckboxGroup(checkboxGroup1);checkbox1.setLabel("单机");checkbox2.setCheckboxGroup(checkboxGroup1);checkbox2.setLabel("联机");checkbox2.addMouseListener(newjava.awt.event.MouseAdapter(){publicvoidmouseClicked(MouseEvente){checkbox2_mouseClicked(e);}});label1.setText("对方地址");button1.setLabel("连接");button1.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(ActionEvente){button1_actionPerformed(e);}});label2.setText("");button2.setBackground(newColor(236,190,98));button2.setLabel("开始");button2.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(ActionEvente){button2_actionPerformed(e);}});panel3.setLayout(gridLayout1);gridLayout1.setRows(8);gridLayout1.setColumns(1);gridLayout1.setHgap(100);gridLayout1.setVgap(10);panel2.setLayout(borderLayout3);this.panel2.setSize(500,70);panelGo.addMouseMotionListener(newjava.awt.event.MouseMotionAdapter(){publicvoidmouseMoved(MouseEvente){panelGo_mouseMoved(e);}});panelGo.addMouseListener(newjava.awt.event.MouseAdapter(){publicvoidmouseClicked(MouseEvente){panelGo_mouseClicked(e);}});this.addWindowListener(newjava.awt.event.WindowAdapter(){publicvoidwindowClosing(WindowEvente){this_windowClosing(e);}});panel3.setBackground(newColor(236,190,98));panel3.add(checkbox1,null);panel3.add(checkbox2,null);panel3.add(label1,null);panel3.add(textField1,null);panel3.add(button1,null);panel3.add(choice1,null);panel3.add(button2,null);panel3.add(label2,null);this.panel1.add(this.panelGo,BorderLayout.CENTER);this.panel1.add(panel3,BorderLayout.EAST);this.add(panel2,BorderLayout.SOUTH);this.add(panel1,BorderLayout.CENTER);this.disableLink();//废掉控件//this.button2.setEnabled(false);//废掉开始this.checkboxGroup1.setSelectedCheckbox(this.checkbox1);this.yellowPoint=newPoint(1000,1000);//初始化一个世纪外的黄点 this.centerWindow();this.show();myImage=this.createImage(16,16);//用来纪录有黄点之前的图像}voidcenterWindow(){ Dimensiond=Toolkit.getDefaultToolkit().getScreenSize(); intpX=(d.width-this.getWidth())/2; intpY=(d.height-this.getHeight())/2; this.setLocation(pX,pY);}publicstaticvoidmain(Stringargs[]){MainWindowmain=newMainWindow();}//监听线程publicvoidrun(){try{ServerSocketserverSocket=newServerSocket(PORT);SocketreceiveSocket=null;receiveSocket=serverSocket.accept();if(this.isInitiative)//如果已在进行,则不接受连接this.stopFlag=true;this.checkboxGroup1.setSelectedCheckbox(this.checkbox2);//自动选择联机this.button1.setEnabled(false);this.choice1.setEnabled(true);this.textField1.setEnabled(false);this.checkbox1.setEnabled(false);this.checkbox2.setEnabled(false);this.writer=newPrintWriter(receiveSocket.getOutputStream(),true);BufferedReaderreader=newBufferedReader(newInputStreamReader(receiveSocket.getInputStream()));Stringmessage;while(!this.stopFlag){this.panelGo.showError("接收连接成功");message=reader.readLine();this.doMessage(message);}reader.close();receiveSocket.close();serverSocket.close();}catch(IOExceptionioe){this.panelGo.showError("您赢了");}}//处理接收到的东西voiddoMessage(Stringmessage){if(message.startsWith("start"))//判断开始{this.panelGo.showError("开始了");if(message.equals("start_black"))this.choice1.select("白");elsethis.choice1.select("黑");if(this.choice1.getSelectedItem().equals("黑"))//只要你是黑的,就先走this.panelGo.setEnabled(true);this.paintMyColor();//表明颜色this.disableLink();}else//下子的信息{intcolor=Integer.parseInt(message.substring(0,1));this.messagePoint.x=Integer.parseInt(message.substring(1,3));this.messagePoint.y=Integer.parseInt(message.substring(3,5));this.panelGo.setEnabled(true);//解禁this.panelGo.doStep(this.messagePoint,color);}}//为鼠标定位voidpanelGo_mouseMoved(MouseEvente){PointrealPoint=e.getPoint();PointmousePoint=this.panelGo.getMousePoint(realPoint,this.goStartPoint);this.removeLastMousePoint(this.LastPoint,mousePoint);//this.LastPoint=mousePoint;大错误,使对象公用了一个地址this.LastPoint.x=mousePoint.x;this.LastPoint.y=mousePoint.y;if(this.isPlace(mousePoint))this.showMousePoint(mousePoint);}//加黄点的范围booleanisPlace(Pointp){if(p.x>19||p.x<1||p.y<1||p.y>19)returnfalse;intcolor;Oneone;one=(One)(this.panelGo.myHash.get(p));color=one.color;if(color!=0)returnfalse;returntrue;}voidpanelGo_mouseClicked(MouseEvente){if(this.isSingle()){this.doSingle();}else{this.doMultiple();}}//开始voidbutton2_actionPerformed(ActionEvente){if(e.getActionCommand().equals("开始")){this.disableLink();this.checkbox1.setEnabled(false);this.checkbox2.setEnabled(false);this.button2.setLabel("退出");if(this.isSingle())this.panelGo.setEnabled(true);else//联机版时{if(this.choice1.getSelectedItem().equals("黑")){this.writer.println("start_black");}elsethis.writer.println("start_white");}this.paintMyColor();//表明颜色}elseif(e.getActionCommand().equals("退出")){this.dispose();System.exit(0);}}//disable联机时用的控件voiddisableLink(){this.textField1.setBackground(newColor(236,190,98));this.textField1.setEnabled(false);this.choice1.setEnabled(false);this.button1.setEnabled(false);}//enable联机时的控件voidenableLink(){this.textField1.setBackground(Color.white);this.textField1.setEnabled(true);this.choice1.setEnabled(true);this.button1.setEnabled(true);}//判断类型booleanisSingle(){returnthis.checkbox1.getState();}voidsingle(){}voidmultiple(){}//加小黄点voidshowMousePoint(PointmousePoint){Graphicsg=this.panelGo.getGraphics();g.setColor(Color.yellow);g.fillOval(mousePoint.x*20-6,mousePoint.y*20-6,this.panelGo.INTERVAL-8,this.panelGo.INTERVAL-8);this.yellowPoint.x=mousePoint.x;//定位黄点this.yellowPoint.y=mousePoint.y;GraphicsmyG=this.myImage.getGraphics();this.createMyImage(myG,this.yellowPoint,0);}//消除前一个黄点vo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省深圳市高三下学期第一次调研考试日语试题
- 雷达科普知识
- 韩语基础知识
- 进位加法教学设计
- 8.1 法治国家 课件高中政治统编版必修三政治与法治
- 防寒及预防流感安全教育
- 青春期指导课件
- 七年级体育 六大营养素的功能与作用教学设计
- Unit 1 What's the matter Section A 3a-3c教案 2024-2025学年人教版八年级英语下册
- 四年级下数学单元教案亿以内数的认识和读写-苏教版
- GB/T 4857.11-2005包装运输包装件基本试验第11部分:水平冲击试验方法
- 4.2《产生气体的变化》优质课件
- 小学生国学知识竞赛题库和答案
- 渗透测试授权书
- 景观人行吊桥(悬索桥)施工组织设计
- 八大特殊作业试题及答案
- 车辆转让确认书
- 教学教案检查记录表
- 二氧化碳爆破方案
- 人工智能第2章知识表示课件
- 生活垃圾填埋场设计规范
评论
0/150
提交评论