3-1 军棋游戏架构-客户端 军棋游戏的总体设计框架,服务器如图 3-2 所示。
图 3-2 军棋游戏架构-服务器 -7- 总体设计3.2 模块功能概述 客户端类的划分: 游戏基本类:负责处理游戏中一些完成基本功能的类,如处理声音类、处理动画 图标,图形按钮等类,基本类的特点是被其他类在特定处所调用,并不动生成对象。
游戏框架类:负责处理游戏中客户端用于显示程序界面和绘制游戏界面以及显示 用户信息和广告信息等处理任务。
游戏通信类:负责处理游戏中客户服务器之间的网络传输细节,从而在编程中不 用考虑网络通信细节,达到客户和服务器之间的透明的效果。
游戏应用程序类:主要负责处理应用程序中各种设置显示对话框、程序主线程处 理、程序中基本的运行类框架的管理,以及游戏中图形的处理和显示等任务的处理。
游戏处理类:主要用于处理游戏简单逻辑、负责解析和处理与服务器端交互的游 戏数据,以及在游戏运行中维护游戏中的各种数据,同时维护处理游戏主线程逻辑 等功能。
服务器类的划分: 游戏通信类:负责处理游戏中客户服务器之间的网络传输细节,从而在编程中不 用考虑网络通信细节,达到客户和服务器之间透明传输的效果。
游戏协议类:负责处理游戏中客户服务器之间交互所传递的数据,并且对该数据 格式进行打包和解包,同时根据该包中所包含的指令串进行相应的操作。
游戏逻辑类:负责处理游戏逻辑,如军棋游戏中用于维护军棋逻辑,判断下棋, 得分等处理类。
用户管理类:用于管理用户资料,在用户登录后通过数据库验证用户名和密码, 通过验证后从数据库读取用户的详细资料。
同时在程序中维护用户数据,在用户游 戏结束和退出游戏时将用户数据保存到数据库中。
服务器框架类:用于管理游戏大厅的数据,包括一些数据的列表。
数据库类:用于网络游戏的服务器端在处理大量的客户资料时,使用数据库进行 大量数据的存储和查询所调用的类方法。
-8- 总体设计3.3 关键算法 模块间的数据传递设计,如图 3-3 所示。
图 3-3 模块间的数据传递设计 这样,在 CTableView 和 CGameDlg 中通过指针,也可向服务器发送消息。
而CCGameHallFrameView 收到消息后,同时也控制 CTableView 和 CGameDlg 的行为。
采用内存作图的方式,消除了闪烁。
首先创建一个内存 dc将绘图的工作先在内存dc 中做好,再贴到实际 dc 上去。
做法如下: 首先创建关于屏幕的内存 DC,代码为 MemDC.CreateCompatibleDC pDC; 之后创建一幅关于屏幕 DC 的图画,部分代码如下: CRect rect this-gtGetClientRectrect CBitmap bmpFace bmpFace.CreateCompatibleBitmappDCrect.Widthrect.Height; 注意把握 rect 的尺寸为客户区域大小; 之后将这幅画选入内存 DC 中,部分代码如下: CBitmap pOldBmp NULL pOldBmp MemDC.SelectObjectampbmpFace; 之后可以开始在内存 DC 中进行任何绘制动作;部分代码如下: CBrush brushRGB255255255 MemDC.FillRectrectampbrush forint i0ilt500i -9- 总体设计 MemDC.MoveTo22i22 MemDC.LineTo22i277 绘制完后将内存 DC 中的这幅图绘制到屏幕 DC 中来,部分代码如下: pDC-gtBitBltrect.leftrect.toprect.Widthrect.HeightampMemDCrect.leftrect.topSRCCOPY 最后进行相关的资源回收动作,部分代码如下: MemDC.SelectObjectpOldBmp bmpFace.DeleteObject。
同时我们要把系统的 ON_WM_ERASEBKGND 消息函数重载为 return FALSE,否则还是会出现闪烁情况。
在对话框中用这个方法的时候,要注意将有控件的部分和需要绘图的部分分开,可采用如下方法,部分代码如下:: CRect rectClientCRgn rgn1rgn2//rgn3rgn4 GetClientRectrectClient rgn1.CreateRectRgnIndirectrectClient rgn2.CreateRectRgn7300962670 ifrgn1.CombineRgnamprgn1amprgn2RGN_XOR ERROR return MemDC.FillRgnamprgn1ampbrush 服务器对连接的用户数据的数据结构的设计,用下面两个结构: typedef struct TT int d4 int ID4 int board1717 BOOL begin4 typedef struct MM - 10 - 总体设计 CString namesex int score 连接的 socket 保存在如下链表中: typ