局域网的象棋对战Word下载.docx
《局域网的象棋对战Word下载.docx》由会员分享,可在线阅读,更多相关《局域网的象棋对战Word下载.docx(36页珍藏版)》请在冰豆网上搜索。
4.2.2客户端10
4.3需要解决的问题11
5系统实现13
5.1棋盘设计13
5.2规则制定16
5.2.1规则说明16
5.2.2规则算法17
6运行测试23
6.1服务端23
6.2客户端24
7总结27
致谢27
参考文献27
基于局域网的中国象棋游戏
摘要:
中国象棋具有悠久的历史。
战国时期,已经有了关于象棋的正式记载,新中国建立之后,象棋进入了一个崭新的发展阶段。
随着信息技术的发展,人民生活水平的不断提高。
联网游戏作为一种娱乐手段,正以其独特的魅力吸引着越来越多的玩家。
为了满足广大象棋爱好者也可以享受到网络所带来的便利,本设计在当前局域网条件下实现了中国象棋的网络对战。
鉴于局域网的特点和游戏本身的要求,本设计采用C/S架构来实现相互之间的通信。
它主要包含以下几大模块:
网络通信模块,图像绘制模块和规则设置模块。
网络通信模块使得玩家之间可以方便迅速的建立起网络连接,从而实现联机对弈功能;
图像绘制模块实现棋盘更新以及棋子动态表示等功能;
规则设置模块用于约束玩家的走棋。
在系统中我负责象棋部分的功能。
电脑游戏是计算机应用领域的一个重要主题,而当前网上最热门的休闲对战类游戏当属棋牌游戏。
通过对象棋的数据结构,相关算法与网络联机,以及对网络对战平台系统的分析,设计成一套基于Java平台的棋牌类对战系统。
关键字:
网络通信;
联机对弈;
图像绘制
ChinesechessgameonLAN
Abstract:
TheChinesechesshasalonghistory.IntheWarringStatesPeriod,therewasaformalrecordaboutthechessalready.AfternewChinasetup,thechesshasenteredabrand-newdevelopingstage.Withthedevelopmentofinformationtechnology,peoplesstandardoflivinghaveimprovedconstantly.On-linegameasameansofentertainmenthasauniquecharmtoattractmoreandmoreplayers.
Tomeetchesslovers,thisdesignhasrealizedtheChallengesofChinese-chessbetweenplayersunderthecurrentLANenvironment.Inviewofthecharacteristicsoflocalareanetworksandtherequirementsofthegameitself,thedesignusesatwo-tierC/Sstructuretoachievemutualcommunication.Itcontainsthefollowingmajormodules:
thenetworkcommunicationmodule,imagerenderingmoduleandtherulessetupmodule.NetworkCommunicationModuleallowsgamerscanquicklysetupaconvenientnetworkconnectioninordertoachieveanonlinegame;
imagerenderingmoduletoupdatetheboardaswellasfunctionalpieces,suchasthedynamicthat;
rulesbindingsettingsmoduleforstep-by-stepplayer'
sgame.IamresponsibleforchesspartofthefunctioninSystem.
Computergamesisthefieldofcomputerapplicationsasanimportantsubject,andpresentthemostpopularcasualonlinegameswaramongboardgames.Bythedatastructure,algorithmsandnetworkonline,aswellasthenetworkplatformforsystematicanalysisofthewar,designedasetofJavaplatformbasedonthecategoryCardbattlesystem.
KeyWords:
NetworkCommunication;
Onlinegame;
ImageRendering
1引言
1.1课题背景
中国象棋有着悠久的历史,通俗易懂,老少皆益;
20世纪是信息的时代,随着计算机技术和经济的发展,计算机由商业逐渐走向家庭。
象棋水平的发展是需要靠信息技术来推动的,国际象棋就是个很好的范例。
然而,电脑在中国象棋上的运用还刚刚起步,尽管国内涌现出一大批中国象棋的专业网站和专业软件,但是由于缺乏必要的基础工作,电脑技术在中国象棋上的应用优势还无法体现出来。
如果可以编译一种软件,方便象棋爱好者之间进行对弈,那对象棋的发展定会有推进作用。
当前各种开发语言中,JAVA以自己的跨平台操作,简单,可移植性,面向对象,以接口实现多线程,动态等优点为大多人青睐。
因此我选择了Java作为象棋对弈软件的开发语言。
1.2中国象棋发展现状
中国象棋发展至今已有二千三、四百年的历史了,早在战国时期就有正式记载,堪称中国的国粹。
据统计,中国有2亿人会下象棋,这相当于平均6至7个人中就有1人会下,可见它有着广泛的群众基础。
方寸之间包含天地玄机,人生哲理,使人越是细玩越觉其味悠然深远。
简单的棋规,便捷的载体,使得他成为雅俗共赏的竞技项目。
然而,如今中国象棋的发展前景却令人堪忧。
导致这种现象的主要因素有:
第一,就东亚地区,围棋的影响力胜于中国象棋。
第二,中国象棋虽然在国内很受欢迎,但在世界舞台上名声却不如国际象棋那么响亮。
之所以会存在这两个因素,都是因为在国际赛事上中国象棋的参赛选手大都是华人,而非华裔的选手又大都是业余选手,这无疑使比赛失去了竞争力,而围棋有韩国和日本的参与,国际象棋有全世界国家的加入。
第三,进入了21世纪后,供人们娱乐活动的选择越来越多,中国象棋在年轻人的心中已开始渐渐失去魅力。
随着信息技术的不断发展,各种象棋软件的开发与应用应运而生,尤其是在网络方面的推广,使得中国象棋得到了很好的宣传,全面展示了中国象棋的风采、优点与特色,同时也让外国人认识到中国象棋这一我国的“国粹”。
想必在未来的几年随着中国象棋在各个领域的推广,必定会带来巨大的影响。
2开发环境与相关技术
2.1语言
Java是一种跨平台,适合于分布式计算环境的面向对象编程语言。
其主要特点有:
(1)平台无关性
平台无关性就是指Java能运行于不同的平台。
Java引进虚拟机原理,并运行于虚拟机,实现不同平台的Java接口之间。
使用Java编写的程序能在世界范围内共享。
Java的数据类型与机器无关,Java虚拟机(JavaVirtualMachine)是建立在硬件和操作系统之上,实现Java代码的解释执行功能,提供不同平台的接口。
(2)安全性
Java的编程类似于C++,学习过C++的读者将很快能掌握Java的精髓。
Java舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。
Java对程序提供了安全管理器,防止程序的非法访问。
(3)面向对象
Java吸取了C++面向对象的概念,将数据封装的简洁性和便于维护性。
类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性到达反复利用。
Java提供了众多的一般对象的类,通过继承即可使用父类的方法。
Java已有的类的功能强大,如输入输出类,进行普通输入输出和文件设计图形界面的常用部件,图形用户界面的设计上给程序员很大的方便。
(4)简单性
Java舍弃C++的头文件,没有全局变量,这样能更好维护头文件,符合网络编程的要求。
头文件中有全局变量的定义,这对可维护性和安全性都是不可取的。
Java舍弃了C++的多重继承,引进了垃圾管理,避免在垃圾回收这一问题绞尽脑汁去设计。
(5)多线程
多线程是Java的一大特点,能够在程序中实现多任务操作。
传统的程序设计语言的程序只能单任务操作,效率非常低,例如程序往往在接收数据输入时被阻塞,只有等到程序获得数据后才能够继续运行。
而多线程程序可以创建一个线程来进行输入输出操作,创建另一个线程在后台进行数据处理,输入输出的线程在接收数据时阻塞,而另一个线程仍然在运行。
这样,多线程程序大大提高了运行的效率和处理能力。
2.2工具
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。
虽然大多数用户很乐于将Eclipse当作JavaIDE来使用,但Eclipse的目标不仅限于此。
Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。
由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。
这种平等和一致性并不仅限于Java开发工具。
尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;
例如,支持诸如C/C++、COBOL和Eiffel等编程语言的插件已经可用,或预计会推出。
Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。
基于Eclipse的应用程序的突出例子是IBM的WebSphereStudioWorkbench,它构成了IBMJava开发工具系列的基础。
例如,WebSphereStudioApplicationDeveloper添加了对JSP、servlet、EJB、XML、Web服务和数据库访问的支持。
Eclipse最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。
IBM提供了最初的Eclipse代码基础,包括Platform、JDT和PDE。
目前由IBM牵头,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、RationalSoftware、RedHat及Sybase等。
Eclipse是一个开发源码项目,它其实是VisualAgeforJava的替代品,其界面跟先前的VisualAgeforJava差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。
近期还有包括Oracle在内的许多大公司也纷纷加入了该项目,并宣称Eclipse将来能成为可进行任何语言开发的IDE集大成者,使用者只需下载各种语言的插件即可。
2.3技术
2.3.1面向对象设计
面向对象的程序设计(简称OOP)是一种目前比较提倡的程序设计方法。
它的基本思想是把定义的数据集对数据的相关操作包装成一个新的类型即对象(Object)。
面向对象方法的基本观点是:
客观世界是由对象组成的,每个对象都有自己的内部状态和运动规律,不同对象彼此之间通过消息相互联系和相互作用。
软件结构应该与所要解决的问题一致,而不是与某种方法一致。
面向对象方法强调的是对客观世界的洞察力,而洞察力不但取决于所用的方法,更依赖知识和经验的积累。
面向对象程序设计方法模拟人类习惯的解题方法,用对象分解取代功能分解,也就是把程序分解成许多对象,不同对象之间通过发送消息向对方提出服务请求,接受消息的对象主动完成指定功能,程序中的所有对象分工协作,共同完成整个程序的功能。
面向对象程序设计方法的提出,是对软件开发的一场革命,它代表了计算机程序设计的新颖思维的方法,是目前解决软件开发面临的困难的最有希望、最有前途的方法之一。
2.3.2JavaGUI技术
AWT(AbstractWindowTools),抽象窗口工具类。
GUI(GraphicUserInterface),图形化的用户接口。
构造图形界面的步骤:
(1)选择一个容器
(2)设置容器的布局管理器
(3)向容器添加组件
(4)事件的监听
容器(Container):
用于管理其他的组件的对象,组件必须放到容器里。
JFrame,这是一个最顶层的窗体容器,所有其他的组件必须放在顶层容器里。
JDialog,对话框容器,他要依附于其父组件,他不是一个顶层容器。
JPanel,他不是顶层容器,必须放在顶层容器中,任何一个容器都有add()方法,Panel面板是透明的(默认)。
布局管理器:
FlowLayout,流式布局管。
Panel的默认布局管理就是FlowLayout。
BorderLayout,按方位进行布局管理,(North,South,East,West,Center)不明确指定,就会默认加载在中间(Center),add(Componentcomp,Stringplace)这个方法是在指定的位置添加组件。
GridLayout,网格布局,通过行列、间距,来用网格分割,把组件放入网格中,先行后列摆放组件。
CardLayout,卡片布局,面板重叠放置。
GridBogLayout,组件可以跨行跨列的网格布局。
组件:
JButton:
按钮JTextField:
单行文本域
JTextArea:
多行文本区JScrollPane:
滚动窗体
JComboBox:
下拉选择框RadioButton:
单选按钮
JCheckBox:
多选按钮JLabel:
标签
JPasswordField:
密码输入框JMenuBar:
菜单条
JMenu:
菜单JMenuItem:
菜单项
JPopupMenu:
弹出式菜单JSlider:
滑动条
JSplitPane:
分隔面板JFileChooser:
文件选择器
JColorChooser:
颜色选择器
事件的监听----模型
事件对象
事件源————————〉事件处理者
图2-1事件监听模型
这就是事件模型的机制(图2-1),也就是由事件源对象发送一个消息(事件对象),然后事件处理者调用相应的方法处理事件。
事件对象继承自EventObject类,并可以通过getSource()方法获得事件源对象,当然需要在构造事件对象时将事件源对象传入,来区分是哪个事件源发出的事件,所以要用事件对象作为参数。
在Java的图形编程中,所有动作(事件)都已经提供了相应的事件对象和事件监听接口,例如:
实现窗口的关闭按钮,点击关闭按钮会发出相应的事件对象,相应的调用监听器中实现好的方法。
自定义组件监听器如图2-2:
图2-2自定义组件监听器
Button=newButton("
close"
)
Button.addActionListener(this)
条目监听器如图2-3:
图2-3条目监听器
鼠标监听器如图2-4:
图2-4鼠标监听器
窗口监听器如图2-5:
图2-5窗口监听器
2.3.3JAVA多线程技术
关于线程的几个概念:
进程:
正在执行的一个独立的程序,对于单CPU来说,进程在宏观上是并发的,但在微观上是串发的。
线程:
在一个进程内部的“可以并发执行的多个函数”,一个进程中可有多个线程。
对于进程,每一个进程都是独占数据空间的,(是一个程序的执行流程)。
而对于线程,它生活在进程内部,它们共享进程空间,线程是由操作系统(OS)来维护的。
线程三要素:
CPU资源,执行代码Code,数据存储空间Data。
在JAVA中,来创建一个线程有两种方式可以选取择:
一种方法是将类声明为Thread的子类。
该子类应重写Thread类的run方法。
如:
classThreadAextendsThread{
PrivateStringname;
PublicThreadA(Stringname){this.name=name;
}
Publicvoidrun(){
//具体的代码
}
}
使用:
Threada=newThreadA(a);
//创建一个线程
a.start();
//启动一个线程
创建线程的另一种方法是声明实现Runnable接口的类。
该类然后实现run方法。
然后可以分配该类的实例,在创建Thread时作为一个参数来传递。
classThreadBimplementsRunnable{
....
使用:
Runnabler=newThreadB();
//创建一个Runnable的实例r
Threadb=newThread(r);
//使用一个Runnable的实例来创建一个线程b
b.start();
//启动一个线程
实现Runnable接口的类不是一个线程类,只能是用它去构造一个线程对象。
在JAVA中,线程也是一个类(Thread),实际的线程就是一个对象。
线程状态转换,如图2-6所示:
图2-6线程状态转换
2.3.4点对点通信
从OSI参考模型的应用层来看,可认为网络是由工作站和服务器组成的,但从传输层和网络层的角度看,工作站和服务器没有本质的区别,它们都是连接到网络上的一台机器,都可以用网络地址或名称来代替。
它们之间的通信就是所谓的点对点通信,也叫对等通信。
在局域网上,点点通信意味着两个工作站可以直接对话而不用经过文件服务器中转。
通信的基础是套接口(Socket),一个套接口是通讯的一端。
socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。
应用程序通常通过“套接字”向网络发出请求或者应答网络请求。
Socket实质上提供了进程通信的端点。
进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。
正如打电话之前,双方必须各自拥有一台电话机一样。
在网间网内部,每一个socket用一个半相关描述(协议,本地地址,本地端口)。
一个完整的socket有一个本地唯一的socket号,由系统分配。
最重要的是,socket是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的socket系统调用。
客户随机申请一个socket(相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket号;
服务器拥有全局公认的socket,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。
socket利用客户/服务器模式巧妙地解决了进程之间建立通信连接的问题。
服务器socket半相关为全局所公认非常重要。
假如通信双方没有任何一方的socket固定,就好比打电话的双方彼此不知道对方的电话号码,要通话是不可能。
在这一端上你可以找到与其对应的一个名字,一个正在被使用的套接口都有它的类型和与其相关的进程。
套接口存在于通讯域中。
通讯域是为了处理一般的线程通过套接口通讯而引进的一种抽象概念。
套接口通常和同一个域中的套接口交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。
WindowsSockets规范支持单一的通讯域,即Internet域。
各种进程使用这个域互相之间用Internet协议来进行通讯。
局域网中工作站之间的通信程序的开发一般通过四种途径:
第一种是通过改造网络原有通信软件来实现。
但这种改造必须以对该软件充分了解为基础,否则改造后很难保证不影响网络的整体性能,甚至会造成系统运行不可靠,而改造后的通信质量不一定理想。
第二种是利用Novell网本身的网络协议IPX/SPX来实现,由于这种方法开发比较麻烦,采用的并不多。
第三种是通过NetBIOS功能调用来实现,NetBIOS是PCLAN的通信接口标准,广泛适用于多种微机网络,使得以它为基础的设计和应用开发可移植性好。
它不依赖于任何网络硬件,是一个介于网络硬件和用户应用程序之间的接口协议。
其通信原理是:
两个要进行通信的工作站通过名字建立一个虚电路,然后向相应的虚电路号发送或接收信息,这样通过虚电路实现了两个工作站之间的对等通信。
利用NetBIOS实现工作站之间的实时通信,功能比较强,编程实现比较容易,所以应用比较广泛。
第四种是通过TCP/IP协议来实现。
2.3.5TCP/IP协议
TCP协议(TransmissionControlProtocol传输控制协议)是一种流传输控制协议,它提供可靠的、有序的、双向的、面向连接的数据传输,是一种面向连接的协议。
TCP协议是一种端对端的协议,使用TCP没有任何广播或类似的概念,要用TCP协议与另一台计算机通信,两台机之间必须像打电话一样连接在一起,每一端都为通话做好准备。
TCP协议每发送一个数据包都将会收到一个确认信息,这种发送/应答模式是提供可靠的协议的唯一方法:
你必须让对方知道你是否收到了数据。
当然,这也会造成一些性能损失,人们为了改善系统效率不高的状况,引入了“捎带确认(