网络五子棋的设计与实现毕业设计(论文)word格式_第1页
网络五子棋的设计与实现毕业设计(论文)word格式_第2页
网络五子棋的设计与实现毕业设计(论文)word格式_第3页
网络五子棋的设计与实现毕业设计(论文)word格式_第4页
网络五子棋的设计与实现毕业设计(论文)word格式_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1、网络五子棋的设计与实现Designe and implements the Gobang of network总计 毕业设计论文 43 页 表 格 0 个插 图 42 幅摘 要 目前,随着计算机网络的的开展,PK已经成为现在人生活的一局部,人们以不同的方式通过网络来娱乐,休闲。以计算机技术和网络技术为核心的现代网络技术已经在现实生活和生产中得到了广泛的使用,休闲类网络游戏集趣味性,娱乐性,互动性和益智性于一体,已经成为多数人群的休闲方式,也为多数人所喜好。当然,为了满足没有网络同样能娱乐的要求,许多小游戏做成了单机和网络的双功能。 本软件使用JAVA语言实现,通过对图形界面,绘图,布局管理器等

2、去构造出游戏的单机功能,在此根底上,利用SCOKET的知识,建立起效劳器与客户端之间的连接,利用多线程技术来处理效劳器端与客户端之间的数据传输,通信问题,使得客户端和效劳器端之间能够同步的进行处理。 通过对软件的编写,更深入的理解了面向对象的概念,也体会到利用面向对象语言处理一些问题的优势。同时也加深了对多线程,流套接字等高级技术的理解。关键词: 多线程 流套接字 数据传输 同步Abstract computer technology and the network technology as the core, modern network technology is already use

3、d in the real life and the production. The leisure network game sets interest, entertainment, interaction and intelligence-development in a body, and already became the leisure mode of the most people. And most people like them. Of course, ,But, its a pity that there still have some clients lacking

4、of network because of various causes. In order to satisfy the above clients requirements. A large number of games ,usually named as “small games by players, are designed for involving two kinds of different function. The former game is often played by these players whose computers never connect with

5、 the network. Its called for stand-alone version games. Just as its name implies, the later is named as online version gamesThis software implemented with JAVA language, and according to the understanding of SCOKET ,GUI and paint image chnology. Established in these foundatio , the server co ects wi

6、th the multi- client, and proce es the information between many clients using the multi-thread proceing technology. it is very convenient for both client and server to do the synchronous processing.Through to the software compilation, deepen understanding and gra to the technology above understandin

7、g and holding.Key Words:multiple thread, Socket, transmission data, synchronism.目 录摘 要IAbstractII第一章:绪论11.1 前 言1第二章 开发工具、环境及其技术22.1 JAVA简介22.1.1JAVA 历史:22.1.2 Java的特点:32.1.3 Java中线程概念:52.1.4 Socket 机制:72.2 Java开发工具9第三章 程序设计开发13133.1.1界面设计133.1.2算法设计143.2 用例图和类图173.3 程序的设计233.4 程序的运行303.5 程序测试36结 语41

8、参 考 文 献42致 谢43第一章:绪论1.1 前 言电脑已经深入到日常工作和生活的方方面面,比方文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等。Windows系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满了把戏繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。Java语言作为一种面向对象的编程语言,具有分布式,可移植,高性能,多线程等特点。通过系统的学习,人们就可以使用它开发出功能齐全,满足特殊需求的应用程序。Java语言易学易

9、用,对学习者掌握技能,开拓思维都有很大的帮助。 我作为一名学生,在系统的学习了Java语言之后,经常用它搞一些小程序。这次毕业设计,正好将学过的Java语言中的各种技术综合起来,用Jbuilder2006开发工具编写一个小游戏,既对自己学过的技能进行一次检验,也能系统地将学过的知识复习稳固。随着计算机技术的不断开展,网络技术的普及范围越来越广,网络能够提供的效劳多样、便捷,已经成为人们生产生活中不可缺少的重要组成局部。如今网络休闲游戏开展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大局部现代人休闲娱乐的首选。网络五子棋游戏是使用Java语言开发的一款游戏。它使用SOCKET建立连接,

10、多线程处理数据,以及可嵌入网络浏览器的ALET作为客户端,这些特点使这款游戏无论是效劳器还是客户端的实现都相对容易。通过对该软件的编写,还可以稳固我们对以上各种知识的掌握和理解。第二章 开发工具、环境及其技术2.1 JAVA简介JAVA 历史:1991年,电视机,机顶盒,录象机的开发设计需要一种可移植、方便、高效的计算机语言。为了满足这种需求,由Sun公司的Patrick Haughton和James Gosling领导的技术小组开发了JAVA。上世纪九十年代中期,Sun推出了Sun Java Development Toolkits 1.0,简称JDK1.0。JDK1.0是一个功能强大的软件

