网络五子棋的设计与实现毕业设计(论文)word格式.doc

上传人:仙人指路1688 文档编号:4030655 上传时间:2023-04-01 格式:DOC 页数:48 大小:1.16MB
返回 下载 相关 举报
网络五子棋的设计与实现毕业设计(论文)word格式.doc_第1页
第1页 / 共48页
网络五子棋的设计与实现毕业设计(论文)word格式.doc_第2页
第2页 / 共48页
网络五子棋的设计与实现毕业设计(论文)word格式.doc_第3页
第3页 / 共48页
网络五子棋的设计与实现毕业设计(论文)word格式.doc_第4页
第4页 / 共48页
网络五子棋的设计与实现毕业设计(论文)word格式.doc_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《网络五子棋的设计与实现毕业设计(论文)word格式.doc》由会员分享,可在线阅读,更多相关《网络五子棋的设计与实现毕业设计(论文)word格式.doc(48页珍藏版)》请在三一办公上搜索。

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

2、器等去构造出游戏的单机功能,在此基础上,利用SCOKET的知识,建立起服务器与客户端之间的连接,利用多线程技术来处理服务器端与客户端之间的数据传输,通信问题,使得客户端和服务器端之间能够同步的进行处理。 通过对软件的编写,更深入的理解了面向对象的概念,也体会到利用面向对象语言处理一些问题的优势。同时也加深了对多线程,流套接字等高级技术的理解。关键词: 多线程 流套接字 数据传输 同步AbstractAt present, With the rapid development of computer network. Its not an exaggeration to say that PK(

3、player killer) has become a necessity in most peoples lives.Taking computer technology and the network technology as the core, modern network technology is already used in the real life and the production. The leisure network game sets interest, entertainment, interaction and intelligence-developmen

4、t 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 of network because of various causes. In order to satisfy the above clients requirements. A large number of games ,usually named as “

5、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 the network. Its called for stand-alone version games. Just as its name implies, the later is named as online version gamesThis sof

6、tware implemented with JAVA language, and according to the understanding of SCOKET ,GUI and paint image chnology. Established in these foundatio , the server co ects with the multi- client, and proce es the information between many clients using the multi-thread proceing technology. it is very conve

7、nient for both client and server to do the synchronous processing.Through to the software compilation, deepen understanding and gra to the technology above understanding and holding.Key Words:multiple thread, Socket, transmission data, synchronism.目 录摘 要IAbstractII第一章:绪论11.1 前 言1第二章 开发工具、环境及其技术22.1

8、JAVA简介22.1.1JAVA 历史:22.1.2 Java的特点:32.1.3 Java中线程概念:52.1.4 Socket 机制:72.2 Java开发工具9第三章 程序设计开发133.1程序设计思路133.1.1界面设计133.1.2算法设计143.2 用例图和类图173.3 程序的设计233.4 程序的运行303.5 程序测试36结 语41参 考 文 献42致 谢43第一章:绪论1.1 前 言电脑已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等。Windows系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家,各行各业的人们无

9、须经过特别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。Java语言作为一种面向对象的编程语言,具有分布式,可移植,高性能,多线程等特点。通过系统的学习,人们就可以使用它开发出功能齐全,满足特殊需求的应用程序。Java语言易学易用,对学习者掌握技能,开拓思维都有很大的帮助。 我作为一名学生,在系统的学习了Java语言之后,经常用它搞一些小程序。这次毕业设计,正好将学过的Java语言中的各种技术综合起来,用Jbuilder2006开发工具编写一个小游戏,既对自己学过的技能

10、进行一次检验,也能系统地将学过的知识复习巩固。随着计算机技术的不断发展,网络技术的普及范围越来越广,网络能够提供的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。如今网络休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。网络五子棋游戏是使用Java语言开发的一款游戏。它使用SOCKET建立连接,多线程处理数据,以及可嵌入网络浏览器的ALET作为客户端,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易。通过对该软件的编写,还可以巩固我们对以上各种知识的掌握和理解。第二章 开发工具、环境及其技术2.1 JAVA简介2.1.1JAVA

