基于CS模式的五子棋网络对战游戏毕业设计.docx
《基于CS模式的五子棋网络对战游戏毕业设计.docx》由会员分享,可在线阅读,更多相关《基于CS模式的五子棋网络对战游戏毕业设计.docx(99页珍藏版)》请在冰豆网上搜索。
基于CS模式的五子棋网络对战游戏毕业设计
基于CS模式的五子棋网络对战游戏毕业设计
第一章系统概述
1.1课题意义
本程序旨在用JAVA实现一个基本于C/S模式的五子棋网络对战游戏。
玩家作为客户端通过服务器端与其它玩家进行对战,聊天等功能。
通过实现本程序加深对计算机网络编程的了解。
1.2国内外有关研究动态
电脑游戏行业经过二十年的发展,已经成为与影视、音乐等并驾齐驱的全球最重要的娱乐产业之一,其年销售额超过好莱坞的全年收入。
互联网的出现为电脑游戏行业发展注入了新的活力,凭借信息双向交流、速度快、不受空间限制等优势,让真人参与游戏,提高了游戏的互动性、仿真性和竞技性,使玩家在虚拟世界里可以发挥现实世界无法展现的潜能,改变了单机版游戏固定、呆板、与机器对话的状况。
网络游戏的这些优势不仅使其在电脑游戏行业中异军突起并在某种程度上取代了单机版游戏,而且成为网络业三大(网上金融、网上教育和网络游戏)赢利且利润优厚的领域之一[1]。
网络作为一种新兴的传播方式,主要包括三大内容:
娱乐、资讯、通讯。
提到网络娱乐,过去主要指的是单机版游戏,没有引入网络的概念[2]但随着科技的发展,游戏娱乐产业也在成长[3]目前,国内的游戏娱乐产业正处于起步阶段,特点表现为:
第一,它是一种文化的传播。
娱乐产业可以潜移默化地改变人的观念,当前,很多多媒体的播放已被电脑网络所取代[4]。
第二,网络游戏加强了人与人的沟通。
第三,网络游戏具有一定的教育意义[5]。
网络游戏所具有的角色扮演的功能,使得玩家能通过互助更好地完成游戏中的各项任务。
网络无国界,游戏在网络文化产业世界的发展中地位会越来越高[6]。
目前在国外,休闲游戏如棋类等,玩家的年龄跨度非常大,这和我国目前网游市场以青少年为主要消费人群的状况截然不同[7]。
其实,网络可以解决空间的问题,网络和生活越来越息息相关,因此,开辟适合各个年龄层的游戏产品迫在眉睫。
同时,这也涉及到一个企业开发的能力。
娱乐产业发展到一定程度,通过不断锻炼和经验的积累,完全可以通过融入娱乐的成分把教条的东西深入浅出地展现给消费者[8]。
就国内的发展来看,最近這两三年内国内的游戏公司如雨后春笋般的成立,所開發或代理的网络游戏更是不胜枚举。
以全球游戏业界的发展来看,這几年韩国的表现最为突出,特別是在网络游戏的技术研发兴游戏制作,其所发行的网络游戏更成为全球游戏产业重要的指标之一。
去年在美国洛杉矶所举行的E3(ElectronicEntertainmentExposition)展中,已经有几家的韩国厂商挤入世界第一线的游戏开发厂商之列[9]。
近几年来,由于3D硬体绘图技术的突破,使得即时描绘的书面越来越精致,而且3D遊戏性更多元化更逼近真实世界,因此在遊戏产业中,3D游戏已经逐渐取代2D游戏为游戏市场的主流,即使是网络游戏,也慢慢趋向3D化。
然而游戏3D化将会带来的游戏开发上的困难等问题,这些问题以后都需要逐步解决[10]。
1.3课题主要内容及创新之处
五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。
本程序是用JAVA实现的一个基本于C/S模式的五子棋网络对战游戏。
JAVA是一种简单的,面向对象的,分布式的,解释的,健壮的,安全的,结构中立的,可移植的,性能很优异的多线程的,动态的语言。
因此用Java开发的网络应用系统可以在各种平台上运行,实现了设备无关性,一次开发处处运行,大大增加了开发效率,减少了重复劳动。
玩家作为客户端通过服务器端与其它玩家进行对战,聊天等功能[11]。
本程序作为一种网络游戏,其乐趣是人与人之间的对抗,而不仅仅是人与事先设置的各种程序的对抗,所以比普通的人机对战游戏更具有生命力,更具有趣味性[12]。
而且通过实现本程序可以加深对计算机网络编程的了解。
第二章五子棋简介
2.1五子棋起源、历史、简介
五子棋起源于中国古代的传统黑白棋[13]。
现代五子棋日文称之为"連珠",英译为"Renju",英文称之为"Gobang"或"FIR"(FiveinaRow的缩写),亦有"连五子"、"五子连"、"串珠"、"五目"、"五目碰"、"五格"等多种称谓。
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋既有现代休闲的明显特征"短、平、快",又有古典哲学的高深学问"阴阳易理";它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有"场"的概念,亦有"点"的连接。
它是中西文化的交流点,是古今哲理的结晶。
2.2五子棋规则说明
2.2.1棋盘
棋盘正中一点为"天元"。
棋盘两端的横线称端线。
棋盘左右最外边的两条纵线称边线。
从两条端线和两条边线向正中发展而纵横交叉在第四条线形成的四个点称为"星"。
天元和星应在棋盘上用直径约为0.5厘米的实心小圆点标出。
以持黑方为准,棋盘上的纵轴线从左到右用英文字母A~O标记。
横行线从近到远用阿拉伯数字1~15标记。
纵横轴上的横纵线交叉点分别用横纵线标记的名称合写成。
如"天元"H8,四个"星"分别为D4、D12、L12、L4等。
见图2.1
图2.1棋盘
2.2.2基本规则
黑白双方依次落子,任一方先在棋盘上形成横向、竖向、斜向的连续的相同颜色的五个(含五个以上)棋子的一方为胜。
2.2.3阳线和阴线
阳线:
棋盘上可见的横纵直线。
阴线:
棋盘上无实线连接的隐形斜线。
2.2.4连
在棋盘某一阳线或阴线上形成5个以上的同色棋子不间隔地相连。
五连:
在棋盘上形成的5个同色棋子的"连"。
长连:
在棋盘上形成的6个或6个以上同色棋子的"连"。
2.2.5"四"包括"活四"和"冲四"
图2.2活四说明
活四:
在棋盘某一条阳线或阴线上有同色4子不间隔地紧紧相连,且在此4子两端延长线上各有一个无子的交叉点与此4子紧密相连。
见图2.2
冲四:
除"活四"外的,再下一着棋便可形成五连,并且存在五连的可能性的局面。
见图2.3
图2.3冲四说明
白棋再下一着可形成长连的局面也视为"四"。
见图2.4
图2.4白棋长连形成的四
2.2.6"三"指活三,包括"连三"和"跳三"
活三:
在棋盘某一条阳线或阴线上有同色3子不间隔地紧紧相连,且在此3子两端延长线上各有一个无子的交叉点与此3子紧密相连。
连三:
在棋盘某一条阳线或阴线上有同色三子相连,且在此三子两端延长线上有一端至少有一个,另一端至少有两个无子的交叉点与此三子紧密相连。
跳三:
中间仅间隔一个无子交叉点的连三,但两端延长线均至少有一个无子的交叉点与此三子相连。
2.2.7三手可交换
是指黑棋下盘面第3着棋后,白方在应白4着棋之前,如感觉黑方棋形不利于己方,可提出交换,即执白棋一方变为执黑棋一方,而黑方不可以不换。
2.2.8五手两打
是指黑棋在下盘面上关键的第5手棋时,必须下两步棋,让白棋在这两步棋中任选一步,然后再继续对弈。
一般说来,白棋肯定拿掉对白方不利的一点,而保留对黑方较为不利的那点让黑方行棋。
2.2.9禁手规则
无禁手:
是指采用最简单古老的规则。
黑白双方依次落子,任一方先在棋盘上形成横向、竖向、斜向的连续的相同颜色的五个(含五个以上)棋子的一方为胜。
这种规则非常简单容易理解。
适合初学的业余五子棋爱好者。
但是在这种规则下黑棋胜算较大。
甚至已经有人证明在黑白双方都不出现错误的情况下,黑棋可以必胜。
所以一般要求连续玩两盘以上,既任一方执黑,执白各一次。
有禁手:
鉴于无禁手规则黑棋必胜,人们不断采用一些方法限制黑棋先行的优势,以平衡黑白双方的形式。
于是针对黑棋的各种禁手逐渐形成。
禁手最简单地说就是一手棋形成长连(连成五个以上连续相同的棋子),或两个以上的活三,或者两个以上的四,并且这些四、活三和长连都要包括这一手棋。
并且规定,当禁与连五同时出现时为黑方取胜禁手不成立,禁手是针对黑棋而言的,白棋没有任何禁手。
例如:
黑棋长连是禁手,白棋长连算赢棋。
国际比赛规则规定:
对局中如黑方出现禁手,白方应立即指出禁手点,黑方即负。
如白方在黑方出现禁手后,又落一步白子,黑棋禁手则不成立了。
所以在"有禁手"的房间里,如果黑方出现禁手,白方应立即按下"禁手"按钮。
程序会判黑方负。
如果这时白方又在棋盘上落一子,黑棋禁手则不成立了。
第三章方案设计及开发工具的选取
3.1选用Java进行开发的原因
Java是一种简单的,面向对象的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言[14]。
因此用Java开发的网络应用系统可以在各种平台上运行,大大增加了开发效率,减少重复劳动。
而且,Java集成的网络功能分有利于开发网络应用系统[15]。
Java具有许多的优点:
3.1.1简单
Java最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了。
Java语言的简单性主要体现在以下三个方面:
1.Java的风格类似于C++,因而C++程序员是非常熟悉的。
从某种意义上讲,Java语言是C及C++语言的一个变种,因此,C++程序员可以很快就掌握Java编程技术。
2.Java摒弃了C++中容易引发程序错误的地方,如指针和内存管理。
3.Java提供了丰富的类库。
3.1.2面向对象
面向对象可以说是Java最重要的特性。
Java语言的设计完全是面向对象的,它不支持类似C语言那样的面向过程的程序设计技术。
Java支持静态和动态风格的代码继承及重用。
单从面向对象的特性来看,Java类似于SmallTalk,但其它特性、尤其是适用于分布式计算环境的特性远远超越了SmallTalk。
3.1.3分布式
Java包括一个支持HTTP和FTP等基于TCP/IP协议的子库。
因此,Java应用程序可凭借URL打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。
为分布环境尤其是Internet提供动态内容无疑是一项非常宏伟的任务,但Java的语法特性却使我们很容易地实现这项目标。
3.1.4健壮
Java致力于检查程序在编译和运行时的错误。
类型检查帮助检查出许多开发早期出现的错误。
Java自己操纵内存减少了内存出错的可能性。
Java还实现了真数组,避免了覆盖数据的可能。
这项功能特征大大缩短了开发Java应用程序的周期。
Java提供Null指针检测数组边界检测异常出口字节代码校验
3.1.5结构中立
另外,为了建立Java作为网络的一个整体,Java将它的程序编译成一种结构中立的中间文件格式。
只要有Java运行系统的机器都能执行这种中间代码。
现在,Java运行系统有Solaris2.4(SPARC),Win32系统(Windows95和WindowsNT)等.Java源程序被编译成一种高层次的与机器无关的byte-code格式语言,这种语言被设计在虚拟机上运行,由机器相关的运行调试器实现执行。
3.1.6安全
Java的安全性可从两个方面得到保证。
一方面,在Java语言里,像指针和释放内存等C++功能被删除,避免了非法内存操作。
另一方面,当Java用来创建浏览器时,语言功能和一些浏览器本身提供的功能结合起来,使它更安全。
Java语言在你的机器上执行前,要经过很多次的测试。
它经过代码校验,检查代码段的格式,检测指针操作,对象操作是否过分以及试图改变一个对象的类型。
3.1.7可移植的
同体系结构无关的特性使得Java应用程序可以在配备了Java解释器和运行环境的任何计算机系统上运行,这成为Java应用软件便于移植的良好基础。
但仅仅如此还不够。
如果基本数据类型设计依赖于具体实现,也将为程序的移植带来很大不便。
例如在Windows3.1中整数(Integer)为16bits,在Windows95中整数为32bits,在DECAlpha中整数为64bits,在Intel486中为32bits。
通过定义独立于平台的基本数据类型及其运算,Java数据得以在任何硬件平台上保持一致。
Java语言的基本数据类型及其表示方式如下:
byte8-bit二进制补码short16-bit二进制补码int32-bit二进制补码long64-bit二进制补码float32-bitIEEE754浮点数double32-bitIEEE754浮点数char16-bitUnicode字符。
在任何Java解释器中,数据类型都是依据以上标准具体实现的。
因为几乎目前使用的所有CPU都能支持以上数据类型、8~64位整数格式的补码运算和单/双精度浮点运算。
Java编译器本身就是用Java语言编写的。
Java运算系统的编制依据POSIX方便移植的限制,用ANSIC语言写成。
Java语言规范中也没有任何同具体实现相关的内容。
3.1.8多线程
Java的多线程功能使得在一个程序里可同时执行多个小任务。
线程有时也称小进程,是一个大进程里分出来的小的独立的进程。
因为Java实现的多线程技术,所以比C和C++更健壮。
多线程带来的更大的好处是更好的交互性能和实时控制性能。
当然实时控制性能还取决于系统本身(UNIX,Windows,Macintosh等),在开发难易程度和性能上都比单线程要好。
任何用过当前浏览器的人,都感觉为调一副图片而等待是一件很烦恼的事情。
在Java里,你可用一个单线程来调一幅图片,而你可以访问HTML里的其它信息而不必等它。
3.1.9与C和C++语言的异同
Java提供了一个功能强大语言的所有功能,但几乎没有一点含混特征。
C++安全性不好,但C和C++还是被大家所接受,所以Java设计成C++形式,让大家很容易学习。
Java去掉了C++语言的许多功能,让Java的语言功能很精炼,并增加了一些很有用的功能,Java去掉了以下几个C和C++功能和特征:
指针运算结构typedefs#define需要释放内存全局变量的定义这个功能都是很容易引起错误的地方。
3.2客户端服务器模式
3.2.1C/S模式简介
客户机/服务器(Client/Server)模式是指两个逻辑(往往是物理的)系统(客户机/服务器)及其应用程序逻辑组件之间复杂关系的协同[16]。
一般而言,C/S应用系统从物理上都可划分为客户机与服务器两大部分,而逻辑上又可分解为三部分:
表达逻辑、业务处理逻辑和数据管理逻辑。
C/S应用系统的格局和性能主要取决于这些逻辑成份在客户机上或在服务器上的组织与分配。
C/S模式将一个应用分为两个部分:
前端(客户端)、后端(服务器)。
客户机指提供客户机服务的逻辑系统,服务器指向服务器请求提供服务的逻辑系统。
一般来说,客户机向服务器发出请求为其完成一部分工作服务器则处理客户机的请求并返回结果。
C/S两层模式主要有以下特点:
分布的处理与集中的数据操作管理有机地结合;开放式的系统;用与操作系统、网络协议无关的方式存取数据,支持多平台和跨平台;服务器对用户是透明的;交互性强;相对B/S模式,C/S模式速度快,更利于处理大量数据。
C/S两层模式中,客户机并不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量。
由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的局域网内使用。
国内目前的大部分ERP(财务)软件产品即属于此类结构。
C/S模式(Client-ServerArchitecture)可能是应用软件开发所使用的最成功的一种模式。
它首先是出现在主机系统中,在局域网环境下,其性能显的格外的突出。
而现在,C/S模式已经成为一种基本的开发设计模式。
虽然C/S应用软件包含了Client和Server部件并且在网络中相互交互。
但这并不代表说所有的C/S应用软件均需要按照这样来设计(即网络不是必须的),它是允许在单机上运行的。
虽然两层系统有以上的优点,但在多用户、多数据库、且非安全的网络环境下(例如Internet),两层的应用就有明显的局限性。
服务器端的数据库必须同每一个活动的客户保持连接,这些连接消耗了大量的运算资源,其结果是随着客户数目的增加,性能不断下降.由于应用逻辑全部驻留在客户端,当应用环境发生变化需要改变事务逻辑时,每个客户机上的程序都需要更新,给系统的维护和管理造成了一定的困难。
随着应用系统越来越复杂,客户端应用程序变得越来越庞大,对客户机的处理能力要求越来越高,成为所谓的“胖客户机”
在C/S模式中,工作原理可以简单的理解为:
Client向Server提交一个请求,Server则使用一些方法处理这个请求,并将效果返回给Client.见图3.1
图3.1C/S模式原理图
在处理Client的请求时,Server本身可以成为另一个C/S模式中的Client.
见图3.2
图3.2server与client关系图
大部份的人认为在Client-Server应用软件中,Server做了几乎所有的工作。
但实际上并不是这样。
在实际应用中,Client执行了大部份的软件逻辑并完成了大部份的工作。
Server当然也做了些工作。
但它主要的工作是接受client的请求并返回结果。
有许多人说C/S结构是分布式结构中最常用的一个例子。
的确,它确实是一个常用的架构模式,而且它也确是通过网络进行Client和Server之间的交互,但是,严格来说,C/S模式有可能不是真正意义上的分布式结构。
为什么这么说呢?
我们首先应该从分布式结构的定义及特性去考虑。
分布式系统简单来说是指通过网络,进行多于一台电脑之间的数据交互。
而它最大的特性在于二点,性能(performance)和可量测性(Scalability).而C/S模式由于含有一系列的限制,以至于很难达到这二点分布式系统的特性。
另一方面,一个单独的应用软件的透明度通常也是一个分布式结构的特性,但C/S模式并没有提供这方向的特性。
举个例子,一个网页浏览器,可以看成是一个Client.而用户必须输入网站的网址去连接包含所要求网页的Server,在这里,它就缺乏了透明性。
因此我也可以将这个网页浏览器和服务器看成是在这个系统中的二个独立的组件。
在C/S模式下,应用程序直接存取数据库服务器上的数据,数据库服务器挂在网络服务器上,客户机通过协议(如TCP/IP)和服务器连接。
网络服务器一般运行Unix或WindowsNT等操作系统,客户机一般运行Windows95/98。
在C/S模式下,大量的开发任务在客户机端。
目前各种流行的开发环境一般都有开发数据库的工具,并且支持C/S模式开发。
如VisualC++/Basic、Delphi/C++Builder、PowerBuilder等。
3.2.2C/S模式的限制与应用
C/S模式也含有一系列的限制。
那这些限制都是什么呢?
其实C/S模式最基本的问题在于其缺乏可量测性,主要原因是由于Server逐渐的变成了性能的瓶颈。
在前面介绍了可量测性和性能是分布式结构的二大特点。
二者相辅相成,缺乏了可量测性也成为了C/S模式不是一种完全的分布式结构的一个原因。
在C/S模式中,服务端通常需要通过获取和使用一些资源来处理Client的请求,比如说,连接数据库,获取数据信息等。
对于一个软件的开发设计,任何一个需要访问共享资源的设计系统均应该在最短的时间内获取到所需资源,这样其它的用户就可以有机会去访问资源。
试想一下,如果同一时间,大量的Client同时对Server发出请求,会出现什么的样的情况?
可能会是Server的崩溃,也可能会是网络的停滞,但不管是什么,这一点将会让Server变成一个性能的瓶颈,这也是为什么我说C/S模式对于一个应用软件的可量测性来说含有一定的限制。
(有关可量测性,在下面讨论)。
C/S模式不适合大型的网络系统,但对于局域网系统来说是个很好的选择,换句话说,C/S模式适合10到100用户的局域网的系统开发,而对于Internet用户的系统来说,这种模式就不适合了。
如果说C/S模式不是一种完全的分布式系统,那么它与传统的分布式系统又有什么差别呢?
C/S模式的大部处理是在Client中执行,而传统的分布式系统是在另一远程机器中进行处理。
二者的边界有点模糊,针对不同的系统要进行正确的选择,这样才能设计出高性能的系统。
3.2.3可量测性(Scalability)的讨论
什么是可量测性呢?
对于一个含有可量测性的系统来说,当其在物理资源(小陆所说的硬件资源)的数量或者用户的数量增加的前提下,仍应尽可能的保持着效率。
当然,在实际的操作中,这是不可能的,多多少少性能都会受到影响。
拿本程序来当例子,当玩家多的时候,大家都需要排队,才能进入到游戏,而当玩家少的时候,大家就可以直接连接,进入到游戏中[17]。
3.3界面开发工具的选择
对一个优秀的应用程序来说,良好的图形用户接口是必不可少的。
缺少良好的图形用户接口,将会给用户理解和使用应用程序带来很多不便。
很难想象用户为了学会使用一个应用程序,去记一大堆命令。
Java提Awt和swing包了生成一个良好的图形用户接口所需要的;基本元件:
面板(Panelcopy;、按钮(Buttoncopy;、标copy;(Labelcopy;、画板(Canvasescopy;、滚动条(Scrollbarcopy;、列表框(Listcopy;、文本域(TextFieldcopy;、文本区(TextAreacopy)。
由于本系统是一个休闲娱乐游戏,本身的界面元素也不是很复杂,所以用JavaAWT来做界出处理已经足够了。
用JAVAAWT做界面也有利于和JAVA内部程序的衔接。
3.4JAVASocket编程
Java是一种可用于进行网络编程的语言,它提供了两种功能强大的网络支持机制:
URL访问网络资源的类和用Socket通讯的类,来满足不同的要求[18]。
一是URL用于访问Internet网上资源的应用;另一种是针对client/server(客户端/服务器)模式的应用以及实现某些特殊的协议的应用,它的通讯过程是基于TCP/IP协议中传输层接口socket实现的。
客户基于服务器之间使用的大部分通讯组件都是基于socket接口来实现的[19]。
Socket是两个程序之间进行双向数据传输的网络通讯端点,有一个地址和一个端口号来标识。
每个服务程序在提供服务时都要在一个端口进行,而想使用该服务的客户机也必须连接该端口。
Socket因为是基于传输层,所以它是比较原始的通讯协议机制。
通过Socket的数据表现形式为字节流信息,因此通讯双方要想完成某项具体的应用则必须按双方约定的方式进行数据的格式化和解释,它具有更强的灵活性和更广泛的使用领域。
客户机/服务器Socket通讯工作模式见图3.3
本文来源于知名教育网,更多文件请见文章最后参考文献。
图3.3客户机/服务器Socket通讯工作模式
第四章五子棋详细设计
根据上一章介绍的系统实现方案,可以将系统简要的看为分为三个大的功能模块,即界面元素的设计,客户端程序设计和服务器端程序设计。
下面就这三个部分的主要功能实现依次进行介绍:
4.1需求规定
●棋盘采用15×15棋盘。
●游戏采用人与人对弈模式,可以选择玩家进行游戏。
●游戏中设有禁守规则和其他走子限制。
●只有当五个相同颜色的棋子成线以后才判为获胜,长连也算获胜。
●棋盘颜色与棋子颜色要对比分明,便于其他程序识别。
●游戏中可以显示游戏状态的信息,但是不能有弹出对话框之类的窗口挡住棋盘。
4.2运行环境
硬件配置(推荐):
CPU:
P4—1GHZ或更高
内存:
128M或更多
显示器分辨率:
800x600或更高
软件配置:
Jbuilder9或安装了JDK1.