11、包,可以用来开发小应用程序和多种操作系统Sun Solaris,Windows Nt,Windows 95,Macintosh的应用程序。1998年Sun推出Java 2 Platform,它定义了所有Java技术的概念和标准,即包括已经实现的技术也包括尚未实现的技术;即包括Sun的实现的,也包括其它公司的实现。目前,Java 2 SDK1.5是Java 2 Platform的最新定义。这个定义又可以细分为四个版本:企业版:J2EE(Java EE),用于开发重要部门和企业级应用。 图2-1 Java SE的体系结构微型版:J2ME(Java ME),用于开发移动 ,机顶盒,个人数字设备等。J

12、avaCard:适用于智能卡的Java平台。 Java的特点:Java技术取得今天这样的成就,依赖于这门技术的先进性,Java技术具有以下优点:n简单、健壮:许多高级语言都要由程序员进行指针运算和存储器管理。这项工作即复杂又容易出错。Java不需要程序员进行指针运算和存储器管理,简化了设计,减少了出错的可能性。n面向对象:Java是面向对象的程序设计语言。与面向过程的语言相比,面向对象的语言更能反映人类对世界的认识和处理模式,具有良好的代码重用性。处理复杂、庞大而且不断变化的信息系统,必须使用面向对象的程序设计语言。n分布式:目前,在所有软件产品中,仅供单个计算机使用的单机版软件所占的比例越来

13、越小。大多数软件都可以运行在网络环境中。Java拥有一个网络协议对象库TCP/IP,HTTP,FTP等,可以象访问当地文件一样访问Internet上的对象。n改良的解释性:为弥补解释语言速度较慢的缺乏,Java采用预编译的方法,将原程序生成字节代码,减轻运行时的解释工作。另一方面,有些Java运行环境采用Just-In-Time(JIT)编译器将字节代码编译成机器码直接运行,这种运行环境对于重复执行的效劳器端软件特别有效,可以到达C语言的速度。n平安:Java语言在编译时删除了指针和内存分配,在运行时检查字节代码,拒绝执行非法的内存访问,超越权限的访问等。可以防御黑客攻击。n平台无关:Java

14、通过采用虚拟机技术真正实现了与平台无关。Java软件是真正跨平台可移植的。n多线程:允许一个应用程序同时做多个任务。n动态性:Java允许下载代码模块,因此,当程序运行时也能动态升级。n高性能:经过实际的综合评测得出结论,Java是高性能的。Java安装配置:各平台安装程序可以到SUN的网站上下载,在安装完成后应该进行配置,通常集成开发环境IDE自带JDK或进行了自动配置,如果我们通过控制台编译或运行Java程序那么必须手动配置。JDK: 是Java开发工具包J2SE Software Development Kit的缩写,用Java语言编写applet小程序和应用程序的软件开发环境,Java

15、开发者应该安装JDK,并且通常JDK中已包含一个JRE拷贝。JRE: 是Java运行环境 (Java Runtime Enviroment) 的缩写。它根本上就和Java虚拟机是同一个概念,运行Java程序的应该安装JRE。图2-2 JDK安装目录例如bin:java常用开发工具目录,例如javac,java,jar等工具。demo: sun提供的一些用于java开发的示范例子,如有关applets,jfc,plugin等。nclude: Java提供用于c/c+调用的.h文件;jre: 对应版本的java运行环境文件sample: java案例。lib: java类库目录Windows环境变

16、量应设置的环境变量包括:JAVA_HOME, PATH, CLASSPATH。假设J2DK安装在“C:JDK”,环境变量可设置为:nnCLASSPATH=.nPATH=%JAVA_HOME%BIN;%PATH% 图2-3 Windows下环境变量的设置 Java中线程概念:1线程的概念一个关于计算机的简化的视图是:它有一个执行计算的处理机、包含处理机所执行的程序的ROM(只读存储器,在JAVA中也叫堆栈)、包含程序所要操作的数据的RAM(随机存储器,在JAVA中也叫堆)。在这个简化视图中,只能执行一个作业。一个关于最现代计算机比拟完整的视图允许计算机在同时执行一个以上的作业。你不需关心这一点是