11、 历史:1991年,电视机,机顶盒,录象机的开发设计需要一种可移植、方便、高效的计算机语言。为了满足这种需求,由Sun公司的Patrick Haughton和James Gosling领导的技术小组开发了JAVA。上世纪九十年代中期,Sun推出了Sun Java Development Toolkits 1.0,简称JDK1.0。JDK1.0是一个功能强大的软件包,可以用来开发小应用程序和多种操作系统(Sun Solaris,Windows Nt,Windows 95,Macintosh)的应用程序。1998年Sun推出Java 2 Platform,它定义了所有Java技术的概念和标准,即包

12、括已经实现的技术也包括尚未实现的技术;即包括Sun的实现的,也包括其它公司的实现。目前,Java 2 SDK1.5是Java 2 Platform的最新定义。这个定义又可以细分为四个版本:企业版:J2EE(Java EE),用于开发重要部门和企业级应用。 图2-1 Java SE的体系结构微型版:J2ME(Java ME),用于开发移动电话,机顶盒,个人数字设备等。JavaCard:适用于智能卡的Java平台。2.1.2 Java的特点:Java技术取得今天这样的成就,依赖于这门技术的先进性,Java技术具有下列优点:n简单、健壮:许多高级语言都要由程序员进行指针运算和存储器管理。这项工作即复

13、杂又容易出错。Java不需要程序员进行指针运算和存储器管理,简化了设计,减少了出错的可能性。n面向对象:Java是面向对象的程序设计语言。与面向过程的语言相比,面向对象的语言更能反映人类对世界的认识和处理模式,具有良好的代码重用性。处理复杂、庞大而且不断变化的信息系统,必须使用面向对象的程序设计语言。n分布式:目前,在所有软件产品中,仅供单个计算机使用的单机版软件所占的比例越来越小。大多数软件都可以运行在网络环境中。Java拥有一个网络协议对象库(TCP/IP,HTTP,FTP等),可以象访问当地文件一样访问Internet上的对象。n改进的解释性:为弥补解释语言速度较慢的不足,Java采用预

14、编译的办法,将原程序生成字节代码,减轻运行时的解释工作。另一方面,有些Java运行环境采用Just-In-Time(JIT)编译器将字节代码编译成机器码直接运行,这种运行环境对于重复执行的服务器端软件特别有效,可以达到C语言的速度。n安全:Java语言在编译时删除了指针和内存分配,在运行时检查字节代码,拒绝执行非法的内存访问,超越权限的访问等。可以防御黑客攻击。n平台无关:Java通过采用虚拟机技术真正实现了与平台无关。Java软件是真正跨平台可移植的。n多线程:允许一个应用程序同时做多个任务。n动态性:Java允许下载代码模块,因此,当程序运行时也能动态升级。n高性能:经过实际的综合评测得出

15、结论,Java是高性能的。Java安装配置:各平台安装程序可以到SUN的网站上下载,在安装完成后应该进行配置,通常集成开发环境(IDE)自带JDK或进行了自动配置,如果我们通过控制台编译或运行Java程序则必须手动配置。JDK: 是Java开发工具包(J2SE Software Development Kit)的缩写,用Java语言编写applet小程序和应用程序的软件开发环境,Java开发者应该安装JDK,并且通常JDK中已包含一个JRE拷贝。JRE: 是Java运行环境 (Java Runtime Enviroment) 的缩写。它基本上就和Java虚拟机是同一个概念,运行Java程序的应

16、该安装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环境变量应设置的环境变量包括:JAVA_HOME, PATH, CLASSPATH。假设J2DK安装在“C:JDK1.5”,环境变量可设置为:nJAVA_HOME=C:JDK1.5nCLASSPATH=.nPATH=

