计算机科学系课程设计报告基于Java的五子棋游戏.doc

上传人:sccc 文档编号:4863864 上传时间:2023-05-20 格式:DOC 页数:28 大小:1.82MB
返回 下载 相关 举报
计算机科学系课程设计报告基于Java的五子棋游戏.doc_第1页
第1页 / 共28页
计算机科学系课程设计报告基于Java的五子棋游戏.doc_第2页
第2页 / 共28页
计算机科学系课程设计报告基于Java的五子棋游戏.doc_第3页
第3页 / 共28页
计算机科学系课程设计报告基于Java的五子棋游戏.doc_第4页
第4页 / 共28页
计算机科学系课程设计报告基于Java的五子棋游戏.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《计算机科学系课程设计报告基于Java的五子棋游戏.doc》由会员分享,可在线阅读,更多相关《计算机科学系课程设计报告基于Java的五子棋游戏.doc(28页珍藏版)》请在三一办公上搜索。

1、 南开大学滨海学院计算机科学系课程设计报告 - 27 - 南开大学滨海学院计算机科学系课 程 设 计 报 告 课题名称:基于Java的五子棋游戏 专 业:数字媒体 班 级:2班 学号姓名: 指导教师: 完成日期:2011年6月21日目录第一章 绪论21.1背景介绍21.2研究价值2第二章 开发工具与语言简介32.1 Java简介32.2 Eclipse开发环境简介4第三章 五子棋的相关知识53.1 五子棋简介53.2 五子棋基本规则5第四章 程序设计流程及具体实现64.1 MVC设计模式64.2 程序设计104.2.1 单机五子棋104.2.2 判断输赢的算法134.2.3 交互界面的绘制13

2、4.2.4 设置悔棋134.2.5 储存棋盘信息和加载144.2.5 TCP网路编程144.2.5 网络五子棋17第五章 在Windows平台下的发布与效果展示19第六章 总结与展望24致谢25摘要:随着计算机普及,网络的飞速发展,网络技术的成熟,计算机的发展为集办公、娱乐于一体新式工具。在这一背景下,网络游戏的需求与日俱增,五子棋作为传统游戏之一,其历史源远流长,而传统游戏的开发更符合用户的品味,更受用户的喜爱。使用JAVA语言开发的五子棋游戏程序,将五子棋游戏移植到网络中更符合现代人娱乐理念,满足用户异地自由选择游戏对手、实现单机和双人对战的游戏模式,也可以在游戏当中进行聊天,私聊、群聊等

3、功能,便于用户实时进行信息交流。同时,注意从游戏的图形界面上优化,使得JAVA五子棋游戏软件具有很强的可操作性。本文论述了用Java语言开发出的一款通俗易懂而充满乐趣的五子棋小游戏。Key Words:Gobang Double against single machine the Java language understandableAbstract: Along with the computer popularization, the rapid development of the network, the network technology maturity, the devel

4、opment of the computer for set office, entertainment in one new tool. In this context, the network games demand grows day by day, as a traditional game, one of Gobang its long history, and the development of the traditional game more accord with users are more taste, the users favorite.Use JAVA lang

5、uage development of the game program, will Gobang federation to transplant network game more accord with modern entertainment idea, meet user free choice different game opponent, and game mode, also can be in the middle of the game chat, private chat, group chat, and other functions, convenient for

6、the user to exchange of information in real time. At the same time, pay attention from the games graphical interface optimization, makes JAVA Gobang game software has very strong operation.This paper discusses the Java language with developed a straightaway and fun Gobang little game第一章:绪论1.1 背景介绍随着

