1、南昌航空大学东软班 详细设计报告 版本:0.1.0 基于Windows系统的 斗地主游戏的设计与实现 详细设计 总页数 18 正文 15 附录 无 生效日期 2013-12-30 编制 批准 18 修 改 履 历 修改编号 日期 修改人 版本号 修改内容 1 0.1.0 初始做成
2、 目 录 1 文档概述 4 1.1 文档目的和范围 4 1.2 术语/缩略语 4 1.3 参考文档 4 2 处理 4 2.1 模块数据结构定义 4 2.1.1全局变量定义 4 2.2 模块功能实现 8 2.2.1模块内部函数 8 1 文档概述 1.1 文档目的和范围 此文档是对基于Windows系统的斗地主游戏的服务器端模块的详细设计描述,主要是描述了本模块与其它模块的接口函数和内部接口函数以及内部函数的定义、流程图和构成图以及测试项目的记述。并
3、为后期测试提供依据。 1.2 术语/缩略语 序号 术语/缩略语 说明 1 MFC Microsoft Foundation Classes,微软基础类 2 DirectX Direct eXtension,简称DX,是由微软公司创建的多媒体编程接口 1.3 参考文档 序号 文档名 作者 时间 版本 1 详细设计模板 IA事业部 2007-11-9 0.0.0 2 详细设计方法 IA事业部 2007-11-9 0.0.0 3 函数说明指南 IA事业部 2007-6-4 1.1.0 4 流程图指南 IA事业部 2007-
4、6-4 1.1.0 5 概要设计 杨丽娟 2013-12 0.1.0 2 处理 2.1 模块数据结构定义 2.1.1全局变量定义 //主窗口句柄 extern HWND hWnd; class CMainFrame; //主窗口类指针;设为全局变量便于各个类访问其方法 extern CMainFrame* pCMainFrame; //关于Direct设备的类 //DirectInput设备接口指针 class CMyDirectInput; extern CMyDirectInput* pInput; //DirectDraw设备接口指针 c
5、lass CMyDirectDraw; extern CMyDirectDraw* pDraw; extern LPDIRECTDRAWSURFACE7 lpddsprimary; // 主表面 extern LPDIRECTDRAWSURFACE7 lpddsback; //后缓冲表面 extern LPDIRECTDRAWSURFACE7 lpddsbg_Game; //存放游戏界面的离屏表面 //主窗口句柄 HWND hWnd; //主窗口类指针;设为全局变量便于各个类访问其方法 CMainFrame* pCMainFrame;
6、 //DirectDraw设备对象指针 CMyDirectInput* pInput; CMyDirectDraw* pDraw; LPDIRECTDRAWSURFACE7 lpddsprimary; // dd primary surface LPDIRECTDRAWSURFACE7 lpddsback; // dd back surface LPDIRECTDRAWSURFACE7 lpddsbg_Game; //离屏表面 //游戏主体框架类指针 CGame* pGame; //54张扑克 CCard g_cAllCards[54]; //存储玩家
7、信息的类 CPlayerInfo* pCenterPlayer; CPlayerInfo* pLeftPlayer; CPlayerInfo* pRightPlayer; CPlayingCards* pLeftCards; //左边玩家的牌对象 CPlayingCards* pCenterCards; //主机玩家的牌对象 CPlayingCards* pRightCards; //右边玩家的牌对象 //关于其他精灵的绘制引擎 CDrawItemEngine* pDrawItem; //关于扑克绘制的引擎 CDrawCardsEngine* p
8、DrawCards; //游戏牌面坐标系统 CCardsMap* pCardsMap; //网络设备 CLink* pServerLink1; //连接客户1 CLink* pServerLink2; //连接客户2 CLink* pClientLink; //客户端1 //位置坐标 int Screen_Width = 1024; int Screen_Height = 768; //屏幕长,宽 int Cards_Width = 82; int Cards_Height = 114; //扑克长宽 //int Face_Width = 70; i
9、nt Face_Height = 70; //头像的长宽 int Center_x0 = 350; int Center_y0 = 620; //中间玩家未出的牌 int Center_x1 = 230; int Center_y1 = 470; //中间玩家已经出过的牌 int Center_x2 = 330; int Center_y2 = 340; //中间玩家刚出的牌 int Left_x0 = 35; int Left_y0 = 140; //左边玩家未出的牌 int Left_x1 = 140; int Left_y1
10、 30; //左边玩家已经出过的牌 int Left_x2 = 240; int Left_y2 = 65; //左边玩家刚出的牌 int Right_x0 = 905; int Right_y0 = 140; //右边玩家未出的牌 int Right_x1 = 800; int Right_y1 = 30; //右边玩家已经出过的牌 int Right_x2 = 700; int Right_y2 = 65; //右边玩家刚出的牌 //三张显示的地主牌; int Lord_Card1_x = 379; int Lord_Car
11、d1_y = 30; int Lord_Card2_x = 471; int Lord_Card2_y = 30; int Lord_Card3_x = 563; int Lord_Card3_y = 30; int Card_x = 471; int Card_y = 190; //发牌的起始位置 int Card_Distance0 = 18; //左,右玩家未出牌和中间玩家已出牌的间距 int Card_Distance1 = 23; //左,右玩家已出牌的间距 int Card_Distance2 = 25; //中间玩家
12、未出牌和刚出的牌的间距 int Card_Up = 20; //中间扑克选择后突出的高度 typedef unsigned short USHORT; //类型定义 typedef unsigned short WORD; typedef unsigned char UCHAR; typedef unsigned char BYTE; 2.2 模块功能实现 2.2.1模块内部函数 2.2.1.1 类CDlg_Start 2.2.1.1.1Server_Login 【函数式样】 函数名 Server_Login 文件名 ../Dlg_Start.cpp
13、功能概要 服务器端登陆接收函数 记述形式 static DWORD WINAPI Server_Login(LPVOID pParam); 参数 类型 变量名 I/O 说明 LPVOID pParam - - 返回值 类型 DWORD 说明 值 - - 详细说明 服务器端接收函数 使用注意事项 无 【函数处理流程】 图 1 服务器端登陆接收流程图 2.2.1.2Client_Login 【函数式样】 函数名 Client_Login 文件名 .../ Dlg_Start.cpp 功能概要 客户端登陆接收函数 记述形
14、式 static DWORD WINAPI Client_Login(LPVOID pParam); 参数 类型 变量名 I/O 说明 LPVIOD pParam - - 返回值 类型 DWORD 说明 值 - - 详细说明 客户端接收函数 使用注意事项 无 【函数处理流程】 图 2 客户端登陆接收流程图 2.2.1.2 类CServerGame 2.2.1.2.1SendCards 【函数式样】 函数名 SentCards 文件名 .../Server_Game.cpp 功能概要 传送牌数据结构给两个客户(服务器
15、独有的函数) 记述形式 int SentCards(void); 参数 类型 变量名 I/O 说明 void - - - 返回值 类型 int 说明 值 - - 详细说明 传送牌数据结构给两个客户(服务器独有的函数) 使用注意事项 无 【函数处理流程】 图 3 服务器传送牌数据流程图 2.2.1.2.2DecideLord 【函数式样】 函数名 DecideLord 文件名 .../ Server_Game.cpp 功能概要 决定地主 记述形式 int DecideLord(void); 参数 类型 变量名
16、 I/O 说明 void - - - 返回值 类型 int 说明 值 - - 详细说明 决定地主 使用注意事项 无 【函数处理流程】 图 4 决定当不当地主流程图 2.2.1.2.3LeftDoing 【函数式样】 函数名 LeftDoing 文件名 .../ Server_Game.cpp 功能概要 左边玩家思考,并决定要出的牌 记述形式 virtual int LeftDoing(); 参数 类型 变量名 I/O 说明 void - - - 返回值 类型 int 说明 值 - - 详细说明
17、 左边玩家思考,并决定要出的牌 使用注意事项 无 【函数处理流程】 图 5 出牌逻辑 2.2.1.2.4CenterDoing 【函数式样】 函数名 CenterDoing 文件名 .../ Server_Game.cpp 功能概要 本机玩家思考,并决定要出的牌 记述形式 virtual int CenterDoing(); 参数 类型 变量名 I/O 说明 void - - - 返回值 类型 int 说明 值 - - 详细说明 本家玩家思考,并决定要出的牌 使用注意事项 无 【函数处理流程】 2.2.1
18、2.5RightDoing 【函数式样】 函数名 RightDoing 文件名 .../ Server_Game.cpp 功能概要 右边玩家思考,并决定要出的牌 记述形式 virtual int RightDoing(); 参数 类型 变量名 I/O 说明 void - - - 返回值 类型 int 说明 值 - - 详细说明 右边玩家思考,并决定要出的牌 使用注意事项 无 【函数处理流程】 2.2.1.2.6Run 【函数式样】 函数名 Run 文件名 .../ Server_Game.cpp 功能概要 整个游戏过程的中枢 记述形式 virtual int Run(); 参数 类型 变量名 I/O 说明 void - - - 返回值 类型 int 说明 值 - - 详细说明 整个游戏过程的中枢 使用注意事项 无 【函数处理流程】 图 6 游戏中枢流程图