17、如何实现的,只需从编程的角度考虑就可以了。如果你要执行一个以上的作业,这类似有一台以上的计算机。在这个模型中,线程或执行上下文,被认为是带有自己的程序代码和数据的虚拟处理机的封装。java.lang.Thread类允许用户创立并控制他们的线程。在单CPU的情况下,一个时刻只能运行一个进程,那么进程在运行时,也只能运行一个线程来代表该进程的执行。进程是正在执行的程序。一个或更多的线程构成了一个进程操作系统是以进程为单位的,而进程是以线程为单位的,进程中必须有一个主线程。一个线程执行上下文由三个主要局部组成:一个虚拟CPUCPU执行的代码代码操作的数据如下图 图2-4 线程的组成 代码可以由多个线

18、程共享,它不依赖数据。如果两个线程执行同一个类的实例的代码时,那么它们可以共享相同的代码。类似地,数据可以由多个线程共享,而不依赖代码。如果两个线程共享对一个公共对象的访问,那么它们可以共享相同的数据。在Java编程中,虚拟处理机封装在Thread类的一个实例里。构造线程时,定义其上下文的代码和数据是由传递给它的构造函数的对象指定的。Java线程分守护线程和用户线程,由创立时设置。线程状态和调度在Java中,线程的调度是基于时间片根底上的优先级优先原那么 。抢占式调度模型(优先级优先)是指可能有多个线程是可运行的,但只有一个线程在实际运行。这个线程会一直运行,直至它不再是可运行的(运行时间到,

19、时间片原那么,或者,另一个具有更高优先级的线程抢占,优先级优先原那么)。对于后面一种情形,低优先级线程被高优先级线程抢占了运行的时机。线程的代码可能执行了一个Thread.sleep()调用,要求这个线程暂停一段固定的时间。这个线程可能在等待访问某个资源,而且在这个资源可访问之前,这个线程无法继续运行。所有可运行线程根据优先级保存在池中。当一个被阻塞的线程变成可运行时,它会被放回相应的可运行池。优先级最高的非空池中的线程会得到处理机时间(被运行)。一个Thread对象在它的生命周期中会处于各种不同的状态。以下图形象地说明了这点: 图2-5 线程的生命周期 线程进入可运行状态,并不意味着它立即开

20、始运行。在一个只有一个CPU的机器上,在一个时刻只能进行一个动作。下节将描述:如果有一个以上可运行线程时,系统如何分配CPU。因为Java线程是抢占式的,所以你必须确保你的代码中的线程会不时地给其它线程运行的时机。这可以通过在各种时间间隔中发出sleep()调用来做到。 Socket 机制:基于Java的网络技术TCP/IP套接字套接字是网络软件中的一个抽象概念,套接字允许单个计算机同时效劳于很多不同客户,并能够提供不同类型信息的效劳。该技术由引入的端口处理,该端口既是一个特定机器上的一个被编号的套接字-通信端口.TCP/IP套接字用于在主机和Internet之间建立的可靠、双向、点对点、持续

21、的流式连接。在java中,TCP/IP Socket连接是用包中的类实现的,这些类实现了建立网络连接和通过连接发送数据的复杂过程,我们只需使用其简单接口就能实现网络通信!在java中有两类套接字,一种是效劳器端套接字-.ServerSocket,另一种是客户端套接字-.Socket。ServerSocket其中,ServerSocket被设计成在等待客户建立连接之前不做任何事情的监听器,构造方法的版本如下:public ServerSocekt(int port) throws IOException-在效劳器指定端口port创立队列长度为50的效劳器套接字,当port为0那么代表创立一个基于

22、任意可用端口的效劳器套接字。队列长度告诉系统多少与之连接的客户在系统拒绝连接之前可以挂起。public ServerSocekt(int port, int maxQueue) throws IOException-在指定端口创立指定队列长度的效劳器套接字public ServerSocket(int port, int maxQueue, InetAddress bindAddr ) throws IOException在多地址主机上,我们除了可以指定端口之外,还可以通过InetAddress类来指定该套接字约束的IP地址。InetAddress在后面将学习。ServerSocket还定义了

23、以下一些常用的方法:public Socket accept() throws IOException-该方法用于告诉效劳器不停地等待,直到有客户端连接到该ServerSocket指定的端口,一旦有客户端通过网络向该端口发送正确的连接请求,该方法就会返回一个表示效劳器与客户端连接已建立的Socket对象,接下来我们就可以通过这个返回的Socket对象实现效劳器与指定客户端的通信。注意:accept()方法会让效劳器中的当前线程暂停下来,直到有客户端的正确连接发送过来。public void bind(SocketAddress endpoint) throws IOException -绑定该

