Java语言程序设计课程设计-五子棋.doc_第1页
Java语言程序设计课程设计-五子棋.doc_第2页
Java语言程序设计课程设计-五子棋.doc_第3页
Java语言程序设计课程设计-五子棋.doc_第4页
Java语言程序设计课程设计-五子棋.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

java 课程设计 专 业: 数字媒体 课程名称: java 语言程序设计 课题名称: 五子棋 指导老师: 刘嘉欣 学 号: 09990051 姓 名: 学 号: 09990054 姓 名: ii 摘摘 要要 目前,随着计算机网络的发展,以计算机技术和网络技术为核心的现代网络 技术已经在现实生活和生产中得到了广泛的使用,休闲类网络游戏集趣味性,娱 乐性,互动性和益智性于一体,已经成为多数人群的休闲方式,也为多数人所喜 好。 本软件使用 java 语言实现,通过对图形界面,绘图,布局管理器等去构造 出五子棋游戏的单机功能,在此基础上,利用 socket 编程,建立起服务器与客 户端之间的连接,利用多线程技术来处理服务器端与客户端之间的数据传输、网 络通信,使得客户端和服务器端之间能够同步的进行处理。在网络对战中实现了 以下功能:建立游戏、邀请游戏、加入游戏、退出游戏、悔棋。另外,本软件还实现 了网络聊天的功能,玩家加入游戏后可以和其他玩家进行对话。在加载图片以及 绘制棋盘方面,采用双缓冲技术消除屏幕的闪烁现象。 在人机对弈中通过遍历搜索和估值模块,来提高电脑棋手的智能。算法的研 究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参 考作用。 关键词:关键词: 多线程,socket,遍历搜索,人工智能. 目目录录 1. 绪论.1 1.1 课题背景1 1.2 选题的背景和意义1 1.3 主要研究内容1 1.4 五子棋简介2 2. 开发环境及工具介绍.3 2.1 开发环境及运行环境3 2.1.1 开发环境3 2.1.2 运行环境3 2.2 java 简介 3 2.2.1 java 的起源与发展3 2.2.2 java 的特点.3 2.3 java socket 网络编程.5 2.3.1 java socket 网络编程基础.5 2.3.2 socket 编程的实现6 2.4 java图形编程.6 3. 需求分析和总体设计.7 3.1 系统设计思想7 3.2 系统总体设计8 3.3 系统功能模块及流程8 3.3.1 系统主要功能模块.8 3.3.2 系统主流程.9 3.4 玩家视图与操作10 3.4.1 服务器端.10 3.4.2 客户端.10 4. 概要设计.12 4.1 游戏各主要类的功能与主要对象12 4.1.1 服务器类.12 4.1.2 游戏客户端.13 4.1.3 网络客户端类.14 4.1.4 棋盘类.15 5. 详细设计.16 5.1 服务器端设计17 5.2 游戏客户端设计17 5.3 网络客户端设计18 5.4 棋盘类设计18 5.4.1 棋盘类的主要方法.18 5.4.2 落子算法的实现.19 6. 软件实现与测试.19 6.1 软件测试方案20 6.2 网络客户端测试用例20 7. 总结.20 致谢21 参考文献22 1 1. 绪论绪论 1.1 课题课题背景背景 电脑已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、辅 助设计、图形图像处理、教育培训以及游戏娱乐等,各行各业的人们无须经过特 别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经 充满了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还 不得不开发适合自己特殊需求的软件。java 语言作为一种面向对象的编程语言, 具有分布式,可移植,高性能,多线程等特点1。如今网络休闲游戏发展迅速,它 凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首 选。 网络五子棋游戏是使用 java 语言开发的一款游戏。它使用 socket 建立连 接,多线程处理数据,这些特点使这款游戏无论是服务器还是客户端的实现都相 对容易。 1.2 选题选题的背景和意的背景和意义义 随着计算机网络技术的发展,网络游戏已经成为计算机技术中最具潜力的热 点领域,随着联众世界、腾讯游戏等网络游戏平台的拓展,越来越多的人参与到网 络游戏中。特别是其中一些休闲益智类的棋牌游戏,集趣味性、娱乐性、互动性 和益智性于一体,拥有大量的用户。因此使用 java 开发网络五子棋游戏是一个实 用性很强的毕业设计项目。 网络五子棋游戏的总体功能是要设计出具有精美界面的,具备人工智能的, 支持网络对弈的五子棋游戏。本系统最终的目的是建立一个有具体规则的五子 棋平台,使两台不同计算机的使用者通过一定的网络连接,达到网络对弈的目的, 以及单机上的人机对战。 1.3 主要研究内容主要研究内容 本课题为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用 java 开发五子棋游戏。主要完成了人机对战和网络对战 2 个功能。网络连接部分为 socket 编程应用,客户端负责界面维护和收集用户输入的信息,及错误处理。服 务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户 列表。在人机对弈中通过简单搜索和估值模块,来提高电脑棋手的智能。分析估 值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它 们的搜索进行比较,在这些算法的基础上分析一些提高电脑智能方案。算法的研 2 究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参 考作用。 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 公司在 1995 年推出的新的编程语言,它是一种跨平台的、应用 于当前高速发展的网络编程语言。在编程语言中,可以认为 basic 语言促使了 c 语言的出现,c 语言促使了 c+的出现,而 c+又促使了 java 语言的出现。 自 java 正式推出之后,以其特有的优势迅速发展,经过几年的发展,java 已 经在软件开发和动态网站上占有相当大的市场。java 分为 j2se、j2ee 和 j2me 三种。j2se 是 java 平台标准版,主要应用于桌面程序和 java 小应用程序开发; j2ee 主要用于企业级开发和大型网站的开发;j2me 主要用于手机等移动设备程 序的开发3。 3 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 健壮性的体现,内存管理是很多种应用程序内 的关键因素。在网络上的其他地方读取大量的数据,之后把该数据写入硬盘上的 数据库内,一般的设计就是把数据读入内存中的某种集合内,对这些数据执行某 些操作,之后把数据写入数据库。在数据写入数据库后,在下一批处理之前,临 时存储数据的集合必须清空旧数据,或者被删除后再建。这种操作可能执行很多 4 次,在像 c+这些不提供自动垃圾搜集的语言中,手工清空或删除集合数据结构 逻辑上的一点点缺陷就可能导致大量的内存被错误地收回或丢失。java 的自动 内存管理正好解决这一点,它使程序员不用再为内存管理写大量的代码4。 2.3 java socket 网网络编络编程程 2.3.1 java socket 网络编程基础 网络编程,简单的理解就是两台计算机相互通信,其基本模型就是客户机/服 务器模型,也就是通信双方中的一方必须提供一个固定的位置,而另一方则只需 要知道这个固定的位置,并去建立两者之间的联系,然后完成数据交换。这里提 供固定位置的一方通常称为服务器,而建立联系的一方通常称为客户端。基于客 户机/服务器的 socket 通信模型如下图所示5: 服务响应 服务请求 建立连接 客户端 服务器端 创建 socket 类对 象 指定服务器端公认的 socket 地址和端口 在 socket 上监听客户 端的连接请求 阻塞,等待连接的建 立 接收客户端的请求信息 解释并处理请求信息 将处理结果返回给客户端 创建 socket 类对 象 向服务器端发送连接请求 向服务器发出服务请求 接收服务结果 基于客基于客户户机机/服服务务器的器的 socket 通信模型通信模型 java 为这个模型的实现提供了简化了的 socket 编程接口。在程序中只要导 入 java.io 包就可以方便的使用 java 的 socket 编程接口。 java 中 socket 通信模型如下图所示 5 server serversocket ss(port #) ss.accept()/等待连接 outputstream inputstream ss.close() client socket s(host,port #) /请求连接服务器 outputstream inputstream s.close() 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 程序 中绘图必须在一个窗口(容器)中进行,绘图窗体经常被设计为一个组件容器。一 般首先在一个面板中进行绘制,然后再将这个面板添加到显示窗口中。 graphics 类是在 java.awt 包中声明。显示格式化文本和绘图是通过调用 graphics 类的 drawxxx()方法实现的,例如 drawstring(string),drawline()等。绘 图采用的坐标系是原点在左上角,纵轴向下以像素为单位的坐标系6。 3. 需求分析和需求分析和总总体体设计设计 6 网络互连实现信息的共享成为以后计算机的发展趋势,现有的网络编程模 式主要分成两类:一种是基于 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,利用该连接不断从客户读取数据, 实现客户和服务器或者客户与客户之间的信息的交互。 客户端同样采用的是线程控制的思想,在每一个客户端连接上服务器后,就为 此客户端启动一个网络收发数据线程. 3.2 系系统总统总体体设计设计 系统使用 socket 技术以及 java 多线程机制结合在进行客户与服务端之间 信息的交互,但一个真正实用程序必须针对具体应用定制一套协议用于用户程 序之间进行交互,而该协议的定制往往是编写程序的关键也是核心内容,该协议 的完善决定程序是否能够正常运行。所谓协议就是程序之间交互的信息的格式 7 规定, 服务端和客户端都遵循该协议才能够进行对话, 通俗讲是人类之间的语 言8。 3.3 系系统统功能模功能模块块及流程及流程 3.3.1 系统主要功能模块 根据上面的系统的设计要求,可以将此网络五子棋游戏分为以下几个模块: 初始化模块:建立棋盘数组并清零以备使用;初始化键盘/鼠标等输入输 出设备并在屏幕上画出棋盘,加载音乐及显示诗词功能。 主循环控制模块:负责控制下棋顺序,当轮到某方下子时,负责将程序流 程转到相应的模块中,主要担当一个调度者的角色。 玩家落子模块:即用户在指定落子区域单击后,程序会计算该子的坐标, 并且将棋盘数组中坐标处记录棋子的颜色,1 代表黑色,2 代表白色,以 表明是服务方下的棋子还是客户方下的棋子。 分析盘面填写棋型表模块:本程序核心模块之一,人工智能算法的根本 依据。 电脑落子模块:根据填写的棋盘表,选择最优落子位置。 胜负判断模块:根据预先设定的规则,判断游戏胜负。 网络模块:在人机对弈的基础上,添加网络功能的实现,使两台不同计算 机的用户通过网络连接,实现网络对弈的功能9。 8 3.3.2 系统主流程 某方胜利 某方胜利 某方退出 网络对弈 无人机对弈 否 否 某方退出 开始 初始化 游戏模式 主循环控制 分析盘面并 填写棋型表 玩家落子 电脑落子 客户端一客户端二 主循环控制 判断胜负 结束 判断胜负重新开始 服务器开始 网网络络五子棋游五子棋游戏戏流程流程图图 9 3.4 玩家玩家视图视图与操作与操作 3.4.1 服务器端 服务器端主要通过建立流连接来连接客户端,与客户端进行相互通信、转发 信息。接收客户端的信息,接收信息后按照此客户端的要求将信息发送到相应的 客户端,服务器端起到了中转的作用10。 3.4.2 客户端 用用户户操作界面操作界面 玩家进入游戏界面时,首先会弹出一个对话框,提示用户连接服务器,当玩 家连接上服务器后,就会在界面右上角给出用户的初始玩家名,在聊天内容框中 会给出用户提示,提醒玩家先创建游戏或者加入别的玩家建立好的游戏,此外如 果玩家不想与其他玩家对弈,也可以选择人机对战,和电脑对弈。玩家在邀请其 他玩家加入自己建立好的游戏或者要加入其他玩家建立的游戏,需要玩家选在 10 用户列表界面选择要操作的玩家,再发起邀请或者加入。此游戏界面简单,用户 易操作上手,适合各个年龄的人群。游戏各模块功能如下: 各模块实现功能 chesspad 用于绘制棋盘及棋子,以及当前的提示信息,另外人机对战的主要 功能也在此模块实现。 controlpad 用于对当前的游戏界面进行实时的控制,包括:建立游戏、加入 游戏、放弃游戏、悔棋和人机对战。 4. 概要概要设计设计 netclient 类:主要用于实现网络用户的连接,玩家通过此类发送本方的游戏 状态以及接收从服务器传递过来的信息进行处理。 chesspad 类:主要用于绘制玩家棋盘及棋子。另外电脑落子的算法也全部在 此类中实现。 4.1 游游戏戏各主要各主要类类的功能与主要的功能与主要对对象象 4.1.1 服务器类 服务器类用于接收客户端的连接,并为每个客户端在服务器端启动单独 的一个守护线程,线程的主要功能是接收客户端发送过来的消息并做出相应的 处理,客户端发送到服务器端的主要消息有两部分:一部分是客户端发送给服务 器端需要服务器端进行处理的。如客户端发送过的连接信息、客户端发送过来的 改名信息、客户端发送过的断开连接信息等。另一部分是客户端发送给服务器端 需要服务端转发给其他客户端的消息。如客户端给游戏另一方发送的棋盘状态 数据、倒计时信息、聊天信息。 服务器类的主要对象: 1.tcp_port: 服务器端用于建立套接字的端口号,为了可靠的用户连接,因此在服务器端定 义了此端口号为 tcp 的,主要用于建立服务器端与客户端的 tcp 连接。 2.udp_port 服务器端用于向客户端转发数据需要绑定的用户数据报套接字的端口号, 玩家发送给服务器需要转发的消息时,服务器端的datagramsocket 就是使用此端口号 建立的 udp 连接。 4.1.2 游戏客户端 游戏客户端的主要功能是为了初始化和组织用户界面,并且定义了各个 按钮的功能。游戏客户端的主要对象如下: 11 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); 12 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 棋棋盘类设计盘类设计 棋盘类主要用于绘制棋盘以及电脑算法的实现。 13 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 的二维 数组 board2121,数组的每一个元素对应棋盘上的一个交叉点,用0表示空位、 1代表黑子、2代表白子;这张表也是今后分析的基础。在此之后还要为电脑和 玩家双方各建立一张棋型表 computer21214和 player15154,用来存放 棋型数据,就是刚才所说的重要程度,比如用20代表“冲四”的点,用15代表 “活三”的点,那么在计算重要性时,就可以根据 2015 得出前者比后者重要,下 子时电脑便会自动选择“冲四”的点。那为什么棋型表要使用三维数组呢?因为棋 盘上的每一个点都可以与横、竖、左斜、右斜四个方向的棋子构成不同的棋型, 14 所以一个点总共有 4 个记录;这样做的另一个好处是可以轻易判断出复合棋型, 例如:如果同一点上有 2 个15就是双三、有一个15和一个20就是四三。 2 程序流程 本程序由六个基本功能模块构成,各模块的详细分析如下: (1)初始化:首先,建立盘面数组 board2121、对战双方的棋型表 computer21 214和 player21214并将它们清零以备使用 (2)主循环控制模块:控制下棋顺序,当轮到某方下子时,负责将程序转到相应的 模块中去,主要担当一个调度者的角色。 (3)玩家下子:当轮到玩家下时,玩家通过鼠标在棋盘上落子,程序会根据该点的 位置,在 board2121数组的相应地方记录。 (4)盘面分析填写棋型表:本程序核心模块之一,人工智能算法的根本依据!其具 体实现方法如下:玩家在下五子棋时,一定会先根据棋盘上的情况,找出当前最 重要的一些点位,如“活三”、“冲四”等;然后再在其中选择落子点。但是,电脑不 会像人一样分析问题,要让它知道哪是“活三”、哪是“冲四”,就得在棋盘上逐点 计算,一步一步的教它。 先来分析己方的棋型,从棋盘左上角出发,向右逐行搜索,当遇到一个空白 点时,以它为中心向左挨个查找,如果遇到己方的子则记录然后继续,如果遇到 对方的子、空白点或边界就停止查找。左边完成后再向右进行同样的操作;最后 把左右两边的记录合并起来,得到的数据就是该点横向上的棋型,然后把棋型的 编号填入到 computerxyn中就行了(x、y 代表坐标,n=0、1、2、3 分别代表横、 竖、左斜、右斜四个方向)。而其他三个方向的棋型也可用同样的方法得到,当搜 索完整张棋盘后,己方棋型表也就填写完毕了。然后再用同样的方法填写电脑的 棋型表。 电脑下子:有了上面填写的两张棋型表,现在要作的就是让电脑知道在哪 一点下子了。遍历棋型表 computer15154和 player15154找出其中数值 最大的一点,在该点下子即可。 胜负判断:毋须多言,某方形成五子连即获胜。 6. 软软件件实现实现与与测试测试 6.1 软软件件测试测试方案方案 软件测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测 试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能 出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产 品适合需求。 15 软件测试的目的: (1)测试并不仅仅是为了找出错误。通过分析错误产生的原因和错误的 发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时 改进; (2)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试 的效率和有效性; (3)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的 一种方法。 6.2 网网络络客客户户端端测试测试用例用例 用例名称:网络客户端功能 用例描述:玩家连接上服务器后,能够与其他玩家进行正常的对弈操作。 测试结果:连接成功,测试结果正确。 7. 总结总结 经过系统的设计与实现,一个能够实现人机对战和网络对战的网络五子棋 系统基本完成。总结全文的工作,具体概括如下: 论文首先研究了网络五子棋游戏的优势,对比了 c/s 和 b/s 模式的各自特 点,并分析了其优缺点。针对对弈系统的具体要求,构建了基于 c/s 模式的网络 五子棋对战系统。 采用 socket 网络编程,分析了其通信的基本原理及其实现,选择了 tcp 协 议作为通讯

温馨提示

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

评论

0/150

提交评论