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

下载本文档

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

文档简介

南昌工程学院本(专)科毕业设计(论文) 网络五子棋的设计与实现网络五子棋的设计与实现 Designe and implements the Gobang of network 总计总计毕业设计(论文)毕业设计(论文)4343页页 表表格格0 0个个 插插图图42幅幅 南昌工程学院本(专)科毕业设计(论文) I 摘要 目前,随着计算机网络的的发展,PK 已经成为现在人生活的一部分,人们 以不同的方式通过网络来娱乐,休闲。以计算机技术和网络技术为核心的现代网 络技术已经在现实生活和生产中得到了广泛的使用,休闲类网络游戏集趣味性, 娱乐性,互动性和益智性于一体,已经成为多数人群的休闲方式,也为多数人所 喜好。当然,为了满足没有网络同样能娱乐的要求,许多小游戏做成了单机和网 络的双功能。 本软件使用 JAVA 语言实现,通过对图形界面,绘图,布局管理器等去构造 出游戏的单机功能,在此基础上,利用 SCOKET 的知识,建立起服务器与客户端 之间的连接,利用多线程技术来处理服务器端与客户端之间的数据传输,通信问 题,使得客户端和服务器端之间能够同步的进行处理。 通过对软件的编写,更深入的理解了面向对象的概念,也体会到利用面向对 象语言处理一些问题的优势。同时也加深了对多线程,流套接字等高级技术的理 解。 关键词关键词: 多线程 流套接字 数据传输 同步 II Abstract Atpresent, With the rapid development of computer network. Its not an exaggeration to say that PK(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-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 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 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 with 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 understanding and holding Key Words:multiple thread, Socket, transmission data, synchronism. 南昌工程学院本(专)科毕业设计(论文) III 目目录录 摘要I AbstractII 第一章:绪论1 1.11.1前前 言言1 第二章开发工具、环境及其技术2 2.12.1JAVAJAVA 简介简介.2 2.1.1JAVA 历史: 2 2.1.2 Java 的特点:. 3 2.1.3 Java 中线程概念:. 5 2.1.4Socket 机制: 7 2.22.2JavaJava 开发工具开发工具.9 第三章程序设计开发13 3.13.1 程序设计思路程序设计思路.13 3.1.1界面设计 13 3.1.2算法设计 14 3.23.2用例图和类图用例图和类图17 3.33.3程序的设计程序的设计23 3.43.4程序的运行程序的运行30 3.53.5程序测试程序测试36 结语41 参 考 文 献42 致谢43 IV 南昌工程学院本(专)科毕业设计(论文) 1 第一章:绪论 1.11.1前前 言言 电脑已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、辅 助设计、图形图像处理、教育培训以及游戏娱乐等。Windows 系统的推出使电脑 从高雅的学术殿堂走入了寻常百姓家, 各行各业的人们无须经过特别的训练就能 够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满了花样繁 多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适 合自己特殊需求的软件。Java 语言作为一种面向对象的编程语言,具有分布式, 可移植,高性能,多线程等特点。通过系统的学习,人们就可以使用它开发出功 能齐全,满足特殊需求的应用程序。Java 语言易学易用,对学习者掌握技能, 开拓思维都有很大的帮助。 我作为一名学生,在系统的学习了 Java 语言之后,经常用它搞一些小程序。 这次毕业设计, 正好将学过的 Java 语言中的各种技术综合起来, 用 Jbuilder2006 开发工具编写一个小游戏,既对自己学过的技能进行一次检验,也能系统地将学 过的知识复习巩固。 随着计算机技术的不断发展,网络技术的普及范围越来越广,网络能够提供 的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。如今网 络休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大 部分现代人休闲娱乐的首选。 网络五子棋游戏是使用 Java 语言开发的一款游戏。 它使用 SOCKET 建立连接, 多线程处理数据,以及可嵌入网络浏览器的 ALET 作为客户端,这些特点使这款 游戏无论是服务器还是客户端的实现都相对容易。通过对该软件的编写,还可以 巩固我们对以上各种知识的掌握和理解。 第二章第二章 开发工具开发工具、环境及其技术环境及其技术 2 第二章开发工具、环境及其技术 2.12.1JAVAJAVA 简介简介 2.1.1JAVA 历史: 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 技术的概念和标准,即 包括已经实现的技术也包括尚未实现的技术;即包括 Sun 的实现的,也包括其它 公司的实现。目前,Java 2 SDK1.5 是 Java 2 Platform 的最新定义。这个定义 又可以细分为四个版本: 企业版:J2EE(Java EE),用于开发重要部门和企业级应用。 图 2-1Java SE 的体系结构 微型版:J2ME(JavaME),用于开发移动电话,机顶盒,个人数字设备等。 南昌工程学院本(专)科毕业设计(论文) 3 JavaCard:适用于智能卡的 Java 平台。 2.1.2 Java 的特点: Java 技术取得今天这样的成就,依赖于这门技术的先进性,Java 技术具有 下列优点: 简单、健壮:许多高级语言都要由程序员进行指针运算和存储器管理。这项 工作即复杂又容易出错。Java 不需要程序员进行指针运算和存储器管理,简化 了设计,减少了出错的可能性。 面向对象:Java 是面向对象的程序设计语言。与面向过程的语言相比,面向 对象的语言更能反映人类对世界的认识和处理模式,具有良好的代码重用性。处 理复杂、庞大而且不断变化的信息系统,必须使用面向对象的程序设计语言。 分布式:目前,在所有软件产品中,仅供单个计算机使用的单机版软件所占 的比例越来越小。大多数软件都可以运行在网络环境中。Java 拥有一个网络协 议对象库(TCP/IP,HTTP,FTP 等) ,可以象访问当地文件一样访问 Internet 上的 对象。 改进的解释性:为弥补解释语言速度较慢的不足,Java 采用预编译的办法, 将原程序生成字节代码,减轻运行时的解释工作。另一方面,有些 Java 运行环 境采用 Just-In-Time(JIT)编译器将字节代码编译成机器码直接运行,这种运行 环境对于重复执行的服务器端软件特别有效,可以达到 C 语言的速度。 安全:Java 语言在编译时删除了指针和内存分配,在运行时检查字节代码, 拒绝执行非法的内存访问,超越权限的访问等。可以防御黑客攻击。 平台无关:Java 通过采用虚拟机技术真正实现了与平台无关。Java 软件是 真正跨平台可移植的。 多线程:允许一个应用程序同时做多个任务。 动态性:Java 允许下载代码模块,因此,当程序运行时也能动态升级。 高性能:经过实际的综合评测得出结论,Java 是高性能的。 Java 安装配置: 各平台安装程序可以到 SUN 的网站上下载,在安装完成后应该进行配置,通常集 成开发环境(IDE)自带 JDK 或进行了自动配置,如果我们通过控制台编译或运 第二章第二章 开发工具开发工具、环境及其技术环境及其技术 4 行 Java 程序则必须手动配置。 JDK: 是 Java 开发工具包(J2SE Software Development Kit)的缩写,用 Java 语言编写 applet 小程序和应用程序的软件开发环境, Java 开发者应该安装 JDK, 并且通常 JDK 中已包含一个 JRE 拷贝。 JRE: 是 Java 运行环境 (Java Runtime Enviroment) 的缩写。 它基本上就和 Java 虚拟机是同一个概念,运行 Java 程序的应该安装 JRE。 图 2-2JDK 安装目录示例 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” ,环境变量可设置为: JAVA_HOME=C:JDK1.5 CLASSPATH=. PATH=%JAVA_HOME%BIN;%PATH% 南昌工程学院本(专)科毕业设计(论文) 5 图 2-3Windows 下环境变量的设置 2.1.3 Java 中线程概念: 1线程的概念 一个关于计算机的简化的视图是:它有一个执行计算的处理机、包含处理机 所执行的程序的 ROM(只读存储器,在 JAVA 中也叫堆栈)、包含程序所要操作的 数据的 RAM(随机存储器,在 JAVA 中也叫堆)。在这个简化视图中,只能执行一 个作业。 一个关于最现代计算机比较完整的视图允许计算机在同时执行一个以上 的作业。 你不需关心这一点是如何实现的,只需从编程的角度考虑就可以了。如果你 要执行一个以上的作业,这类似有一台以上的计算机。在这个模型中,线程(或 执行上下文) ,被认为是带有自己的程序代码和数据的虚拟处理机的封装。 java.lang.Thread 类允许用户创建并控制他们的线程。在单 CPU 的情况下,一 个时刻只能运行一个进程,那么进程在运行时,也只能运行一个线程来代表该进 程的执行。 进程是正在执行的程序。一个或更多的线程构成了一个进程(操作系统是以进程 为单位的, 而进程是以线程为单位的, 进程中必须有一个主线程) 。 一个线程 (执 行上下文)由三个主要部分组成: 一个虚拟 CPU 第二章第二章 开发工具开发工具、环境及其技术环境及其技术 6 CPU 执行的代码 代码操作的数据 如图所示 图2-4 线程的组成 代码可以由多个线程共享,它不依赖数据。如果两个线程执行同一个类的实 例的代码时,则它们可以共享相同的代码。 类似地,数据可以由多个线程共享,而不依赖代码。如果两个线程共享对一 个公共对象的访问,则它们可以共享相同的数据。 在 Java 编程中,虚拟处理机封装在 Thread 类的一个实例里。构造线程时, 定义其上下文的代码和数据是由传递给它的构造函数的对象指定的。Java 线程 分守护线程和用户线程,由创建时设置。 线程状态和调度 在 Java 中,线程的调度是基于时间片基础上的优先级优先原则 。 抢占式调度模型(优先级优先)是指可能有多个线程是可运行的, 但只有一个 线程在实际运行。这个线程会一直运行,直至它不再是可运行的(运行时间到, 时间片原则,或者,另一个具有更高优先级的线程抢占,优先级优先原则)。对 于后面一种情形,低优先级线程被高优先级线程抢占了运行的机会。 线程的代码可能执行了一个 Thread.sleep()调用,要求这个线程暂停一段固定 的时间。这个线程可能在等待访问某个资源,而且在这个资源可访问之前,这个 线程无法继续运行。 所有可运行线程根据优先级保存在池中。当一个被阻塞的线程变成可运行 时,它会被放回相应的可运行池。优先级最高的非空池中的线程会得到处理机时 南昌工程学院本(专)科毕业设计(论文) 7 间(被运行)。 一个 Thread 对象在它的生命周期中会处于各种不同的状态。 下图形象地说明了这点: 图 2-5 线程的生命周期 线程进入“可运行“状态,并不意味着它立即开始运行。在一个只有一个 CPU 的机 器上,在一个时刻只能进行一个动作。 (下节将描述:如果有一个以上可运行线 程时,系统如何分配 CPU。 ) 因为 Java 线程是抢占式的,所以你必须确保你的代码中的线程会不时地给 其它线程运行的机会。这可以通过在各种时间间隔中发出 sleep()调用来做到。 2.1.4Socket 机制: 基于 Java 的网络技术 TCP/IP 套接字 套接字是网络软件中的一个抽象概念,套接字允许单个计算机同时服务于很 多不同客户,并能够提供不同类型信息的服务。该技术由引入的端口处理,该端 第二章第二章 开发工具开发工具、环境及其技术环境及其技术 8 口既是一个特定机器上的一个被编号的套接字-通信端口.TCP/IP 套接字用于 在主机和 Internet 之间建立的可靠、双向、点对点、持续的流式连接。 在 java 中,TCP/IP Socket 连接是用 包中的类实现的,这些类实现了 建立网络连接和通过连接发送数据的复杂过程, 我们只需使用其简单接口就能实 现 网 络 通 信 ! 在 java 中 有 两 类 套 接 字 , 一 种 是 服 务 器 端 套 接 字 - .ServerSocket,另一种是客户端套接字- .Socket。 ServerSocket 其中, ServerSocket 被设计成在等待客户建立连接之前不做任何事情的监听 器,构造方法的版本如下: public ServerSocekt(int port) throws IOException -在服务器指定端口 port 创建队列长度为 50 的服务器套接字,当 port 为 0 则 代表创建一个基于任意可用端口的服务器套接字。 队列长度告诉系统多少与之连 接的客户在系统拒绝连接之前可以挂起。 public ServerSocekt(int port, int maxQueue) throws IOException -在指定端口创建指定队列长度的服务器套接字 public ServerSocket(int port, int maxQueue, InetAddress bindAddr ) throws IOException 在多地址主机上,我们除了可以指定端口之外,还可以通过 InetAddress 类来指 定该套接字约束的 IP 地址。InetAddress 在后面将学习。 ServerSocket 还定义了以下一些常用的方法: public Socket accept() throws IOException -该方法用于告诉服务器不停地等待, 直到有客户端连接到该ServerSocket 指定的端口,一旦有客户端通过网络向该端口发送正确的连接请求,该方法就会 返回一个表示服务器与客户端连接已建立的 Socket 对象,接下来我们就可以通 过这个返回的 Socket 对象实现服务器与指定客户端的通信。注意:accept()方 法会让服务器中的当前线程暂停下来,直到有客户端的正确连接发送过来。 public void bind(SocketAddress endpoint) throws IOException -绑定该 ServerSocket 到指定的 endpoint 地址(IP 地址和端口) public void close() throws IOException 南昌工程学院本(专)科毕业设计(论文) 9 -关闭当前 ServerSocket。任何当前被锁定的线程将在 accept()方法中抛出 IOException。 从 jdk1.4 开始,java 提供了关于 ServerSocket 的 ServerSocketChannel,jdk 建议用管道来实现客户端连接的监听以及关闭服务器套接字会更安全,因此,现 在我们应该通过 ServerSocket 来得到其套接字管道,通过管道来实现服务监听 以 及 关 闭 , 可 以 通 过 ServerSocket 的 getChannel() 方 法 来 得 到 当 前 ServerSocket 的相关管道。 Socket 该类为建立连向服务器套接字及启动协议交换而设计,当进程通过网络进行 通信的时候, java 技术使用流模型来实现数据的通信。 一个 Socket 包括两个流, 分别为一个输入流和一个输出流, 一个进程如果要通过网络向另一个进程发送数 据, 只需简单地写入与 Socket 相关联的输出流, 同样, 一个进程通过从与 Socket 相关联的输入流来读取另一个进程所写的数据。 如果通过 TCP/IP 协议建立连接, 则服务器必须运行一个单独的进程来等待连接, 而某一客户机必须试图到达服务 器,就好比某人打电话,必须保证另一方等待电话呼叫,这样才能实现两人之间 的通信。 2.22.2JavaJava 开发开发工具工具 开发工具 JBuilder 简介 中文名称中文名称:JBuilder 2006 企业完整版 英文名称英文名称:Borland JBuilder Enterprise 2006 版本版本:2006 发行时间发行时间:2005 年 09 月 地区地区:美国 语言语言:英语 简介简介: 第二章第二章 开发工具开发工具、环境及其技术环境及其技术 10 图 2-6JBuilder 启动界面 Borland JBuilder 开发环境是 Borland 用于 Java 平台的应用程序生命周期 管理技术套件的关键部分。 其被设计用来为开发小组提供所需的开发工具,以便在企业应用程序开发过 程中获得最大的生产力,提供了下一代的解决方案,使得开发小组能够做更多的 工作:减少开发成本,交付一致的、高品质的应用,缩短产品上市的时间。 事实上,在享有盛名的 JBuilder IDE 之内,开发者能够在从设计到分发的全部 应用程序开发生命周期中成为主要角色。 使用省时的工具加速 Java 的开发 Jbuilder 的设计能够帮助开发者与开发小组提高效率,缩短产品上市时间,提 供清晰的投资回报。无论对于初出茅庐的新手还是经验丰富的开发者来说, Jbuilder 都能为他们提供创新性工具,能够显著提高开发小组的生产力。 这些创新性工具包括新型 Struts 设计工具与 Web 业务设计工具,能够加速 企业 Java 应用程序的上市时间。在世界数千个软件实施项目中,JBuilder 为首 选软件,用来加速 Enterprise JavaBeans (EJB )、Web、XML、Web 业务、移动 与数据库应用程序的开发,支持面向领先的 J2EE 平台应用服务器的快速分发。 使用集成的小组开发环境, 实现小组生产力的最大化 JBuilder 使用提高小组生 产力与效率的增强技术,可以使 Java 开发小组生成可靠的、企业级应用,并且 速度很快,从而提高了开发小组(包括分布于多个地方的大型小组)的生产力。 有了 JBuilder,开发者就可以在集成的、可升级的、可扩展的小组环境中进行 工作,从而简化源代码的并行管理,对于提高效率来说好处十分明显。JBuilder 南昌工程学院本(专)科毕业设计(论文) 11 技术有助于开发小组理解并经济地复用现有的代码部件, 这意味着开发者能够更 加高效地利用时间,对具有类似功能的多个实例只需进行一次编码。 减少开发 的风险与成本一直到分发 JBuilder 是一个灵活的、开放式解决方案,用来 开发并分发Java 应用程序, 赋予您选择所偏爱开发平台及版本控制系统的自由, 您的业务不再遭受与供应商锁定相关的、不断升级的费用的困扰。 JBuilder 与多种业界领先的应用服务器的紧密集成让您能够对您所做出的 技术决定进行控制,这些应用服务器包括 Borland 企业服务器,BEA WebLogic Server , JBoss , IBM WebSphere , Oracle9i 应用服务器, Sybase EAServer 与 Sun ONE 应用服务器。这样,随着业务的发展,如果需要改变供应商,则您在应 用开发技术上面的投资仍能继续发挥作用,而丝毫不用为其担心。 另外,JBuilder 以强大的支持与服务基础架构为依托,这有助于确保您的成 功。成功地利用现有的项目并管理变更 保护您的未来, 利用您的过去。 JBuilder 技术传承 Borland 帮助企业发挥已有 IT 投资更大作用的承诺, 用于在企业 Java 应用程序的开发过程中,继续利用现有的技术资源。JBuilder 技术对领先的业 界标准与从 UML 到极端编程的全部开发方法提供广泛的支持, 提供了一个灵活的 平台,可以进行充分的扩展,以便满足复杂的 Java 企业开发环境不断变化的需 要。 使用可靠的工具集成,专注于开发 JBuilder 开发环境可让开发者使用从 设计、开发、调试与测试直到分发与管理的应用程序开发生命周期的全部阶段。 JBuilder 企业版包括了 Borland Optimizeit Suite 套件性能工具,用以在全 部开发过程中打造质量。与 Borland 的 Java 应用生命周期解决方案的其他部件 集成在一起,这意味着开发小组可以专注于生成更好的应用程序,而不是想方设 法让各种工具协同工作。 JBuilder 进一步提高实时可视性, 让开发者一眼看清源码变更对应用的不同 层次甚至整个项目的影响。 这对于把软件开发变革成可管理及成功业务流程至为 关键。如下图 第二章第二章 开发工具开发工具、环境及其技术环境及其技术 12 图 2-7 JBuilder 开发界面 JBuilder 与 Borland Together 建模技术的结合,有助于 JBuilder 用户更好地理解代码结 构,管理项目的复杂程度。JBuilder 与 Borland StarTeam 自动化配置并变更管理系统一起使 用,可以在全部开发周期中提高对项目的掌握程度。与著名的 Borland JDataStore 数据库与 Borland 企业服务器进行集成,有助于您信心十足地进行分发。JBuilder 也与其他业界领先 的版本控制系统与分发平台集成在一起,提供了平台的灵活性与选择的自由。 南昌工程学院本(专)科毕业设计(论文) 13 第三章程序设计开发 3.13.1 程序设计思路程序设计思路 3.1.1界面设计 给一个游戏,我们首先想到的是游戏的界面,所以一个清晰美观的界面可以 让别人对我们所设计出来的游戏产生好感,一开始考虑界面的设计,界面包括, 棋盘, 也就是棋子绘制的范围, 然后下棋的时候有一些信息, 比如说网络对弈时, 对方的名字,IP 等要能够看到的话就该把它显示出来,所以还要一个显示这些 信息的界面,另外,也是在网络游戏时,要输入 IP,姓名的信息,还要一个连 接服务器(客户端端)或者是开启服务器(服务器端)的按钮。这些控制的组建 应该放在一起,一开始考虑把他们放在一个面板里面,处理这些信息只要对这一 个面板进行操作就可以了,但是如果这样的话可以想像,当你计算棋子所字范围 的时候还要考虑到消息面板所占的空间,还有那些控制面板的空间,而且放在一 起是也不好摆放,他们的背景颜色,等一些属性都是一样的,那样给人的感觉也 不大美观。 放在一起主要原因是对他们超做不方便,对上面每一个组建进行操作都可能 影响到其他的内容,显示情况等等。从面向对象的角度来看,这也不符合,都放 在一起,那些东西都在一个类里面,他们还可以划分成其他的类,而这里用的是 JAVA 对该游戏进行开发,所以每一个类都要单一,所以把界面分成三个部分: 一个是棋盘类,也是主要的类,一个是消息面板的类,还有一个就是控制面板的 类。 这样一来, 我们就可以对他们进行单独的操作了, 而且组织他们也比较方便, 我们可以根据自己的风格,自己的喜好来组织他们,把整个界面做的美观清晰。 而且对他们进行操作也不影响其他组件。 把对棋盘界面设计好了,我们就应该考虑棋子了,棋子怎样画出来,怎样才 能让棋子按我们所想的方式来绘制出来呢。我们就想,肯定是每次当点击鼠标的 时候就在点击鼠标的地方画一个棋子, 所以我们还得定义一个棋子的类来对我们 点击鼠标时把棋子绘制出来。这样我们就差不多把棋的界面棋子就确定了,而且 也确定了几个我们所需要的类。我们就可以先定义好这些类了。界面设计出来之 第三章第三章 程序设计开发程序设计开发 14 后我们就会想,有了界面,我们怎样控制棋子在棋盘上进行下棋呢。尤其是单机 游戏时,怎样让你在棋盘上下棋之后就让计算机自己下棋呢,如果能下棋,又怎 样让计算机计算出在什么位置下呢这样的话就是算法设计了 有了以上的准备就可以把棋盘绘制出来了,然后就是下棋了,如果是单机游 戏,每次在适当位置点击鼠标的时候就在所点击的位置上画出你这个角色的颜 色,在绘制出你下棋位置的棋之后你所希望看到的是计算机下棋了,也就是说在 你下完棋之后就是计算机自动的下了,计算机要自己选择一个合适的位置来下 棋,也就是说每次自己下完棋之后就要有一个控制变量来控制自能不能下棋,如 自己下了棋而计算机还没下棋的话那就得让自己不能下棋就是说点击鼠标没用 (当然这种情况是不可能的,因为计算机计算的速度很快,所以一般人下完棋后 计算机就马上绘制出了所须下的棋子,只是为了说明在网络对弈时候该这样控 制) 。人可以随意的下子,可是计算机就要计算在那个位置下子了。这里由计算 机下子的算法来确定,对弈的话就不象单机游戏一样,要计算机来判断人下子之 后计算机下那一个地方了,对弈只要在双方下子的时候判断赢棋情况,当然还要 同步的控制两个人下棋的顺序,这样的话就要用到线程了,各自都继承或实现线 程类或接口,以便各自能随时单独控制接发消息。 服务器端和客户端之间的流程是这样的,首先在服务器断开启自定义的端口 来监听客户端的请求,若有请求则建立连接,否则处于等待状态,建立连接通信 后, 服务器端和客户端都创建独立的线程来处理信息的发送接收方法, 信息包括: 玩家的姓名,下的棋子的颜色,位置等。信息发送和接收依靠网络流来传递。 在网络对战的设计上,游戏系统由服务器端和客户端构成,形成点对点模式 的连接和通信,在服务器端建立主机,输入己方的名字,在客户端连接的状态下 可以互通信息,显示服务器的状态,即服务器和客户端的连接情况,在客户端需 要输入服务器端主机的 IP、端口、姓名、在连接状态下可以与服务器通信,还 可以显示当前状态。 3.1.2算法设计 这里算法的设计主要是讲单机的算法,包括确定计算机下棋的位置和判断赢 棋的情况 南昌工程学院本(专)科毕业设计(论文) 15 先考虑一下整个棋盘上五子连的情况,也就是说在整个棋盘上有多少种情况 能构成五子连,这里定义的是一个 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分别用来存放白棋 和黑棋各个点的情况,前面两维存放的是某个点的坐标,第三维放的是他们所属 于的情况,并把这个数组定义成 boolean 类型的。也就是说如果这个点是这种情 况的话就为 true 况的就为 false。定义一个二维数组 colorFive2572,这个 数组存放的是白子和黑子在每种情况是棋子的个数,如 colorFive02=3,就 代表黑棋在第二种五子连情况的个数是 3,这个数组就纪录了黑棋和白棋每种五 子连情况上的个数,可以用这个数组来确定有没有赢棋的情况。在每下一个棋子 的时候,先遍历这个点属于那些情况,再在每种情况上的 colorFive 对应的位置 第三章第三章 程序设计开发程序设计开发 16 加上 1,定义一个数组 haveChess1515,来存放每一个点上是否有棋,这个 数组可以用来在你下棋的时候来判断你所下的点的位置是否有棋, 如果有你就不 能在你所点击的位置下棋。 如果这个数组的某个点的值等于 2 则表示在这个点上 没有棋,如果等于 0 表示这个点上有黑棋,等于 1 则表示该位置上有白棋,如 haveChess102=1,则表示在(10,2)这个位置上有白棋,如果你点击这里 的话就不能在这个位置下棋,要选择其他位置。这样的话就可以来判断计算机能 不能下棋了,也能判断出赢棋的情况,那么计算机又应该在那个地方下棋最合适 呢? 在这里,定义两个二维数组,scoreBlack1515 ,scoreWhite1515 分别用来存放白棋和黑棋各个未下棋点的分数, 以判断计算机在那个点下棋最合 适。如下图所示 图 3-2 每个点下子后所属的情况 该数组在点(1)位置时,黑子的情况 2(图上)有一个黑子,所以在该点上 加 4 分,既 scoreBlack44+=4,同样白棋在情况三上有一个白棋所以 scoreWhite44+=4 , 而 点 ( 1 ) 又 在 情 况 4 上 有 一 个 白 棋 , 所 以 scoreWhite44+=4,即这个点上又加上了 4,而点(2)应为有棋,所以不做 南昌工程学院本(专)科毕业设计(论文) 17 判断,在点(3)这个位置时,因为没有任何棋子,对游戏者来说也就是说不适 合攻击也不适合防守,所以也不做判断,而点(4)位置,对黑棋来看,情况 5 是两个子,加上 21 分,在情况 6 上面又有一个子,所以又加 4,在情况 9 上面 有 一 个 子 所 以 再 4 , 在 情 况 10 上 面 有 一 个 子 , 再 加 4 所 以 scoreBlack69=21+4+4+4=33,对所有的未下棋的点的分数都做一个计算,把 白棋和黑棋的在各个点的分数都计算出来,再比较白棋和黑棋他们之中最大的, 也就是下棋的最佳位置了。 判断赢棋情况就每次下子之前就在数组colorFive里面找是否有棋子数等与 5 的,如果有就有赢棋的情况了,因为在下棋之前也就是说在把这个棋子画到棋 盘上之前,它实际已经下棋了,也就是说这个点的各个数据已经改变了,所以就 可以判断。 3.23.2用例图和类图用例图和类图 用例图(use case diagram) 用例图就是由主角、用例以及它们之间的关系构成的图。该图说明了用例模 型中的关系。 可以将用例图组织到用例包中,并归用例包所有,让特定包中仅显示互为关 联关系的内容。用例图由参与者(Actor) 、用例(Use Case) 、系统边界、箭头 组成,用画图的方法来完成。 参与者不是特指人,是指系统以外的,在使用系统或与系统交互中所扮演的 角色。因此参与者可以是人,可以是事物,也可以是时间或其他系统等等。还有 一点要注意的是,参与者不是指人或事物本身,而是表示人或事物当时所扮演的 角色。比如小明是图书馆的管理员,他参与图书馆管理系统的交互,这时他既可 以作为管理员这个角色参与管理,也可以作为借书者向图书馆借书,在这里小明 扮演了两个角色,是两个不同的参与者。参与者在画图中用简笔人物画来表示, 人物下面附上参与者的名称。 第三章第三章 程序设计开发程序设计开发 18 图 3-3 角色 用例是对包括变量在内的一组动作序列的描述,系统执行这些动作,并产 生传递特定参与者的价值的可观察结果。这是 UML 对用例的正式定义,对我们初 学者可能有点难懂。我们可以这样去理解,用例是参与者想要系统做的事情。对 于对用例的命名,我们可以给用例取一个简单、描述性的名称,一般为带有动作 性的词。用例在画图中用椭圆来表示,椭圆下面附上用例的名称。 图 3-4 用例 系统边界是用来表示正在建模系统的边界。边界内表示系统的组成部分,边 界外表示系统外部。系统边界在画图中方框来表示,同时附上系统的名称,参与 者画在边界的外面, 用例画在边界里面。 因为系统边界的作用有时候不是很明显, 所以我个人理解,在画图时可省略。 箭头用来表示参与者和系统通过相互发送信号或消息进行交互的关联关系。 箭头尾部用来表示启动交互的一方,箭头头部用来表示被启动的一方,其中用例 总是要由参与者来启动。 用例图主要的作用有三个: (1)获取需求; (2)指导测试; (3)还可在整个 过程中的其它工作流起到指导作用。 对问题做出了分析之后,就可以根据分析的结果画出用例图了,因为下棋的 角色是人,所以角色就是下棋者,下棋者直接发生的动作是点击鼠标,在棋盘上 绘制棋子,所以就有可以把整个下棋的过程分为两个用例。绘制棋盘界面和点击 鼠标下棋,点击鼠标下棋包含了绘制棋子的动作,绘制棋子界面包括绘制控制界 面,绘制消息界面,和他直接的棋盘界面。用例图如下。 南昌工程学院本(专)科毕业设计(论文) 19 图 3-5 五子棋用例图 类图(Class diagram) 类图是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及 它们与其他类的关系等。类图不显示暂时性信息。 类图(Class diagram)由许多(静态)说明性的模型元素(例如类、包和它们之 间的关系, 这些元素和它们的内容互相连接) 组成。 类图可以组织在 (并且属于) 包中,仅显示特定包中的相关内容。类图(Class diagram)是最常用的 UML 图,显 示出类、接口以及它们之间的静态结构和关系;它用于描述系统的结构化设计。 类图最基本的元素是类或者接口。 类图通常包含如下的内容 类 接口 协作 关系 同其他的图一样,类图也可以包含注解和限制,类图中也可以包含包和子系 统,这两者用来将元素分组。有时后你也可以将类的实例放到类图中。 注:组件图和分布图和类图类似,虽然他们不包含类而是分别包含组件和节 点。 你通常通过下面三种方式使用类图: 1,为系统词汇建模型 第三章第三章 程序设计开发程序设计开发 20 为系统的词汇建模实际上是从词汇表中发现类,发现它的责任。 2,模型化简单的协作 协作是指一些类、接口和其他的元素一起工作提供一些合作的行为,这些行 为不是简单地将元素加能得到的。例如:当你为一个分布式的系统中的事务处理 过程建模型时,你不可能只通过一个类来明白事务是怎样进行的,事实上这个过 程的执行涉及到一系列的类的协同工作。使用类图来可视化这些类和他们的关 系。 3,模型化一个逻辑数据库模式 想象模式是概念上设计数据库的蓝图。在很多领域,你将想保存持久性数据 到关系数据库活面向对象的数据库。你可以用类图为这些数据库模式建立模型。 1. 类(Class) 一般包含 3 个组成部分。第一个是类名;第二个是属性(attributes) ;第三个 是该类提供的方法( 类的性质可以放在第四部分;如果类中含有内部类,则会 出现第五个组成部分) 。类名部分是不能省略的,其他组成部分可以省略。 类名书写规范:正体字说明类是可被实例化的,斜体字说明类为抽象类。 属性和方法书写规范:修饰符 描述信息 属性、方法名称 参数 :返回类型| 类型,类图的画法如下 图 3-6 类的画法 属性和方法之前可附加的可见性修饰符: 加号(+)表示 public;减号(-)表示 private;#号表示 protected;省略这些 修饰符表示具有 package 包)级别的可见性。 如果属性或方法具有下划线,则 南昌工程学院本(专)科毕业设计(论文) 21 说明它是静态的。 描述信息使用 结尾。 类的性质是由一个属性、一个赋值 方法和一个取值方法组成。书写方式和方法类似。 2. 包(Package) 包是一种常规用途的组合机制。UML 中的一个包直接对应于 Java 中的一个 包。在 Java 中,一个包可能含有其他包、类或者同时含有这两者。进行建模时, 通常使用逻辑性的包,用于对模型进行组织;使用物理性的包,用于转换成系统 中的 Java 包。每个包的名称对这个包进行了惟一性的标识。 3. 接口(Interface) 接口是一系列操作的集合,它指定了一个类所提供的服务。它直接对应于 Java 中的一个接口类型。接口的表示有大概两种方式。具体画法见下例: 图 3-7接口的画法 4. 关系 常见的关系有:一般化关系(Generalization) ,关联关系(Association) ,聚 合关系(Aggregation) ,合成关系(Composition) ,依赖关系(Dependency) 。 其中,聚合关系(Aggregation) ,合成关系(Composition)属于关联关系 (Association) 。一般关系表现为继承或实现关系(is a),关联关系表现为变量(has a ),依赖关系表现为函数中的参数(use a)。 一般化关系:表示为类与类之间的 继承关系,接口与接口之间的继承,类对接口的实现关系。表示方法: 用一个 空心箭头实线,箭头指向父类。或空心箭头虚线,如果父类是接口。 关联关系:类与类之间的联接,它使一个类知道另一个类的属性和方法。 第三章第三章 程序设计开发程序设计开发 22 表示方法:用 实线箭头, 箭头指向被使用的类。 聚合关系:是关联关系的一种,是强的关联关系。聚合关系是整体和个体的 关系。关联关系的两个类处于同一层次上,啊聚合关系两个类处于不同的层次, 一个是整体,一个是部分。 表示方法:空心菱形实线箭头,箭头指向部分。 合成关系:是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合 关系中代表整体的对象负(责代表部分的对象的生命周期,合成关系不能共享。 表示方法:实心菱形实线箭头, 依赖关系:是类与类之间的连接,表示一个类依赖于另一个类的定义。例如 如果 A 依赖于 B,则 B 体现为局部变量,方法的参数、或静态方法的调用。 表示方法:虚线箭头 通用建模技术 没有类是单独存在的, 他们通常和别的类协作, 创造比单独工作更大的语义。 因此,除了捕获系统的词汇以外,还要将注意力集中到这些类是如何在一起工作 的。使用类图来表达这种协作。 确定你建模的机制。机制代表了部分你建模的系统的一些功能和行为,这些 功能和行为是一组类、接口和其他事物相互作用的结果。 对于每个机制,确定类、接口和其他的参与这个协作的协作。同时确定这些 事物之间的关系。 用场景来预排这些事物,沿着这条路你将发现模型中忽略的 部分和定义错误的部分。 确定用这些事物的内容来填充它们。对于类,开始于 获得一个责任(类的职责) ,然后,将它转化为具体的属性和方法。 通过对各个类的属性和方法分析,可以画出一下类图。 南昌工程学院本(专)科毕业设计(论文) 23 图 3-8 五子棋类图 3.33.3程序的设计程序的设计 分析了设计思想,有了算法,并且画出了用例图,类图,之后就可以开始设 计程序了,对程序的设计也可以理解为对类的设计,所以这里把程序的设计分为 ChessPad 类的设计, ChessPadThread 类的设计, ControlPad 类的设计, MessagePad 类的设计,Paint 类的设计,ChessClient 类和 ChessSer

温馨提示

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

评论

0/150

提交评论