24、ServerSocket到指定的endpoint地址(IP地址和端口)public void close() throws IOException-关闭当前ServerSocket。任何当前被锁定的线程将在accept()方法中抛出IOException。从jdk1.4开始,java提供了关于ServerSocket的ServerSocketChannel,jdk建议用管道来实现客户端连接的监听以及关闭效劳器套接字会更平安,因此,现在我们应该通过ServerSocket来得到其套接字管道,通过管道来实现效劳监听以及关闭,可以通过ServerSocket的getChannel()方法来得到当前S

25、erverSocket的相关管道。Socket该类为建立连向效劳器套接字及启动协议交换而设计,当进程通过网络进行通信的时候,java技术使用流模型来实现数据的通信。一个Socket包括两个流,分别为一个输入流和一个输出流,一个进程如果要通过网络向另一个进程发送数据,只需简单地写入与Socket相关联的输出流,同样,一个进程通过从与Socket相关联的输入流来读取另一个进程所写的数据。如果通过TCP/IP协议建立连接,那么效劳器必须运行一个单独的进程来等待连接,而某一客户机必须试图到达效劳器,就好比某人打 ,必须保证另一方等待 呼叫,这样才能实现两人之间的通信。2.2 Java开发工具开发工具J

26、Builder 简介中文名称:JBuilder 2006 企业完整版英文名称:Borland JBuilder Enterprise 2006版本:2006发行时间:2005年09月地区:美国语言:英语简介: 图2-6 JBuilder启动界面 Borland JBuilder开发环境是Borland 用于Java 平台的应用程序生命周期管理技术套件的关键局部。其被设计用来为开发小组提供所需的开发工具,以便在企业应用程序开发过程中获得最大的生产力,提供了下一代的解决方案,使得开发小组能够做更多的工作:减少开发本钱,交付一致的、高品质的应用,缩短产品上市的时间。事实上,在享有盛名的JBuilde

27、r IDE 之内,开发者能够在从设计到分发的全部应用程序开发生命周期中成为主要角色。 使用省时的工具加速Java 的开发 Jbuilder 的设计能够帮助开发者与开发小组提高效率,缩短产品上市时间,提供清晰的投资回报。无论对于初出茅庐的新手还是经验丰富的开发者来说,Jbuilder 都能为他们提供创新性工具,能够显著提高开发小组的生产力。这些创新性工具包括新型Struts 设计工具与Web 业务设计工具,能够加速企业Java应用程序的上市时间。在世界数千个软件实施工程中,JBuilder为首选软件,用来加速Enterprise JavaBeans (EJB )、Web、XML、Web 业务、移

28、动与数据库应用程序的开发,支持面向领先的J2EE 平台应用效劳器的快速分发。 使用集成的小组开发环境,实现小组生产力的最大化 JBuilder 使用提高小组生产力与效率的增强技术,可以使Java开发小组生成可靠的、企业级应用,并且速度很快,从而提高了开发小组包括分布于多个地方的大型小组的生产力。有了JBuilder,开发者就可以在集成的、可升级的、可扩展的小组环境中进行工作,从而简化源代码的并行管理,对于提高效率来说好处十清楚显。JBuilder 技术有助于开发小组理解并经济地复用现有的代码部件,这意味着开发者能够更加高效地利用时间,对具有类似功能的多个实例只需进行一次编码。 减少开发的风险与

29、本钱一直到分发 JBuilder 是一个灵活的、开放式解决方案,用来开发并分发Java 应用程序,赋予您选择所偏爱开发平台及版本控制系统的自由,您的业务不再遭受与供给商锁定相关的、不断升级的费用的困扰。JBuilder 与多种业界领先的应用效劳器的紧密集成让您能够对您所做出的技术决定进行控制,这些应用效劳器包括Borland企业效劳器,BEA WebLogic Server ,JBoss ,IBM WebSphere ,Oracle9i 应用效劳器,Sybase EAServer 与Sun ONE 应用效劳器。这样,随着业务的开展,如果需要改变供给商,那么您在应用开发技术上面的投资仍能继续发挥

30、作用,而丝毫不用为其担忧。另外,JBuilder以强大的支持与效劳根底架构为依托,这有助于确保您的成功。 成功地利用现有的工程并管理变更 保护您的未来,利用您的过去。JBuilder 技术传承Borland 帮助企业发挥已有IT 投资更大作用的承诺,用于在企业Java 应用程序的开发过程中,继续利用现有的技术资源。JBuilder 技术对领先的业界标准与从UML到极端编程的全部开发方法提供广泛的支持,提供了一个灵活的平台,可以进行充分的扩展,以便满足复杂的Java 企业开发环境不断变化的需要。 使用可靠的工具集成,专注于开发 JBuilder 开发环境可让开发者使用从设计、开发、调试与测试直到