17、%JAVA_HOME%BIN;%PATH% 图2-3 Windows下环境变量的设置2.1.3 Java中线程概念:1线程的概念一个关于计算机的简化的视图是:它有一个执行计算的处理机、包含处理机所执行的程序的ROM(只读存储器,在JAVA中也叫堆栈)、包含程序所要操作的数据的RAM(随机存储器,在JAVA中也叫堆)。在这个简化视图中,只能执行一个作业。一个关于最现代计算机比较完整的视图允许计算机在同时执行一个以上的作业。你不需关心这一点是如何实现的,只需从编程的角度考虑就可以了。如果你要执行一个以上的作业,这类似有一台以上的计算机。在这个模型中,线程(或执行上下文),被认为是带有自己的程序代码

18、和数据的虚拟处理机的封装。java.lang.Thread类允许用户创建并控制他们的线程。在单CPU的情况下,一个时刻只能运行一个进程,那么进程在运行时,也只能运行一个线程来代表该进程的执行。进程是正在执行的程序。一个或更多的线程构成了一个进程(操作系统是以进程为单位的,而进程是以线程为单位的,进程中必须有一个主线程)。一个线程(执行上下文)由三个主要部分组成:一个虚拟CPUCPU执行的代码代码操作的数据如图所示 图2-4 线程的组成 代码可以由多个线程共享,它不依赖数据。如果两个线程执行同一个类的实例的代码时,则它们可以共享相同的代码。类似地,数据可以由多个线程共享,而不依赖代码。如果两个线

19、程共享对一个公共对象的访问,则它们可以共享相同的数据。在Java编程中,虚拟处理机封装在Thread类的一个实例里。构造线程时,定义其上下文的代码和数据是由传递给它的构造函数的对象指定的。Java线程分守护线程和用户线程,由创建时设置。线程状态和调度在Java中,线程的调度是基于时间片基础上的优先级优先原则 。抢占式调度模型(优先级优先)是指可能有多个线程是可运行的,但只有一个线程在实际运行。这个线程会一直运行,直至它不再是可运行的(运行时间到,时间片原则,或者,另一个具有更高优先级的线程抢占,优先级优先原则)。对于后面一种情形,低优先级线程被高优先级线程抢占了运行的机会。线程的代码可能执行了

20、一个Thread.sleep()调用,要求这个线程暂停一段固定的时间。这个线程可能在等待访问某个资源,而且在这个资源可访问之前,这个线程无法继续运行。所有可运行线程根据优先级保存在池中。当一个被阻塞的线程变成可运行时,它会被放回相应的可运行池。优先级最高的非空池中的线程会得到处理机时间(被运行)。一个Thread对象在它的生命周期中会处于各种不同的状态。下图形象地说明了这点: 图2-5 线程的生命周期 线程进入可运行状态,并不意味着它立即开始运行。在一个只有一个CPU的机器上,在一个时刻只能进行一个动作。(下节将描述:如果有一个以上可运行线程时,系统如何分配CPU。)因为Java线程是抢占式的

21、,所以你必须确保你的代码中的线程会不时地给其它线程运行的机会。这可以通过在各种时间间隔中发出sleep()调用来做到。2.1.4 Socket 机制:基于Java的网络技术TCP/IP套接字套接字是网络软件中的一个抽象概念,套接字允许单个计算机同时服务于很多不同客户,并能够提供不同类型信息的服务。该技术由引入的端口处理,该端口既是一个特定机器上的一个被编号的套接字-通信端口.TCP/IP套接字用于在主机和Internet之间建立的可靠、双向、点对点、持续的流式连接。在java中,TCP/IP Socket连接是用包中的类实现的,这些类实现了建立网络连接和通过连接发送数据的复杂过程,我们只需使用

