计算机科学系课程设计报告-基于JAVA的五子棋游戏_第1页
计算机科学系课程设计报告-基于JAVA的五子棋游戏_第2页
计算机科学系课程设计报告-基于JAVA的五子棋游戏_第3页
计算机科学系课程设计报告-基于JAVA的五子棋游戏_第4页
计算机科学系课程设计报告-基于JAVA的五子棋游戏_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、 南开大学滨海学院计算机科学系课程设计报告 - 29 - 南开大学滨海学院计算机科学系课 程 设 计 报 告 课题名称:基于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 cl

47、ient =new socket(inetaddress.getlocalhost(),5678);客户机必须知道有关服务器的ip地址,对于着一点java也提供了一个相关的类inetaddress 该对象的实例必须通过它的静态方法来提供,它的静态方法主要提供了得到本机ip 和通过名字或ip直接得到inetaddress的方法。 最开始,线程只是用于分配单个处理器的处理时间的一种工具。但假如操作系统本身支持多个处理器,那么每个线程都可分配给一个不同的处理器,真正进入“并行运算”状态。从程序设计语言的角度看,多线程操作最有价值的特性之一就是程序员不必关心到底使用了多少个处理器。程序在逻辑意义上被分

48、割为数个线程;假如机器本身安装了多个处理器,那么程序会运行得更快,毋需作出任何特殊的调校。 多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。创建线程并使得其可以和网络连线取得联系。然后由线程来执行刚才的操作,要创建线程要么直接继承thread要么实现runnable接口,要建立和socket的联系只要传递引用就可以了。而要执行线程就必须重写run方法,而run方法所做的事情就是刚才单线程版本main所做的事情。类直接从thread类继承了下来。并且通过构造函数传递引用和客户socket建立了联系,这样每

49、个线程就有了。一个通讯管道.同样我们可以填写run方法,把之前的操作交给线程来完成,这样多客户并行的socket就建立起来了。线程是程序执行的基本原子单位, 一个进程可以由多个线程组成。在分布式编程中,正确使用线程能够很好的提高应用程序的性能及运行效率。实现原理是将一个进程分成多个线程,然后让它们并发异步执行,来提高运行效率。并发执行并不是同时执行(占有cpu),任意时刻还是只能有一个线程占用cpu,只不过是它们争夺cpu频繁一些,感觉到他们似乎都在运行。多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各

50、自的任务。在java中使用socket(套接字)完成tcp程序的开发,使用此类可以方便地建立可靠的、双向的、持续的、点对点的通信连接。在socket的程序开发中,服务器端使用serversocket等待客户端的连接,对于java的网络程序来讲,每一个客户端都使用一个socket对象表示。4.2.6 网络五子棋开始网络对战模式服务器绘制棋盘,设置panel背景使jpaneup可视化显示按钮等基本控件等待连接选择棋子选择创建连接按钮开始网络对战模式客户端绘制棋盘,设置panel背景使jpaneup可视化显示按钮等基本控件连接端口号为客户端创建的端口对方棋子反馈选择连接按钮在五子棋网络编程中添加了三

51、个类。client类,server类和networkhelper类,server类服务器类,有networkhelpe类的对象,以net.listen()函数调用networkhelpe类来监听是否有客户端连接。client类是客户端类。有networkhelpe类的对象,通过control实例的setcolor布尔值来判断是否服务器已设置过棋子颜色。通过control实例的partputchess布尔值来判断是否服务器在下子状态。在networkhelper类中,封装了与网络连接相关的各个函数和变量。变量:intport连接的端口号threadthread线程printwriterout输出

52、流bufferedreaderin缓冲输入流socketsocket套接字serversocketser服务器和端口绑定对象方法:listen()为服务器调用的函数,监听到连接请求,在accept()后建立基本连接。out.println是向另一端发送消息,建立线程使其后台运行。connect()为客户端调用的函数,socket = new socket(ip, port);输入服务器占用的端口号进行连接,建立线程使其后台运行。parse()函数是线程的run函数调用的,依次读每一行消息,用line.startswith提取关键字。用line.split( )以空格split分开字符串存在va

53、lue数组中便于程序调用。悔棋有一套较为复杂的消息传送机制。提出悔棋请求的一方向另一方发送asking请求。以joptionpane.showconfirmdialog的形式得到反馈,若同意向请求方发送agreed请求,不同意则向请求方发送disgreed请求。请求方解析反馈,执行相应的代码。服务器端棋子颜色的选择也决定下棋的先后顺序,所以如果服务器端选择的是黑棋,则在客户端中control实例中的enable为假,即白棋端不能放子。如果服务器端选择的是白棋,则服务器端中的enable为假。在每次对方放子时,另一方进入waiting消息机制中,其enable为假,只能等待,不能下子。消息机制执

54、行操作putchess服务器和客户端下棋消息waiting在一方下子时,另一方应等待。不能执行下子。设置enable为假asking提出悔棋请求agreed反馈同意悔棋请求disgreed反馈不同意悔棋请求chesscolour服务器方选择棋子颜色消息。间接决定客户端方的棋子颜色rebanken在一方悔棋后,悔棋方重新下子,另一方的不能放子,其enable为假restart一方选择重新开始,另一方自动重新开始。第五章 在windows平台下的发布与效果展示单机界面:判断输赢:保存棋局:加载棋局:网络对战界面:服务器方通知客户端选子:一方提出悔棋请求:另一方反馈是否同意悔棋(单击确定重刷界面):

55、第六章 总结与展望通过这次对java的学习,让我渐渐体会到了java的博大精深。以及怎么学习java,怎么学习计算机语言,怎样对问题进行解决和运用java gui,查找java api的使用都用了更进一步的理解。在文档方面,完成了这次的课程设计,我们了解到了课程设计的要求与方法,学会了程序设计基本步骤,同时进一步提高了团队合作的意识。当然,我们也感觉到一个优秀的程序,不仅仅是可以运行的,更应该具较高的效率,合理的结构,良好的可读性和一定的容错性。 与此同时,我们认为一个程序的成功完成还需要严谨的务实态度,和团队的团结协作的精神.团结协作和认真的态度是我们课程设计取得成功的一项非常重要的保证。但在完成过程中也发现了不足,由于知识的限制,没有设定人机智能,在.以后的学习中我们将虚心学习,做出更加完美的程序。通过这次

温馨提示

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

最新文档

评论

0/150

提交评论