五子棋设计报告

时间:2024.4.20

JAVA课程设计

专 业: 数字媒体

课程名称: Java语言程序设计

课题名称: 五子棋

指导老师: 刘嘉欣

学 号: 09990051

姓 名: 贺赓晔

学 号: 09990054

姓 名: 贾贺

摘 要

目前,随着计算机网络的发展,以计算机技术和网络技术为核心的现代网络技术已经在现实生活和生产中得到了广泛的使用,休闲类网络游戏集趣味性,娱乐性,互动性和益智性于一体,已经成为多数人群的休闲方式,也为多数人所喜好。

本软件使用JAVA语言实现,通过对图形界面,绘图,布局管理器等去构造出五子棋游戏的单机功能,在此基础上,利用SOCKET编程,建立起服务器与客户端之间的连接,利用多线程技术来处理服务器端与客户端之间的数据传输、网络通信,使得客户端和服务器端之间能够同步的进行处理。在网络对战中实现了以下功能:建立游戏、邀请游戏、加入游戏、退出游戏、悔棋。另外,本软件还实现了网络聊天的功能,玩家加入游戏后可以和其他玩家进行对话。在加载图片以及绘制棋盘方面,采用双缓冲技术消除屏幕的闪烁现象。

在人机对弈中通过遍历搜索和估值模块,来提高电脑棋手的智能。算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。

关键词: 多线程,SOCKET,遍历搜索,人工智能.

II

目录

1. 绪论........................................................................................................................... 1

1.1 课题背景 ............................................................................................................. 1

1.2 选题的背景和意义 ............................................................................................. 1

1.3 主要研究内容 ..................................................................................................... 1

1.4 五子棋简介 ......................................................................................................... 2

2. 开发环境及工具介绍............................................................................................... 2

2.1 开发环境及运行环境 ......................................................................................... 2

2.1.1开发环境........................................................................................................ 2

2.1.2运行环境........................................................................................................ 2

2.2 JAVA 简介 ............................................................................................................. 2

2.2.1 Java的起源与发展 ....................................................................................... 2

2.2.2 Java 的特点 .................................................................................................. 3

2.3 JAVA SOCKET 网络编程 ........................................................................................ 4

2.3.1 Java Socket 网络编程基础........................................................................... 4

2.3.2 Socket编程的实现 ........................................................................................ 5

2.4 JAVA图形编程 ...................................................................................................... 5

3. 需求分析和总体设计............................................................................................... 6

3.1 系统设计思想 ..................................................................................................... 6

3.2 系统总体设计 ..................................................................................................... 7

3.3 系统功能模块及流程 ......................................................................................... 7

3.3.1 系统主要功能模块....................................................................................... 7

3.3.2 系统主流程................................................................................................... 8

3.4 玩家视图与操作 ................................................................................................. 9

3.4.1 服务器端....................................................................................................... 9

3.4.2 客户端........................................................................................................... 9

4. 概要设计................................................................................................................. 10

4.1 游戏各主要类的功能与主要对象 ................................................................... 10

4.1.1 服务器类..................................................................................................... 10

4.1.2 游戏客户端................................................................................................. 10

4.1.3 网络客户端类............................................................................................. 11

4.1.4 棋盘类......................................................................................................... 11

5. 详细设计................................................................................................................. 11

5.1 服务器端设计 ................................................................................................... 11

5.2 游戏客户端设计 ............................................................................................... 12

5.3 网络客户端设计 ............................................................................................... 12

5.4 棋盘类设计 ....................................................................................................... 12

5.4.1 棋盘类的主要方法..................................................................................... 18

5.4.2 落子算法的实现......................................................................................... 19

6. 软件实现与测试..................................................................................................... 19

6.1 软件测试方案 ................................................................................................... 14

6.2 网络客户端测试用例 ....................................................................................... 15

7. 总结......................................................................................................................... 15

致谢.............................................................................................................................. 16

参考文献...................................................................................................................... 17

1. 绪论

1.1 课题背景

电脑已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。Java语言作为一种面向对象的编程语言,具有分布式,可移植,高性能,多线程等特点[1]。如今网络休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。

