【毕业学位论文】(Word原稿)网络五子棋游戏算法和技术的研究-软件工程_第1页
【毕业学位论文】(Word原稿)网络五子棋游戏算法和技术的研究-软件工程_第2页
【毕业学位论文】(Word原稿)网络五子棋游戏算法和技术的研究-软件工程_第3页
【毕业学位论文】(Word原稿)网络五子棋游戏算法和技术的研究-软件工程_第4页
【毕业学位论文】(Word原稿)网络五子棋游戏算法和技术的研究-软件工程_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

海 南 大 学 毕 业 论 文(设计) 题 目: 网络五子棋 学 号: 姓 名: 年 级: 07 级计科( 2)班 学 院: 信息科学技术学院 系 别: 计算机科学与技术 专 业: 计算机科学与技术 指导教师: 李红蕾 完成日期: 2011 年 5 月 1 日 网络五子棋 - 2 - 摘 要 通过对网络五子棋游戏算法和技术的研究,以 开发平台,设计并实现了一个基于 C/S 模式的网络五子棋对战游戏。本 设计 将一般的单机五子棋程序开发成了一种网络游戏,其主要乐趣是实现人与人之间的对战,而不仅仅是人与事先设置的各种程序的对战,所以比普通的人机对战游戏更加具有生命力和趣味性。 系统采用面向连接的 议作为主要通信协议,运用络编程技 术实现游戏客户端和游戏服务器端之间的通讯,最后对程序实现的功能进行测试。 本文首先阐述网络游戏的历史、现状及发展趋势以及目前基于 序语言设计的网络游戏的现状;其次,详细描述网络五子棋的实现;最后,通过对网络五子棋游戏的进行功能测试,达到预期目标。本 设计 主要功能模块 包括 服务器端模块和客户端模块。 关键词 :五子棋;网络游戏; C/S 模式;网络编程;测试 网络五子棋 - 3 - on of IR I IR is / S a IR is to to a of so of a CP as of of of of on of of a of on to of C / S - 4 - 目 录 摘 要 2 3 目 录 4 1. 前言 6 2. 系统分析 9 求分析 9 行性分析 9 发环境分析 10 辑环境分析 11 行环境分析 11 3. 总体分析 12 计目标 12 目规划 12 4. 服务器端设计 14 务器端总体设计 14 务器端主界面设计 17 作事件的处理 18 务器的启动设计 19 于服务器端异常处理 21 5. 客户端设计 23 盘界面的设计 23 盘规则的实现 25 接服务器端模块设计 28 常情况的处理 29 网络五子棋 - 5 - 6. 程序演示 31 7. 总结 37 致 谢 38 参考文献 39 网络五子棋 - 6 - 1. 前 言 随着网络的发展和技术的进步,各种编程语言随之产生,发展却是及其飞快的。 又是一种网络程序设计语言。 实证明了它非常适合于开发大型软件。当 抽象、可读性强的优势就体现出来了。这对于规模越来越庞大的游戏软件来说,有着不小的诱惑。 本次课题就是一种基于 游戏是基于 C络五子棋游戏不仅可以使网 络上的两个人进行对弈,而且其他人也可以连接进来对话。游戏分为服务器端和客户端,通过创建通信协议来保证客户机与服务器之间的正常通信。 游戏的主要模块如下 表所示 : 网络五子棋 - 7 - 表 1 络五子棋模块一览表 模块名 类 名 功能描述 用户面板模块 户列表面板 户聊天面板 户输入面板 户操作面板 棋盘面板模块 棋类 棋类 盘 面板类 盘多线程类 服务器模块 务器信息输出面板 务器多线程类 务器端类 客户端模块 户端类 户端多线程类 国际比赛规则规定:对局中如黑方出现禁手,白方应立即指出禁手点,黑方即负。如白方在黑方出现禁手后,又落一步白子,黑棋禁手则不成立了。 所以在 有禁手 的房间里,如果黑方出现禁手,白方应立即按下 禁手 按钮。程序会判黑方负 。如果这时白方又在棋盘上落一子,黑棋禁手则不成立了。为了简化用户对 禁手 按钮的使用,也有 走禁手就输 和 禁手不能落子 规则的房间,顾名思义不多介绍。虽然采取了禁手的限制,黑棋先行仍有优势,黑棋仍可以必胜。所以如果用户是高段位的棋手 ,或者想成为高手一定要选择国际上比赛选用的比赛标准,即“三手网络五子棋 - 8 - 交换,五手两打”。 ( 1) 五子棋棋盘 棋盘正中一点为“天元”。棋盘两端的横线称端线。棋盘左右最外边的两条纵线称边线。从两条端线和两条边线向正中发展而纵横交叉在第四条线形成的四个点称为“星”。天元和星应在棋盘上用直径约为 以持黑方为准,棋盘上的纵轴线从左到右用英文字母 A行线从近到远用阿拉伯数字 115标记。纵横轴上的横纵线交叉点分别用横纵线标记的名称合写成。如“天元” 个“星”分别为 ( 2) 五子棋比赛规则 行棋顺序 黑先、白后,从天元开始相互顺序落子。 判断胜负 最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。 黑棋禁手判负 (白棋无禁手。黑棋禁手包括“三、三”(包括“四、三、三” )、“四、四” (包括“四、四、三” )、“长连” (黑棋只能以“四、三”取胜。 如分不出胜负,则定为平局 ( 对局中中途退场判为负。 五连与禁手同时形成,先五为胜。 黑方禁手形成时,白方应立即指出。若白方未发现或发现后未指明而继续应子,则不能判黑方负。 网络五子棋 - 9 - 2. 系统分析 求分析 对于普通五子棋博弈而言,需实现以下功能:有黑白两种棋子,两位棋手各执一棋,率先五珠相连的获胜。为此,需要设计黑白两种棋子类及棋盘类并设计判断获胜的算法等。 对于网络五子棋而言,在普通五子棋的基础 上还需添加以下功能:拥有服务器端和客户端,用户通过客户端登录服务器后可与其他登录的用户进行对弈;服务器支持多组用户同时进行对弈;用户可以在服务器上创建新游戏或加入已创建的游戏;用户在下棋的时候可以进行聊天交流等。 综上所述,将需要实现的网络五子棋的功能罗列如下。 提供服务器和客户端的功能。 服务器将监视客户端的登录情况并允许多个客户端进行登录。 用户通过客户端可以登录服务器,之后可以看到服务器当天在线的其他用户,并与他们进行聊天交流。 用户登录服务器后,可以创建新的五子棋游戏或加入已创建的五子棋游戏。 用户 通过客户端可以像普通五子棋那样与其他用户对弈。 行性分析 为了给游戏的设计提供依据,对需求的分析进行了总结,对软件的可行性分析如下: 网络五子棋 - 10 - 1. 编写的目的:对于计算机这一行业,需要的是高技术和坚忍不拔的意志,这一点在编程方面有所体现。学习使用 中定会受益匪浅。 2. 可行性分析的前提:网络五子棋游戏必须对网络的断开和链接有着严格的控制,更要严格的遵守游戏的规则,必须对游戏的胜负 做 出相应。网络五子棋游戏的开发目的是为了让多个用户同时在 线,自由选择对手进行对弈,同时严格按照五子棋游戏的规则进行游戏,满足五子棋游戏爱好者的需求。 3. 对技术的支持分析:通过对游戏性质的分析,该游戏可以开发为 C/S 的架构,同时该游戏可以通过网络套接字的知识开发。 发环境分析 本次的网络五子棋游戏开发所使用的语言选用 言是由于 一种高级面向对象型的程序设计语言。使用 到手持电话都有 发的程序和游戏, 序可以在任何的计算机、操作系统和支持 硬件设备上运行。 ) ) 2370 2 2046存, 120G 硬盘 P 网络五子棋 - 11 - 辑环境分析 程序的编辑环境其实只需记事本就可以了,但是一个好的编辑开发软件可以大大的缩减编辑开发的时间,由于通过各方面观察决定使用目前比较流行的 发软件 。一个综合开发环境( 是一个功能完整且成熟的软件,由 001 年首次推出, 一个开放源代码、基于 行环境分析 2 及以上处理器 ,32M 以上内存, 4G 以上硬盘 9X/作系统 800*600 或以上的屏幕分辨率 网络五子棋 - 12 - 3. 总体分析 计目标 1. 实现需求分析阶段所要求的功能 2. 服务器端要求 能 及时显示客户连接情况 3. 客户端的信息交流完全通过服务器端 来传递 4. 客户端游戏功能齐全 及 能对客户的各个事件 做出 响应 目规划 游戏服务器端程序模块实现 . 游戏客户端程序模块实现 . 游戏棋盘模块实现 . 该游戏主要分为服务器端和客户端,其具体的功能模块如下 : 图 3软件设计图 作为服务器角色所具有的功能: 户端 服务器 客户端 网络五子棋 - 13 - 图 3服务器功能图 作为客户端所具有的功能: 图 3客户端功能 图 角色 请求加入 作为白棋玩家 第一轮不可先下棋 角色 等待加入. 作为黑棋玩家 第一轮可以先下棋 网络五子棋 - 14 - 4. 服务器端设计 网络五子棋游戏服务器端主要是有 3 个类来完成: (主类 )、 (线程类 )和。 务器端总体设计 服务器端主要通过建立流连接来连接客户端,与客户端进行相互通信、转发信息。接收一客户端的信息,接收信息后按照此客户端的要求将信息发送到相应的客户端,服务器端起到了中介的作用。 继承了 集成了服务器端的所有功能,包括与各客户端之间的相互通信,转发信息。 在主类 最重要的函数在此方法中初始化: 在循环 中不断接受客户端的信息,并启动了线程 对象,为每一个客户端启动了一个线程,减轻了服务器端的承受能力。 在方法 e)实现了按钮的控制功能, 钮主要功能清空文本区的服务器信息。 钮显示服务器信息在文本区。 网络五子棋 - 15 - 钮关闭服务器,与客户端断开连接。 线程是由 来实现的, 的对象不仅可以获取套接字、输入输出流,而且它还提供了有关客户机的信息,例如客户机的名称、房间号、游戏的开始和结束等。客户端消息的传递处理主要是负责接收和发送客户端的信息。 图 4服务器通信的原理 在多线程的情况下,由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。 言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。 由于可以通过 键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是 键字, 这里我们使用 。 控制对类成员变量的访问:每个类实例对应一把锁,每个 都必须获得调用该 块 的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占P:络五子棋 - 16 - 该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。这种机制确保了同一时刻对于每一个类实例,其所有声明为 成员函数中至多只有一个处于可执行状态(因为至多只有一个能够获得该类实例对应的锁),从而有效避免了类成员变量的访问冲突(只要所有可能访问类成员变量的方法均被声明为 在 ,不光是类实例,每一个类也对应一 把锁,这样我们也可将类的静态成员函数声明为 以控制其对类的静态成员变量的访问。 :通过 键字来声明。 代码 如下: /加新映射 ); /除旧映射 ; /发送新名字到客户端 +(/+(+); /发送 户端 (/+; 是这样一个代码块,其中的代码必须获得对象 如前所述,可以是类实例或类)的锁方能执行,具体机制同前所述。由于可以针对任意代码块,且可任网络五子棋 - 17 - 意指定上锁的对象,故灵活性较高。 务 器 端主界面设计 图 4五子棋服务器 继承 面板类的子类,主要来实现服务器端的界面布局,在面板类的子类里添加了一个标签和一个文本区。标签: 本区: 定义了两个面板类 将整个面板类的子类的布局设为 布局设为 布局设为 ); 网络五子棋 - 18 - ); ); 然后将标签: 本区: 加到。最后在主类里添加了三个按钮加到了窗体中,在主类的构造函数中对整个服务器端的界面进行了布局。 作事件的处理 上面的主界面设计完了后,对于上面的控件需要注册动作事件后才能实现一定的功能。通过分析主界面中只有按钮需要进行动作事件的处理。 ); 按钮事件执行: if(= +:+n); n); ); 网络五子棋 - 19 - 务器的启动设计 服务器的启动分以下几步: (1)新建服务器对象 ) ; (2)启动服务器流程 +); ); ; ; ; 网络五子棋 - 20 - 以上设计中的 类 对象,于表示服务器套接字。服务器套接字通过指定的端口号来等待连接的套接字。服务器套接字一次只能和一个套接字连接。 表示套接字,使用 ,需要指定待连接服务器的 址及端口号。 服务器套接字等待客户机的连接请求,并创建新的套接字使其与客户机的套接字连接, 而本身继续等待其他的客户机的连接请求。 图 4接字连接 对于客户端消息处理机制 为了保证服务器和客户机间正常的通 信,我们需要确定所(1) 服务器套接字 (2) (3) 服务器套接字 套接字 客户端套接字 连 接 试图连 接 客户端套接字 服务器套接字 网络五子棋 - 21 - 有交换的信息属于何种类型。假设两个玩家同时连接上服务器 ,要求进行对弈。首先,一名玩家点击开始按钮,向服务器发送 “ 消息,另一个玩家也向服务器发送“ 消息 ,然后服务器将会认为两名玩家要进行对弈。 于服务器端异常处理 首先是对于服务器端的启动,当启动发生异常时系统将会抛出异常 ,所以需要对异常情况进行处理。 于异常的处理是通过 句来实现的。使用句可以保证程序在发生异常的时候能继续的执行下去,而不是中断退出。下面是实现异常捕获的功能代码: ); ; ; ; 网络五子棋 - 22 - 对于服务器异常的处理使用弹出提示框的形式实现,下面是其功能代码: 经过以上设计服务器端已基本实现了。 网络五子棋 - 23 - 5. 客户端设计 客户端设计主要包括两个模块的设计,棋盘类的设计和连接服务器端的设计。棋盘类不仅要设计出棋盘界面来而且需要对下棋的规则进行设计,需要对鼠标事 件进行设计。连接服务器的设计需要设计出如何与服务器端连接的线程出来。 盘界面的设计 ( 1) 首先不管动作事件,要设计出棋盘界面出来 : 图 5五子棋客户端 、 、 、 、都继承 是 子类。 网络五子棋 - 24 - 在主类 ,将其布局方式设为 义 对象添加进去 ); 定义 对象, 对象添加进去 定义 对象添加进去, 棋盘类的实现是正把整个棋盘抽象为一个二维数组,棋子类的实现通过在 方法中画圆设置背景色来区别黑白棋子。 黑棋子: ,0,14,14); 白棋子: ,0,14,14); 向组件绘制图形时,并不是直接向其绘制图形,而是先将待绘制图形绘制到缓冲区中,然后再将已经绘制于缓冲区图网络五子棋 - 25 - 形绘制到组件上。这种绘制图形的技术称为双缓冲,用于消除图像闪烁现象。 g) i=40;i=380;i=i+20) 0,i,400,i); 0,400,400,400); j=40;j=380;j=j+20) j,40,j,400); 00,40,400,400); 7,97,6,6); 37,97,6,6); 7,337,6,6); 37,337,6,6); 17,217,6,6); 盘规则的实现 程序中最 重要的部分是如何决定胜负。横竖、或是对角线方向上拥有五颗同颜色的棋子时,及为胜利。 方法是用于查找并计算连在一起的五颗棋子。下面是 代码的总体框架: /判断当前状态是否为胜利状态 a,b, ,; if(1) ; /以 下每对 环语句为一组,因为这样使得下 棋 的位置能网络五子棋 - 26 - 中间而非两端 ;4;) /遍历相邻 4 个网络 ;) /遍历棋盘上所有黑棋子 (a+20= & (b*20)=) /判断当前下的棋子的右边 4 个棋子是 否都为黑棋 ; if(5) /五子相连时,胜利 if() ; /若中间有一个棋子非黑棋,则会进入此分支,此时无需再遍历 依次再判断当前下的棋子的左边、上边、下边、左上方向、右下方向、右上方向、左下方向 4 个棋子是否都为黑棋 ,代码如下: (20= & (b*20=) a*20= & (b+20=) ) 网络五子棋 - 27 - a*20= & (20=) (20= & (b+20=) (a+20= & (20=) (a+20= & (b+20=) (20= & (20=) (a+20= & (b*20=) (20= & (b*20=) a*20= & (b+20=) 网络五子棋 - 28 - a*20= & (20=) (20= & (b+20=) (a+20= & (20=) (a+20= & (b+20=) (20= & (20=) 接服务器端模块设计 服务器端主要通过建立流连接来连接客户端,与客户端进行相互通信、转发信息。接收一客户端的信息,接收信息后按照此客户端的要求将信息发送到相应的客户端,服务器端起到了中介的作用。 继承了 集成了服务器端的所有功能,包括与各客户端之间的相互通信,转发信息。 在主类 最重要的函数在此方法中初始化: 网络五子棋 - 29 - 在循环 中不断接受客户端的信息,并启动了线程 对象,为每一个客户端启动了一个线程,减轻了服务器端的承受能力。 在方法 e)实现了按钮的控制功能, 钮主要功能清空文本区的服务器信息。 钮显示服务器信息在文本区。 钮关闭服务器,与客户端断开连接。 常情况的处理 对于一些动作事件可能会出现异常而导致程序中断,所以要对异常情况进行处理。对于异常的处理是使用 句。 首先对于客户机连接的情况来说当客户机连接不上的时候,需要将有关的信息返回给客户 。 网络五子棋 - 30 - 图 5连接服务器失败 至此已经大致的介绍了客户端的设计,服务器端和客户端已经基本实现了它们所需要的功能。 网络五子棋 - 31 - 6. 程序演示 此小 节将演示创建的网络五子棋。首先启动服务器,件,在文件中的任一行单击鼠标右键,在弹出的菜单中单击“运行方式”命令,并选择“ 用程序”命令,若成功运行则出现如图所示的五子棋服务器界面。 图 6五子棋服务器 成功运行 接着打开 件,按上述方法运行,若成功运行则出现如图所示的五子棋客户端界面。 网络五子棋 - 32 - 图 6打开 五子棋客户端 单击客户端界面上的“连接服务器”按钮,连接到主机,若成功连接则会出现如图所示的提示信息。 网络五子棋 - 33 - 图 6连接服务器成功 此时,单击界面上的“创建游戏”按钮创建游戏,若成功则会给信息要求等待对手加入,如图所示。 网络五子棋 - 34 - 图 6建游戏成功 再次运行 开一个新的客户端,单击“连接服务器”按钮,成功的话会看到已经创建游戏的用户,如图所示。 网络五子棋 - 35 - 图 6打开 另一个五子棋服务器 选择刚才创建游戏的用户名后,单击界面上的“加入游戏”按钮加入游戏,若成功则等待对方下棋,此时之前创建游戏的用户界面将提示开始下棋,一场五子棋赛就此拉开帷幕。用户将轮流下棋直到决出胜负,如图所示。 网络五子棋 - 36 - 图 6五子棋对战界面 这里介绍了创建 络五子棋的方法,由于网络五子棋同时涉及 络编程、多线程编程及五子棋胜利算法设计等方面,所以本工程有一定的复杂度。为了实现网络功能,用到了 创建套接口,使用数据输入输出流的相关方法来监听网络信号并发送相应信息。为了支持多组用户同时下棋,对棋盘、服务器及客户端增添了多线程功能。 网络五子棋 - 37 - 7. 总结 通过本次毕业设计的练习,我对这种实时性要求高的游戏开发有了详细的了解,通过该游戏的模型,我对 言程序设计有了更进一步的了解。 1 数组的巧 妙应用法:本程序的棋盘就利用了数组,将棋子的代号放进数组中,这样有利于确定棋子位置状态。 2 网络套接字的开发方法:该技术是 序员必备的一项技术,也是进行桌面版游戏开发所必不可少的一项技术,特别是对于一些实时性要求高的应用。 3 游戏通信方法:本程序是通过字符串传递信息的,传递时应该遵循一定的通信协议。 4 相关知识:其中比较重要的是抗锯齿的使用方法。通过抗锯齿这个特点,使棋子变得更加平滑美观。 5 线程的使用方法:本程序中到处是通过线程工

温馨提示

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

评论

0/150

提交评论