7、科技突飞猛进的发展,电脑已经进入了家家户户,而现在越来越多的热门词汇也与电脑有了关系,与电脑有关的知识也越来越受学生的喜爱,很多学生在高考填写志愿时会选择与计算机有关的学科,如数字媒体技术,影视动画,网络编程等。同时,许多公司里的有关计算机软件开发的项目有越来越高的薪酬,计算机人才也是供不应求。当然,软件的日益更新和增加也不再满足人们的需求。于是,很多人便自己动手开发自己所需要的软件,只有自己才最清楚自己是需要什么样的软件。Java语言作为一种面向对象的编程语言,具有分布式,可移植,高性能,多线程等特点。而且与c+相比,它通俗易懂而且操作性更强,并且除去了指针等方面的要求。通过一定的学习,人们

8、可以使用Java开发工具开发出功能齐全,满足特殊需求的应用程序,对于学习者掌握一定的技能和开拓思维都有很大的帮助。五子棋游戏是一款较为常见的小游戏,通过双方下棋来实现胜负。我们小组制作的五子棋游戏是通过两种模式,单机和联网,让玩家自己来决定所需的游戏模式,然后进行游戏。并且其中可以自行选择黑棋或者白棋,并有悔棋和存盘等附加功能。在实现过程中学到了许多的专业知识,同时也巩固了在课堂上学的一系列知识。通过研究这一款益智游戏,可以自己动手实现想要的游戏效果。而且在开发研究过程中,我们可以复习所学过的许多Java语言知识,对所学的知识进行系统性复习,并在研究中得出了自己的心得体验。更可以在开发过程中得

9、到许多的乐趣,使知识有一定的提高。1.2 研究价值在系统地学习了Java语言后,我们小组准备自己动手制作一个五子棋的小程序,可以将学过的众多Java知识有效地结合起来进行综合地运用,在课本章程中,接口与多态,异常的处理,I/O操作,多线程和网络编程等知识都得到了一定的综合运用,而且可以对自己学过的技能能够进行检验,更可以全面复习有关的知识。在研究过程中虽然会遇到很多难题,但是通过自己找资料,与同学相互探讨、研究,然后将难题一一解决,是一件非常能够锻炼能力的事情。虽然做出来的五子棋没有网络上的如此精致,但是也是充满乐趣的一款游戏。从研究流程,设计棋盘到开发代码,都是自己动手制作。而且,可以学到更

10、多的新知识,在学习中得到更多的乐趣。在五子棋的实现价值方面相比之下是无法和围棋相比的,但刚好是这点,造就了五子棋在社会可推广的路。学棋不是为了出成绩,因为冠军永远只有一个。棋是培养习惯的一个载体。他的作用是为社会培养更多懂得思考他人的社会人才。由于五子棋比围棋简单易学,更符合目前社会的发展。所以他不需要是难度很大的规则。当然对不同层次的选手使用不同的规则也是可行的,关键看其产生的社会价值。在目前国内连基础培训都很少的时候,我想规则根本不需要考虑而对于曲子其本身来说,它的价值也是非凡的。有人说过,现阶段五子棋的价值主要体现在它的休闲性、趣味性,而并非复杂性、竞技性,五子棋现阶段还不被人熟知,更谈

11、不上职业化,但只要好好抓住了现阶段五子棋的价值进行发展,相信在不久五子棋就会逐步被广大群众所了解和认识,认识到它更深的价值,那时五子棋就不仅仅是简单的小游戏,职业化也并非天方夜谭了。相信这一天终会到来,因为五子棋本身的价值,因为古人的智慧,也因为你我的努力。第二章 开发工具与语言简介2.1 Java简介Java是一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言.在Java出现以前,Internet上的信息内容都是一些乏味死板的HTML文档。这对于那些迷恋于WEB浏览的人们来说简直不可容忍。他们迫切希望能在WEB中看到一些