网络五子棋游戏是使用Java语言开发的一款游戏。它使用SOCKET建立连接,多线程处理数据,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易。

1.2 选题的背景和意义

随着计算机网络技术的发展,网络游戏已经成为计算机技术中最具潜力的热点领域,随着联众世界、腾讯游戏等网络游戏平台的拓展,越来越多的人参与到网络游戏中。特别是其中一些休闲益智类的棋牌游戏,集趣味性、娱乐性、互动性和益智性于一体,拥有大量的用户。因此使用Java开发网络五子棋游戏是一个实用性很强的毕业设计项目。

网络五子棋游戏的总体功能是要设计出具有精美界面的,具备人工智能的,支持网络对弈的五子棋游戏。本系统最终的目的是建立一个有具体规则的五子棋平台,使两台不同计算机的使用者通过一定的网络连接,达到网络对弈的目的,以及单机上的人机对战。

1.3 主要研究内容

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

有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。

1.4 五子棋简介

五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。2. 开发环境及工具介绍

2.1 开发环境及运行环境

2.1.1开发环境

? Microsoft Windows XP Professional Service Pack 3

? JDK 1.60

? Eclipse 3.5

2.1.2运行环境

? Intel Pentium 2及以上处理器,128M以上内存,20G以上硬盘

? Microsoft Windows 9X/NT操作系统

? 1024*768或以上的屏幕分辨率 2.2 Java 简介

Java是一种简单的、面向对象的、分布式的、解释的、安全的、可移植的、性能优异的多线程语言。它以其强安全性、平台无关性、硬件结构无关性、语言简洁、面向对象的特点,在网络编程语言中占据了无可比拟的优势,成为实现电子商务系统的首选语言[2]。

2.2.1 Java的起源与发展

Java是Sun公司在19xx年推出的新的编程语言,它是一种跨平台的、应用于当前高速发展的网络编程语言。在编程语言中,可以认为Basic语言促使了C语言的出现,C语言促使了C++的出现,而C++又促使了Java语言的出现。

自Java正式推出之后,以其特有的优势迅速发展,经过几年的发展,Java已经在软件开发和动态网站上占有相当大的市场。Java分为J2SE、J2EE和J2ME三种。J2SE是Java平台标准版,主要应用于桌面程序和Java小应用程序开发;J2EE主要用于企业级开发和大型网站的开发;J2ME主要用于手机等移动设备程序的开发[3]。

2

2.2.2 Java 的特点

前面已经提到过,Java是在开发家用电器软件时开发出来的。怎么样才能让这种软件在每个平台上都能正常地运行呢?这就用到了Java的平台无关性。在Java出现之前,这个问题是当时每个程序员都难以解决的问题。Java出现之后,这个问题就彻底解决了。引用他们的目标,就是"只要写一次程序,在任何地方、任何时间该程序永远都能够运行"。

Java是怎么实现平台无关性的呢?只要安装Java运行系统,Java就可以在任何处理器上运行。Java解释器生成与体系无关的字节码指令,这些指令对应于Java虚拟机里表示,Java解释器得到字节码后,对它进行转换,使之能够在不同的平台上运行。

(1)简单性

Java语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务,开发者只需要知道一些概念就能够编写出一些应用程序。Java程序相对较小,其代码能够在小机器,例如手机上运行,这应该是大家经常可以看到的。

(2) 面向对象语言

Java的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量和相应的方法,实现了模块化和信息的隐藏;而类则是提供了对象的原型,并且通过继承的机制,子类可以使用父类所提供的方法,以实现代码的复用。

(3) 健壮性

Java语言被病毒感染和破坏得最少。大部分病毒程序常用的方法就是通过巧妙地运用地址变量如指针来获取计算机的资源,而Java正好放弃了难学和危险的指针功能,从而使Java更安全。

(4) 多线程

设计Java的目标之一,就是为了满足人们对创建交互式网上程序的需要。多线程就是为实现这个目标而设计出来的,它使用Java编写出来的应用程序可以同时执行多个任务。多线程机制使应用程序能够并行执行,而且同步机制保证了对共享数据的正确操作。