31、分发与管理的应用程序开发生命周期的全部阶段。JBuilder 企业版包括了Borland Optimizeit Suite 套件性能工具,用以在全部开发过程中打造质量。与Borland的Java 应用生命周期解决方案的其他部件集成在一起,这意味着开发小组可以专注于生成更好的应用程序,而不是想方设法让各种工具协同工作。JBuilder进一步提高实时可视性,让开发者一眼看清源码变更对应用的不同层次甚至整个工程的影响。这对于把软件开发变革成可管理及成功业务流程至为关键。如以下图 图2-7 JBuilder开发界面JBuilder 与Borland Together 建模技术的结合,有助于JBuild

32、er 用户更好地理解代码结构,管理工程的复杂程度。JBuilder 与Borland StarTeam 自动化配置并变更管理系统一起使用,可以在全部开发周期中提高对工程的掌握程度。与著名的Borland JDataStore数据库与Borland 企业效劳器进行集成,有助于您信心十足地进行分发。JBuilder 也与其他业界领先的版本控制系统与分发平台集成在一起,提供了平台的灵活性与选择的自由。第三章 程序设计开发界面设计给一个游戏,我们首先想到的是游戏的界面,所以一个清晰美观的界面可以让别人对我们所设计出来的游戏产生好感,一开始考虑界面的设计,界面包括,棋盘,也就是棋子绘制的范围,然后下棋的

33、时候有一些信息,比方说网络对弈时,对方的名字,IP等要能够看到的话就该把它显示出来,所以还要一个显示这些信息的界面,另外,也是在网络游戏时,要输入IP,姓名的信息,还要一个连接效劳器客户端端或者是开启效劳器效劳器端的按钮。这些控制的组建应该放在一起,一开始考虑把他们放在一个面板里面,处理这些信息只要对这一个面板进行操作就可以了,但是如果这样的话可以想像,当你计算棋子所字范围的时候还要考虑到消息面板所占的空间,还有那些控制面板的空间,而且放在一起是也不好摆放,他们的背景颜色,等一些属性都是一样的,那样给人的感觉也不大美观。放在一起主要原因是对他们超做不方便,对上面每一个组建进行操作都可能影响到其

34、他的内容,显示情况等等。从面向对象的角度来看,这也不符合,都放在一起,那些东西都在一个类里面,他们还可以划分成其他的类,而这里用的是JAVA对该游戏进行开发,所以每一个类都要单一,所以把界面分成三个局部:一个是棋盘类,也是主要的类,一个是消息面板的类,还有一个就是控制面板的类。这样一来,我们就可以对他们进行单独的操作了,而且组织他们也比拟方便,我们可以根据自己的风格,自己的喜好来组织他们,把整个界面做的美观清晰。而且对他们进行操作也不影响其他组件。把对棋盘界面设计好了,我们就应该考虑棋子了,棋子怎样画出来,怎样才能让棋子按我们所想的方式来绘制出来呢。我们就想,肯定是每次当点击鼠标的时候就在点击

35、鼠标的地方画一个棋子,所以我们还得定义一个棋子的类来对我们点击鼠标时把棋子绘制出来。这样我们就差不多把棋的界面棋子就确定了,而且也确定了几个我们所需要的类。我们就可以先定义好这些类了。界面设计出来之后我们就会想,有了界面,我们怎样控制棋子在棋盘上进行下棋呢。尤其是单机游戏时,怎样让你在棋盘上下棋之后就让计算机自己下棋呢,如果能下棋,又怎样让计算机计算出在什么位置下呢这样的话就是算法设计了有了以上的准备就可以把棋盘绘制出来了,然后就是下棋了,如果是单机游戏,每次在适当位置点击鼠标的时候就在所点击的位置上画出你这个角色的颜色,在绘制出你下棋位置的棋之后你所希望看到的是计算机下棋了,也就是说在你下完

36、棋之后就是计算机自动的下了,计算机要自己选择一个适宜的位置来下棋,也就是说每次自己下完棋之后就要有一个控制变量来控制自能不能下棋,如自己下了棋而计算机还没下棋的话那就得让自己不能下棋就是说点击鼠标没用当然这种情况是不可能的,因为计算机计算的速度很快,所以一般人下完棋后计算机就马上绘制出了所须下的棋子,只是为了说明在网络对弈时候该这样控制。人可以随意的下子,可是计算机就要计算在那个位置下子了。这里由计算机下子的算法来确定,对弈的话就不象单机游戏一样,要计算机来判断人下子之后计算机下那一个地方了,对弈只要在双方下子的时候判断赢棋情况,当然还要同步的控制两个人下棋的顺序,这样的话就要用到线程了,各自

