五子棋设计与实现毕业设计.doc_第1页
五子棋设计与实现毕业设计.doc_第2页
五子棋设计与实现毕业设计.doc_第3页
五子棋设计与实现毕业设计.doc_第4页
五子棋设计与实现毕业设计.doc_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

哈尔滨商业大学毕业设计(论文)五子棋的设计与实现学 生 姓 名 周玉春 指 导 教 师 李恩林 专 业 计算机科学与技术 学 院 计算机与信息工程 2010年 06月 02日graduation project (thesis)harbin university of commercethe design and implementationof gobangstudent zhou yuchun supervisor li enlin specialtycomputer science and technology schoolcomputer and information engineering 2010 - 06 - 02毕业设计(论文)任务书姓名:周玉春学院:计算机与信息工程班级:2006级4班专业:计算机科学与技术毕业设计(论文)题目:五子棋的设计与实现立题目的和意义:本程序旨在用java实现一个基本于c/s模式的五子棋网络对战游戏。玩家作为客户端通过服务器端与其它玩家进行对战,聊天等功能。通过实现本程序加深对计算机网络编程的了解。技术要求与工作计划:开发环境: intel core 2 duo 1.8ghz 1g内存 160硬盘;microsoft windowsxp professional;jdk 1.50;eclipse 3.3.2运行环境:intelpentium 2及以上处理器,32m以上内存,4g以上硬盘;microsoft windows 9x/nt/xp操作系统;800*600或以上的屏幕分辨率工作计划: 第一阶段 需求分析 第二阶段 系统设计 第三阶段 系统实现 第四阶段 论文初稿,程序调试 第五阶段 论文终稿,程序修订 第六阶段 准备论文答辩时间安排: 1月-2月 收集论文资料,确定毕业设计题目 3月-4月 实习和调研,编写开题报告 4月-5月 程序设计和调试 5月-6月 论文初稿 6月-答辩 论文终稿及答辩指导教师要求:(签字) 年 月 日教研室主任意见:(签字) 年 月 日院长意见: (签字) 年 月 日毕业设计(论文)审阅评语一、指导教师评语: 指导老师签字: 年 月 日 毕业设计(论文)审阅评语2、 评阅人评语: 评阅人签字: 年 月 日毕业设计(论文)答辩评语三、答辩委员会评语:四、毕业设计(论文)成绩: 专业答辩组负责人签字: 年 月 日五、答辩委员会主任签章答辩委员会主任单位: (签章) 答辩委员会主任职称: 答辩委员会主任签字: 年 月 日哈尔滨商业大学毕业设计(论文)摘要随着互联网迅速的发展,网络游戏已经成为人们普遍生活中不可或缺的一部分,它不仅能使人娱乐,也能够开发人的智力,就像本文所主要讲的五子棋游戏一样能挖掘人们聪明的才干与脑袋的机灵程度。本文主要讲的是用eclipse开发工具与java开发语言开发出一个自定义界面的五子棋小游戏,本游戏程序能实现两个人对阵下棋,并且程序中能智能的判定游戏的获胜方和游戏的结束与否,实现两方进行博弈。通过对软件的编写,更深入的理解了面向对象的概念,也体会到利用面向对象语言处理一些问题的优势。同时也加深了对多线程,流套接字等高级技术的理解。关键词: eclipse; java语言; 自定义 ; 五子棋; 多线程; 流套接字abstractas the rapid development of internet, online games have become an integral part of the universal life, not only does it make people entertainment, but also to develop peoples intelligence, as in this paper as the main spoken welcome to play smart to tap peoples talents and head of the clever level.this article is talking about eclipse development tools and java development language to develop a custom interface gobang game, the game program can achieve against two people playing chess, and be able to determine intelligence the game winning side and the end of the game or not, to achieve two side game. through to the software compilation, deepen understanding and gra to the technology above understanding and holding.key words:eclipse; java; language; intelligence; chess;multiple thread;socketi哈尔滨商业大学毕业设计(论文)目 录摘要iabstractii1 绪 论11.1 课题背景11.1.1 背景知识1 1.1.2 五子棋的相关基础11.2 开发工具、环境及技术31.2.1 java简介31.2.2 java 编程环境62 需求分析72.2 数据需求72.3 功能需求73 概要设计93.1 程序设计思想93.1.1 界面设计93.1.2 算法设计93.2 程序总体设计114 详细设计134.1 客户端程序实现134.1.1 棋盘面板类实现144.1.2 客户端主类实现174.1.3 clientthread线程类对消息的处理234.2 服务器端程序实现264.2.1 处理来自客户端的连接请求284.2.2 转发消息295 程序运行325.1 程序的类结构325.2 运行步骤336 程序测试35结 论37参考文献38致谢391 绪 论1.1 课题背景1.1.1 背景知识五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“连珠”,英文称之为“renju” 、“gobang”或“fir”(five in a row 的缩写),亦有“ 连五子”、“五子连”、“串珠” 、“五目”、“五目碰”、“五格”等多种称谓。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为广大人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。五子棋起源于古代中国,发展于日本,风靡于欧洲。对于它与围棋的关系有两种说法,一说早于围棋,早在“尧造围棋”之前,民间就已有五子棋游戏;一说源于围棋,是围棋发展的一个分支。在中国的文化里,倍受人们的青睐。古代的五子棋的棋具与围棋相同。五子棋大约随围棋一起在我国南北朝时先后传入朝鲜、日本等地。据日本史料文献介绍,中国古代的五子棋是经由高丽(朝鲜),于1688年至1704年的日本元禄时代传到日本的。到日本明治32年(公元1899年),经过公开征名,“连珠”这一名称才被正式确定下来,取意于“日月如合壁,五星如连珠”。从此,五子棋经过了不断的改良,例如棋盘由原来的纵横各十七道改为现行的纵横各十五道的五子棋专用棋盘等等。二十世纪初,五子棋传入欧洲并迅速风靡了全欧洲。通过一系列的变化,使五子棋这一简单的游戏系统化、规范化,最终成为今天的职业连珠五子棋,同时也成为一种国际比赛棋1。1.1.2 五子棋的相关基础一、五子棋基本规则2(1)五子棋行棋时,黑棋先下第一子,由天元开始,后白棋在黑棋周围的交叉点的落子。接着黑方再以天元中心的25个交叉点的范围内落盘面的第三子,之后黑白双方相互顺序子。(2)最先在棋盘线交点横向,纵向,斜向形成已方的五个棋子连续的一方为胜。(3)出现禁手对方指出后将判负,其中包括两个或两个以上的活三,活四,长连均称之为禁手。(4)禁手只对黑棋有效,白棋无禁手。(5)黑方禁手形成时,白方需立即指出,黑方将被判负。若白方未发现黑方禁手存在而继续应子,其后指出黑方禁手不能判黑方负。(6)黑方连五与禁手同时形成,因黑方已连成五即黑方已获胜,故禁手规则失效。(7)在对局中,在盘上落下的子又拿起来,此动作称为拔子,若拔子将被判为负。(8)在对局中棋子掉落在棋盘上将被判负。若推子或蹭子,以盘面第一落点为准。用手将棋子推正不算违犯规则。(9)在对局中,一方自行中止比赛如:中途退场,将被判负。(10)在对局中对方宣布认输,本局获胜。(11)超过比赛规定所用时间限制,将被判为负:正式比赛期间,迟到时间超过比赛容许时间将被判负。(12)如下至最终一子仍不分胜负则定为平局。(13)中盘期间双方 同意和局提议,判定为平局。二、五子棋常用术语3(1)着:也称“步”。对局中把一个棋子按照规则放到某一交叉点,称之为一着棋。一着是否完成有两种规则: 在执行落子无悔规则是,以行棋者的手离开棋子为一着已完成; 在执行限时规则时,以行棋者按下棋钟作为一着已完成。(2)pass :五子棋中引入的英文名称,即应该行棋的一方主动放弃此次行棋的机会,由对方继续行棋。(3)先手:对方必须应答的着法,如对方形成活三必须阻止其形成活四。(4)绝对先手:相对先手而言,即形成同色连四或嵌五,对方必须应着,就是绝对先手。绝对先手又叫“冲”。(5)vcf:(victory of continus four 的缩写) 意思是利用连续冲四取胜之意。利用连续不断的冲四或嵌五的绝对先手,制止形成连五获得胜利的一种方法。在对局接近尾声或排局解题中一种常见的取胜技巧。(6)追下取胜:是指白棋利用黑棋禁手取胜的战术。白1 冲四,迫使黑2 形成“四、四”禁手( 即冲四,活四禁手), 这种取胜方法叫做追下取胜。(7)自由取胜:追下取胜以外的取胜方法,即未利用黑棋禁手战术而取胜。(8)一子双杀:是指对局中一方落子后出现两个叫杀点即两个获胜点,而使对方无法防守的情形。一般是有两个冲四活三点,白棋的双活三,双四均可称为一子双杀。(9)阳线:棋盘上可见的横线与直线的总称。(10)阴线:也称“斜线”。是棋盘上不可见的斜行线。(11)“四、三”:指同时具备两个先手,其中一个四,另一个是活三。(12)“活三”、“嵌五”、“冲四”:参见五子棋重要棋形讲座。(13)禁手:对局中禁止使用的战术或被判为负的行棋手段。(14)开局:也称“布局”。布局阶段大体为七至十几着之内。种类繁多,职业连珠五子棋有二十四种开局。(15)局面:亦称“局势”。为对局中某一段时间内双方子力的配置情况。(16)优势:是指足以取胜的优势局面,其对方即为败势。(17)妙着:对局中走出的一步精妙的着法。既合乎逻辑又出人意料,有使局面顿时改观的效果,对局势的发展及对局的质量都有重大影响。(18)好着:也称“佳着”。对局中成功的某一步。(19)正着:对局的某一局面中的正确着法。(20)劣着:对局中,导致严重不利后果的一步错误着法。(21)败着:也称“失着”“漏着”。对局中造成局面恶化的一步严重错误着法。(22)等着:对局中具有等待性的一步着法,主要意图是等待有利时机。(23)废着:也称“空着”。对局中不起作用的着法。实际上指浪费时间毫无疑义的错着。(24)抢先:对局中利用反活三或冲四的强制手段夺取主动权的着法。(25)打谱:按照棋谱演练着法,是提高棋艺水平的重要方法之一。(26)复局:也叫“复着”。对局结束又重演对局的过程。一般用以研究、比较双方的成败得失和着法的优劣。1.2 开发工具、环境及技术1.2.1 java简介一、java技术介绍: java技术4是一门编程语言,也是一个平台,它基于java虚拟机技术,借助这个东西建立了跨平台的优势。(题外话:java热门的原因之一就是一个跨平台的概念,和跨平台类似跨浏览器的好处也是如此,这也是现在ajax技术流行的原因之一。另外现在热炒的ria富客户端的概念下的技术除了ajax外还有adobe的flash/flex,微软的silver light,sun的javafx等,个人更看好flash/flex,原因是flash插件在浏览器端占用率很高) java技术的重要性就不讲了,从最近流行的一个统计数据上来说,目前世界上编程语言java 、c 、vb、c+依次排名前4位,这排名本身不说明什么,至少也是工业界对编程语言使用上一个侧面的反映吧。 java编程语言5与众不同之处在于:java程序既是编译型的(转换为一种称为java字节码的中间语言),又是解释型的(jvm 对字节码进行解析和运行)。编译只进行一次,而解释在每次运行程序时都会进行。编译后的字节码采用一种针对jvm 优化过的机器码形式;解释器是jvm 的实现。这段是摘自网上的,编译原理学的不是很好,对这门语言的背后运行机制理解到这样了。 java平台是一种纯软件平台,它有三个版本java se、javaee、java me。 java se(java platform,standard edition)这个版本以前叫做j2se,后来版本号从1.4直接跳到5.0,其实也就是1.5,所以就叫成java se 5.0。目前java开发人员使用较多的版本是5.0,当然还有java se 6.0这个更新的版本。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的java 应用程序。java se还包含了支持java web服务开发的类,并为java ee这个版本提供基础。 虽说桌面应用程序,java一直不被看好,但也稍微提一下,负责桌面gui开发的类库我知道的有:jdk6自带的主要是awt/swing这个java原生类库;也可以使用ibm的swt/jface这个第三方类库。开发工具我了解的有:netbeans(最近已经是6.0final版了,做gui有使用vb的感觉),eclipse(swt/jface这个项目其实就是做eclipse项目时扩展出来的,所以对swt/jface支持的也不错)。 java ee(java platform,enterprise edition)这个版本以前叫做j2ee,也就是大家可能听得比较多的,也是java比较流行的领域,java的企业级版本。java ee下有很多流行的开发框架,像struts、spring、hibernate这种流行的所谓ssh组合等。 根据项目大小、应用领域,技术平台的选择面还是很多的,除了java ee,还有.net,lamp组合(linux、apatch、mysql、php组合),相对来说比较新ruby在ruby on rails的框架应用,后两者可能在相对来说比较轻量级的web领域运用成功案例比较多,更重量的企业级潜力还有待挖掘。 java me(java platform,micro edition)这个版本以前叫做j2me。应用领域像各种移动设备和嵌入式设备,比如:手机、pda、电视机顶盒和打印机。 java me7不是太熟悉,不过移动设备和嵌入式设备的开发个人觉得算是比较有意思的领域,最近比较瞩目的业界新闻有一个就是google发布开源智能手机操作系统开发平台android,也就是前一阵子炒得很火的gphone(原来google出的不是手机,而是一个手机操作系统开发平台)。这个平台貌似会对java me有些冲击,按照网上的消息,android包括:1、高度定制的linux操作系统内核及智能手机硬件驱动支持;2、经过google修改过的java虚拟机dalvik,这里的性能比sun的hotspot高,支持大部分java核心类库;3、大量智能手机开发核心类库;4、大量现成的智能手机应用软件;5、基于eclipse的开发环境。也是按照网上的说法,java ee提供了统一的编程平台,但不能调用操作系统的资源;而android下直达操作系统,上直达应用软件,如:浏览器、日历、地图等。java开发工具很多,个人使用的ide有eclipse和netbeans。eclispe比较流行,各种插件也多,当然用起来也不错;netbeans现在也是越做越好了,介绍这两个ide主要是开源的,当然还有其它工具如jbuilder、intellij、jcreator。这些ide各有优势劣势,根据你开发的项目来选择了。2、 java的特点:java技术取得今天这样这样的成就,依赖于这门技术的先进性,java技术具有下列优点:1. 简单、健壮:许多高级语言都要由程序员进行指针运算和存储器管理。这项工作既复杂又容易出错。java不需要程序员进行指针运算和存储器管理,简化了设计,减少了出错的可能性。2. 面向对象:java是面向对象的程序设计语言。与面向过程的语言相比,面向对象的语言更能反映人类对世界的认识和处理模式,具有良好的代码重用性。处理复杂、庞大而且不断变化的信息系统,必须使用面向对象的程序设计语言。3. 分布式:目前在所有软件产品中,仅供单个计算机使用的单机版软件所占得比例越来越小。大多数软件都可以运行在网络环境中。java拥有一个网络协议对象库(tcp/ip,http,ftp等),可以像访问当地文件一样访问internet上的对象。4. 改进的解释性:为弥补解释语言速度较慢的不足,java采用预编译的办法,将原程序生成字节代码,减轻运行时的解释工作。另一方面,有些java运行环境采用just-in-time(jit)编译器将字节代码编译成机器码直接运行,这种运行环境对于重复执行的服务器端软件特别有效,可以达到c语言的速度。5. 安全:java语言在编译时删除了指针和内存分配,在运行时检查字节代码,拒绝执行非法的内存访问,超越权限的访问等。可以防御黑客攻击。6. 平台无关:java通过采用虚拟机技术真正实现了与平台无关。java软件是真正跨平台可移植的。7. 多线程:允许一个应用程序同时做多个任务。8. 动态性:java允许下载代码模块,因此,当程序运行时也能动态升级。9. 高性能:经过实际的综合评测得出结论,java是高性能的。1.2.2 java 编程环境一、环境变量:(1) java(tm) se development kits,即jdk (2)设置环境变量 右击 我的电脑-属性-高级-环境变量 path:系统在任何路径下都可以识别java命令需要设置的变量 path: ;c:progran filesjavajdk1.6.0_01bin classpath:为java加载类(包括class,lib)的路径,只有类在classpath中, java命令才能识别 classpath: .;progran filesjavajdk1.6.0_01libdt.jar ;progran filesjavajdk1.6.0_01libtools.jar java_home:java的安装路径 java_home: progran filesjavajdk1.6.0_01 二、eclipse插件:(1) xmlbuddy:编辑xml文件;下载地址为 ; (2) fat jar:打包插件,可以方便的完成各种打包任务,可以包含外部的包等; (3) log4e:log4j插件,提供各种与log4j相关的任务,log4j专用于为程序输入调试信息 (4) lomboz:ecilpse的一个j2ee的插件,可以将很多java应用服务器,j2ee组件和web应用开发集成到eclipse中,可以帮助java开发者使用eclipse建立,测试和部署j2ee应用。支持jsp编写,包括语法着色和语法检查; (5) myeclipse:j2ee开发插件,支持jsp,ejb,数据库操作; (6) tomcatplugin:支持tomcat插件; 2 需求分析2.1 任务概述 一、目标:建立五子棋服务器程序,游戏主机的应用程序,主要提供客户进行游戏的服务器;建立五子棋客户端程序,安装于客户端的应用程序,主要提供客户游戏、聊天的应用程序。可满足用户异地自由选择游戏对手、游戏模式,也可以在游戏当中进行聊天,私聊、群聊、修改用户名等功能。 二、运行环境:windows 98/2000/xp/2003操作系统下,建立游戏服务器后,根据提示安装客户端程序即可。 2.2 数据需求 1. 数据流条目:系统默认用户名,或客户根据喜好可进行修改用户名。 2. 数据字典:本程序采用非数据库策略,游戏时,只把部分数据保存于内存中。 2.3 功能需求专用棋盘为十五路(15*15),盘面上横竖各15条平行线,纵横线路为黑色,构成225个交叉点。棋盘正中为“天元”,周围4点位“星位”。黑子113枚,白子112枚,共225枚棋子。因棋盘的大小一般来讲对下棋的影响不大,现就将其划成19*19的围棋盘大小。五子棋采用简易规则,在对局开始时,先由执黑一方(简称执黑方)将一枚棋子落在天元点上,然后由执白棋的一方(简称执白方)在黑棋周围的交叉点上落子。但是为了尊重和处于礼貌,执白方通常将盘面的第二棋布在自己河界的一侧。此后由执黑方在以天元为中心的25个交叉点的范围内布盘面的第三棋,而后由白方接手,即布盘面的第四棋。以后如此轮流落子,直到某一方首先在棋盘的直线、横线、或斜线上形成连续5子或5子以上(五子棋中只有白方可以5子以上获胜),则该方就算获胜。本程序基于c/s模式实现了一个拥有独立服务器端、支持多个客户端连接的网络五子棋对弈程序,其拥有常用五子棋博弈程序的基本功能,如落子、胜负判断、等待等。客户端可以连接服务器、创建游戏、加入游戏等。要求客户端界面简洁实用。另外游戏要有较高的可靠性,即控制好客户端线程向服务器端发送信息的同步性。为了提高交互性,除了对弈外,游戏还将实现玩家之间的聊天功能和一些简单的命令。这块内容界面做出来了,但有点问题,有待提高。 3 概要设计3.1 程序设计思想3.1.1 界面设计给一个游戏,我们首先想到的是游戏的界面,所以一个清晰美观的界面可以让别人对我们所设计出来的游戏产生好感,一开始考虑界面的设计,界面包括棋盘,也就是棋子绘制的范围,然后下棋的时候一些信息,比如说网络对弈时,对方的名字,ip等腰能够看到的话就该把它显示出来,所以还要一个显示这些信息的界面,另外,也是在网络游戏是,要输入ip,姓名的信息,还要一个连接服务器(客户端)或者是开启服务器(服务器端)的按钮。这些控制的组建应该放在一起,一开始考虑把他们放在一个面板里面,处理这些信息只要对这一个面板进行操作就可以了,但是如果这样的话可以想象,当你计算棋子所字范围的时候还要考虑到信息面板所占的空间,还有那些控制面板的空间,而且放在一起时也不好摆放,他们的背景颜色等一些属性都是一样的,那样给人的感觉也不大美观。放在一起主要原因是对它们操作不方便,对上面每一个组建进行操作都可能影响到其他的内容,显示情况等等。从面向对面的角度来看,这也不符合,都放在一起,那些东西都在一个雷里面,他们还可以划分成其他的类,而这里用的是java对该游戏进行开发,所以每一个类都要单一,所以面板分成三个部分:一个是棋盘类,也是主要的类,一个是消息面板的类,还有一个就是控制面板的类。这样一来,我们就可以对它们进行单独的操作了,而且组织它们也比较方便,我们可以根据自己的风格,自己的喜好来组织它们,把整个界面做的美观清晰。而且对它们进行操作也不影响其他组件。把对棋盘界面设计好了,我们就应该考虑棋子了,棋子怎样画出来,怎样才能让棋子按我们所想的方式来绘制出来呢。我们就像,肯定是每次当点击鼠标的时候就在点击鼠标的地方画一个棋子,所以我们还得定义一个棋子的类来对我们点击鼠标时把棋子绘制出来。这样我们就差不多把棋的界面棋子确定了,而且也确定了几个我们所需要的类。我们就可以先定义好这些类了。3.1.2 算法设计依据五子棋的规则判断输赢:横、竖、左斜、右斜任何一个方向一方连子超过5个即为获胜。cheskwin方法进行输赢的判定,判断的方法很直接先判断棋子颜色,再逐个方向去判断,在每个方向进行判定时又分为正方向和负方向,对每一方向的判断都很类似,如以下代码片段用于判断黑子竖直方向的连子个数: / / 以下两个大的循环判断竖直方向棋子连接总数 / / 向下的方向连子个数 for (step = 1; step = 4; step+) / 下层循环判断竖直向下第step个位置是否有白子 for (chesscompare = 0; chesscompare = chessblackcount; chesscompare+) / 如果有黑子 if (a + step) * 20 = chessblack_xchesscompare) & (b * 20) = chessblack_ychesscompare) chesslink = chesslink + 1; if (chesslink = 5) return (true); if (chesslink = (chesslinktest + 1)/ 竖直向下还有黑色棋子 chesslinktest+; else break; /向上的连子个数 for (step = 1; step = 4; step+) /下层循环判断竖直向上第step个位置是否有黑子 for (chesscompare = 0; chesscompare = chessblackcount; chesscompare+) /如果有黑子(其实这里可以break出来) if (a - step) * 20 = chessblack_xchesscompare) & (b * 20 = chessblack_ychesscompare) chesslink+; if (chesslink = 5) return (true); /如果下个位置还有黑色棋子(可以换用标志符判断) if (chesslink = (chesslinktest + 1) chesslinktest+; else /如果没有,则终止,退出循环 break; 3.2 程序总体设计程序使用socket 技术8以及java 多线程机制结合在进行客户与服务端之间信息的交互,但一个真正实用程序必须针对具体应用定制一套协议用于用户程序之间进行交互,而该协议的定制往往是编写程序的关键也是核心内容,该协议的完善决定程序是否能够正常运行。所谓协议就是程序之间交互的信息的格式规定, 服务端和客户端都遵循该协议才能够进行对话, 通俗讲是人类之间的语言。 一、服务端接受的信息:(1)客户端连接信息,一个客户包含两个socket 连接, 一个为chatsocket,另一个为chesssocket;(2)客户端创建游戏信息;(3)客户端加入游戏信息; (4)下棋信息;(5)放弃游戏信息;(6)公聊和私聊信息;(7)用户列表信息。2、 服务端发送的信息:服务端接受到客户端发送的各种信息,会做出不同响应, 并发送相应的信息对客户端进行响应或转发相应的信息给对手,并对服务端上存储的全局信息进行更新,服务端可能发送的信息包括:(1)所有用户列表;(2)服务端为该客户生成的客户名; (3)用户游戏创建成功信息;(4)加入游戏成功后,分别向游戏双方发送对手信息;(5)加入游戏拒绝信息;(6)游戏进行信息;(7)游戏胜利信息;(8)公聊和私聊信息。 三、客户端接受的信息:(1)用户列表信息;(2)游戏加入拒绝信息;(3)对手信息;(4)胜利信息;(5)创建成功信息;(6)错误信息;(7)聊天信息。 四、客户端发送的信息:(1)连接服务器;(2)创建游戏信息;(3)加入游戏信息;(4)放弃游戏;(5)公聊信息或私聊信息。serverclientclient客户端服务器客户端图3-1服务器新来客5新来客6新来客3新来客4新来客1新来客2聊天,玩游戏图3-24 详细设计4.1 客户端程序实现客户端(client)除了实现网络通信以外,还要实现游戏的一些基本功能,如规则制定、整个界面的布局、动画的实现等。客户端界面如图4-1所示,由控制面板、游戏面板、用户面板、聊天面板以及聊天信息面板5个部分组成。 控制面板 用户面板 游戏面板 聊天信息面板 聊天面板 图4-1 客户端界面客户端实现的难点主要在于棋盘面板类和客户端主类,棋盘面板类实现了棋盘的绘制、鼠标事件的监听、落子的处理、胜负的判断等;客户端主类统筹全局,用于对连接、创建游戏等事件进行处理,同时实现与服务器的聊天、命令通信等。4.1.1 棋盘面板类实现(1) 连接服务器connectserver方法负责连接至指定ip和端口号的服务器、初始化socket、获取输入输出流。connectserver的源代码如下: public boolean connectserver(string serverip, int serverport) throws exception try / system.out.println(in chessclient#connectserver); /建立聊天socket chatsocket = new socket(serverip, serverport); /由socket得到输入输出流. in = new datainputstream(chatsocket.getinputstream(); out = new dataoutputstream(chatsocket.getoutputstream(); /创建线程 clientthread clientthread = new clientthread(this); clientthread.start(); isonchat = true; return true; catch (ioexception ex) /连接不成功 chatpad.chatlinearea.settext(chessclient:connectserver:无法连接,建议重新启动程序 n); return false; 其中的chessthread是chessthread类的对象,内部保存有对chesspad的引用,负责监听端口,随时接收服务器端发来的消息,并调用chesspad的相应方法进行处理。(2)绘制棋盘 paint方法用于棋盘的绘制,它可以有效地进行重绘,否则当棋盘被遮挡再呈现时将不能得到重绘而出现残缺。棋盘绘制很简单,只需在相应位置上绘制相应数量的横线和纵线,最后加上棋盘的5个基准点即可。代码如下: public void paint(graphics g) /棋盘的方格线 for (int i = 40; i = 380; i = i + 20) g.drawline(40, i, 400, i); g.drawline(40, 400, 400, 400); for (int j = 40; j = 380; j = j + 20) g.drawline(j, 40, j, 400); g.drawline(400, 40, 400, 400); /五个基准点 g.filloval(97, 97, 6, 6); g.filloval(337, 97, 6, 6); g.filloval(97, 337, 6, 6); g.filloval(337, 337, 6, 6); g.filloval(217, 217, 6, 6);(3)放置棋子放置棋子就是在panel上的适当位置添加黑色或白色棋子,需要注意的是,每次落子后还要进行记录落子位置和颜色、胜负判定、向服务器发送落子消息、修改相应状态信息等操作。chesspaint方法可完成以上功能,其代码如下: public void chesspaint(int chesspoint_a, int chesspoint_b, int color) chesspoint_black chesspoint_black = new chesspoint_black(this); chesspoint_white chesspoint_white = new chesspoint_white(this); if (color = 1 & ismouseenabled) / 当黑子落子时,记下此子的位置 getlocation(chesspoint_a, chesspoint_b, color); / 判断是否获胜 iswin = checkwin(chesspoint_a, chesspoint_b, color); if (iswin = false) / 如果没有获胜,向对方发送落子信息,并绘制棋子 chessthread.sendmessage(/ + chesspeername + /chess + chesspoint_a + + chesspoint_b + + color); this.add(chesspoint_bl

温馨提示

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

评论

0/150

提交评论