(5) 自动内存管理

可以说自动内存管理是Java健壮性的体现,内存管理是很多种应用程序内的关键因素。在网络上的其他地方读取大量的数据,之后把该数据写入硬盘上的数据库内,一般的设计就是把数据读入内存中的某种集合内,对这些数据执行某些操作,之后把数据写入数据库。在数据写入数据库后,在下一批处理之前,临时存储数据的集合必须清空旧数据,或者被删除后再建。这种操作可能执行很多3

次,在像C++这些不提供自动垃圾搜集的语言中,手工清空或删除集合数据结构逻辑上的一点点缺陷就可能导致大量的内存被错误地收回或丢失。Java的自动内存管理正好解决这一点,它使程序员不用再为内存管理写大量的代码[4]。

2.3 Java Socket 网络编程

2.3.1 Java Socket 网络编程基础

网络编程,简单的理解就是两台计算机相互通信,其基本模型就是客户机/服务器模型,也就是通信双方中的一方必须提供一个固定的位臵,而另一方则只需要知道这个固定的位臵,并去建立两者之间的联系,然后完成数据交换。这里提供固定位臵的一方通常称为服务器,而建立联系的一方通常称为客户端。基于客户机/服务器的Socket通信模型如下图所示[5]:

五子棋设计报告

基于客户机/服务器的Socket通信模型

Java为这个模型的实现提供了简化了的Socket编程接口。在程序中只要导入java.io包就可以方便的使用java的Socket编程接口。

4

Java中Socket通信模型如下图所示

Java中的Socket编程模型

2.3.2 Socket编程的实现

Socket类表示一个系统的IP地址和端口号的结合,可以理解为客户端或者服务器端的一个特殊对象。它包含两个处理流的方法,一个是getInputStream()方法,另一个是getOutputStream()方法,分别用来获得网络的输入流和输出流。构造Socket对象的示例代码如下:

Socket s = new Socket(IP, port);

IP为服务器端的IP地址,port是服务器端的端口号。

ServerSocket是一个专门用来建立

五子棋设计报告

Socket服务器的类,它可以用服务器需要使用的端口号作为参数来创建ServerSocket对象。示例代码如下:

ServerSocket ss = new ServerSocket(TCP_PORT);

当一个客户端程序建立一个Socket连接,所连接的端口号为上述TCP_PORT时,服务器对象ss便响应这个连接,然后ss对象调用accept()方法创建一个代表服务器的Socket对象。创建后服务器便可以利用这个Socket对象与客户端进行通信。示例代码如下:

Socket clientSocket = ss.accept();

在本系统的实现过程中,在支持网络对弈的服务器类的定义中需要使用ServerSocket类来响应多个客户端的连接请求。

2.4 Java图形编程

Java中的Graphics类是用于绘图和显示格式化文本的工具类。在Java程序中绘图必须在一个窗口(容器)中进行,绘图窗体经常被设计为一个组件容器。一般首先在一个面板中进行绘制,然后再将这个面板添加到显示窗口中。 5

Graphics类是在java.awt包中声明。显示格式化文本和绘图是通过调用Graphics类的drawXXX()方法实现的,例如drawString(String),drawLine()等。绘图采用的坐标系是原点在左上角,纵轴向下以像素为单位的坐标系[6]。

3. 需求分析和总体设计

网络互连实现信息的共享成为以后计算机的发展趋势,现有的网络编程模式主要分成两类:一种是基于C/S(Client/Server客户机/服务器)模式,另一种是B/S (Browser/Server,浏览器/服务器)模式;C/S 程序具有好的交互性,功能强大, 但是客户端必须安装客户端软件,限制了其应用;B/S 模式下要求客户端具有浏览器,但浏览器在安全方面有一些限制,交互性与功能有一些限制。网络五子棋系统应用于局域网,对交互性要求较高,本系统选用了C/S 模式进行实现,网络内部使用TCP/IP 方式利用Socket 通过传输层提供的服务,使用Java 进行图形用户的搭建,系统分成两个部分,分别为服务端程序以及客户端程序[7]。

