围棋游戏的设计与实现(程序+任务书+说明书+外文翻译+演示文稿)_第1页
围棋游戏的设计与实现(程序+任务书+说明书+外文翻译+演示文稿)_第2页
围棋游戏的设计与实现(程序+任务书+说明书+外文翻译+演示文稿)_第3页
围棋游戏的设计与实现(程序+任务书+说明书+外文翻译+演示文稿)_第4页
围棋游戏的设计与实现(程序+任务书+说明书+外文翻译+演示文稿)_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

i围棋游戏的设计与实现摘要围棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏。主要完成了人机对战和玩家之间联网对战2个功能。网络连接部分为Socket编程应用,客户端和服务器端的交互用ClassMessage定义,有很好的可扩展性,客户端负责界面维护和收集用户输入的信息,及错误处理。服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户列表。在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高电脑AI方案,如递归算法、电脑学习等。算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。关键词:围棋,信息自动化,游戏,javaiiDesignandImplementationofchessgameABSTRACTGoasachesstournamentsportisverypopularinthefolk,inordertoknowtherenjurulesandtechniques,andartificialintelligenceresearchsimple,decidedtouseJavagobanggamedevelopment.Maincompletedtheman-machinebetweennetworkingandmultiplayergamewithtwofunctions.NetworkconnectionpartsforSocketprogrammingapplications,clientandtheservertointeractwiththeClassMessagedefinition,hasgoodscalability,theclientisresponsibleforthemaintenanceandcollectinformationofuserinputinterface,anderrorhandling.Thebasicinformationoftheservermaintenanceonlineusersandanytwoagainsttheusersinformationboard,dynamicmaintenanceuserlist.Throughdeepsearchandvaluationinman-machinegamemodule,toimprovecomputerchessplayersintelligence.Analysisofseveralfactorsthathaveeffectontheprecisionofthevaluationmodule,andputsforwardsomeimprovetheprecisionofthemethod,aswellastothenumberofnodesinthesearchtocomparethem,onthebasisofthesealgorithmsanalyzesomeimproveAIscheme,suchasrecursivealgorithm,computerlearning,etc.Algorithmresearchhelpstounderstandtheprogramstructure,enhancethelogicalthinkingability,intheotherartificialintelligencealsohasagreatreferencefunction.Keywords:Go,InformationAutomation,Games,Javaiii目录摘要.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中文译文.47iv0第1章绪论1.1背景围棋是一种智力游戏,起源于中国。中日韩是现今围棋的三大支柱,但近年来日本围棋逐步衰弱,形成了中韩争霸的局面。围棋是中华民族传统文化中的瑰宝,它体现了中华民族对智慧的追求,古人常以“琴棋书画”论及一个人的才华和修养,其中的“棋”指的就是围棋。被人们形象地比喻为黑白世界的围棋,是我国古人所喜爱的娱乐竞技活动,同时也是人类历史上最悠久的一种棋戏。由于它将科学、艺术和竞技三者融为一体,有着发展智力,培养意志品质和机动灵活的战略战术思想意识的特点,因而,几千年来长盛不衰,并逐渐地发展成了一种国际性的文化竞技活动。围棋是一种策略性二人棋类游戏,使用格状棋盘及黑白二色棋子进行对弈。目前围棋流行于亚太,覆盖世界范围,是一种非常流行的棋类游戏。中国围棋规则是数子法,围棋的本质是:谁的占地面积大谁获胜。围棋的规则十分简单,却拥有十分广阔的落子空间,使得围棋变化多端,比其它棋类复杂深奥。这就是围棋的魅力所在。下围棋对人脑的智力开发很有帮助,可增强一个人的计算能力、创造能力、思维能力、判断能力,也能提高人的注意力和控制力。下围棋对儿童少年的智力发展起到积极作用,使他们能更好的分析事物。Java语言是当今最为流行的程序设计语言之一作为一门非常优秀和极为健壮的编程语言,它同时具有的面向对象,与平台无关,分布式应用,安全,稳定和多线程等优良的特征,使用Java语言,不仅可以开发出功能强大的大型应用程序,而且Java语言本身突出的跨平台的特性也使得它特别适合于Internet上的应用开发,可以这样说,Java的出现使得所开发的应用程序“一次编写,处处可用”的实现成为了可能。近来随着计算机的快速发展,各种各样的电脑游戏层出不穷,使得我们能有更多的娱乐项目,而棋类游戏能起到锻炼人的思维和修身养性的作用,而且棋类游戏水平颇高,大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表。越来越多的具有智能的机器进入了人类的生活,人工智能的重要性如今显而易见。自己对人工智能比较感兴趣,而围棋游戏程序的开发实现这个课题,正好提供给我这样一个研究的机会,通过对人工智能中博弈方面的研究(人机对弈),让我在简单的人机对弈全局设计,以及具体到相关算法上有了深入的了解。人工智能属于计算机科学的领域,它以计算机技术为基础,近几十年来,它的理论和技术已经日益成熟,应用领域也正在不断扩大,显示出强大的生命力。人工智能大致可以分成几个学科,它们每一个都是独特的,但是它们常常又互相结合起来完成设计任务,这时,这些学科之间的差别就变的很模糊。人工智能在专家系统,自然语言理解,自动定理证明,自动程序设计,人工智能在机器人学、模式识别、物景分析、数据库的智能检索、机器下棋(实质上是博弈论问题)和家用电器智能化等领域都有广泛的应用。而这个课题就是和人工智能中的博弈论领域紧密相关的。这个题目核心是人工智能和Socekt编程,。并且人工智能中的博弈部分,由于采用了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技术,正在各行1各业广泛渗透。智能已经成为当今各种新产品、新装备的发展方向。所以,趁着这个机会,对人工智能中比较容易实现的人机博弈进行了解研究学习,也是很实用且很有必要的。1.2设计内容此设计是一个小游戏(围棋)的实现,主要运用了GUI(用户图形界面)API(应用程序借口)来实现。此程序没有用到图片的引用,棋盘和棋子的设计完全是应用函数绘制,再加入复选框,按钮,标签及实现本游戏的用户界面布局。在页面上通过单纯的JCreator实现的下棋程序,能够实现提子,打劫等简单的下棋功能。更好的掌握java编程以及布局和设计。通过课程设计把课堂上讲的内容融会贯通,学会设计程序、开发应用软件、开发系统软件等各项工作。通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。一、棋盘盘面有纵横各十九条等距离、垂直交叉的平行线,共构成1919361个交叉点(以下简称为“点”)。在盘面上标有几个小圆点。称为星位,中央的星位又称“天元”。二、棋子棋子分黑白两色。均为扁圆形。棋子的数量以黑子181、白子180个为宜。三、围棋的下法1、对局双方各执一色棋子,黑先白后,交替下子,每次只能下一子。2、棋子下在棋盘的点上。3、棋子下定后,不得向其他点移动。4、轮流下子是双方的权利,但允许任何一方放弃下子权。四、棋子的气一个棋子在棋盘上,与它直线紧邻的空点是这个棋子的“气”。棋子直线紧邻的点上,如果有同色棋子存在,则它们便相互连接成一个不可分割的整体。它们的气也应一并计算。棋子直线紧邻的点上,如果有异色棋子存在,这口气就不复存在。如所有的气均为对方所占据,便呈无气状态。无气状态的棋子不能在棋盘上存在,也就是第四条提子。五、提子把无气之子提出盘外的手段叫“提子”。提子有二种:1、下子后,对方棋子无气,应立即提取。2、下子后,双方棋子都呈无气状态,应立即提取对方无气之子。六、计算胜负1、贴3又3/4子的规则第一步,把死子捡掉。第二步,只数一方围得点(叫做目)并记录下来(一般围得点以整十目为单位),再数刚才那一方的子数并记录下来,再把目数和子数加起来。2第三步,如果数的是黑棋,再减去3又3/4子,如果数的是白棋,再加上3又3/4子。第四步,结果和180又1/2(棋盘361个点的一半)比较,超过就算胜,否则判负。2、让先与让子让先不贴目,让子要贴还让子数的一半(就当被让方是预先收了单官)。3第2章围棋对弈系统2.1围棋概述网络围棋在中国的出现几乎跟随着互联网同步成长,1998年,联众率先推出了网络围棋对弈。几年来各大网络围棋平台先后上线,出身各异,水平也参差不齐。根据网络资料显示,截止2007年底,中国网络围棋平台平均在线人数达6万人。大型的游戏平台如QQ游戏、联众游戏中都有围棋游戏。也就是说QQ围棋、联众围棋都是镶嵌在其游戏平台之上。依靠游戏平台用户人数的优势,这两个平台围棋用户人数占据了网络围棋用户的半数之多。但根据专业人士分析:这部分用户无论在产品使用深度和对围棋的认知上是绝对的新手,浅尝辄止,他们大多是过客。同时他们的围棋软件本身也不够专业。专业的网络围棋平台才是中国网络围棋普及和发展的出路。目前国内的专业网络围棋平台,大致可分使用韩产软件和国产软件两大类。国内专业围棋平台的领军人物弈城、TOM,便是使用韩产软件的代表。两平台能够实现中韩对垒的特性,为他们吸引了不少高水平的棋手,并受到棋友的广泛认可。但他们同样有一个死穴,就是两家皆为购买韩国软件,不掌握主动权,因此根本无法保证软件的及时更新,容易受制于韩方。“弈城事件”便将这个致命缺点暴露无疑。经典的围棋系统有:Handtalk,Goemate,Wulu,他是陈志行的作品,曾多次获得过冠军。在他的指导下一个研究小组编写了乌鹭(WUIU),也在比赛中取得过亚军。Handtalk是用汇编语言编写的,执行速度快,程序本身也不大。由于程序并不大,可以推侧出其所用到的模式资料也不多。Handtalk在大多数的情况下都不会失误,作者本人曾提到他是用到一种类似人类棋手在下围棋时常用到的手割法来帮助判断的。Handtalk与其它的程序明显不同的地方是它的攻杀能力特别强,在大多数的比赛中,都是通过吃掉对方几块棋而获胜。这是由于程序的棋块安危判断能力、形势判断能力、眼位判断能力和模式匹配能力都很强的关系.这些系统的好坏,跟设计者的棋力关系很大。2.1.1围棋定义围棋是人生的模拟。开局时,盘上一片空白,就好像一个刚刚有了自觉意识的小孩,睁开了懵懂的双眼,开始了自己的人生之路。开局时,你可以有各种选择,自由度最大,走哪一步都不会让你立刻输掉。布局基本上是兴趣的显示,有喜欢大模样的,那是寄希望于未来的做法;有现实地捞空的;有顺应对方的思路,不知不觉中达到自己目的的;也有处处与对方作对,即使自己不爽,也要给对方添堵的。4由于棋盘的广大,不可能面面俱到地行棋。过程中,对局者不断地在判断、取舍,好像人生开始在选择自己的道路了。看着这里想要,那里也想要,可是没法面面俱到,终究只能选取一条路。有时候,你的招法对路,越走越畅,有的时候就有问题,想要的没要到,越下越添堵。优势时,好比人生得意时,心情很爽,最好一直就这么下去;劣势时,千方百计寻找对手的破绽,伺机翻盘。心理毅力强的人,总能把弦绷得紧紧的,一直像甲鱼一样咬住对手;心理软弱的人,很早就放弃抵抗,认输投降。优势时被对方翻盘了,就好像原本胜券在握的一件事情,被自己搞砸了,懊悔痛恨都没有用;大败的棋,忽然找到对手的漏勺又赢了回来,就好像本已被逼到绝境,却又咸鱼翻生,大获全胜,心情之爽,难以表达!由于围棋的棋盘相对比较广大,过程也较反复,一盘棋下来,通常势均力敌的对手都会有不止一次的获胜机会。这种翻来覆去的体验,非常象人生经历的一种浓缩、抽象。人生,是不可重复的,因此在迈出想要尝试的一步时,有可能随之而来的,是非常惨痛的代价。而围棋的过程,可以让你在做出种种尝试后付出最少的代价大不了输一盘棋么?推掉再来就是了。围棋还含有艺术、哲学的成份,以及创造世界的哲理。通过学习围棋,你不仅享受到其中的乐趣,而且还会开拓一个更加美好的世界。2.1.2开发围棋的任务及目的随着Intemet的普及,网络游戏己经成为大家耳濡目染的新生事物。网络游戏从出现到现在发展的时间很短,但是其发展速度却非常之快。现在,可以说网络游戏已经成为人们休闲、娱乐的有效方式。网络游戏种类很多,目前主要分战略类、RPG类、棋牌类等几种,常见的棋牌类游戏有中国象棋、国际象棋、围棋、桥牌、拱猪、麻将等。网络游戏具有如下特征:2.2主要系统介绍主要功能包括:能实现联机对战,和单机版游戏对战。开始游戏之后:1、用户双方自行选择白棋和黑棋。2、任何一方可以随时随地认输,游戏结束。4、要实现围棋最基本吃掉对方的法则。此设计为本人原创作品。其中包括:源程序,可执行程序,论文,录像,使用说明。5(1)有一个或多个游戏服务器启动特定游戏服务;(2)游戏者到游戏网站下载客户端程序并申请游戏账号。然后启动客户端程序通过某种网络协议连接游戏服务器。(3)客户端负责处理客户端显示和操作界面,具有简单的逻辑处理功能力,同时负责接收发送与服务器端交互的数据包。(4)服务器程序负方处理服务器端逻辑、游戏逻辑、客户之间的网络信息传递,以及数据库之间的数据读取保存工作。同时服务器端还要承担客户端数据的接收、转发工作。(5)网络游戏常用的网络协议有Internet的TCP/IP协议、适用于局域网(如红色警报联网等采用)的IPX协议。虽然目前很多围棋游戏正在运行,但是使用java平台开发的游戏少之又少,这就使得围棋客户端的运行平台十分有限,不能满足今后发展的需求,如移动客户端,就基本上没有。因此开发一套基于java的围棋系统十分必要。2.3本章小结这一章介绍了当前围棋应该具备的功能模块,并提供了市面上比较流行的围棋系统作为参考。在这一章中,我们可以了解什么是围棋系统,当前围棋系统的市场需求,还有一个围棋系统应该的开发目标。6第3章围棋对弈系统的设计这一章时介绍开发环境和用到的开发工具,系统主要的功能设计,系统的数据流程图。3.1系统需求分析1.设计流程(图3-1)图3-1设计流程图72.运行流程(带流程图3-2)图3-2运行流程图3.2系统开发及运行环境硬件平台:惠普6450B软件平台:操作系统:Windows7旗舰版。开发工具包:JDKVersion1.6.0_13MyEclipse8.5分辨率:最佳效果1024768像素。3.3系统主要功能要求系统设计目标如下:主要功能包括:1、能够在局域网上实现多人在线对战。2、能够实现单机版游戏对战。开始游戏之后:1、用户双方选择白棋和黑棋。2、任何一方可以随时随地认输,游戏结束。3、要实现围棋最基本吃掉对方的法则。此设计为本站原创作品。其中包括:源程序,可执行程序,论文,录像,使用说8明。3.4系统总体结构如图3-3系统功能结构图图3-3系统功能结构图privatevoidjbInit()throwsExceptionchoice1.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;/是否继续监听的标志9this.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的使用同时,程序在编写完毕之后还有很多地方需要完善。例如:可以把另一方选择为电脑方,让电脑自动下,也可以给游戏添加背景音乐;甚至可以修改成网络游戏,用户可以在网上对战。总之,有很多地方可以扩充和完善。在此次设计过程中我也学到了许多了关于计算机方面的知识,编程能力有了很大的提高。10第4章围棋对弈系统的具体实现界面是系统之间最直接的交互界面,界面的友好性体现了软件设计的质量,并在很大程度上决定了软件是否成功。4.1界面设计系统主界面如图4-1(修改前),图4-2(修改后)图4-1主界面修改前/画棋盘voidpaintChessboard(Graphicsg,PointstartPoint,intinterval)intpX=startPoint.x;intpY=startPoint.y;11intLINELENGTH=interval*18;inti;for(i=0;i19|p.x19)returnfalse;intcolor;Oneone;one=(One)(this.panelGo.myHash.get(p);color=one.color;if(color!=0)returnfalse;24returntrue;voidpanelGo_mouseClicked(MouseEvente)if(this.isSingle()this.doSingle();elsethis.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()25this.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);/消除前一个黄点voidremoveLastMousePoint(PointthatPoint,PointthisPoint)if(thatPoint.x!=thisPoint.x|thatPoint.y!=thisPoint.y)Graphicsg=this.panelGo.getGraphics();26if(this.yellowPoint!=null&this.myImage!=null)g.drawImage(this.myImage,this.yellowPoint.x*20-8,this.yellowPoint.y*20-8,16,16,null);this.yellowPoint.x=1000;/不在范围内,就一边去this.yellowPoint.y=1000;/构成所需要的ImagevoidcreateMyImage(Graphicsg,PointthisPoint,intcolor)intpx=thisPoint.x;intpy=thisPoint.y;ColormyColor=this.panelGo.getBackground();if(px=1&py=1&color=0)/四个角g.setColor(myColor);g.fillRect(0,0,16,16);g.setColor(Color.black);g.drawLine(8,8,8,16);g.drawLine(5,5,5,16);g.drawLine(8,8,16,8);g.drawLine(5,5,16,5);elseif(px=1&py=19&color=0)g.setColor(myColor);g.fillRect(0,0,16,16);g.setColor(Color.black);g.drawLine(8,8,8,0);g.drawLine(8,8,16,8);g.drawLine(5,11,16,11);g.drawLine(5,11,5,0);elseif(px=19&py=1&color=0)g.setColor(myColor);g.fillRect(0,0,16,16);g.setColor(Color.black);g.drawLine(8,8,8,16);g.drawLine(8,8,0,8);g.drawLine(11,5,11,16);g.drawLine(11,5,0,5);27elseif(px=19&py=19&color=0)g.setColor(myColor);g.fillRect(0,0,16,16);g.setColor(Color.black);g.drawLine(8,8,8,0);g.drawLine(8,8,0,8);g.drawLine(11,11,11,0);g.drawLine(11,11,0,11);elseif(px=1&color=0)/四个边g.setColor(myColor);g.fillRect(0,0,16,16);g.setColor(Color.black);g.drawLine(8,8,16,8);g.drawLine(8,0,8,16);g.drawLine(5,0,5,16);elseif(px=19&color=0)g.setColor(myColor);g.fillRect(0,0,16,16);g.setColor(Color.black);g.drawLine(8,8,0,8);g.drawLine(8,0,8,16);g.drawLine(11,0,11,16);elseif(py=1&color=0)g.setColor(myColor);g.fillRect(0,0,16,16);g.setColor(Color.black);g.drawLine(8,8,8,16);g.drawLine(0,8,16,8);g.drawLine(0,5,16,5);elseif(py=19&color=0)g.setColor(myColor);g.fillRect(0,0,16,16);g.setColor(Color.black);g.drawLine(8,8,8,0);28g.drawLine(0,8,16,8);g.drawLine(0,11,16,11);/八个小黑点elseif(color=0&(px=4&py=4)|(px=4&py=10)|(px=4&py=16)|(px=10&py=4)|(px=10&py=10)|(px=10&py=16)|(px=16&py=4)|(px=16&py=10)|(px=16&py=16)g.setColor(myColor);g.fillRect(0,0,16,16);g.setColor(Color.black);g.drawLine(0,8,16,8);g.drawLine(8,0,8,16);g.fillOval(5,5,6,6);elseif(color=0)g.setColor(myColor);g.fillRect(0,0,16,16);g.setColor(Color.black);g.drawLine(0,8,16,8);g.drawLine(8,0,8,16);/单机版走步voiddoSingle()if(this.stepColor)this.panelGo.doStep(this.yellowPoint,1);elsethis.panelGo.doStep(this.yellowPoint,2);if(!this.panelGo.errorFlag)/如果不违例,则换颜色this.stepColor=!this.stepColor;this.paintThisColor(this.stepColor);elsethis.panelGo.errorFlag=false;this.yellowPoint.x=1000;/刚走的子不至于删掉this.yellowPoint.y=1000;29/联机版走步voiddoMultiple()intcolor;if(this.choice1.getSelectedItem().equals(黑)color=1;elsecolor=2;this.panelGo.doStep(this.yellowPoint,color);/如果走法不对,返回if(this.panelGo.errorFlag)this.panelGo.errorFlag=false;return;this.panelGo.setEnabled(false);Stringmessage=this.getMessage(color,this.yellowPoint.x,this.yellowPoint.y);this.writer.println(message);this.yellowPoint.x=99;/刚走的子不至于删掉,还要可以解析this.yellowPoint.y=99;/处理发送字符串StringgetMessage(intcolor,intx,inty)StringstrColor=String.valueOf(color);StringstrX;StringstrY;/如果单数的话,就加一位if(x10)strX=0+String.valueOf(x);elsestrX=String.valueOf(x);if(y10)strY=0+String.valueOf(y);elsestrY=String.valueOf(y);returnstrColor+strX+strY;voidthis_windowClosing(WindowEvente)this.dispose();System.exit(0);30voidcheckbox2_mouseClicked(MouseEvente)this.enableLink();voidcheckbox1_mouseClicked(MouseEvente)this.disableLink();voidbutton1_actionPerformed(ActionEvente)this.goToLink(this.textField1.getText().trim(),this.PORT);/主动连接serverSocketvoidgoToLink(StringhostName,intport)trythis.stopFlag=true;this.sendSocket=newSocket(hostName,port);this.panelGo.showError(连接成功!);this.choice1.setEnabled(true);this.button1.setEnabled(false);this.checkbox1.setEnabled(false);this.checkbox2.setEnabled(false);this.textField1.setEnabled(false);this.writer=newPrintWriter(this.sendSocket.getOutputStream(),true);newListen(sendSocket,this).start();catch(IOExceptionioe)this.panelGo.showError(您是赢家!);/开始时根据颜色画己方颜色voidpaintMyColor()Graphicsg=this.label2.getGraphics();if(this.choice1.getSelectedItem().equals(黑)g.fillOval(20,10,30,30);elseg.setColor(Color.white);g.fillOval(20,10,30,30);g.setColor(Color.black);g.drawOval(20,10,30,30);31/单机版画每步颜色voidpaintThisColor(booleanwhatColor)Graphicsg=this.label2.getGraphics();if(whatColor)g.fillOval(20,10,30,30);elseg.setColor(Color.white);g.fillOval(20,10,30,30);g.setColor(Color.black);g.drawOval(20,10,30,30);32译文资料TheJavaI/OSystemCreatingagoodinput/output(I/O)systemisoneofthemoredifficulttasksforthelanguagedesigner.Thisisevidencedbythenumberofdifferentapproaches.Thechallengeseemstobeincoveringalleventualities.NotonlyaretheredifferentsourcesandsinksofI/Othatyouwanttocommunicatewith(files,theconsole,networkconnections,etc.),butyouneedtotalktotheminawidevarietyofways(sequential,random-SQLServer2000,buffered,binary,character,bylines,bywords,etc.).TheJavalibrarydesignersattackedthisproblembycreatinglotsofclasses.Infact,therearesomanyclassesforJavasI/Osystemthatitcanbeintimidatingatfirst(ironically,theJavaI/Odesignactuallypreventsanexplosionofclasses).TherewasalsoasignificantchangeintheI/OlibraryafterJava1.0,whentheoriginalbyte-orientedlibrarywassupplementedwithchar-oriented,Unicode-basedI/Oclasses.InJDK1.4,thenioclasses(for“newI/O,”anamewellstillbeusingyearsfromnow)wereaddedforimprovedperformanceandfunctionality.Asaresult,thereareafairnumberofclassestolearnbeforeyouunderstandenoughofJavasI/Opicturethatyoucanuseitproperly.Inaddition,itsratherimportanttounderstandtheevolutionhistoryoftheI/Olibrary,evenifyourfirstreactionis“dontbothermewithhistory,justshowmehowtouseit!”Theproblemisthatwithoutthehistoricalperspective,youwillrapidlybecomeconfusedwithsomeoftheclassesandwhenyoushouldandshouldntusethem.ThischapterwillgiveyouanintroductiontothevarietyofI/OclassesinthestandardJavalibraryandhowtousethem.TheFileclass33Beforegettingintotheclassesthatactuallyreadandwritedatatostreams,welllookatautilityprovidedwiththelibrarytoassistyouinhandlingfiledirectoryissues.TheFileclasshasadeceivingname;youmightthinkitreferstoafile,butitdoesnt.Itcanrepresenteitherthenameofaparticularfileorthenamesofasetoffilesinadirectory.Ifitsasetoffiles,youcanaskforthatsetusingthelist()method,whichreturnsanarrayofString.Itmakessensetoreturnanarrayratherthanoneoftheflexiblecontainerclasses,becausethenumberofelementsisfixed,andifyouwantadifferentdirectorylisting,youjustcreateadifferentFileobject.In

温馨提示

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

评论

0/150

提交评论