12、交互式的内容,开发人员也极希望能够在WEB上创建一类无需考虑软硬件平台就可以执行的应用程序,当然这些程序还要有极大的安全保障。对于用户的这种要求,传统的编程语言显得无能为力,而SUN的工程师敏锐地察觉到了这一点,从1994年起,他们开始将OAK技术应用于WEB上,并且开发出了HotJava的第一个版本。当SUN公司1995年正式以Java这个名字推出的时候,几乎所有的WEB开发人员都想到:噢,这正是我想要的。于是Java成了一颗耀眼的明星,丑小鸭一下了变成了白天鹅。Java技术的重要性就不讲了,从最近流行的一个统计数据上来说,目前世界上编程语言Java 、C 、VB、C+依次排名前4位,这排名

13、本身不说明什么,但至少也是工业界对编程语言使用上一个侧面的反映。Java编程语言与众不同之处在于:Java程序既是编译型的(转换为一种称为Java字节码的中间语言),又是解释型的(JVM 对字节码进行解析和运行)。编译只进行一次,而解释在每次运行程序时都会进行。编译后的字节码采用一种针对JVM 优化过的机器码形式;解释器是JVM 的实现。Java具有众多优点,比如平台无关性,安全性,面向对象,健壮式,分布式等。与c+相比,Java去掉了其中的指针运算、结构、typedefs、#define、需要释放内存等功能,减少了平常出错的50%,让Java的语言功能很精炼。而且,因为Java很小,所以整个

14、解释器只需215K的RAM,并增加了一些很有用的功能。在internet方面,Java的出现实现了互动的页面,是一次伟大的革命。Java并不是为Internet、www而设计的,它也可以用来编写独立的应用程序。Java程序需要编译,它被放置在Internet服务器上,当用户访问服务器时,Java程序被下载到本地的用户机上,由浏览器解释运行。实际上有两种Java程序:一种Java应用程序是一个完整的程序,如Web浏览器。另一种Java小应用程序是运行于Web浏览器中的一个程序。Java程序和它的浏览器HotJava,提供了可让浏览器运行程序的方法。2.2 Eclipse开发环境简介Eclipse

15、 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组

16、成Eclipse Platform、JDT、CDT和PDE。JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,Eclipse Platform则是一个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。Eclipse Platform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。虽然大多数用户很乐于将 Eclipse 当作 Java IDE 来使用,但 Eclipse 的目标不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Enviro

17、nment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。 Eclipse SDK(软件开发者包)是Eclipse Platform、JDT和PDE所生产的组件合并,它们可以一次下载。这些部分在一起提供了一个具有丰富特性的开发环境,允许开发者有效地建造可以无缝集成到Eclipse Platform中的工具。Eclipse SDK由Eclipse项目生产的工具