本文首先介绍系统设计思想以及相关协议的制定,以及分别阐述了服务端程序以及客户端程序的具体实现。

五子棋网络游戏主要分为两个部分,游戏服务端和游戏客户端。五子棋游戏规则:游戏双方各执一种颜色的棋子,轮流在棋盘下棋子,一方的棋子在横、竖、两个对角线上首先到达五子者为胜方;游戏服务端主要存储所有连线客户的相关信息及各种状态,并负责游戏客户之间信息的传递;游戏客户端提供客户连接服务器,具有创建、邀请、加入、悔棋、退出游戏等等功能,并能与联网客户进行游戏。

3.1 系统设计思想

本系统的功能能够实现一个在网络上供客户进行对战的五子棋网络游戏,客户只要登陆到服务器上,就能选择任何其它用户已创建好的游戏,进行五子棋对战游戏,是C/S 模式的网络游戏。在C/S 模式游戏中,Server 一般提供所有用户的全局信息,并能提供客户之间的信息转发,客户之间的通讯必须通过Server进行。因为在多个客户能够连接到同一台Server上,所以Server必须用Thread 负责每个用户的通讯和消息处理。

服务端程序通过一个Thread线程类监听客户端的连接,一旦客户连接,为该客户建立连接并启动一个特定的客户thread,利用该连接不断从客户读取数据,实现客户和服务器或者客户与客户之间的信息的交互。

客户端同样采用的是线程控制的思想,在每一个客户端连接上服务器后,就为此客户端启动一个网络收发数据线程.

6

3.2 系统总体设计

系统使用Socket 技术以及java 多线程机制结合在进行客户与服务端之间

信息的交互,但一个真正实用程序必须针对具体应用定制一套协议用于用户程序

之间进行交互,而该协议的定制往往是编写程序的关键也是核心内容,该协议的

完善决定程序是否能够正常运行。所谓协议就是程序之间交互的信息的格式规

定, 服务端和客户端都遵循该协议才能够进行对话, 通俗讲是人类之间的语言

[8]。

3.3 系统功能模块及流程

3.3.1 系统主要功能模块

根据上面的系统的设计要求,可以将此网络五子棋游戏分为以下几个模块:

? 初始化模块:建立棋盘数组并清零以备使用;初始化键盘/鼠标等输入输

出设备并在屏幕上画出棋盘,加载音乐及显示诗词功能。

? 主循环控制模块:负责控制下棋顺序,当轮到某方下子时,负责将程序

流程转到相应的模块中,主要担当一个调度者的角色。

? 玩家落子模块:即用户在指定落子区域单击后,程序会计算该子的坐标,

并且将棋盘数组中坐标处记录棋子的颜色,1代表黑色,2代表白色,

以表明是服务方下的棋子还是客户方下的棋子。

? 分析盘面填写棋型表模块:本程序核心模块之一,人工智能算法的根本

依据。

? 电脑落子模块:根据填写的棋盘表,选择最优落子位臵。

? 胜负判断模块:根据预先设定的规则,判断游戏胜负。

? 网络模块:在人机对弈的基础上,添加网络功能的实现,使两台不同计

算机的用户通过网络连接,实现网络对弈的功能[9]。

7

3.3.2 系统主流程

网络五子棋游戏流程图

五子棋设计报告

8

3.4 玩家视图与操作

五子棋设计报告

3.4.1 服务器端

服务器端主要通过建立流连接来连接客户端,与客户端进行相互通信、转发信息。接收客户端的信息,接收信息后按照此客户端的要求将信息发送到相应的客户端,服务器端起到了中转的作用[10]。

3.4.2 客户端

用户操作界面

玩家进入游戏界面时,首先会弹出一个对话框,提示用户连接服务器,当玩家连接上服务器后,就会在界面右上角给出用户的初始玩家名,在聊天内容框中会给出用户提示,提醒玩家先创建游戏或者加入别的玩家建立好的游戏,此外如果玩家不想与其他玩家对弈,也可以选择人机对战,和电脑对弈。玩家在邀请其他玩家加入自己建立好的游戏或者要加入其他玩家建立的游戏,需要玩家选在用9