22、其简单接口就能实现网络通信!在java中有两类套接字,一种是服务器端套接字-.ServerSocket,另一种是客户端套接字-.Socket。ServerSocket其中,ServerSocket被设计成在等待客户建立连接之前不做任何事情的监听器,构造方法的版本如下:public ServerSocekt(int port) throws IOException-在服务器指定端口port创建队列长度为50的服务器套接字,当port为0则代表创建一个基于任意可用端口的服务器套接字。队列长度告诉系统多少与之连接的客户在系统拒绝连接之前可以挂起。public ServerSocekt(int por

23、t, int maxQueue) throws IOException-在指定端口创建指定队列长度的服务器套接字public ServerSocket(int port, int maxQueue, InetAddress bindAddr ) throws IOException在多地址主机上,我们除了可以指定端口之外,还可以通过InetAddress类来指定该套接字约束的IP地址。InetAddress在后面将学习。ServerSocket还定义了以下一些常用的方法:public Socket accept() throws IOException-该方法用于告诉服务器不停地等待,直到有客

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

25、n-关闭当前ServerSocket。任何当前被锁定的线程将在accept()方法中抛出IOException。从jdk1.4开始,java提供了关于ServerSocket的ServerSocketChannel,jdk建议用管道来实现客户端连接的监听以及关闭服务器套接字会更安全,因此,现在我们应该通过ServerSocket来得到其套接字管道,通过管道来实现服务监听以及关闭,可以通过ServerSocket的getChannel()方法来得到当前ServerSocket的相关管道。Socket该类为建立连向服务器套接字及启动协议交换而设计,当进程通过网络进行通信的时候,java技术使用流模

26、型来实现数据的通信。一个Socket包括两个流,分别为一个输入流和一个输出流,一个进程如果要通过网络向另一个进程发送数据,只需简单地写入与Socket相关联的输出流,同样,一个进程通过从与Socket相关联的输入流来读取另一个进程所写的数据。如果通过TCP/IP协议建立连接,则服务器必须运行一个单独的进程来等待连接,而某一客户机必须试图到达服务器,就好比某人打电话,必须保证另一方等待电话呼叫,这样才能实现两人之间的通信。2.2 Java开发工具开发工具JBuilder 简介中文名称:JBuilder 2006 企业完整版英文名称:Borland JBuilder Enterprise 2006

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

28、设计能够帮助开发者与开发小组提高效率,缩短产品上市时间,提供清晰的投资回报。无论对于初出茅庐的新手还是经验丰富的开发者来说,Jbuilder 都能为他们提供创新性工具,能够显著提高开发小组的生产力。这些创新性工具包括新型Struts 设计工具与Web 业务设计工具,能够加速企业Java应用程序的上市时间。在世界数千个软件实施项目中,JBuilder为首选软件,用来加速Enterprise JavaBeans (EJB )、Web、XML、Web 业务、移动与数据库应用程序的开发,支持面向领先的J2EE 平台应用服务器的快速分发。 使用集成的小组开发环境,实现小组生产力的最大化 JBuilder

29、 使用提高小组生产力与效率的增强技术,可以使Java开发小组生成可靠的、企业级应用,并且速度很快,从而提高了开发小组(包括分布于多个地方的大型小组)的生产力。有了JBuilder,开发者就可以在集成的、可升级的、可扩展的小组环境中进行工作,从而简化源代码的并行管理,对于提高效率来说好处十分明显。JBuilder 技术有助于开发小组理解并经济地复用现有的代码部件,这意味着开发者能够更加高效地利用时间,对具有类似功能的多个实例只需进行一次编码。 减少开发的风险与成本一直到分发 JBuilder 是一个灵活的、开放式解决方案,用来开发并分发Java 应用程序,赋予您选择所偏爱开发平台及版本控制系统的

30、自由,您的业务不再遭受与供应商锁定相关的、不断升级的费用的困扰。JBuilder 与多种业界领先的应用服务器的紧密集成让您能够对您所做出的技术决定进行控制,这些应用服务器包括Borland企业服务器,BEA WebLogic Server ,JBoss ,IBM WebSphere ,Oracle9i 应用服务器,Sybase EAServer 与Sun ONE 应用服务器。这样,随着业务的发展,如果需要改变供应商,则您在应用开发技术上面的投资仍能继续发挥作用,而丝毫不用为其担心。另外,JBuilder以强大的支持与服务基础架构为依托,这有助于确保您的成功。 成功地利用现有的项目并管理变更 保