18、和来自其它开放源代码的第三方软件组合而成。Eclipse项目生产的软件以 GPL发布,第三方组件有各自自身的许可协议。 Eclipse的基础是富客户机平台(Rich Client Platform, 即RCP)。RCP包括下列组件: 核心平台(启动Eclipse,运行插件) OSGi(标准集束框架) SWT(可移植构件工具包) JFace(文件缓冲,文本处理,文本编辑器) Eclipse工作台(即Workbench ,包含视图(views)、编辑器(editors)、视角(perspectives)、和向导(wizards) Eclipse采用的技术是IBM公司开发的(SWT),这是一种基于J

19、ava的窗口组件,类似Java本身提供的AWT和Swing窗口组件;不过IBM声称SWT比其他Java窗口组件更有效率。Eclipse的用户界面还使用了GUI中间层JFace,从而简化了基于SWT的应用程序的构建。Eclipse的插件机制是轻型软件组件化架构。在富客户机平台上,Eclipse使用插件来提供所有的附加功能,例如支持Java以外的其他语 言。 已有的分离的插件已经能够支持C/C+(CDT)、Perl、Ruby,Python、telnet和数据库开发。插件架构能够支持将任意的扩展加入到 现有环境中,例如配置管理,而决不仅仅限于支持各种编程语言。Eclipse的设计思想是:一切皆插件。

20、Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。Eclipse基本内核包括:图形API (SWT/Jface), Java开发环境插件(JDT ),插件开发环境(PDE)等。第三章 五子棋的相关知识3.1五子棋简介五子棋是一种两人对弈的纯策略型棋类游戏,相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。在上古的神话传说中有“女娲造人,伏羲做棋”一说,增山海经中记载:“休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵。”李善注引三国魏邯

21、郸淳艺经中曰:“棋局,纵横各十七道,合二百八十九道,白黑棋子,各一百五十枚”。可见,五子棋颇有渊源。亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来。这种非游戏容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。在古代,五子棋棋具虽然与围棋相类同,但是下法却是完全不同的。正如辞海中所言,五子棋是“棋类游戏,棋具与围棋相同,两人对局,轮流下子,先将五子连成一行者为胜。”,至于国人中有将五子棋称为“连五子”、“连珠”,也许是源于史书中“日月如合璧,五星如连珠(汉书)”。再说说“连珠”的起源,连珠源于日本,是日本

22、棋手对五子棋改良的结果。据日本史料文献介绍,中国古代的五子棋先由中国传到高丽(朝鲜),然后于公元1688年至1704年日本的元禄时代再从高丽传到日本,最初在皇宫和贵族大家庭中流行,到元禄末期,开始在民间盛行。1899年,经过公开征名,“连珠”这一名称才被正式确定下来。目前,职业连珠在国际发展迅速,1988年,国际连珠联盟(RIF)在瑞典创立,成员国包括日本、俄罗斯、瑞典、亚美尼亚、阿塞拜疆、爱沙尼亚、法国、拉脱维亚、白俄罗斯等9个国家,总部设在瑞典的斯德哥尔摩。现在全世界已有数十个国家和地区成为国际连珠联盟的正式会员,中国于1996年正式加入。就各国五子棋的整体水平而言,目前欧洲实力最强,特别

23、是俄罗斯和爱沙尼亚,而日本是传统的连珠强国。中国的连珠水平则迅猛增长,特别是连珠研究与网络连珠水平天下无敌,但更能确证实力的要到正式的大赛中加以验证。3.2五子棋基本规则玩家根据自身等级和习惯,可以自由选择不同的游戏房间。其游戏规则也有所不同。详细分为三种棋室:普通棋室、国标棋室、职业棋室。其中普通棋室不受任何规则限制;国标棋室有禁手规则限制;而职业棋室则在国标棋室的基础上增加“三手交换”和“五手两打”两项规则。(三手交换:是指黑棋下盘面第3着棋后,白方在应白之前,如感觉黑方棋形不利于己方,可提出交换,即执白棋一方变为执黑棋一方,而黑方不可以不换。五手两打:是指黑棋在下盘面上关键的第5手棋时,

24、必须下两步棋,让白棋在这两步棋中任选一步,然后再继续对弈。)国际比赛规则规定:对局中如黑方出现禁手,白方应立即指出禁手点,黑方即负。如白方在黑方出现禁手后,又落一步白子,黑棋禁手则不成立了。 所以 在有禁手的房间里,如果黑方出现禁手,白方应立即按下禁手按钮 。程序会判黑方负。如果这时白方又在棋盘上落一子,黑棋禁手则不成立了。为了简化用户对禁手按钮的使用,也有走禁手就输和禁手不能落子规则的房间,顾名思义不多介绍。虽然采取了禁手的限制,黑棋先行仍有优势,黑棋仍可以必胜。所以如果用户是高段位的棋手,或者想成为高手一定要选择国际上比赛选用的比赛标准,即“三手交换,五手两打”。五子棋行棋顺序: 黑先、白

25、后,从天元开始相互顺序落子。五子棋判断胜负 : 最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。 黑棋禁手判负(Lose),白棋无禁手。黑棋禁手包括“三、三”(Double Three)(包括“四、三、三”)、“四、四”(Double Four)(包括“四、四、三”)、“长连”(Overline)。黑棋只能以“四、三”取胜。 如分不出胜负,则定为平局(Draw)。 对局中中途退场判为负。 五连与禁手同时形成,先五为胜。 黑方禁手形成时,白方应立即指出。若白方未发现或发现后未指明而继续应子,则不能判黑方负。 时间限定:每方20分钟包干,然后1分钟读秒。简明职业连珠五子棋比赛规则的解

26、释:1 、五子棋是两个人之间进行的竞技活动,由于对黑方白方规则不同,黑棋必须先行。2 、五子棋专用盘为 1515 ,五连子的方向为横、竖、斜。3 、禁手是对局中被判为负的行棋手段。白棋无禁手。 4 、在棋盘上以对局双方均不可能形成五连为和棋。5 、在对局中,以在盘上落下的子又拿起来为拔子,判负。在对局中,一方自行终止比赛,判负。6 、黑方在落下关键的第五子即形成五连的同时,又形成禁手。此时因黑方已成连五,故禁手失效,黑方胜。7 、所谓黑方形成禁手,是指黑方一子落下同时形成两个或两个以上的活三、冲四及长连禁手。此时,白方应立即向黑方指出禁手,自然而胜。第四章 程序设计思路4.1 MVC设计模式M

27、VC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层模型层、视图层、控制层。 MVC模式视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和 Applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。比如一个订单的视图只接受来自模型

28、的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难。对一个开发者来说,就可以专注于业务模型的设计。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重

29、要,这也是判断开发人员是否优秀的设计依据。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。我们可以用对象编程来做比喻,MVC定义了一个顶级类,告诉它的子类你只能做这些,但没法限制你能做这些。这点对编程的开发人员非常重要。 业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据 保存(持续化)。比如将一张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。 控制(Controller)可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户

30、的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理。例如,用户点击一个连接,控制层接受请求后, 并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。 模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是

31、一种模型的变化-传播机制。模型、视图、控制器三者之间的关系和各自的主要功能。运行游戏游戏重置 游戏初始化用户界面 白棋赢 黑棋赢人先 电脑先电脑黑棋人选白棋人选黑棋电脑白棋 判断Control类控制台中心NetworkHelper网络服务器网络服务器ChessModel类棋子模型内嵌方法Client类客户端Sever类服务器端Chess类棋子模型GobangBox类交互视图Jpaneup基本控件布局MyPanel棋子棋盘绘制在五子棋MVC模式中control类是整个程序的灵魂,控制各个部门的协调,及时反馈各方的信息。在GobangBox是整个视图窗口,通过可视化编辑添加了Jpanelup面板。

32、这个面板初始时为不可视,在网络对战模式中,修改为可见,以便用户连接和创建连接网络。Mypanel是一个画板。用来绘制棋盘和棋子。通过repaint()函数来重刷面板。ChessModel类是MVC中的M,即模式,内嵌了以棋子为类型的对象数组,以及一系列和棋子相关联的操作,例如下棋,悔棋,保存,等。对象和对象的操作封装成一个chessmodel类得数据结构。NetworkHelper网络类是MVC的扩展,封装了客户端和服务器端网络连接的方法。4.2 程序基本框架4.2.1 单机五子棋开始单机模式下棋落子刷新MyPanel更新chessmodel的状态值本地硬盘文件读入绘制棋盘,设置panel背景

33、保存判断是否五子连珠加载游戏结束关闭游戏悔棋默认模式Who win函数调用保存棋子状态为硬盘文件单机模式的设计主要集中在MVC的设计,以及判断五子连珠的算法。在GobangBox和control以及mypanel类中都有一个getInstance函数来返回各个类的实例对象。这样control就可以任意调用各个类中的变量和函数。Control类:变量:intuserColour记录用户棋子颜色intparterColour记录对方棋子颜色booleanturn在单机模式中,控制棋子的黑白替换booleansiglemode判断是否为单机模式booleannetmode判断是否为网络模式boole

34、anpartputchess在网络模式中,判断是否对方在下棋booleanenable若对方在下棋,enable为假,则我方不能下棋booleanisServer判断是否是服务器booleanisClient判断是否是客户端Servers服务器对象Clientc客户端对象Controlinstance返回自身实例句柄主要方法:setTure方法由布尔值turn来控制黑白棋子替换。这个方法只有在单机模式才能调用,在网络模式中其无效。userPutChess方法是用户下棋时调用。由control来调用ChessModel中的setChess方法,并调用MyPanel中的repaint方法重画画板。

35、在单机模式中,用户每下过一次子后就要setturn来替换用户所持棋子,而在网络模式中,要判断enable是否为真,如果为真才可下子,在另一方为黑子的情况下是不能先下子的。并且在另一方放子之前不能连下两子。这些都是又enable来控制的。getUserColour和setUserColour方法是用来获得和设置用户棋子颜色。reBack和reStart分别是调用ChessModel中的悔棋和重新开始,并重绘画板。Respond方法是在网络模式中一方请求悔棋时,用户是否同意悔棋请求。ChessModel类:变量:intblack黑子intwhite白子intspace无子intwidth棋盘宽in

36、theight棋盘高Stackst堆栈,若悔棋,入栈ChessChessboard棋子数组,每个对象为chess方法:getChess和setChess方法返回和设置,chessboardrowcol对象的棋子状态。在setChess时把chessboardrowcol的棋子状态入栈。Whowin方法判断是否五子连珠。Chesspush把棋子的行列值入栈。ChessBack棋子的列出栈,行出栈。并把chessboardrowcol的棋子状态设置为space。save()和load()方法用来保存和载入未完成的棋局。Chess类内嵌int类型chessstate。把棋子状态和棋子有机绑定。Gob

37、angBox类布局结构如下:MyPanel类Initialize为棋盘界面的初始化。计算长宽值并对棋盘添加mousePressed监听事件,监听用户的点击位置,通过e.getX();和e.getY()来获得。drawChess和drawPanel方法画棋子和画棋盘。Compute方法是在初始时和用户变换界面大小时计算棋盘绘制的位置。4.2.2判断输赢的算法Whowin方法的设计从下子的那个位置,上下左右左上左下右上右下下八个方位来判断是否和新下的子同色。且连色不能中间断。用J1,J2,J3,J4四个int值来记录连子的个数,如果个数大于等于四个就返回真值。如果中间出现间断,则用break跳出循

38、环,不再计算下个棋子直接返回假值。4.2.3交互界面的绘制MyPanel中的绘制棋盘函数。g.drawLine在指定位置绘制线。g.drawString绘制字符串g.fillOval绘制圆。背景图的设置相对比较繁琐。有两种方式。1.在MyPanel中的paintComponent方法中绘制,调用画图方法g.drawImage(im,0,0,getWidth(),getHeight(),this);且在初始化函数中初始化im = Toolkit.getDefaultToolkit().getImage(pic/bc.jpg);把im用默认工具包来包装。2.在GobangBox底层加一个Jlabl

39、e,为Jlable加图像。this.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE)设置Jlabel在GobangBox的最底层。并把所有的panel和控件都设置为透明。把其setOpaque设置为(false);4.2.3设置悔棋悔棋的设置使用数据结构栈。栈(Stack)是操作限定在表的尾端进行的线性表。表尾由于要进行插入、删除等操作,所以,它具有特殊的含义,把表尾称为栈顶(Top),另一端是固定的,叫栈底(Bottom)。当栈中没有数据元素时叫空栈(Empty Stack)。在栈顶插入一个元素称为压栈或者进栈,从

