四国军棋网路游戏设计与开发Word下载.docx

上传人:b****2 文档编号:1439184 上传时间:2023-04-30 格式:DOCX 页数:67 大小:644.01KB
下载 相关 举报
四国军棋网路游戏设计与开发Word下载.docx_第1页
第1页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第2页
第2页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第3页
第3页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第4页
第4页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第5页
第5页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第6页
第6页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第7页
第7页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第8页
第8页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第9页
第9页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第10页
第10页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第11页
第11页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第12页
第12页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第13页
第13页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第14页
第14页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第15页
第15页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第16页
第16页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第17页
第17页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第18页
第18页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第19页
第19页 / 共67页
四国军棋网路游戏设计与开发Word下载.docx_第20页
第20页 / 共67页
亲,该文档总共67页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

四国军棋网路游戏设计与开发Word下载.docx

《四国军棋网路游戏设计与开发Word下载.docx》由会员分享,可在线阅读,更多相关《四国军棋网路游戏设计与开发Word下载.docx(67页珍藏版)》请在冰点文库上搜索。

四国军棋网路游戏设计与开发Word下载.docx

游戏类38

 

第一章绪论

1.1问题概述

1.1.1问题的来源

随着Internet的普及,网络游戏已经成为大家耳濡目染的新生事物。

网络游戏从出现到现在的发展的时间很短,但是其发展速度却非常之快。

现在,可以说网络游戏已经成为人们休闲、娱乐的有效方式。

国内比较有名气的网络游戏有联众网络游戏世界()、qq游戏中心()、中国游戏中心()以及这几年受玩家亲睐的传奇、魔兽世界等。

1.1.2目的和意义

对当今网络游戏的设计、架构进行分析、探索和实践。

提供友好的客户操作界面,通过客户端与服务器之间的网络传递数据,实现了多人协同游戏的目的。

分析现今网络游戏体系结构及设计模式的优缺点,及对网络游戏的发展给予分析和展望。

1.1.3国内外研究现状

现今网络游戏的体系结构(见图1-1),包括客户机程序、服务器程序、数据库服务器。

图1-1网络游戏体系结构

1.2问题剖析

1.2.1主要问题

在开发网络游戏时,首先要建立底层的网络通信类,利用网络通信类连接构建客户服务器之间的TCP/IP连接,然后在该连接的基础上利用自设定的协议进行客户端登录、进行游戏等操作。

在以上协议的基础上,根据不同的游戏编写不同的游戏逻辑处理类,在该逻辑处理类中实现了对应的游戏逻辑,如实例中的军棋,则实现相互之间的对弈等功能。

同时在服务器端还需要和数据库服务器交互,用于读取或保存客户信息(如用户积分、密码、个人资料等数据)。

1.2.2难点和关键

1、有一个或多个游戏服务器启动特定游戏服务。

2、游戏者到游戏网站上下载客户端程序并且申请游戏账号ID。

然后启动客户端程序通过某种网络协议连接游戏服务器。

3、客户端程序负责处理客户端显示和操作界面,具有简单的逻辑处理功能,同时负责接收发送与服务器端交互的数据包。

4、服务器程序负责处理服务器端逻辑、游戏逻辑、客户之间的网络信息传递,以及数据库之间的数据读取保存工作。

同时服务器端还要承担客户端数据的接收、转发工作。

1.2.3思路和方法

网络游戏通常的运行方式(见图1-2)。

图1-2网络游戏交互图

第二章相关的知识和工具

2.1解决问题的知识基础

网络游戏常用的网络协议有适用于Internet的TCP/IP协议、适用局域网(比如星际)的IPX协议。

(一)TCP/IP协议

TCP/IP协议(TransmissionControlProtocol/InternetProtocol,传输控制协议/网际协议)是Internet中计算机进行通信的标准,其命名起源于该组协议中最重要的两个协议TCP和IP。

任何关于Internet协议的讨论必须由TCP/IP开始,它也是其他所有协议的基础。