37、都继承或实现线程类或接口,以便各自能随时单独控制接发消息。效劳器端和客户端之间的流程是这样的,首先在效劳器断开启自定义的端口来监听客户端的请求,假设有请求那么建立连接,否那么处于等待状态,建立连接通信后,效劳器端和客户端都创立独立的线程来处理信息的发送接收方法,信息包括:玩家的姓名,下的棋子的颜色,位置等。信息发送和接收依靠网络流来传递。 在网络对战的设计上,游戏系统由效劳器端和客户端构成,形成点对点模式的连接和通信,在效劳器端建立主机,输入己方的名字,在客户端连接的状态下可以互通信息,显示效劳器的状态,即效劳器和客户端的连接情况,在客户端需要输入效劳器端主机的IP、端口、姓名、在连接状态下可

38、以与效劳器通信,还可以显示当前状态。算法设计这里算法的设计主要是讲单机的算法,包括确定计算机下棋的位置和判断赢棋的情况先考虑一下整个棋盘上五子连的情况,也就是说在整个棋盘上有多少种情况能构成五子连,这里定义的是一个15*15的棋盘,如以下图 图 3-1 棋盘上五子连情况有四种方式的五子连,横的、竖的、右斜、左斜,横的情况有15*11种,竖的有15*11种,右斜有11*11种,左斜有11*11种,总共是572种,并且对每中情况按顺序进行标号,如点1可以属于第1种,第165种从第0种开始,第331种,点2可以属于地1种,第2种,第157种,第332种。定义两个三维数组caseBlack151557

39、2,caseWhite1515572分别用来存放白棋和黑棋各个点的情况,前面两维存放的是某个点的坐标,第三维放的是他们所属于的情况,并把这个数组定义成boolean类型的。也就是说如果这个点是这种情况的话就为true况的就为false。定义一个二维数组colorFive2572,这个数组存放的是白子和黑子在每种情况是棋子的个数,如colorFive02=3,就代表黑棋在第二种五子连情况的个数是3,这个数组就纪录了黑棋和白棋每种五子连情况上的个数,可以用这个数组来确定有没有赢棋的情况。在每下一个棋子的时候,先遍历这个点属于那些情况,再在每种情况上的colorFive对应的位置加上1,定义一个数组

40、haveChess1515,来存放每一个点上是否有棋,这个数组可以用来在你下棋的时候来判断你所下的点的位置是否有棋,如果有你就不能在你所点击的位置下棋。如果这个数组的某个点的值等于2那么表示在这个点上没有棋,如果等于0表示这个点上有黑棋,等于1那么表示该位置上有白棋,如haveChess102=1,那么表示在10,2这个位置上有白棋,如果你点击这里的话就不能在这个位置下棋,要选择其他位置。这样的话就可以来判断计算机能不能下棋了,也能判断出赢棋的情况,那么计算机又应该在那个地方下棋最适宜呢?在这里,定义两个二维数组,scoreBlack1515 ,scoreWhite1515分别用来存放白棋和黑

41、棋各个未下棋点的分数,以判断计算机在那个点下棋最适宜。如以下图所示 图3-2 每个点下子后所属的情况 该数组在点1位置时,黑子的情况2图上有一个黑子,所以在该点上加4分,既scoreBlack44+=4,同样白棋在情况三上有一个白棋所以scoreWhite44+=4,而点1又在情况4上有一个白棋,所以scoreWhite44+=4,即这个点上又加上了4,而点2应为有棋,所以不做判断,在点3这个位置时,因为没有任何棋子,对游戏者来说也就是说不适合攻击也不适合防守,所以也不做判断,而点4位置,对黑棋来看,情况5是两个子,加上21分,在情况6上面又有一个子,所以又加4,在情况9上面有一个子所以再4,

42、在情况10上面有一个子,再加4所以scoreBlack69=21+4+4+4=33,对所有的未下棋的点的分数都做一个计算,把白棋和黑棋的在各个点的分数都计算出来,再比拟白棋和黑棋他们之中最大的,也就是下棋的最正确位置了。判断赢棋情况就每次下子之前就在数组colorFive里面找是否有棋子数等与5的,如果有就有赢棋的情况了,因为在下棋之前也就是说在把这个棋子画到棋盘上之前,它实际已经下棋了,也就是说这个点的各个数据已经改变了,所以就可以判断。3.2 用例图和类图用例图use case diagram用例图就是由主角、用例以及它们之间的关系构成的图。该图说明了用例模型中的关系。 可以将用例图组织到