40、栈顶删除一个元素称为出栈或者退栈。仍然用线性表的表示方法,则栈可以写为:S=(a1,a2,an-1)当指定一端为栈顶时,另一端就是栈底。栈底的元素个数n称为栈的长度。栈可以分为顺序栈和链栈。用一片连续的存储空间来存储栈中的数据元素,这样的栈称为顺序栈(Sequence Stack)。类似于顺序表,用一维数组来存放顺序栈中的数据元素。栈顶指示器top设在数组下标为0的端,top随着插入和删除而变化,当栈为空时,top=-1。链栈通常用单链表来表示,它的实现是单链表的简化。所以,链栈结点的结构与单链表结点的结构一样,如图3.3所示。由于链栈的操作只是在一端进行,为了操作方便,把栈顶设在链表的头部,

41、并且不需要头结点。使用pop()移除堆栈顶部的对象,并作为此函数的值返回该对象。使用push()把项压入堆栈顶部。在下棋的时候下子的行列值入栈。表明在此位置有子置入,如果选择悔棋,则出栈获取行列值把其值设置为空。刷新重绘面板即可。4.2.4储存棋盘信息和加载Java IO流的使用流定义: 任何有能力产出数据的数据源对象或者有能力接收数据的数据源对象。他屏蔽了实际的I/O设备处理数据的细节。流的分类: 按流向分为输入流和输出流,下面是对输入流和输出流的定义:输入流:在java中,可从中读出一系列字节的对象称为“输入流”。输出流:能向其中写入一系列字节的对象称为“输出流”。 按传输单位分为字节流(

42、Stream)结尾的和字符流(Reader和Writer); 按功能还可以分为节点流和过滤流。 节点流:负责数据源和程序之间建立连接;(相当于裸枪) 过滤流:用于给节点增加功能。(相当于功能零部件) 过滤流的构造方式是以其他流位参数构造(这样的设计模式称为装饰模式)。注:I/O流是一类很宝贵的资源,使用完后必须调用close()方法关闭流并释放资源。在关闭流时只用关闭最外层的流。 我们将向输出流写入数据信息的叫数据源;我们将从输入流读取数据信息的叫目的地。数据源和目的地可以是(而且经常)文件,但它们也可能是一个网络连接(),甚至一个内存块。所有数据最终都要保存为一系列字节。java中以抽象类I

