Java语言程序设计课程设计五子棋

上传人:仙*** 文档编号:33890296 上传时间:2021-10-19 格式:DOC 页数:21 大小:189.50KB
收藏 版权申诉 举报 下载
Java语言程序设计课程设计五子棋_第1页
第1页 / 共21页
Java语言程序设计课程设计五子棋_第2页
第2页 / 共21页
Java语言程序设计课程设计五子棋_第3页
第3页 / 共21页
资源描述:

《Java语言程序设计课程设计五子棋》由会员分享,可在线阅读,更多相关《Java语言程序设计课程设计五子棋(21页珍藏版)》请在装配图网上搜索。

1、JAVA 课程设计专 业: 数字媒体 课程名称: Java 语言程序设计 课题名称: 五子棋 指导老师: 刘嘉欣 学 号: 09990051 姓 名: 学 号: 09990054 姓 名: II摘摘 要要目前,随着计算机网络的发展,以计算机技术和网络技术为核心的现代网络技术已经在现实生活和生产中得到了广泛的使用,休闲类网络游戏集趣味性,娱乐性,互动性和益智性于一体,已经成为多数人群的休闲方式,也为多数人所喜好。本软件使用 JAVA 语言实现,通过对图形界面,绘图,布局管理器等去构造出五子棋游戏的单机功能,在此基础上,利用 SOCKET 编程,建立起服务器与客户端之间的连接,利用多线程技术来处理

2、服务器端与客户端之间的数据传输、网络通信,使得客户端和服务器端之间能够同步的进行处理。在网络对战中实现了以下功能:建立游戏、邀请游戏、加入游戏、退出游戏、悔棋。另外,本软件还实现了网络聊天的功能,玩家加入游戏后可以和其他玩家进行对话。在加载图片以及绘制棋盘方面,采用双缓冲技术消除屏幕的闪烁现象。在人机对弈中通过遍历搜索和估值模块,来提高电脑棋手的智能。算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。关键词:关键词: 多线程,SOCKET,遍历搜索,人工智能.目目录录1. 绪论.11.1 课题背景.11.2 选题的背景和意义.11.3 主要研究内容.11.4

3、 五子棋简介.22. 开发环境及工具介绍.32.1 开发环境及运行环境.32.1.1 开发环境.32.1.2 运行环境.32.2 JAVA 简介 .32.2.1 Java 的起源与发展.32.2.2 Java 的特点.32.3 JAVA SOCKET 网络编程.52.3.1 Java Socket 网络编程基础.52.3.2 Socket 编程的实现.62.4 JAVA图形编程.63. 需求分析和总体设计.73.1 系统设计思想.73.2 系统总体设计.83.3 系统功能模块及流程.83.3.1 系统主要功能模块.83.3.2 系统主流程.93.4 玩家视图与操作.103.4.1 服务器端.1

4、03.4.2 客户端.104. 概要设计.124.1 游戏各主要类的功能与主要对象.124.1.1 服务器类.124.1.2 游戏客户端.134.1.3 网络客户端类.144.1.4 棋盘类.155. 详细设计.165.1 服务器端设计.175.2 游戏客户端设计.175.3 网络客户端设计.185.4 棋盘类设计.185.4.1 棋盘类的主要方法.185.4.2 落子算法的实现.196. 软件实现与测试.196.1 软件测试方案.206.2 网络客户端测试用例.207. 总结.20致谢.21参考文献.2211. 绪论绪论1.1 课题课题背景背景电脑已经深入到日常工作和生活的方方面面,比如文字

5、处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。Java 语言作为一种面向对象的编程语言,具有分布式,可移植,高性能,多线程等特点1。如今网络休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。网络五子棋游戏是使用 Java 语言开发的一款游戏。它使用 SOCKET 建立连接,多线程处理数据,这些特点使这款游戏无论是服务器还是客户端的实现都相