TCP/IP协议是Internet网络的共同语言,主机之间必须利用TCP/IP互通信息。

TCP/IP协议目前已经成为发展最成功的通信协议之一,它起源于20世纪60年代末美国政府资助的一个分级交换网络研究项目,允许分布在各地的使用不同操作系统的网络进行通信。

随着世界范围个人电脑的普及,日常无论收发邮件、访问网页和文件传输都已经离不开TCP/IP协议,TCP/IP协议已经成为Internet的基础。

(二)TCP/IP结构

TCP/IP实际上就是在物理网上的一组完整的协议。

其核心部分是传输层协议(TCP/UDP)、网络层(IP)和物理接口层,这三层通常在操作系统内核中实现。

TCP/UDP层提供了传输层服务,而IP协议提供了网络层服务。

TCP/IP协议是一个四层协议,其结构如图2-1所示。

图2-1TCP/IP协议体系结构图

应用程序与TCP/IP可靠传输之间接口具有五大特性:

Ø

面向数据流 当两个用户进程传输大量数据时,我们把这些数据当做可划分为八位组(octer,字节)的比特流,在目的机器上运行的数据流投递服务软件提给接收方的八位组与信源机上发送方送出来的完全相同。

虚电路连接 数据流的传输与电话相似,使用“虚电路”这个术语来描述这种连接是因为在应用程序看来这种连接像是一条专用的硬件电路,这种可靠连接的错觉是由数据流投递服务提供。

有缓冲的传送 使用虚电路服务来发送数据流的应用程序不断向协议软件递交数据八位组。

为了提高效率以及减少网络延迟,协议软件在实现时都会从数据流中收集到足够多的数据,组成大小合理的数据包后再送到网络上传输。

无结构的数据 TCP/IP协议并不区分结构化的数据流。

使用数据流的应用程序必须在开始连接之前就了解数据流的内容并对其格式进行协商。

这点很重要,在程序中表现为send函数只能发送字符串,这就需要将接收的字符串转化需要的结构化的数据。

全双工连接 TCP/IP流服务所提供的功能是双向的全双工连接。

其中包括了两个独立、流向相反的数据流,而这两个数据流之间不进行显式的交互。

常用协议主要包括TCP/UDP层协议和IP层协议。

TCP和UDP都是传输层协议,都使用IP协议作为网络层协议。

使用UDP协议的应用程序必须承担可靠性的工作,包括报文的丢失、重复、乱序以及连接失效等问题,而程序员编程时则容易疏忽。

2.2开发平台

操作系统Windows2000,开发工具VisualC++6.0。

2.3数据库

SQLServer2000,是一个全面的数据库平台,引擎为关系型数据和结构化数据提供了安全可靠的存储功能。

第三章总体设计

3.1总体设计的框架

军棋游戏的总体设计框架,客户端如图3-1所示。

图3-1军棋游戏架构-客户端

军棋游戏的总体设计框架,服务器如图3-2所示。

图3-2军棋游戏架构-服务器

3.2模块功能概述

客户端类的划分:

游戏基本类:

负责处理游戏中一些完成基本功能的类,如处理声音类、处理动画图标,图形按钮等类,基本类的特点是被其他类在特定处所调用,并不动生成对象。

游戏框架类:

负责处理游戏中客户端用于显示程序界面和绘制游戏界面以及显示用户信息和广告信息等处理任务。

游戏通信类:

负责处理游戏中客户服务器之间的网络传输细节,从而在编程中不用考虑网络通信细节,达到客户和服务器之间的透明的效果。

游戏应用程序类:

主要负责处理应用程序中各种设置显示对话框、程序主线程处理、程序中基本的运行类框架的管理,以及游戏中图形的处理和显示等任务的处理。

游戏处理类:

主要用于处理游戏简单逻辑、负责解析和处理与服务器端交互的游戏数据,以及在游戏运行中维护游戏中的各种数据,同时维护处理游戏主线程逻辑等功能。