户列表界面选择要操作的玩家,再发起邀请或者加入。此游戏界面简单,用户易操作上手,适合各个年龄的人群。游戏各模块功能如下:

各模块实现功能

chessPad 用于绘制棋盘及棋子,以及当前的提示信息,另外人机对战的主要功能也在此模块实现。

controlPad 用于对当前的游戏界面进行实时的控制,包括:建立游戏、加入游戏、放弃游戏、悔棋和人机对战。

4. 概要设计

NetClient类:主要用于实现网络用户的连接,玩家通过此类发送本方的游戏状态以及接收从服务器传递过来的信息进行处理。

ChessPad类:主要用于绘制玩家棋盘及棋子。另外电脑落子的算法也全部在此类中实现。

4.1 游戏各主要类的功能与主要对象

4.1.1 服务器类

服务器类用于接收客户端的连接,并为每个客户端在服务器端启动单独的一个守护线程,线程的主要功能是接收客户端发送过来的消息并做出相应的处理,客户端发送到服务器端的主要消息有两部分:一部分是客户端发送给服务器端需要服务器端进行处理的。如客户端发送过的连接信息、客户端发送过来的改名信息、客户端发送过的断开连接信息等。另一部分是客户端发送给服务器端需要服务端转发给其他客户端的消息。如客户端给游戏另一方发送的棋盘状态数据、倒计时信息、聊天信息。

服务器类的主要对象:

1. TCP_PORT:

服务器端用于建立套接字的端口号,为了可靠的用户连接,因此在服务器端定义了此端口号为TCP的,主要用于建立服务器端与客户端的TCP连接。

2. UDP_PORT

服务器端用于向客户端转发数据需要绑定的用户数据报套接字的端口号,玩家发送给服务器需要转发的消息时,服务器端的DatagramSocket 就是使用此端口号建立的UDP连接。

4.1.2 游戏客户端

游戏客户端的主要功能是为了初始化和组织用户界面,并且定义了各个按钮的功能。游戏客户端的主要对象如下:

10

1. isGameConnected

用于判定玩家是否与服务器连接。

2. isChess

用于判定玩家是否已经在开局游戏中。

4.1.3 网络客户端类

网络客户端的主要功能是当前玩家与其他玩家进行对弈时,网络客户端需要发送和接收的消息处理。

4.1.4 棋盘类

棋盘类的主要功能是绘制玩家的棋盘状态与棋子信息以及电脑落子算法的实现。

棋盘类的主要对象:

1. board

玩家所维护的棋盘二维数组。结果为1表示(x,y)位臵为黑子,结果为2表示(x,y)位臵为白子。

2. withComputer

玩家与电脑对弈的标志。如果当前玩家是与电脑对弈,此变量值为真;否则为假。

3. isMouseEnable

以此变量来控制在网络对弈的双方中,当前玩家是否处于可以落子状态。因为网络对弈要求当一玩家下完后,对方才能落子,因此当此变量为真时,玩家可以落子;当此变量为假时,玩家不可以落子。

4. isRegretEnable

判断当前的悔棋按钮是否可用。为真时,玩家可以悔棋;为假时,玩家不可以悔棋。

5. 详细设计

5.1 服务器端设计

服务器端主要通过建立流连接来连接客户端,与客户端进行相互通信、转发信息。接收客户端的信息,接收信息后按照此客户端的要求将信息发送到相应的客户端,服务器端起到了中转的作用。服务器端主要方法如下:

(1) 在主类的Start()函数中,用于初始化连接的信息为:

ss = new ServerSocket(TCP_PORT);

udpSocket = new DatagramSocket(UDP_PORT);

11

ss 为服务器端Socket,为了保证连接的正确性和转发数据的高效性,因此定义了两个端口变量:TCP_PORT和UDP_PORT,服务器端用TCP_PORT实现服务器套接字。服务器套接字等待请求通过网络传入。用UDP_PORT用来发送和接收数据报包的套接字。