6、对容易。1.2 选题选题的背景和意的背景和意义义随着计算机网络技术的发展,网络游戏已经成为计算机技术中最具潜力的热点领域,随着联众世界、腾讯游戏等网络游戏平台的拓展,越来越多的人参与到网络游戏中。特别是其中一些休闲益智类的棋牌游戏,集趣味性、娱乐性、互动性和益智性于一体,拥有大量的用户。因此使用 Java 开发网络五子棋游戏是一个实用性很强的毕业设计项目。网络五子棋游戏的总体功能是要设计出具有精美界面的,具备人工智能的,支持网络对弈的五子棋游戏。本系统最终的目的是建立一个有具体规则的五子棋平台,使两台不同计算机的使用者通过一定的网络连接,达到网络对弈的目的,以及单机上的人机对战。1.3 主要研

7、究内容主要研究内容本课题为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用 Java开发五子棋游戏。主要完成了人机对战和网络对战 2 个功能。网络连接部分为Socket 编程应用,客户端负责界面维护和收集用户输入的信息,及错误处理。服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户列表。在人机对弈中通过简单搜索和估值模块,来提高电脑棋手的智能。分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们的搜索进行比较,在这些算法的基础上分析一些提高电脑智能方案。算法的研2究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。1

8、.4 五子棋五子棋简简介介五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。2. 开发环境及工具介绍2.1 开开发环发环境及运行境及运行环环境境2.1.1 开发环境Microsoft Windows XP Professional Service Pack 3JDK 1.60Eclipse 3.52.1.2 运行环境Intel Pentium 2 及以上处理器,128M 以上内存,20G 以上硬盘Microsoft Windows 9X/NT

9、 操作系统1024*768 或以上的屏幕分辨率2.2 Java 简简介介Java 是一种简单的、面向对象的、分布式的、解释的、安全的、可移植的、性能优异的多线程语言。它以其强安全性、平台无关性、硬件结构无关性、语言简洁、面向对象的特点,在网络编程语言中占据了无可比拟的优势,成为实现电子商务系统的首选语言2。2.2.1 Java 的起源与发展Java 是 Sun 公司在 1995 年推出的新的编程语言,它是一种跨平台的、应用于当前高速发展的网络编程语言。在编程语言中,可以认为 Basic 语言促使了 C语言的出现,C 语言促使了 C+的出现,而 C+又促使了 Java 语言的出现。自 Java

10、正式推出之后,以其特有的优势迅速发展,经过几年的发展,Java 已经在软件开发和动态网站上占有相当大的市场。Java 分为 J2SE、J2EE 和 J2ME三种。J2SE 是 Java 平台标准版,主要应用于桌面程序和 Java 小应用程序开发;J2EE 主要用于企业级开发和大型网站的开发;J2ME 主要用于手机等移动设备程序的开发3。32.2.2 Java 的特点前面已经提到过,Java 是在开发家用电器软件时开发出来的。怎么样才能让这种软件在每个平台上都能正常地运行呢?这就用到了 Java 的平台无关性。在Java 出现之前,这个问题是当时每个程序员都难以解决的问题。Java 出现之后,这

11、个问题就彻底解决了。引用他们的目标,就是只要写一次程序,在任何地方、任何时间该程序永远都能够运行。Java 是怎么实现平台无关性的呢?只要安装 Java 运行系统,Java 就可以在任何处理器上运行。Java 解释器生成与体系无关的字节码指令,这些指令对应于Java 虚拟机里表示,Java 解释器得到字节码后,对它进行转换,使之能够在不同的平台上运行。(1)简单性Java 语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务,开发者只需要知道一些概念就能够编写出一些应用程序。Java 程序相对较小,其代码能够在小机器,例如手机上运行,这应该是大家经常可以看到的。(2) 面向对象语言