服务器类的划分:

负责处理游戏中客户服务器之间的网络传输细节,从而在编程中不用考虑网络通信细节,达到客户和服务器之间透明传输的效果。

游戏协议类:

负责处理游戏中客户服务器之间交互所传递的数据,并且对该数据格式进行打包和解包,同时根据该包中所包含的指令串进行相应的操作。

游戏逻辑类:

负责处理游戏逻辑,如军棋游戏中用于维护军棋逻辑,判断下棋,得分等处理类。

用户管理类:

用于管理用户资料,在用户登录后通过数据库验证用户名和密码,通过验证后从数据库读取用户的详细资料。

同时在程序中维护用户数据,在用户游戏结束和退出游戏时将用户数据保存到数据库中。

服务器框架类:

用于管理游戏大厅的数据,包括一些数据的列表。

数据库类:

用于网络游戏的服务器端在处理大量的客户资料时,使用数据库进行大量数据的存储和查询所调用的类方法。

3.3关键算法

模块间的数据传递设计,如图3-3所示。

图3-3模块间的数据传递设计

这样,在CTableView和CGameDlg中通过指针,也可向服务器发送消息。

而CCGameHallFrameView收到消息后,同时也控制CTableView和CGameDlg的行为。

采用内存作图的方式,消除了闪烁。

首先创建一个内存dc,将绘图的工作先在内存dc中做好,再贴到实际dc上去。

做法如下:

首先创建关于屏幕的内存DC,代码为MemDC.CreateCompatibleDC(pDC);

之后创建一幅关于屏幕DC的图画,部分代码如下:

CRectrect;

this->

GetClientRect(rect);

CBitmapbmpFace;

bmpFace.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());

注意把握rect的尺寸为客户区域大小;

之后将这幅画选入内存DC中,部分代码如下:

CBitmap*pOldBmp=NULL;

pOldBmp=MemDC.SelectObject(&

bmpFace);

之后可以开始在内存DC中进行任何绘制动作;

部分代码如下:

CBrushbrush(RGB(255,255,255));

MemDC.FillRect(rect,&

brush);

for(inti=0;

i<

500;

i++)

{

MemDC.MoveTo(22+i,22);

MemDC.LineTo(22+i,277);

}

绘制完后将内存DC中的这幅图绘制到屏幕DC中来,部分代码如下:

pDC->

BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&

MemDC,rect.left,rect.top,SRCCOPY);

最后进行相关的资源回收动作,部分代码如下:

MemDC.SelectObject(pOldBmp);

bmpFace.DeleteObject();

同时我们要把系统的ON_WM_ERASEBKGND消息函数重载为returnFALSE,

否则还是会出现闪烁情况。

在对话框中用这个方法的时候,要注意将有控件的部分和需要绘图的部分分开,可采用如下方法,部分代码如下:

CRectrectClient;

CRgnrgn1,rgn2;

//rgn3,rgn4;

GetClientRect(rectClient);

rgn1.CreateRectRgnIndirect(rectClient);

rgn2.CreateRectRgn(730,0,962,670);

if(rgn1.CombineRgn(&

rgn1,&

rgn2,RGN_XOR)==ERROR)

{

return;

}