(2)在主类chessServer中,其用于接受客户端连接信息的函数start(),服务器端每接收一个客户端连接,就会为每个客户端在服务器端启动一个UDPThread线程,UDPThread类继承了Thread,它集成了服务器端的所有功能,包括与各客户端之间的相互通信,转发信息。

5.2 游戏客户端设计

游戏客户端主要用于初始化玩家信息,定义玩家的操作状态,包括游戏客户端界面的结构组织,定义游戏控制按钮的实现,定义键盘事件的实现。

主要方法:

(1)方法launchFrame()用于在玩家客户端启动时,为用户发送连接服务器信息,并且加载诗词显示及背景音乐的播放。

(2)方法actionPerformed(ActionEvent e)用于实现玩家单击客户端下文的控制按钮的功能。在此方法中主要实现了玩家修改名字、创建游戏、邀请游戏、加入游戏、放弃游戏以及人机对战等各个按钮的功能。参数为触发事件的行为事件。

(3)方法keyPressed(KeyEvent e)用于聊天功能的实现,当玩家在输入框中输入了聊天信息后,用户按回车键发送消息即触发此事件。此事件中主要处理了两个行为,一是当用户选择所有人进行公聊时的处理,二是当玩家选择某一具体的玩家进行私聊时的处理。

5.3 网络客户端设计

网络客户端主要用于发送和接收服务器的消息。

主要方法:

(1)方法connect(String,int)用于连接服务器。第一个参数是连接服务器的IP地址,第二个参数是连接服务器的端口号。玩家在此方法中连接上服务器,并且启动一个线程用于接受服务器发送过来的消息。

(2)方法restart() 用于重新开始游戏,在此方法中要求将倒计时信息重新初始化,并且进行清理棋盘操作。

5.4 棋盘类设计

棋盘类主要用于绘制棋盘以及电脑算法的实现。

12

5.4.1 棋盘类的主要方法

(1)方法paint(Graphics)用于绘制棋盘、棋子以及棋盘的背景图片。为了消除加载图片时的窗口闪烁,在此方法中采用了双缓冲技术。

(2)方法clearBoard()用于清空棋盘以及一些变量的初始化操作。

(3)方法select()用于实现当玩家与电脑对弈时,选择谁是先手,以及对按钮状态的设臵。

(4)方法is_Full()用于判断当前棋盘是否已无处落子,即棋盘是否已满。如果当前棋盘已满,则向玩家发送一个提示框,告知玩家此局游戏流局。

(5)方法judge(int,int,int)用于判断当前棋子落下时是否游戏胜负已分。第一个参数是当前落子的横坐标,第二个参数是当前落子的纵坐标,第三个参数是当前落子的棋子的颜色。如果游戏获胜,则方法返回真值;否则返回假值。

5.4.2 电脑落子算法的实现

(1)行棋简要相关术语。

[成五]含有五枚同色棋子所形成的连,包括五连和长连。

[活四]有两个点可以成五的四。

[冲四]只有一个点可以成五的四。

[死四]不能成五的四。

[活三]再走一着可以形成活四的三。

[眠三]再走一着可以形成冲四的三。

[死三]不能成五的三。

[活二]再走一着可以形成活三的二。

[眠二]再走一着可以形成眠三的二。

[死二]不能成五的二。

(2)落子算法分析

[1] 数据结构

首先为整个棋盘建立一张表格用以记录棋子信息,使用一个21*21的二维数组 board[21][21],数组的每一个元素对应棋盘上的一个交叉点,用‘0’表示空位、‘1’代表黑子、‘2’代表白子;这张表也是今后分析的基础。在此之后还要为电脑和玩家双方各建立一张棋型表Computer[21][21][4]和Player[15][15][4],用来存放棋型数据,就是刚才所说的重要程度,比如用‘20’代表?冲四?的点,用‘15’代表?活三?的点,那么在计算重要性时,就可以根据20>15得出前者比后者重要,下子时电脑便会自动选择?冲四?的点。那为什么棋型表要使用三维数组呢?因为棋盘上的每一个点都可以与横、竖、左斜、右斜四个方向的棋子13