31、护您的未来,利用您的过去。JBuilder 技术传承Borland 帮助企业发挥已有IT 投资更大作用的承诺,用于在企业Java 应用程序的开发过程中,继续利用现有的技术资源。JBuilder 技术对领先的业界标准与从UML到极端编程的全部开发方法提供广泛的支持,提供了一个灵活的平台,可以进行充分的扩展,以便满足复杂的Java 企业开发环境不断变化的需要。 使用可靠的工具集成,专注于开发 JBuilder 开发环境可让开发者使用从设计、开发、调试与测试直到分发与管理的应用程序开发生命周期的全部阶段。JBuilder 企业版包括了Borland Optimizeit Suite 套件性能工具,用

32、以在全部开发过程中打造质量。与Borland的Java 应用生命周期解决方案的其他部件集成在一起,这意味着开发小组可以专注于生成更好的应用程序,而不是想方设法让各种工具协同工作。JBuilder进一步提高实时可视性,让开发者一眼看清源码变更对应用的不同层次甚至整个项目的影响。这对于把软件开发变革成可管理及成功业务流程至为关键。如下图 图2-7 JBuilder开发界面JBuilder 与Borland Together 建模技术的结合,有助于JBuilder 用户更好地理解代码结构,管理项目的复杂程度。JBuilder 与Borland StarTeam 自动化配置并变更管理系统一起使用,可以

33、在全部开发周期中提高对项目的掌握程度。与著名的Borland JDataStore数据库与Borland 企业服务器进行集成,有助于您信心十足地进行分发。JBuilder 也与其他业界领先的版本控制系统与分发平台集成在一起,提供了平台的灵活性与选择的自由。第三章 程序设计开发3.1程序设计思路3.1.1界面设计给一个游戏,我们首先想到的是游戏的界面,所以一个清晰美观的界面可以让别人对我们所设计出来的游戏产生好感,一开始考虑界面的设计,界面包括,棋盘,也就是棋子绘制的范围,然后下棋的时候有一些信息,比如说网络对弈时,对方的名字,IP等要能够看到的话就该把它显示出来,所以还要一个显示这些信息的界面

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

35、分成其他的类,而这里用的是JAVA对该游戏进行开发,所以每一个类都要单一,所以把界面分成三个部分:一个是棋盘类,也是主要的类,一个是消息面板的类,还有一个就是控制面板的类。这样一来,我们就可以对他们进行单独的操作了,而且组织他们也比较方便,我们可以根据自己的风格,自己的喜好来组织他们,把整个界面做的美观清晰。而且对他们进行操作也不影响其他组件。把对棋盘界面设计好了,我们就应该考虑棋子了,棋子怎样画出来,怎样才能让棋子按我们所想的方式来绘制出来呢。我们就想,肯定是每次当点击鼠标的时候就在点击鼠标的地方画一个棋子,所以我们还得定义一个棋子的类来对我们点击鼠标时把棋子绘制出来。这样我们就差不多把棋的

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

37、变量来控制自能不能下棋,如自己下了棋而计算机还没下棋的话那就得让自己不能下棋就是说点击鼠标没用(当然这种情况是不可能的,因为计算机计算的速度很快,所以一般人下完棋后计算机就马上绘制出了所须下的棋子,只是为了说明在网络对弈时候该这样控制)。人可以随意的下子,可是计算机就要计算在那个位置下子了。这里由计算机下子的算法来确定,对弈的话就不象单机游戏一样,要计算机来判断人下子之后计算机下那一个地方了,对弈只要在双方下子的时候判断赢棋情况,当然还要同步的控制两个人下棋的顺序,这样的话就要用到线程了,各自都继承或实现线程类或接口,以便各自能随时单独控制接发消息。服务器端和客户端之间的流程是这样的,首先在服