12、Java 的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量和相应的方法,实现了模块化和信息的隐藏;而类则是提供了对象的原型,并且通过继承的机制,子类可以使用父类所提供的方法,以实现代码的复用。(3) 健壮性Java 语言被病毒感染和破坏得最少。大部分病毒程序常用的方法就是通过巧妙地运用地址变量如指针来获取计算机的资源,而 Java 正好放弃了难学和危险的指针功能,从而使 Java 更安全。(4) 多线程设计 Java 的目标之一,就是为了满足人们对创建交互式网上程序的需要。多线程就是为实现这个目标而设计出来的,它使用 Java 编写出来的应用程序可以同

13、时执行多个任务。多线程机制使应用程序能够并行执行,而且同步机制保证了对共享数据的正确操作。(5) 自动内存管理可以说自动内存管理是 Java 健壮性的体现,内存管理是很多种应用程序内的关键因素。在网络上的其他地方读取大量的数据,之后把该数据写入硬盘上的数据库内,一般的设计就是把数据读入内存中的某种集合内,对这些数据执行某些操作,之后把数据写入数据库。在数据写入数据库后,在下一批处理之前,临时存储数据的集合必须清空旧数据,或者被删除后再建。这种操作可能执行很多4次,在像 C+这些不提供自动垃圾搜集的语言中,手工清空或删除集合数据结构逻辑上的一点点缺陷就可能导致大量的内存被错误地收回或丢失。Jav

14、a 的自动内存管理正好解决这一点,它使程序员不用再为内存管理写大量的代码4。2.3 Java Socket 网网络编络编程程2.3.1 Java Socket 网络编程基础网络编程,简单的理解就是两台计算机相互通信,其基本模型就是客户机/服务器模型,也就是通信双方中的一方必须提供一个固定的位置,而另一方则只需要知道这个固定的位置,并去建立两者之间的联系,然后完成数据交换。这里提供固定位置的一方通常称为服务器,而建立联系的一方通常称为客户端。基于客户机/服务器的 Socket 通信模型如下图所示5:服务响应服务请求建立连接客户端服务器端创建 Socket 类对象指定服务器端公认的Socket 地