构成不同的棋型,所以一个点总共有4个记录;这样做的另一个好处是可以轻易判断出复合棋型,例如:如果同一点上有2个‘15’就是双三、有一个‘15’和一个‘20’就是四三。

[2] 程序流程

本程序由六个基本功能模块构成,各模块的详细分析如下:

(1)初始化:首先,建立盘面数组board[21][21]、对战双方的棋型表

Computer[21][21][4]和Player[21][21][4]并将它们清零以备使用

(2)主循环控制模块:控制下棋顺序,当轮到某方下子时,负责将程序转到相应的模块中去,主要担当一个调度者的角色。

(3)玩家下子:当轮到玩家下时,玩家通过鼠标在棋盘上落子,程序会根据该点的位臵,在board[21][21]数组的相应地方记录。

(4)盘面分析填写棋型表:本程序核心模块之一,人工智能算法的根本依据!其具体实现方法如下:玩家在下五子棋时,一定会先根据棋盘上的情况,找出当前最重要的一些点位,如?活三?、?冲四?等;然后再在其中选择落子点。但是,电脑不会像人一样分析问题,要让它知道哪是?活三?、哪是?冲四?,就得在棋盘上逐点计算,一步一步的教它。

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

电脑下子:有了上面填写的两张棋型表,现在要作的就是让电脑知道在哪一点下子了。遍历棋型表Computer[15][15][4]和Player[15][15][4]找出其中数值最大的一点,在该点下子即可。

胜负判断:毋须多言,某方形成五子连即获胜。

6. 软件实现与测试

6.1 软件测试方案

软件测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能 14

出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。

软件测试的目的:

(1)测试并不仅仅是为了找出错误。通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进;

(2)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性;

(3)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法。

6.2 网络客户端测试用例

用例名称:网络客户端功能

用例描述:玩家连接上服务器后,能够与其他玩家进行正常的对弈操作。 测试结果:连接成功,测试结果正确。

7. 总结

经过系统的设计与实现,一个能够实现人机对战和网络对战的网络五子棋系统基本完成。总结全文的工作,具体概括如下:

论文首先研究了网络五子棋游戏的优势,对比了C/S和B/S模式的各自特点,并分析了其优缺点。针对对弈系统的具体要求,构建了基于C/S模式的网络五子棋对战系统。

采用Socket网络编程,分析了其通信的基本原理及其实现,选择了TCP协议作为通讯方式,为了保证数据传输的高效性,对于玩家信息的交换及聊天信息采用的是UDP协议进行传输。

完成了网络五子棋对弈系统的总体方案的设计,以Java1.6为软件语言基础,以Eclipse为软件开发工具,完成了对弈系统各模块的设计,其中包括服务器模块、客户端模块以及美化界面方面的设计。

本软件虽然基本实现了网络五子棋这款游戏的设计,但需要改进的地方还很多,我个人认为需要改进的地方有以下几点:

可以为游戏加入一个游戏大厅的界面,这样用户在进入游戏时可以选择座位坐下,省去了用户加入与邀请游戏的麻烦。

对游戏逻辑模块进行优化,进一步提高时间性能和可扩展性,以适应将来新的需求和变化。

此外电脑落棋算法也有待进一步改进,这里采用的是循环遍历算法。

15

致谢

通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。本次期末设计已经接近尾声,作为一个大二学生的设计论文,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有刘嘉欣老师的督促,这次毕业设计中我肯定要走许多弯路。

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

在设计论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有许多可敬的师长、同学和朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们!

16

参考文献

[1] 埃史尔,陈昊鹏.Java编程思想(第4版)[M].北京:机械工业出版社,2007.6:105-121

[2] 李钟尉,马文强,陈丹丹.Java从入门到精通[M].北京:清华大学出版社,2008.9:234-250

[3] Y.Daniel Liang,万波,郑海红,潘蓉.Java语言程序设计:基础篇(原书第6版)[M].北京:机械工业出版社,2008.6:355-363