43、用例包中,并归用例包所有,让特定包中仅显示互为关联关系的内容。用例图由参与者Actor、用例Use Case、系统边界、箭头组成,用画图的方法来完成。 参与者不是特指人,是指系统以外的,在使用系统或与系统交互中所扮演的角色。因此参与者可以是人,可以是事物,也可以是时间或其他系统等等。还有一点要注意的是,参与者不是指人或事物本身,而是表示人或事物当时所扮演的角色。比方小明是图书馆的管理员,他参与图书馆管理系统的交互,这时他既可以作为管理员这个角色参与管理,也可以作为借书者向图书馆借书,在这里小明扮演了两个角色,是两个不同的参与者。参与者在画图中用简笔人物画来表示,人物下面附上参与者的名称。 图3

44、-3 角色 用例是对包括变量在内的一组动作序列的描述,系统执行这些动作,并产生传递特定参与者的价值的可观察结果。这是UML对用例的正式定义,对我们初学者可能有点难懂。我们可以这样去理解,用例是参与者想要系统做的事情。对于对用例的命名,我们可以给用例取一个简单、描述性的名称,一般为带有动作性的词。用例在画图中用椭圆来表示,椭圆下面附上用例的名称。 图3-4 用例 系统边界是用来表示正在建模系统的边界。边界内表示系统的组成局部,边界外表示系统外部。系统边界在画图中方框来表示,同时附上系统的名称,参与者画在边界的外面,用例画在边界里面。因为系统边界的作用有时候不是很明显,所以我个人理解,在画图时可省

45、略。箭头用来表示参与者和系统通过相互发送信号或消息进行交互的关联关系。箭头尾部用来表示启动交互的一方,箭头头部用来表示被启动的一方,其中用例总是要由参与者来启动。用例图主要的作用有三个:1获取需求;2指导测试;3还可在整个过程中的其它工作流起到指导作用。对问题做出了分析之后,就可以根据分析的结果画出用例图了,因为下棋的角色是人,所以角色就是下棋者,下棋者直接发生的动作是点击鼠标,在棋盘上绘制棋子,所以就有可以把整个下棋的过程分为两个用例。绘制棋盘界面和点击鼠标下棋,点击鼠标下棋包含了绘制棋子的动作,绘制棋子界面包括绘制控制界面,绘制消息界面,和他直接的棋盘界面。用例图如下。 图3-5 五子棋用

46、例图类图(Class diagram)类图是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性信息。 类图(Class diagram)由许多静态说明性的模型元素例如类、包和它们之间的关系,这些元素和它们的内容互相连接组成。类图可以组织在并且属于包中,仅显示特定包中的相关内容。类图(Class diagram)是最常用的UML图,显示出类、接口以及它们之间的静态结构和关系;它用于描述系统的结构化设计。 类图最根本的元素是类或者接口。类图通常包含如下的内容类 接口 协作 关系同其他的图一样,类图也可以包含注解和限制,类图中也可以包含包和子系统,这两

47、者用来将元素分组。有时后你也可以将类的实例放到类图中。 注:组件图和分布图和类图类似,虽然他们不包含类而是分别包含组件和节点。你通常通过下面三种方式使用类图:1,为系统词汇建模型 为系统的词汇建模实际上是从词汇表中发现类,发现它的责任。2,模型化简单的协作协作是指一些类、接口和其他的元素一起工作提供一些合作的行为,这些行为不是简单地将元素加能得到的。例如:当你为一个分布式的系统中的事务处理过程建模型时,你不可能只通过一个类来明白事务是怎样进行的,事实上这个过程的执行涉及到一系列的类的协同工作。使用类图来可视化这些类和他们的关系。 3,模型化一个逻辑数据库模式 想象模式是概念上设计数据库的蓝图。

48、在很多领域,你将想保存持久性数据到关系数据库活面向对象的数据库。你可以用类图为这些数据库模式建立模型。1. 类Class 一般包含3个组成局部。第一个是类名;第二个是属性attributes;第三个是该类提供的方法 类的性质可以放在第四局部;如果类中含有内部类,那么会出现第五个组成局部。类名局部是不能省略的,其他组成局部可以省略。 类名书写标准:正体字说明类是可被实例化的,斜体字说明类为抽象类。 属性和方法书写标准:修饰符 描述信息 属性、方法名称 参数 :返回类型|类型,类图的画法如下 图3-6 类的画法属性和方法之前可附加的可见性修饰符: 加号+表示public;减号-表示private;