38、务器断开启自定义的端口来监听客户端的请求,若有请求则建立连接,否则处于等待状态,建立连接通信后,服务器端和客户端都创建独立的线程来处理信息的发送接收方法,信息包括:玩家的姓名,下的棋子的颜色,位置等。信息发送和接收依靠网络流来传递。 在网络对战的设计上,游戏系统由服务器端和客户端构成,形成点对点模式的连接和通信,在服务器端建立主机,输入己方的名字,在客户端连接的状态下可以互通信息,显示服务器的状态,即服务器和客户端的连接情况,在客户端需要输入服务器端主机的IP、端口、姓名、在连接状态下可以与服务器通信,还可以显示当前状态。3.1.2算法设计这里算法的设计主要是讲单机的算法,包括确定计算机下棋的

39、位置和判断赢棋的情况先考虑一下整个棋盘上五子连的情况,也就是说在整个棋盘上有多少种情况能构成五子连,这里定义的是一个15*15的棋盘,如下图 图 3-1 棋盘上五子连情况有四种方式的五子连,横的、竖的、右斜、左斜,横的情况有15*11种,竖的有15*11种,右斜有11*11种,左斜有11*11种,总共是572种,并且对每中情况按顺序进行标号,如点(1)可以属于第1种,第165种(从第0种开始),第331种,点(2)可以属于地1种,第2种,第157种,第332种。定义两个三维数组caseBlack1515572,caseWhite1515572分别用来存放白棋和黑棋各个点的情况,前面两维存放的是

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

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

42、属的情况 该数组在点(1)位置时,黑子的情况2(图上)有一个黑子,所以在该点上加4分,既scoreBlack44+=4,同样白棋在情况三上有一个白棋所以scoreWhite44+=4,而点(1)又在情况4上有一个白棋,所以scoreWhite44+=4,即这个点上又加上了4,而点(2)应为有棋,所以不做判断,在点(3)这个位置时,因为没有任何棋子,对游戏者来说也就是说不适合攻击也不适合防守,所以也不做判断,而点(4)位置,对黑棋来看,情况5是两个子,加上21分,在情况6上面又有一个子,所以又加4,在情况9上面有一个子所以再4,在情况10上面有一个子,再加4所以scoreBlack69=21+4

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

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

45、执行这些动作,并产生传递特定参与者的价值的可观察结果。这是UML对用例的正式定义,对我们初学者可能有点难懂。我们可以这样去理解,用例是参与者想要系统做的事情。对于对用例的命名,我们可以给用例取一个简单、描述性的名称,一般为带有动作性的词。用例在画图中用椭圆来表示,椭圆下面附上用例的名称。 图3-4 用例 系统边界是用来表示正在建模系统的边界。边界内表示系统的组成部分,边界外表示系统外部。系统边界在画图中方框来表示,同时附上系统的名称,参与者画在边界的外面,用例画在边界里面。因为系统边界的作用有时候不是很明显,所以我个人理解,在画图时可省略。箭头用来表示参与者和系统通过相互发送信号或消息进行交互

46、的关联关系。箭头尾部用来表示启动交互的一方,箭头头部用来表示被启动的一方,其中用例总是要由参与者来启动。用例图主要的作用有三个:(1)获取需求;(2)指导测试;(3)还可在整个过程中的其它工作流起到指导作用。对问题做出了分析之后,就可以根据分析的结果画出用例图了,因为下棋的角色是人,所以角色就是下棋者,下棋者直接发生的动作是点击鼠标,在棋盘上绘制棋子,所以就有可以把整个下棋的过程分为两个用例。绘制棋盘界面和点击鼠标下棋,点击鼠标下棋包含了绘制棋子的动作,绘制棋子界面包括绘制控制界面,绘制消息界面,和他直接的棋盘界面。用例图如下。 图3-5 五子棋用例图类图(Class diagram)类图是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性信息。 类图(Class diagram)由许多(静态)说明性的模型元素(例如类、包和它们之间的关系,这些元素和它们的内容互相连接)组成。类图可以组织在(并且属于)包中,仅显示特定包中的相关内容。类图(Class diagram)是最常用的UML图,显示出类、接口以及它们之间的静态结构和关系;它用于描述系统的

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号