43、nputStream 和OutputStreaml来实现单字节的字符。以抽象类Reader和Writer(它们的子类)来实现来专门处理采用Unicode(每个字符都使用了双字节)格式保存的信息。在java中,唯一用来处理文字输入的是BufferedReader方法。该方法又含了另一个方法,名为readLine(),可用它读取整行文本。默认情况下,流不会进行缓冲。即每读一次,都会要求操作系统提供一个字节。通过BufferedInputStream和BufferedOutputStream对流构建器进行过滤分层,实现缓冲。用PrintWriter输出。并且用BufferedReader包装优化。用

44、out.println向硬盘中写入文件。用BufferedReader输入。用BufferedReader包装优化。用in.readLine()从硬盘中的文件读入信息。4.2.5 TCP网络编程网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是

45、如何处理数据的。目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。下图是客户端与服务器的工作流程。Java对这个模型的支持有很多种Api,而这里我只想介绍有关Socket的编程接口,对于Java而言已经简化了Socket的编程接口。首先我们来讨论有关提供固定位置的服务方是如何建立的。Java提供了ServerSocket来对其进行支持.事实上当你创建

46、该类的一个实力对象并提供一个端口资源你就建立了一个固定位置可以让其他计算机来访问你,ServerSocket server=new ServerSocket(6789);这里稍微要注意的是端口的分配必须是唯一的。因为端口是为了唯一标识每台计算机唯一服务的,另外端口号是从065535之间的,前1024个端口已经被Tcp/Ip 作为保留端口,因此你所分配的端口只能是1024个之后的。好了,我们有了固定位置.现在所需要的就是一根连接线了.该连接线由客户方首先提出要求。因此Java同样提供了一个Socket对象来对其进行支持,只要客户方创建一个Socket的实例对象进行支持就可以了。Socket client =new Socket(InetAddress.getLocalH

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号