49、#号表示protected;省略这些修饰符表示具有package包级别的可见性。 如果属性或方法具有下划线,那么说明它是静态的。 描述信息使用 结尾。 类的性质是由一个属性、一个赋值方法和一个取值方法组成。书写方式和方法类似。2. 包Package 包是一种常规用途的组合机制。UML中的一个包直接对应于Java中的一个包。在Java中,一个包可能含有其他包、类或者同时含有这两者。进行建模时,通常使用逻辑性的包,用于对模型进行组织;使用物理性的包,用于转换成系统中的Java包。每个包的名称对这个包进行了惟一性的标识。3. 接口Interface 接口是一系列操作的集合,它指定了一个类所提供的效劳

50、。它直接对应于Java中的一个接口类型。接口的表示有大概两种方式。具体画法见下例: 图3-7 接口的画法4. 关系 常见的关系有:一般化关系Generalization,关联关系Association,聚合关系Aggregation,合成关系Composition,依赖关系Dependency。 其中,聚合关系Aggregation,合成关系Composition属于关联关系Association。一般关系表现为继承或实现关系(is a),关联关系表现为变量(has a ),依赖关系表现为函数中的参数(use a)。 一般化关系:表示为类与类之间的继承关系,接口与接口之间的继承,类对接口的实现

51、关系。表示方法: 用一个空心箭头实线,箭头指向父类。或空心箭头虚线,如果父类是接口。关联关系:类与类之间的联接,它使一个类知道另一个类的属性和方法。表示方法:用 实线箭头, 箭头指向被使用的类。聚合关系:是关联关系的一种,是强的关联关系。聚合关系是整体和个体的关系。关联关系的两个类处于同一层次上,啊聚合关系两个类处于不同的层次,一个是整体,一个是局部。 表示方法:空心菱形实线箭头,箭头指向局部。合成关系:是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表局部的对象的生命周期,合成关系不能共享。表示方法:实心菱形实线箭头,依赖关系:是类与类之间的连接,表示一个类

52、依赖于另一个类的定义。例如如果A依赖于B,那么B表达为局部变量,方法的参数、或静态方法的调用。表示方法:虚线箭头通用建模技术 没有类是单独存在的,他们通常和别的类协作,创造比单独工作更大的语义。因此,除了捕获系统的词汇以外,还要将注意力集中到这些类是如何在一起工作的。使用类图来表达这种协作。确定你建模的机制。机制代表了局部你建模的系统的一些功能和行为,这些功能和行为是一组类、接口和其他事物相互作用的结果。 对于每个机制,确定类、接口和其他的参与这个协作的协作。同时确定这些事物之间的关系。 用场景来预排这些事物,沿着这条路你将发现模型中忽略的局部和定义错误的局部。 确定用这些事物的内容来填充它们

53、。对于类,开始于获得一个责任类的职责,然后,将它转化为具体的属性和方法。通过对各个类的属性和方法分析,可以画出一下类图。 图3-8 五子棋类图3.3 程序的设计分析了设计思想,有了算法,并且画出了用例图,类图,之后就可以开始设计程序了,对程序的设计也可以理解为对类的设计,所以这里把程序的设计分为ChessPad类的设计,ChessPadThread类的设计,ControlPad类的设计,MessagePad类的设计,Paint类的设计,ChessClient类和ChessServer类的设计ChessPad类的设计ChessPad类也是主要的类,该类的主要作用是绘制棋盘,包括棋盘方格和边框,并

54、组织五子棋窗口的下棋面板, 用布局管理,器来组织控制面板,棋盘面板,消息面板。还初始化了棋盘上各个落棋点的位置,连接 效劳器和开启效劳器的方法,并这个类是一个多线程类,主要是对网络下棋时各自对棋子,面板的处理等 还包括了对下棋输赢的判断等该类继承了Panle类,在这个面板上要进行画棋格子,绘制棋子,类自己的面板如以下图 图3-9 棋盘界面这就是单纯的棋盘,前面算法已经介绍过,该棋盘中有存放横纵坐标的数组,int x,y,初始化他们的大小为15,存放每钟五子连情况上的个数的数组colorFive,前面讲出现过的变量这里就不列出来了,要有一个控制能否下棋的变量boolean canpress,一个

55、控制单机一个控制网络的变量boolean danji,net,控制改变颜色的变量boolean changecolor,因为画棋子之后,棋子的对象就不起作用了,再刷新的话就会被垃圾回收机制回收掉,所以要定义一个容器来存放所有已经下了的棋子,以便在刷新的时候它还是能显示出来,由于这个类还要实现线程,网络对弈时要进行通信,所以要有IO流,所以要定义属性ServerSocket server,Socket chessSocket,数据输入输出流DataInputStream inData,DataOutputStream outData,还要定义一个端口好这里把它定义成3333。根本定义好属性之后就来确定方法了,首先需要构造方法来对初始化一些属性和

温馨提示

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

评论

0/150

提交评论