edef CList ltSOCKETSOCKETampgt SOCKET_ARRAY SOCKET_ARRAY m_connectionList 与服务器建立连接后,相应的用户数据,保存在 MM 结构数组中,位置为其 socket在 m_connectionList 中的相应位置,这样就可以通过连接的 socket 找到相应的信息。
TT 是保存大厅数据的结构,d 表示四个坐位有没有人,ID 表示就坐的人的 socket 在链表中的位置。
board 为棋盘数据。
每个桌子有每个桌子的棋盘数据,互不干扰。
随着游戏的进行而不断更新。
begin 表示四个玩家有没有下调度完成的指令。
应用矩阵的变换实现坐标旋转。
不管你坐在哪个方位,玩游戏时,你始终是在正下方,这就需要实现虚拟坐标到目标坐标的旋转变换,如图 3-4。
图 3-4 坐标图 X 为实际坐标,x 为虚拟坐标,转换公式推导如下,见图 3-5。
图 3-5 坐标变换公式推导 direct 为自己座位方向, switchdirect case 0: a90o X,Y,1-y16,x,1 //东 case 1:a0o X,Y,1x,y,1 //南 case 2:a-90o X,Y,1y,-x16,1 //西 - 11 - 总体设计 case 3:a180o X,Y,1-x16,-y16,1 //北 回溯法求工兵路径,军棋游戏逻辑不复杂,只有工兵能够自由飞行。
在这里没有求工兵起点到目标点的最短路径,而只是用回溯法求出其中一条路径,所以在游戏中你会发现工兵有时候会绕些弯路。
这和老鼠走迷宫差不多的。
工兵迷宫数组: int RAILWAY1717 00000000000000000 00000011111000000 00000010001000000 00000010001000000 00000010001000000 00000113131100000 01111113131111110 01000220202200010 01000113131100010 01000220202200010 01111113131111110 00000113131100000 00000010001000000 00000010001000000 00000010001000000 00000011111000000 00000000000000000 0 表示该位置不在工兵铁道上,1 表示在该位置可向上下左右方向移动,2 表示在该位置只能向上下方向移动,3 表示在该位置只能向左右方向移动。
- 12 - 总体设计3.4 关键技术 网络通信,Windows Socket 编程接口: Windows Socket 简称 WinSock是在 Win32 平台上访问基层网络协议的接口。
在不同的 Win32 平台上,Windows Socket 以不同的方式存在着,作为网络编程接口而不是协议存在。
套接字(Socket)概念,套接字是从英文单词 Socket 翻译而来,它是网络通信的基本操作单元,是应用层到传输层的接口,可以将套接字看作不同主机间的进程进行双向通信的端点。
Windows Socket 组成部分,Windwos Sockets 实现一般都由两部分组成:开发组件和运行组件。
开发组件是供程序员开发 Windows Sockets 应用程序使用的,主要是WinSock.h 头文件。
对于 Windows Sockets 应用程序的源文件来说,只要包括 WinSock.h就可以了。
除此之外,在使用 WinSock 的项目中还需要加入 WinSock API 引入库wsock32.lib。
运行组件是 Windows Sockets 应用程序接口的动态连接库(DLL)文件名为 WinSock.dll应用程序在执行时通过装入它实现网络通信功能。
Windows Sockets 编程的基本模式,要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户端,我们称之为 ClientSocket,另一个运行于服务器端,我们称之为 ServerSocket。
使用 Socket 进行网络通信一般有两种方式:基于面向连接的流方式和基于无连接的数据报方式。
面向连接的的流方式调用过程如图 3-6 所示。
- 13 - 总体设计图 3-6 面向连接的流方式调用过程 - 14 - 详细设计 第四章 详细设计4.1 数据库结构 服务器端数据库结构如表 4-1。
User 列名 数据类型 长度 允许空 描述 主键 name char 10 no 用户名 code char 10 no 密码 score int 4 yes 游戏积分 sex char 2 yes 性别 表 4-1,玩家信息 用作记录玩家游戏数据。
4.2 模块结构 客户端模块结构: 游戏基本类该类包中包括 CBorderButton、CClockObject、CWave 类。
游戏框架类,该类包中包括 CMainFrame、CCGameHallFrameView、CHtmlViewEx、 CTableView 类。
游戏通信类,该类包中包括 CClient 类。
游戏应用程序类,该类包包括 CGameDlg 类,其中包括对游戏处理类的调用。
游戏处理类,该类包中主要包括 TakeGame 类。
服务器模块结构: 游