MemDC.FillRgn(&

服务器对连接的用户数据的数据结构的设计,用下面两个结构:

typedefstructTT{

intd[4];

intID[4];

intboard[17][17];

BOOLbegin[4];

};

typedefstructMM{

CStringname,sex;

intscore;

连接的socket保存在如下链表中:

typedefCList<

SOCKET,SOCKET&

>

SOCKET_ARRAY;

SOCKET_ARRAYm_connectionList;

与服务器建立连接后,相应的用户数据,保存在MM结构数组中,位置为其socket在m_connectionList中的相应位置,这样就可以通过连接的socket找到相应的信息。

TT是保存大厅数据的结构,d表示四个坐位有没有人,ID表示就坐的人的socket在链表中的位置。

board为棋盘数据。

每个桌子有每个桌子的棋盘数据,互不干扰。

随着游戏的进行而不断更新。

begin表示四个玩家有没有下调度完成的指令。

应用矩阵的变换实现坐标旋转。

不管你坐在哪个方位,玩游戏时,你始终是在正下方,这就需要实现虚拟坐标到目标坐标的旋转变换,如图3-4。

图3-4坐标图

X为实际坐标,x为虚拟坐标,转换公式推导如下,见图3-5。

图3-5坐标变换公式推导

direct为自己座位方向,

switch(direct)

case0:

(a=90o)[X,Y,1]=[-y+16,x,1]//东

case1:

(a=0o)[X,Y,1]=[x,y,1]//南

case2:

(a=-90o)[X,Y,1]=[y,-x+16,1]//西

case3:

(a=180o)[X,Y,1]=[-x+16,-y+16,1]//北

回溯法求工兵路径,军棋游戏逻辑不复杂,只有工兵能够自由飞行。

在这里没有求工兵起点到目标点的最短路径,而只是用回溯法求出其中一条路径,所以在游戏中你会发现工兵有时候会绕些弯路。

这和老鼠走迷宫差不多的。

工兵迷宫数组:

intRAILWAY[17][17]={

{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0},

{0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0},

{0,0,0,0,0,1,1,3,1,3,1,1,0,0,0,0,0},

{0,1,1,1,1,1,1,3,1,3,1,1,1,1,1,1,0},

{0,1,0,0,0,2,2,0,2,0,2,2,0,0,0,1,0},

{0,1,0,0,0,1,1,3,1,3,1,1,0,0,0,1,0},

}

0表示该位置不在工兵铁道上,1表示在该位置可向上下左右方向移动,2表示在

该位置只能向上下方向移动,3表示在该位置只能向左右方向移动。

3.4关键技术

网络通信,WindowsSocket编程接口:

WindowsSocket(简称 WinSock)是在Win32平台上访问基层网络协议的接口。

在不同的Win32平台上,WindowsSocket以不同的方式存在着,作为网络编程接口而不是协议存在。

套接字(Socket)概念,套接字是从英文单词Socket翻译而来,它是网络通信的基本操作单元,是应用层到传输层的接口,可以将套接字看作不同主机间的进程进行双向通信的端点。

WindowsSocket组成部分,WindwosSockets实现一般都由两部分组成:

开发组件和运行组件。

开发组件是供程序员开发WindowsSockets应用程序使用的,主要是WinSock.h头文件。

对于WindowsSockets应用程序的源文件来说,只要包括WinSock.h就可以了。

除此之外,在使用WinSock的项目中还需要加入WinSockAPI引入库wsock32.lib。

运行组件是WindowsSockets应用程序接口的动态连接库(DLL),文件名为WinSock.dll,应用程序在执行时通过装入它实现网络通信功能。

WindowsSockets编程的基本模式,要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户端,我们称之为ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。

使用Socket进行网络通信一般有两种方式:

基于面向连接的流方式和基于无连接的数据报方式。

面向连接的的流方式调用过程如图3-6所示。

图3-6面向连接的流方式调用过程

第四章详细设计

4.1数据库结构

服务器端数据库结构如表4-1。

User

列名

数据类型

长度

允许空

描述

主键

name

char

10

no

用户名

code

密码

score

int

4

yes

游戏积分

sex

2

性别

表4-1,玩家信息

用作记录玩家游戏数据。

4.2模块结构

客户端模块结构:

游戏基本类,该类包中包括CBorderButton、CClockObject、CWave类。

游戏框架类,该类包中包括CMainFrame、CCGameHallFrameView、CHtmlViewEx、CTableView类。

游戏通信类,该类包中包括CClient类。

游戏应用程序类,该类包包括CGameDlg类,其中包括对游戏处理类的调用。

游戏处理类,该类包中主要包括TakeGame类。

服务器模块结构:

游戏通信类,由CServer类实现。

游戏协议类,由CServerProtocol类实现。

游戏逻辑类,由CServerLogic类实现。

数据库类,由CServerFrameSet类实现。

用户管理类,由CServerFrameView类实现。

服务器框架类,由CServerFrame类实现。

4.3重要模块详述

客户端模块:

CBorderButton类是带有边框的图片按钮类,CClockObject类是时钟类,CWave是用来播放声音的类,当游戏用户下棋,吃子,起身或坐下时要播放声音,选择在程序中调用API函数PlaySound直接播放在资源中的声音文件。

模块描述如图4-1。

图4-1游戏基本类模块描述

CMainFrame类是游戏窗口中的游戏大厅框架类,其中包括构架广告显示窗口,可玩的游戏类、工具栏、游戏桌的信息、显示信息等,CCGameHallFrameView类是用来在游戏大厅窗口左侧显示可以玩的游戏以及游戏室,采用树状结构显示。

CHtmlViewEx类用于构造广告显示窗口,用于游戏框架中显示广告页。

CTableView显示包含游戏桌的游戏大厅,在大厅中多人在等待开始游戏。

模块描述如图4-2。

图4-2游戏框架类模块描述

游戏通信类,CClient,功能为建立和服务器的连接,能及处理通信,采用异步机制,以自定义消息事件处理通信等功能。

采用自定义消息:

WM_USER+101。

模块描述如图4-3。

图4-3游戏通信类模块描述

游戏应用程序类,CGameDlg,其中包括对游戏处理类的调用。

CGameDlg主要负责处理应用程序中各种设置显示对话框、程序主线程处理、以及游戏中的图形的处理和显示等任务的处理。

模块描述如图4-4。

图4-4游戏应用程序类模块描述

游戏处理类,TakeGame主要用于处理游戏简单逻辑、负责解析和处理与服务器端交互的游戏数据,以及在游戏运行时维护游戏中的各种数据,同时维护处理游戏主线程逻辑等功能。

模块描述如图4-5。

图4-5游戏处理类模块描述

服务器模块:

负责处理游戏中客户与服务器之间的网络连接细节,从而使得对于客户和服务器之间的数据传输可以忽略通信细节。

模块描述如图4-6。

图4-6游戏通信类模块描述

游戏协议类负责解析客户/服务器端所传输的协议,同时根据不同的协议调用不同的操作函数,并根据用户状态变化维护用户信息。

模块描述如图4-7。

图4-7游戏协议类模块描述

游戏逻辑类负责处理游戏逻辑,在军棋游戏中包括计算得分,计算赢等。

游戏逻辑类CServerLogic和游戏协议类分离的优点是可以只通过修改逻辑类来改变为不同的网络游戏,如修改为“象棋逻辑”即可以成为象棋游戏,修改为“升级逻辑”即可以成为升级游戏。

用户管理类,直接在CCServerFrameView中实现。

数据库类,采用SQLServer2000数据库,只是用来保存玩家的资料等一些数据。

采用MFCODBC数据库编程,在程序中为CServerFrameSet类。

正如MFC提供的其他类库很好地对相应的Win32API作了封装,MFC提供的ODBC类库也相应地对ODBCAPI作了封装,通过提供一种高级接口而避免直接使用ODBCAPI所涉及的种种繁琐处理,简化了对ODBC数据库的应用程序编程。

模块描述如图4-8。

图4-8数据库类模块描述

第五章程序编码

5.1数据结构

用17×

17的数组表示军棋的棋盘,如下:

intBOARD[17][17]={

{-1,-1,-1,-1,-1,-1,0,0,0,0,0,-1,-1,-1,-1,-1,-1},

{-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1},

{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0},

{-1,-1,-1,-1,-1,0,7,3,4,5,3,0,-1,-1,-1,-1,-1},

{-1,-1,-1,-1,-1,-1,10,0,1,0,9,-1,-1,-1,-1,-1,-1},

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2