[4] Ian F.Darwin,关丽荣,张晓坤.Java经典实例(第2版)[M].北京:中国电力出版社,2009.2:179-203 [5] 冯博 应群.面向对象的Java网络编程[M]。清华大学出版社 . 20xx年11月

[6] 孙更新 等 . Java毕业设计指南与项目实践[M]. 科学出版社 . 20xx年03月

[7] 单文仁 . Java在我国的应用现状和发展趋势[J].《科技成果纵横》.20xx年2期-

17

制作人: 18

更多相关推荐:
五子棋-课程设计报告

五子棋-课程设计报告单位分院(系)专业学号学生姓名指导教师完成日期20xx年05月日摘要五子棋的历史:五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。容易上手…

五子棋程序设计报告

五子棋程序设计报告班级:姓名:学号:指导老师:20XX/1/07一、课程设计题目与要求题目:网络五子棋游戏。功能要求:该软件应包括服务器端程序和客户端程序两个部分,要求实现的功能如下。客户端功能要求:(1)友好…

五子棋设计报告(完整版)

计算机网络设计报告题目班级姓名指导教师局域网五子棋设计计算机082班颜晓云杨松波20xx年7月15日目录1概论错误未定义书签2功能介绍错误未定义书签3程序流程图错误未定义书签4实现代码错误未定义书签5总结体会错...

五子棋JAVA语言课程设计报告

封面Java语言程序设计课程设计报告分院电信分院班级电子商务1班姓名何芳林学号20xx0210460123指导教师吴军良课设时间20xx1220至20xx1231二O一一年十二月二十日10电商1班何芳林Java...

五子棋游戏 课程设计报告(含源代码可以运行)

五子棋游戏课程设计报告(含源代码可以运行)目录第一章需求分析.11.1总体分析.11.2初始化.11.3主循环控制模块.11.4玩家下子.11.5盘面分析填写棋型表.21.6对方下子.21.7胜负判断.2第二章…

五子棋程序设计报告

宜宾学院面向对象课程设计学院计算机与信息工程学院班级20xx级6班学生姓名郑亮学号141106020设计地点单位宜宾学院设计题目双人五子棋完成日期20xx年12月5日目录1问题要求及任务描述411题目要求412...

五子棋游戏程序设计报告

计算机学院网络工程专业程序设计综合课程设计报告20xx20xx学年第一学期学生姓名学生班级学生学号指导教师20xx年12月30日双人五子棋目录第一章课程设计目的和要求111课程设计的目的112课程设计的要求1第...

五子棋设计报告

北华大学电气信息工程学院C项目实习姓名王文新班级通信121学号23组长田莉莉指导教师高玉峰实习日期8月25日9月10日一开发环境MicrosoftVisualC是Microsoft公司推出的开发Win32环境程...

C语言五子棋源代码 - 课程设计报告

计算机程序设计基础C语言课程设计题目简易五子棋软件设计院系部信息工程学院姓名张卓班级自103学号10072820xx年7月5日北京目录1课程设计报告311课题描述312需求分析313概要设计4131功能模块41...

基于java程序的五子棋游戏设计 开题报告

陕西科技大学镐京学院毕业设计论文任务书系专业班级学生题目基于JAVA程序的五子棋游戏设计毕业设计论文从20xx年3月20日起到20xx年6月25日课题的意义及培养目标课题意义随着社会经济的迅速发展人们生活水平有...

五子棋游戏设计毕业论文

学号888888888888毕业设计论文题目基于C语言或JAVA语言实现的五子棋游戏专业软件技术班级学生姓名导师姓名起止时间20xx年9月至20xx年11月计算机学院摘要五子棋是一种两人对弈的纯策略型棋类游戏亦...

五子棋设计报告

目录第一章绪论211课题背景212开发目的213开发意义2第二章需求分析321可行性研究322需求分析3221功能需求3222环境需求3第三章总体设计331系统设计思想332系统总体设计433游戏截图4第四章程...

五子棋设计报告(35篇)