15、址和端口在 Socket 上监听客户端的连接请求阻塞,等待连接的建立接收客户端的请求信息解释并处理请求信息将处理结果返回给客户端创建 Socket 类对象向服务器端发送连接请求向服务器发出服务请求接收服务结果 基于客基于客户户机机/服服务务器的器的 Socket 通信模型通信模型Java 为这个模型的实现提供了简化了的 Socket 编程接口。在程序中只要导入 java.io 包就可以方便的使用 java 的 Socket 编程接口。Java 中 Socket 通信模型如下图所示5ServerServerSocket ss(port #)ss.accept()/等待连接OutputStream

16、InputStreamss.close()ClientSocket s(host,port #)/请求连接服务器OutputStreamInputStreams.close() Java 中的中的 Socket 编编程模型程模型2.3.2 Socket 编程的实现Socket 类表示一个系统的 IP 地址和端口号的结合,可以理解为客户端或者服务器端的一个特殊对象。它包含两个处理流的方法,一个是 getInputStream()方法,另一个是 getOutputStream()方法,分别用来获得网络的输入流和输出流。构造 Socket 对象的示例代码如下:Socket s = new Socke

17、t(IP, port); IP 为服务器端的 IP 地址,port 是服务器端的端口号。ServerSocket 是一个专门用来建立 Socket 服务器的类,它可以用服务器需要使用的端口号作为参数来创建 ServerSocket 对象。示例代码如下:ServerSocket ss = new ServerSocket(TCP_PORT);当一个客户端程序建立一个 Socket 连接,所连接的端口号为上述TCP_PORT 时,服务器对象 ss 便响应这个连接,然后 ss 对象调用 accept()方法创建一个代表服务器的 Socket 对象。创建后服务器便可以利用这个 Socket 对象与客户

18、端进行通信。示例代码如下:Socket clientSocket = ss.accept();在本系统的实现过程中,在支持网络对弈的服务器类的定义中需要使用ServerSocket 类来响应多个客户端的连接请求。2.4 Java 图图形形编编程程Java 中的 Graphics 类是用于绘图和显示格式化文本的工具类。在 Java 程序中绘图必须在一个窗口(容器)中进行,绘图窗体经常被设计为一个组件容器。一般首先在一个面板中进行绘制,然后再将这个面板添加到显示窗口中。Graphics 类是在 java.awt 包中声明。显示格式化文本和绘图是通过调用Graphics 类的 drawXXX()方法

19、实现的,例如 drawString(String),drawLine()等。绘图采用的坐标系是原点在左上角,纵轴向下以像素为单位的坐标系6。3. 需求分析和需求分析和总总体体设计设计6网络互连实现信息的共享成为以后计算机的发展趋势,现有的网络编程模式主要分成两类:一种是基于 C/S(Client/Server 客户机/服务器)模式,另一种是B/S (Browser/Server,浏览器/服务器)模式;C/S 程序具有好的交互性,功能强大, 但是客户端必须安装客户端软件,限制了其应用;B/S 模式下要求客户端具有浏览器,但浏览器在安全方面有一些限制,交互性与功能有一些限制。网络五子棋系统应用于局

20、域网,对交互性要求较高,本系统选用了 C/S 模式进行实现,网络内部使用 TCP/IP 方式利用 Socket 通过传输层提供的服务,使用 Java 进行图形用户的搭建,系统分成两个部分,分别为服务端程序以及客户端程序7。本文首先介绍系统设计思想以及相关协议的制定,以及分别阐述了服务端程序以及客户端程序的具体实现。五子棋网络游戏主要分为两个部分,游戏服务端和游戏客户端。五子棋游戏规则:游戏双方各执一种颜色的棋子,轮流在棋盘下棋子,一方的棋子在横、竖、两个对角线上首先到达五子者为胜方;游戏服务端主要存储所有连线客户的相关信息及各种状态,并负责游戏客户之间信息的传递;游戏客户端提供客户连接服务器,

21、具有创建、邀请、加入、悔棋、退出游戏等等功能,并能与联网客户进行游戏。3.1 系系统设计统设计思想思想本系统的功能能够实现一个在网络上供客户进行对战的五子棋网络游戏,客户只要登陆到服务器上,就能选择任何其它用户已创建好的游戏,进行五子棋对战游戏,是 C/S 模式的网络游戏。在 C/S 模式游戏中,Server 一般提供所有用户的全局信息,并能提供客户之间的信息转发,客户之间的通讯必须通过 Server进行。因为在多个客户能够连接到同一台 Server 上,所以 Server 必须用 Thread 负责每个用户的通讯和消息处理。服务端程序通过一个 Thread 线程类监听客户端的连接,一旦客户连

22、接,为该客户建立连接并启动一个特定的客户 thread,利用该连接不断从客户读取数据,实现客户和服务器或者客户与客户之间的信息的交互。客户端同样采用的是线程控制的思想,在每一个客户端连接上服务器后,就为此客户端启动一个网络收发数据线程.3.2 系系统总统总体体设计设计系统使用 Socket 技术以及 java 多线程机制结合在进行客户与服务端之间信息的交互,但一个真正实用程序必须针对具体应用定制一套协议用于用户程序之间进行交互,而该协议的定制往往是编写程序的关键也是核心内容,该协议的完善决定程序是否能够正常运行。所谓协议就是程序之间交互的信息的格式7规定, 服务端和客户端都遵循该协议才能够进行

23、对话, 通俗讲是人类之间的语言8。 3.3 系系统统功能模功能模块块及流程及流程3.3.1 系统主要功能模块根据上面的系统的设计要求,可以将此网络五子棋游戏分为以下几个模块:初始化模块:建立棋盘数组并清零以备使用;初始化键盘/鼠标等输入输出设备并在屏幕上画出棋盘,加载音乐及显示诗词功能。主循环控制模块:负责控制下棋顺序,当轮到某方下子时,负责将程序流程转到相应的模块中,主要担当一个调度者的角色。玩家落子模块:即用户在指定落子区域单击后,程序会计算该子的坐标,并且将棋盘数组中坐标处记录棋子的颜色,1 代表黑色,2 代表白色,以表明是服务方下的棋子还是客户方下的棋子。分析盘面填写棋型表模块:本程序

24、核心模块之一,人工智能算法的根本依据。电脑落子模块:根据填写的棋盘表,选择最优落子位置。胜负判断模块:根据预先设定的规则,判断游戏胜负。网络模块:在人机对弈的基础上,添加网络功能的实现,使两台不同计算机的用户通过网络连接,实现网络对弈的功能9。83.3.2 系统主流程某方胜利某方胜利某方退出网络对弈无人机对弈否否某方退出开始初始化游戏模式主循环控制分析盘面并填写棋型表玩家落子电脑落子客户端一客户端二主循环控制判断胜负结束判断胜负重新开始服务器开始 网网络络五子棋游五子棋游戏戏流程流程图图93.4 玩家玩家视图视图与操作与操作3.4.1 服务器端 服务器端主要通过建立流连接来连接客户端,与客户端

25、进行相互通信、转发信息。接收客户端的信息,接收信息后按照此客户端的要求将信息发送到相应的客户端,服务器端起到了中转的作用10。3.4.2 客户端 用用户户操作界面操作界面玩家进入游戏界面时,首先会弹出一个对话框,提示用户连接服务器,当玩家连接上服务器后,就会在界面右上角给出用户的初始玩家名,在聊天内容框中会给出用户提示,提醒玩家先创建游戏或者加入别的玩家建立好的游戏,此外如果玩家不想与其他玩家对弈,也可以选择人机对战,和电脑对弈。玩家在邀请其他玩家加入自己建立好的游戏或者要加入其他玩家建立的游戏,需要玩家选在10用户列表界面选择要操作的玩家,再发起邀请或者加入。此游戏界面简单,用户易操作上手,

26、适合各个年龄的人群。游戏各模块功能如下:各模块实现功能chessPad 用于绘制棋盘及棋子,以及当前的提示信息,另外人机对战的主要功能也在此模块实现。controlPad 用于对当前的游戏界面进行实时的控制,包括:建立游戏、加入游戏、放弃游戏、悔棋和人机对战。4. 概要概要设计设计NetClient 类:主要用于实现网络用户的连接,玩家通过此类发送本方的游戏状态以及接收从服务器传递过来的信息进行处理。ChessPad 类:主要用于绘制玩家棋盘及棋子。另外电脑落子的算法也全部在此类中实现。4.1 游游戏戏各主要各主要类类的功能与主要的功能与主要对对象象4.1.1 服务器类服务器类用于接收客户端的

27、连接,并为每个客户端在服务器端启动单独的一个守护线程,线程的主要功能是接收客户端发送过来的消息并做出相应的处理,客户端发送到服务器端的主要消息有两部分:一部分是客户端发送给服务器端需要服务器端进行处理的。如客户端发送过的连接信息、客户端发送过来的改名信息、客户端发送过的断开连接信息等。另一部分是客户端发送给服务器端需要服务端转发给其他客户端的消息。如客户端给游戏另一方发送的棋盘状态数据、倒计时信息、聊天信息。服务器类的主要对象:1.TCP_PORT:服务器端用于建立套接字的端口号,为了可靠的用户连接,因此在服务器端定义了此端口号为 TCP 的,主要用于建立服务器端与客户端的 TCP 连接。2.

28、UDP_PORT服务器端用于向客户端转发数据需要绑定的用户数据报套接字的端口号,玩家发送给服务器需要转发的消息时,服务器端的DatagramSocket 就是使用此端口号建立的 UDP 连接。4.1.2 游戏客户端游戏客户端的主要功能是为了初始化和组织用户界面,并且定义了各个按钮的功能。游戏客户端的主要对象如下:111.isGameConnected用于判定玩家是否与服务器连接。2.isChess用于判定玩家是否已经在开局游戏中。4.1.3 网络客户端类网络客户端的主要功能是当前玩家与其他玩家进行对弈时,网络客户端需要发送和接收的消息处理。4.1.4 棋盘类棋盘类的主要功能是绘制玩家的棋盘状态

29、与棋子信息以及电脑落子算法的实现。棋盘类的主要对象:1.board玩家所维护的棋盘二维数组。结果为 1 表示(x,y)位置为黑子,结果为 2 表示(x,y)位置为白子。2.withComputer玩家与电脑对弈的标志。如果当前玩家是与电脑对弈,此变量值为真;否则为假。3.isMouseEnable以此变量来控制在网络对弈的双方中,当前玩家是否处于可以落子状态。因为网络对弈要求当一玩家下完后,对方才能落子,因此当此变量为真时,玩家可以落子;当此变量为假时,玩家不可以落子。4.isRegretEnable判断当前的悔棋按钮是否可用。为真时,玩家可以悔棋;为假时,玩家不可以悔棋。5. 详细设计详细设

30、计5.1 服服务务器端器端设计设计服务器端主要通过建立流连接来连接客户端,与客户端进行相互通信、转发信息。接收客户端的信息,接收信息后按照此客户端的要求将信息发送到相应的客户端,服务器端起到了中转的作用。服务器端主要方法如下:(1) 在主类的 Start()函数中,用于初始化连接的信息为:ss = new ServerSocket(TCP_PORT);udpSocket = new DatagramSocket(UDP_PORT);12ss 为服务器端 Socket,为了保证连接的正确性和转发数据的高效性,因此定义了两个端口变量:TCP_PORT 和 UDP_PORT,服务器端用 TCP_PO

31、RT实现服务器套接字。服务器套接字等待请求通过网络传入。用UDP_PORT用来发送和接收数据报包的套接字。(2)在主类 chessServer 中,其用于接受客户端连接信息的函数 start(),服务器端每接收一个客户端连接,就会为每个客户端在服务器端启动一个 UDPThread线程,UDPThread 类继承了 Thread,它集成了服务器端的所有功能,包括与各客户端之间的相互通信,转发信息。5.2 游游戏戏客客户户端端设计设计游戏客户端主要用于初始化玩家信息,定义玩家的操作状态,包括游戏客户端界面的结构组织,定义游戏控制按钮的实现,定义键盘事件的实现。主要方法:(1)方法 launchFr

32、ame()用于在玩家客户端启动时,为用户发送连接服务器信息,并且加载诗词显示及背景音乐的播放。(2)方法 actionPerformed(ActionEvent e)用于实现玩家单击客户端下文的控制按钮的功能。在此方法中主要实现了玩家修改名字、创建游戏、邀请游戏、加入游戏、放弃游戏以及人机对战等各个按钮的功能。参数为触发事件的行为事件。(3)方法 keyPressed(KeyEvent e)用于聊天功能的实现,当玩家在输入框中输入了聊天信息后,用户按回车键发送消息即触发此事件。此事件中主要处理了两个行为,一是当用户选择所有人进行公聊时的处理,二是当玩家选择某一具体的玩家进行私聊时的处理。5.3

33、 网网络络客客户户端端设计设计网络客户端主要用于发送和接收服务器的消息。主要方法:(1)方法 connect(String,int)用于连接服务器。第一个参数是连接服务器的 IP地址,第二个参数是连接服务器的端口号。玩家在此方法中连接上服务器,并且启动一个线程用于接受服务器发送过来的消息。(2)方法 restart() 用于重新开始游戏,在此方法中要求将倒计时信息重新初始化,并且进行清理棋盘操作。5.4 棋棋盘类设计盘类设计 棋盘类主要用于绘制棋盘以及电脑算法的实现。135.4.1 棋盘类的主要方法(1)方法 paint(Graphics)用于绘制棋盘、棋子以及棋盘的背景图片。为了消除加载图片

34、时的窗口闪烁,在此方法中采用了双缓冲技术。(2)方法 clearBoard()用于清空棋盘以及一些变量的初始化操作。(3)方法 select()用于实现当玩家与电脑对弈时,选择谁是先手,以及对按钮状态的设置。(4)方法 is_Full()用于判断当前棋盘是否已无处落子,即棋盘是否已满。如果当前棋盘已满,则向玩家发送一个提示框,告知玩家此局游戏流局。(5)方法 judge(int,int,int)用于判断当前棋子落下时是否游戏胜负已分。第一个参数是当前落子的横坐标,第二个参数是当前落子的纵坐标,第三个参数是当前落子的棋子的颜色。如果游戏获胜,则方法返回真值;否则返回假值。5.4.2 电脑落子算法

35、的实现(1)行棋简要相关术语。 成五含有五枚同色棋子所形成的连,包括五连和长连。 活四有两个点可以成五的四。 冲四只有一个点可以成五的四。 死四不能成五的四。 活三再走一着可以形成活四的三。 眠三再走一着可以形成冲四的三。 死三不能成五的三。 活二再走一着可以形成活三的二。 眠二再走一着可以形成眠三的二。 死二不能成五的二。(2)落子算法分析1 数据结构首先为整个棋盘建立一张表格用以记录棋子信息,使用一个 21*21 的二维数组 board2121,数组的每一个元素对应棋盘上的一个交叉点,用0表示空位、1代表黑子、2代表白子;这张表也是今后分析的基础。在此之后还要为电脑和玩家双方各建立一张棋型

36、表 Computer21214和 Player15154,用来存放棋型数据,就是刚才所说的重要程度,比如用20代表“冲四”的点,用15代表“活三”的点,那么在计算重要性时,就可以根据 2015 得出前者比后者重要,下子时电脑便会自动选择“冲四”的点。那为什么棋型表要使用三维数组呢?因为棋盘上的每一个点都可以与横、竖、左斜、右斜四个方向的棋子构成不同的棋型,14所以一个点总共有 4 个记录;这样做的另一个好处是可以轻易判断出复合棋型,例如:如果同一点上有 2 个15就是双三、有一个15和一个20就是四三。2 程序流程本程序由六个基本功能模块构成,各模块的详细分析如下:(1)初始化:首先,建立盘面

37、数组 board2121、对战双方的棋型表 Computer21214和 Player21214并将它们清零以备使用(2)主循环控制模块:控制下棋顺序,当轮到某方下子时,负责将程序转到相应的模块中去,主要担当一个调度者的角色。(3)玩家下子:当轮到玩家下时,玩家通过鼠标在棋盘上落子,程序会根据该点的位置,在 board2121数组的相应地方记录。(4)盘面分析填写棋型表:本程序核心模块之一,人工智能算法的根本依据!其具体实现方法如下:玩家在下五子棋时,一定会先根据棋盘上的情况,找出当前最重要的一些点位,如“活三”、“冲四”等;然后再在其中选择落子点。但是,电脑不会像人一样分析问题,要让它知道哪

38、是“活三”、哪是“冲四”,就得在棋盘上逐点计算,一步一步的教它。先来分析己方的棋型,从棋盘左上角出发,向右逐行搜索,当遇到一个空白点时,以它为中心向左挨个查找,如果遇到己方的子则记录然后继续,如果遇到对方的子、空白点或边界就停止查找。左边完成后再向右进行同样的操作;最后把左右两边的记录合并起来,得到的数据就是该点横向上的棋型,然后把棋型的编号填入到 Computerxyn中就行了(x、y 代表坐标,n=0、1、2、3 分别代表横、竖、左斜、右斜四个方向)。而其他三个方向的棋型也可用同样的方法得到,当搜索完整张棋盘后,己方棋型表也就填写完毕了。然后再用同样的方法填写电脑的棋型表。 电脑下子:有了

39、上面填写的两张棋型表,现在要作的就是让电脑知道在哪一点下子了。遍历棋型表 Computer15154和 Player15154找出其中数值最大的一点,在该点下子即可。 胜负判断:毋须多言,某方形成五子连即获胜。6. 软软件件实现实现与与测试测试6.1 软软件件测试测试方案方案软件测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。15软件测试的目的:(1)测试并不仅仅是为了找出错误。通过分析错误产生的原因和错误的发生趋势,可以帮助项目管

40、理者发现当前软件开发过程中的缺陷,以便及时改进;(2)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性;(3)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法。6.2 网网络络客客户户端端测试测试用例用例用例名称:网络客户端功能用例描述:玩家连接上服务器后,能够与其他玩家进行正常的对弈操作。测试结果:连接成功,测试结果正确。7. 总结总结经过系统的设计与实现,一个能够实现人机对战和网络对战的网络五子棋系统基本完成。总结全文的工作,具体概括如下:论文首先研究了网络五子棋游戏的优势,对比了 C/S 和 B/S 模式的各自特点,并分析了其优缺点。针对对弈系统

41、的具体要求,构建了基于 C/S 模式的网络五子棋对战系统。采用 Socket 网络编程,分析了其通信的基本原理及其实现,选择了 TCP 协议作为通讯方式,为了保证数据传输的高效性,对于玩家信息的交换及聊天信息采用的是 UDP 协议进行传输。完成了网络五子棋对弈系统的总体方案的设计,以 Java1.6 为软件语言基础,以 Eclipse 为软件开发工具,完成了对弈系统各模块的设计,其中包括服务器模块、客户端模块以及美化界面方面的设计。本软件虽然基本实现了网络五子棋这款游戏的设计,但需要改进的地方还很多,我个人认为需要改进的地方有以下几点:可以为游戏加入一个游戏大厅的界面,这样用户在进入游戏时可以

42、选择座位坐下,省去了用户加入与邀请游戏的麻烦。对游戏逻辑模块进行优化,进一步提高时间性能和可扩展性,以适应将来新的需求和变化。此外电脑落棋算法也有待进一步改进,这里采用的是循环遍历算法。16致致谢谢通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。同时我渐渐的复习了 Java 使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。本次期末设计已经接近尾声,作为一个大二学生的设计论文,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有刘嘉欣老师的督促,这次毕业设计中我肯定

43、要走许多弯路。在毕业设计及论文写作过程中,得到了刘老师和同学们的亲切关怀和耐心的指导,当设计无法理清思路时,都是翻阅我们平时的课堂笔记,让我有所启发。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成,刘老师都始终给予我细心的指导和不懈的支持。每当我遇到困难时,是刘老师不厌其烦的讲解为我排除了困难,使我在编程的过程中学到了许多知识。多少个日日夜夜,刘老师不仅在学业上给我以精心指导,同时还在思想上、生活上给我以无微不至的关怀,除了敬佩刘老师的专业水平外,他的治学严谨和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的学习和工作。在此谨向

44、刘老师致以诚挚的谢意和崇高的敬意。在设计论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有许多可敬的师长、同学和朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们!17参考文献参考文献1 埃史尔,陈昊鹏.Java 编程思想(第 4 版)M.北京:机械工业出版社,2007.6:105-1212 李钟尉,马文强,陈丹丹.Java 从入门到精通M.北京:清华大学出版社,2008.9:234-2503 Y.Daniel Liang,万波,郑海红,潘蓉.Java 语言程序设计:基础篇(原书第 6 版)M.北京:机械工业出版社,2008.6:355-3634 Ian F.Darwin,关丽荣,张晓坤.Java 经典实例(第 2 版)M.北京:中国电力出版社,2009.2:179-2035 冯博 应群.面向对象的 Java 网络编程M。清华大学出版社 . 2004 年 11 月 6 孙更新 等 . Java 毕业设计指南与项目实践M. 科学出版社 . 2008 年 03 月7 单文仁 . Java 在我国的应用现状和发展趋势J.科技成果纵横.2007 年 2 期-制作人:制作人:

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!