VC++中国象棋网上对弈系统毕业设计含源文件.docx
- 文档编号:6263777
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:22
- 大小:541.07KB
VC++中国象棋网上对弈系统毕业设计含源文件.docx
《VC++中国象棋网上对弈系统毕业设计含源文件.docx》由会员分享,可在线阅读,更多相关《VC++中国象棋网上对弈系统毕业设计含源文件.docx(22页珍藏版)》请在冰豆网上搜索。
VC++中国象棋网上对弈系统毕业设计含源文件
中国象棋网上对弈系统
摘要
随着信息技术的发展,人民生活水平的不断提高。
联网游戏作为一种娱乐手段,正以其独特的魅力吸引着越来越多的玩家。
为了满足广大象棋爱好者也可以享受到网络所带来的便利,本设计在当前局域网条件下实现了中国象棋的网络对战。
鉴于局域网的特点和游戏本身的要求,本设计采用两层C/S架构来实现相互之间的通信。
它主要包含以下几大模块:
网络通信模块,图像绘制模块和规则设置模块。
网络通信模块使得玩家可以方便的迅速建立起网络连接,从而实现联机对弈和聊天功能;图像绘制模块实现棋盘更新以及棋子动态表示等功能;规则设置模块用于约束玩家的棋步。
电脑游戏是计算机应用领域的一个重要主题,而当前网上最热门的休闲对战类游戏当属棋牌游戏。
通过对象棋的数据结构,相关算法与网络联机,以及对网络对战平台系统的分析,设计成一套基于VC++平台的棋牌类对战系统。
关键词:
网络通信;联机对弈;图像绘制;消息响应
CHINESECHESSONLINEGAMESYSTEM
Abstract
Withthedevelopmentofinformationtechnology,peoplesstandardoflivinghaveimprovedconstantly.On-linegameasameansofentertainmenthasauniquecharmtoattractmoreandmoreplayers.Tomeetchesslovers,thisdesignhasrealizedtheChallengesofChinese-chessbetweenplayersunderthecurrentLANenvironment.
Inviewofthecharacteristicsoflocalareanetworksandtherequirementsofthegameitself,thedesignusesatwo-tierC/Sstructuretoachievemutualcommunication.Itcontainsthefollowingmajormodules:
thenetworkcommunicationmodule,imagerenderingmoduleandtherulessetupmodule.NetworkCommunicationModuleallowsgamerscanquicklysetupaconvenientnetworkconnectioninordertoachieveanonlinegameandchatfunction;imagerenderingmoduletoupdatetheboardaswellasfunctionalpieces,suchasthedynamicthat;rulesbindingsettingsmoduleforstep-by-stepplayer'sgame.
Computergamesisthefieldofcomputerapplicationsasanimportantsubject,andpresentthemostpopularcasualonlinegameswaramongboardgames.Bythedatastructure,algorithmsandnetworkonline,aswellasthenetworkplatformforsystematicanalysisofthewar,designedasetofVC++platformbasedonthecategoryCardbattlesystem.
Keywords:
NetworkCommunication;Onlinegame;ImageRendering;MessageResponse
1绪论
1.1课题背景
电脑游戏就是以计算机为操作平台,通过人机互动形式实现的能够体现当前计算机技术较高水平的一种新形式的娱乐方式。
电脑游戏是必须依托于计算机操作平台的,不能在计算机上运行的游戏,肯定不会属于电脑游戏的范畴。
至于现在大量出现的游戏机模拟器,原则上来讲,还是属于非电脑游戏的。
游戏必须具有高度的互动性。
所谓互动性是指游戏者所进行的操作,在一定程度及一定范围上对计算机上运行的游戏有影响,游戏的进展过程根据游戏者的操作而发生改变,而且计算机能够根据游戏者的行为做出合理性的反应,从而促使游戏者对计算机也做出回应,进行人机交流。
游戏在游戏者与计算机的交替推动下向前进行。
电脑游戏比较能够体现目前计算机技术的较高水平。
一般当计算机更新换代的同时,计算机游戏也会相应的发生较大的变更。
电脑游戏按类型可分为:
单机游戏、网络游戏、flash小游戏、电子竞技等。
按内容可分为:
即时战略类、角色扮演类、模拟经营类、冒险动作类,棋牌休闲类等。
本系统属于网络棋牌休闲类游戏。
1.2课题发展概况
在人们逐步进入信息时代后,电脑游戏使得人生变成了真正的游戏。
在传统中国社会中,文化、教育与知识是神圣的,庄严的,是天地君亲师。
这种传统的体制,使人们在接受教育的过程中,就受到了束缚。
如果谁把这种神圣的东西与游戏连在一起,就会被认为是对圣贤的一种亵渎。
而现在,网络技术和数字技术把文化、教育和知识都变成了娱乐变成了游戏,将它们从神坛上请下来,使它们变成了大众的、平民的东西,可爱的、容易接受的东西。
作为融合高科技的文化艺术产品,电脑除给人们的生活带来联想之外,它更能给使用者带来更多现实中不能拥有的体验,这正是当今世上被看好的体验型经济的典型代表。
随着人民生活水平的提高,人们的生活模式和思想模式都发生着变化。
电脑游戏业经过多年发展,跌跌撞撞地走过来。
应该看到人们在电脑和互联网带来的时代标志性变化中,电脑游戏市场的逐步完善与巨大的潜在能量,作为一种现代娱乐形式,其正在世界范围内创造巨大的市场空间和受众群体。
传统的单机游戏曾风靡一时,游戏爱好者在简单的打斗中获得了虚幻世界的满足,但过了一段时间后,单机游戏的模式由于不能满足人们相互交流的愿望以及其内容的简单重复,面对电脑的独孤求败总让人有一种自以为是而又百无聊赖的感觉。
逐渐失去了对用户的吸引力,游戏爱好者期待着新的游戏模式出现。
于是,电脑游戏开始朝着网络游戏发展,随着网络建设快速发展,人们生活方式随着时代发展而改变,网络游戏迅速取代单机游戏成为了游戏玩家新的宠儿。
1.3本文主要工作
主要工作内容如下:
1.设计程序良好的用户界面,尽可能真实模拟象棋环境,双方对局过程中所显示的界面应一致。
2.基于TCP/IP协议,结合象棋对弈的特点,设计一套切实可行网络实时数据通信协议。
3.制定棋盘及状态数据结构,方便实时通信及屏幕作图及与用户的交互。
4.制定出详细的棋子操作规则。
2系统介绍
2.1系统简介
中国象棋,古代叫“象戏”是一种由两人轮流走子,以“将死”或“困毙”对方将(帅)为胜的一种棋类运动。
它不仅能丰富文化生活,陶冶情操,更有助于开发智力,启迪思维,锻炼辨证分析能力和培养顽强的意志。
象棋是中华民族的传统文化,不仅在国内深受群众喜爱,而且流传国外。
本系统为中国象棋网上对弈系统,其以网络通信原理结合中国象棋的规则设计完成,是一款能够实现局域网内双人联机对弈的电脑游戏程序,使用MicroSoftVisualC++6.0开发,运行与Windows平台。
2.2系统构成
中国象棋网上对弈系统是主要由:
数据结构、图像绘制、规则设置、网络通信、棋子操作五部分构成。
软件本身即可以作为服务器端,又可以作为客户端,双方建立连接后即可以进行象棋对弈。
2.3相关技术
2.3.1点对点通信
从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.2TCP/IP协议
TCP协议(TransmissionControlProtocol传输控制协议):
是一种流传输控制协议,它提供可靠的、有序的、双向的、面向连接的数据传输,是一种面向连接的协议。
TCP协议是一种端对端的协议,使用TCP没有任何广播或类似的概念,要用TCP协议与另一台计算机通信,两台机之间必须像打电话一样连接在一起,每一端都为通话做好准备。
TCP协议每发送一个数据包都将会收到一个确认信息,这种发送/应答模式是提供可靠的协议的唯一方法:
你必须让对方知道你是否收到了数据。
当然,这也会造成一些性能损失,人们为了改善系统效率不高的状况,引入了“捎带确认(piggybacking)”的方法。
TCP协议之所以是全双工的就是因为这个“捎带确认”信息,因为它允许双方同时发送数据。
这是通过在当前的数据包中携带以前收到的数据的确认信息方式实现的,从提高网络利用率的角度看,这比单纯发送一个通知对方“信息已收到”的数据包要好得多。
最后,还有一个批量确认的概念:
也即一次确认一个以上的数据包,表示“我收到了包括这个数据包在内的全部数据包”。
在IP协议中,我们处理的单个数据包是一个更大的数据报的一部分,一个TCP段就是一个单个的TCP数据包。
TCP是一个数据流,因此,除了“连接”之外,没有任何需要真正担心的其它概念。
最大报文段长度(MSS)是在连接的时候协商的,但是,它总是在不断地改变。
默认的最大报文段长度是536字节,这是576字节(IP协议保证的最小数据包长度)减去用于IP头的20个字节和用于TCP头的20个字节以后的长度。
TCP协议要设法避免在IP级别上的分段。
因此,TCP协议总是从536字节开始的。
TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现。
因此用户一般不涉及,编程时,编程界面有两种形式:
一、是由内核直接提供的系统调用;二、使用以库函数方式提供的各种函数。
前者为核内实现,后者为核外实现。
用户服务要通过核外的应用程序才能实现,所以要使用套接字(socket)来实现。
2.3.3UPD基础
UDP协议(UserDatagramProtocol用户数据报协议):
是一种保护消息边界的,不保障可靠数据传输的无连接的协议。
主要用来支持那些需要在计算机之间传输数据的网络连接。
UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。
尤其是在需要很强的实时交互性的场合,如网络游戏、视频会议等,UDP协议更是显示出极强的威力。
UDP协议是一种面向非连接的协议,面向非连接指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。
至于对方是否可以接收到这些数据内容,UDP协议无法控制,因此说UDP协议是一种不可靠的协议。
与TCP协议一样,UDP协议直接位于IP协议之上,实际上,IP协议属于OSI参考模型的网络层协议,而UDP和TCP都属于传输层协议。
UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。
因为UDP协议是面向非连接的协议,没有建立连接的过程,因此它的通信效率高;但也正因为如此,它的可靠性不如TCP协议高。
UDP协议的主要作用是完成网络数据流量和数据报之间的转换:
在信息的发送端,UDP协议将网络数据流量封装数据报,然后将数据报发送出去;在信息的接收端,UDP协议将数据报转换成实际数据内容。
实际上,我们可以认为基于UDP协议的Socket类似于一个码头,该码头的作用就是负责发送、接收集装箱,一个数据报类似于一个集装箱。
因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器端的概念。
2.3.4屏幕作图与用户交互
屏幕作图与用户的交互为用户提供了一个交互工作环境,称交互界面。
通常在图形显示方式,把屏幕划分成图形区、菜单区和提示区。
菜单功能的好坏直接影响到交互界面的友好性。
交互绘图操作命令是通过某单表达,菜单的设计需考虑到交互方便和提高交互效率。
常见的菜单有文宇菜单和图标菜单两大类,图标菜单较为直观、形象,不受文种不同的限制等优点。
屏幕作图与用户的交互的基本功能一般可归结为绘图功能、图形编辑、尺寸标准、作图工具、显示功能、询问功能、信息转换和二次开发工具等八大功能。
绘图功能是屏幕作图与用户的交互的核心部分,它主要包括绘图环境的设置、实体绘图命令和尺寸、文字标注等功能。
绘图环境的设置主要包括:
图层、线型、颜色、作图单位和图幅大小设定等。
实体绘图是生成图形的基本命令集,如点、直线、圆、圆弧等的绘图命令。
信息转换功能实现图形到图形文本文件的双向转换,图形文件按图形转换文件的标准格式书写。
开发工具是一种用户编程语言,通常是由高级编程语言,如C++、C#、VC、VB,通过绘图系统接口调用图形函数库。
用户借助于软件系统提供的用户编程语言,建立常用的图形库、常用的标准件图库和专用的应用程序等二次开发工作,提高绘图效率。
2.3.5远程控制原理
远程控制软件一般分两个部分:
一部分是客户端程序Client,另一部分是服务器端程序Server,在使用前需要将客户端程序安装到主控电脑上,将服务器端程序安装到被控电脑上。
它的控制的过程一般是先在主控电脑上执行客户端程序,像一个普通的客户一样向被控电脑中的服务器端程序发出信号,建立一个特殊的远程服务,然后通过这个远程服务,使用各种远程控制功能发送远程控制命令,控制被控电脑中的各种应用程序运行,我们称这种远程控制方式为基于远程服务的远程控制。
通过远程控制软件,我们可以进行很多方面的远程控制,包括获取目标电脑屏幕图像、窗口及进程列表;记录并提取远端键盘事件(击键序列,即监视远端键盘输入的内容);可以打开、关闭目标电脑的任意目录并实现资源共享;提取拨号网络及普通程序的密码;激活、中止远端程序进程;管理远端电脑的文件和文件夹;关闭或者重新启动远端电脑中的操作系统;修改Windows注册表;通过远端电脑上、下载文件和捕获音频、视频信号等。
3设计与实现
3.1数据结构
3.1.1棋盘
图3-1棋盘
棋子活动的场所,叫作“棋盘”。
在长方形的平面上,绘有九条平行的竖线和十条平行的横线相交组成,共有九十个交叉点,棋子就摆在交叉点上。
中间部分,也就是棋盘的第五,第六两横线之间末画竖线的空白地带称为“河界”。
两端的中间,也就是两端第四条到第六条竖线之间的正方形部位,以斜交叉线构成“米”字方格的地方,叫作“九宫”(它恰好有九个交叉点)。
整个棋盘以“河界”分为相等的两部分。
为了比赛记录和学习棋谱方便起见,现行规则规定:
按九条竖线从右至左用中文数字一至九来表示红方的每条竖线,用阿拉伯数字‘1’~‘9’来表示黑方的每条竖线。
对弈开始之前,红黑双方应该把棋子摆放在规定的位置。
任何棋子每走一步,进就写“进”,退就写“退”,如果像车一样横着走,就写“平”。
纵线方式,它是中国象棋常用的表示方法,即棋子从棋盘的哪条线走到哪条线。
中国象棋规定,对于红方来说的纵线从右到左依次用“一”到“九”表示,黑方则是“1”到“9”,这种表示方式体现了古代中国象棋研究者的智慧。
坐标方式,它是国际象棋常用的表示方法,把每个格子按坐标编号,只要知道起始格子和到达格子,就确定了着法,这种表示方式更方便也更合理,而且还可以移植到其他棋类游戏中。
中国象棋也可以用这种方法来表示,本程序将采用坐标方式。
本系统定义了一个int型的二维数组xArray[9][10]用来表示棋盘上每个格点在窗口的横坐标,和一个用来表示棋盘每个格点在窗口纵坐标的int型二维数组yArray[9][10]。
两个数组组合用来表示棋盘每个格点在整个窗口的具体位置。
对xArray[9][10]、yArray[9][10]的初始化代码如下:
for(inti=0;i<9;i++)
{
for(intj=0;j<10;j++)
{
xArray[i][j]=cX+50*i;
yArray[i][j]=cY+50*j;
}
}
其中(cX、cY)表示棋盘坐上就在窗口的坐标。
如图2-1中红方帅的坐标可以用(xArray[4][9],yArray[4][9])来表示该棋子在窗口中实际的坐标,以便与在该位置准确绘制图形。
另外系统设置相临坐标点的间隔增量为50个象素点,如|xArray[0][0]-xArray[0][1]|=50,这样以来整个棋盘映射到主窗口的像素范围被限制在(0,0)-(400,450)之间(单位:
象素)。
3.1.2棋子信息数组
中国象棋作为一种双方对阵的棋牌类竞技项目,棋子共有三十二个,分为红黑两组,各有十六个,由对弈的双方各执一组。
兵种是一样的,分为七种:
帅(将)、仕、相(象)、车、马、炮、兵(卒)。
红方持有棋子:
帅一个,仕、相、车、马、炮各两个,兵五个。
黑方持有棋子:
黑方有将一个,士、象、车、马、炮各两个,卒五个。
其中帅与将;仕与士;相与象;兵与卒的作用完全相同,仅仅是为了区别红棋和黑棋而已。
为了更加方便的表示棋子的类型,除了用于保存坐标信息的二维数组xArray[9][10]、yArray[9][10]外,我们还需要引进一个二维数组用来保存该坐标点的棋子信息,比如:
在(xArray[0][2]、xArray[0][2])上的是哪颗棋子?
亦或着是空位?
本系统引入了新的一个int型二维的数组InfoArray[9][10],很显然它也是一个9×10的数组,用来保存棋盘上所有90个格点的棋子信息。
现将InfoArray数组的取值范围极其定义列与下表:
表3-1
InfoArray
0
1
2
3
4
5
6
7
DEF
空位
红车
红马
红相
红士
红帅
红炮
红兵
InfoArray
0
11
12
13
14
15
16
17
DEF
空位
黑车
黑马
黑象
黑仕
黑将
黑炮
黑卒
根据上表,位于坐标点(xArray[4][9],yArray[4][9])位置的红帅的棋子类型表示为InfoArray[4][9]=5。
当棋面改变,形成有效走棋时,只需更新对应坐标点的InfoArray的值即可,如红方走棋“炮二平五”对应的原信息{InfoArray[7][7]=6,InfoArray[4][7=0]}改变为{InfoArray[7][7]=0;InfoArray[4][7]=6},以实现走棋的数据更新。
3.1.3变量与函数
表3-1部分变量定义
变量
类型
定义
xArray
Int型二维数组
保存棋盘格点的横坐标
yArray
Int型二维数组
保存棋盘格点的纵坐标
InfoArray
Int型二维数组
保存棋盘格点的棋子类型
GetChessman
staticint
判断棋子是否选中
RedOrBlack
staticint
判断轮到哪方走棋
Prei,Prej
staticint
前一个坐标点precedingi,j
Mytrun
staticint
联机时用于判断是否本方走棋
UpdateAllData
longint
棋盘更新的信息
ReplayX1-Y2
Int
保存棋子行走路径,回看之用
CUpdateAllData
Char
转换成char型的UpdateAllData,用做网络传输
Win
Bool
判断是否已有一方胜利
Online
Bool
判断是否联机
Accept
Bool
网络联机接受对方邀请Accept=true
Accept2
Bool
网络联机邀请对方,对方接受Accept2=true
NetExit
Bool
当用户强行退出时,这个变量决定是否向对方发送消息
表3-2部分函数定义
函数
定义
boolChessRule(intx1,inty1,intx2,inty2,intinfo1,intinfo2)
判断走棋规则
boolConnect()
网络联接
voidDraw(intx,inty,intinfo)
绘图函数
voidDrawChessman()
绘制棋位对应棋子
v
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 中国象棋 网上 对弈 系统 毕业设计 源文件