本书讲述如何使用UML进行棋牌类网络游戏建模、如何用Visual C++编程实现该游戏,书中集作者近年来从事网络游戏开发之经验。\r\n 全书共分14章,1~6章介绍网络通信编程,是网络游戏设计的基础;7~12章介绍如何用UML对网络游戏进行可视化建模;第13章介绍如何用Visual C++编写有一定难度的客户端程序;第14章介绍如何使用数据库管理游戏数据。由于本书重点在于介绍网络游戏整体框架的建模和编程,所以在讲解时只给出了编程思想和实现的过程,并没有提供全部实现过程的源程序,但提供了关键的实现代码和设计类框图。使你对网络游戏编程有较深入的理解。\r\n 本书适用于软件工程师、网络程序员、大学计算机软件专业和网络专业的学生,以及从事网络游戏开发的程序设计人员。
第1章 概述 \r\n\r\n1.1 网络游戏简介 \r\n1.2 常见网络棋牌游戏 \r\n1.2.1 中国象棋简介 \r\n1.2.2 国际象棋简介 \r\n1.2.3 拱猪简介 \r\n1.2.4 桥牌简介 \r\n1.3 常见网络游戏站点 \r\n1.3.1 联众游戏网站 \r\n1.3.2 中国游戏中心 \r\n\r\n第2章 TCP/IP协议 \r\n\r\n2.1 TCP/IP协议簇简介 \r\n2.1.1 TCP/IP结构 \r\n2.1.2 常用协议 \r\n2.1.3 RFC的介绍和获取方法 \r\n2.2 TCP/IP基本概念 \r\n2.2.1 IP地址 \r\n2.2.2 端口号 \r\n2.2.3 地址解析协议 \r\n2.2.4 域名系统DNS \r\n2.3 小结 \r\n\r\n第3章 Windows Socket编程接口 \r\n\r\n3.1 Windows Socket编程的基本概念 \r\n3.1.1 套接字(Socket)概念 \r\n3.1.2 Windows Socket组成部分 \r\n3.1.3 Windows Socket编程的基本模式 \r\n3.1.4 阻塞处理方式 \r\n3.1.5 非阻塞处理方式 \r\n3.1.6 异步处理方式 \r\n3.2 Windows Socket基本函数 \r\n3.2.1 WinSock的启动与终止--WSAStartup()与WSACleanup() \r\n3.2.2 创建套接字--Socket( )和WSASocket( ) \r\n3.2.3 指定本地地址--bind( ) \r\n3.2.4 建立套接字连接--connect( )和WSAConnect( ) \r\n3.2.5 监听连接--listen( ) \r\n3.2.6 接受连接请求--accept( )和WSAAccept( ) \r\n3.2.7 数据发送--send( )和 sendto( ) \r\n3.2.8 数据接收--recv( )和 recvfrom( ) \r\n3.2.9 I/O多路复用--select( ) \r\n3.2.10 中断连接--closeSocket( )和shutdown( ) \r\n3.2.11 其他API函数 \r\n3.3 客户/服务器通信例程 \r\n3.3.1 客户/服务器编程\r\n3.3.2 服务器端程序示例\r\n3.3.3 客户端程序示例 \r\n3.4 小结 \r\n\r\n第4章 套接字I/O模型\r\n\r\n4.1 select模型\r\n4.2 WSAAsyncSelect模型 \r\n4.3 WSAEventSelect模型 \r\n4.4 Overlapped模型与CompletionPort模型 \r\n4.5 封装套接字模型类 \r\n4.6 小结 \r\n\r\n第5章 多线程编程\r\n\r\n5.1 多线程概述\r\n5.1.1 线程和进程的区别\r\n5.1.2 线程的概念 \r\n5.1.3 工作者线程 \r\n5.1.4 UI线程 \r\n5.2 线 程 通 信\r\n5.2.1 使用全局变量通信\r\n5.2.2 使用用户定义的消息通信 \r\n5.2.3 使用事件对象通信 \r\n5.3 线程同步\r\n5.3.1 CSyncObject类\r\n5.3.2 CSingleLock类\r\n5.3.3 CMultiLock类 \r\n5.3.4 CCriticalSection类\r\n5.3.5 CMutex类\r\n5.3.6 CSemaphore类\r\n5.4 小结 \r\n\r\n第6章 服务器线程池模型\r\n\r\n6.1 线程池模型\r\n6.1.1 线程池类概念\r\n6.1.2 线程池类定义 \r\n6.1.3 线程函数 \r\n6.2 服务器线程池框架\r\n6.2.1 服务器线程池构成\r\n6.2.2 管理线程池类 \r\n6.2.3 接收线程池类 \r\n6.2.4 发送线程池 \r\n6.2.5 分析线程池 \r\n6.3 线程池类程序代码 \r\n6.4 小结 \r\n\r\n第7章 使用可视化建模工具Rational Rose\r\n\r\n7.1 建模工具Rational Rose\r\n7.1.1 Rational Rose简介\r\n7.1.2 Rational Rose界面 \r\n7.1.3 Rose模型的4个视图 \r\n7.2 Rose中的框图简介 \r\n7.3 小结 \r\n\r\n第8章 网络游戏设计的需求说明\r\n\r\n8.1 网络游戏下载和用户管理\r\n8.2 网络游戏管理接口需求 \r\n8.3 网络游戏界面功能需求 \r\n8.4 网络游戏功能需求 \r\n8.5 小结 \r\n\r\n第9章 网络游戏Use Case框图的建立\r\n\r\n9.1 Use Case框图\r\n9.2 角色和用户案例 \r\n9.3 建立角色和用户案例\r\n9.3.1 角色的建立\r\n9.3.2 用户案例的划分原则 \r\n9.3.3 用户案例的分类 \r\n9.4 小结 \r\n\r\n第10章 游戏协议设计\r\n\r\n10.1 游戏协议\r\n10.1.1 游戏协议概念\r\n10.1.2 游戏协议格式 \r\n10.2 操作代码 \r\n10.3 游戏协议详细分类\r\n10.3.1 管理操作类协议\r\n10.3.2 游戏大厅类协议 \r\n10.3.3 打牌类协议 \r\n10.3.4 旁观类协议 \r\n10.4 协议打包/解包程序代码 \r\n10.5 小结 \r\n\r\n第11章 游戏客户端类图设计\r\n\r\n11.1 客户端类的划分\r\n11.2 游戏基本类 \r\n11.3 游戏框架类 \r\n11.4 游戏通信类 \r\n11.5 游戏应用程序类 \r\n11.6 游戏处理类 \r\n11.7 小结 \r\n\r\n第12章 游戏服务器端类图设计\r\n\r\n12.1 服务器端类的划分\r\n12.2 游戏通信类 \r\n12.3 游戏协议类 \r\n12.4 游戏逻辑类 \r\n12.5 线程池类 \r\n12.6 用户管理类 \r\n12.7 大厅管理类\r\n12.7.1 CLobby大厅类\r\n12.7.2 CCard牌类 \r\n12.7.3 CTable桌子类 \r\n12.8 数据库类\r\n12.9 小结\r\n\r\n第13章 客户端框架程序设计\r\n\r\n13.1 启动界面\r\n13.1.1 用户登录窗口\r\n13.1.2 代理服务器设置窗口 \r\n13.2 游戏大厅框架 \r\n13.2.1 游戏目录窗口 \r\n13.2.2 系统信息窗口 \r\n13.3 游戏房间框架 \r\n13.3.1 游戏桌窗口 \r\n13.3.2 站点列表窗口 \r\n13.3.3 在线用户列表窗口 \r\n13.3.4 发送聊天信息窗口 \r\n13.3.5 “聊天设置”窗口\r\n13.3.6 系统设置窗口 \r\n13.3.7 邀请参加游戏窗口\r\n13.3.8 输入游戏桌密码窗口\r\n13.3.9 创建游戏室窗口 \r\n13.4 游戏牌局框架 \r\n13.4.1 游戏窗口 \r\n13.4.2 等待掉线用户窗口 \r\n13.4.3 退出游戏提示窗口\r\n13.4.4 声称对话框\r\n13.4.5 声称提示窗口 \r\n13.5 小结 \r\n\r\n第14章 游戏服务器端数据库处理\r\n\r\n14.1 数据库开发方法\r\n14.1.1 开放数据库连接(ODBC)\r\n14.1.2 MFC ODBC类 \r\n14.1.3 MFC DAO(数据访问对象)编程\r\n14.1.4 OLE DB\r\n14.1.5 ActiveX数据对象(ADO)\r\n14.2 数据库结构的访问与设计\r\n14.2.1 数据库访问步骤\r\n14.2.2 数据库结构设计\r\n14.3 数据库访问的实现\r\n14.3.1 采用的数据库开发方法\r\n14.3.2 访问数据库程序代码 \r\n14.4 ASP访问数据库 \r\n14.5 小结
长期以来,软件开发采用流水式过程。在这种模型中,软件开发分为分析需求、设计系统、开发系统、测试系统和部署系统等几个阶段,整个过程是不可逆的。要在项目开发初期了解所有需求是不可能的,新事件不断出现,迫使开发人员不得不重复规划,为此引入了软件可视化建模的概念。
可视化建模就是以图形的方式描述所开发系统的过程。可视化建模允许你提出一个复杂问题的必要细节,过滤不必要的细节。它也提供了一种从不同的角度观察被开发系统的机制。本书在介绍如何使用UML进行可视化建模的同时,结合网络游戏设计的实例,讲述了如何使用UML进行网络游戏的用例(Use Case)划分和如何划分网络游戏的类框图。同时结合Visual C++编程工具,重点讲解棋牌类网络游戏建模和编程的实现方法。
全书共分14章,1~6章主要介绍网络通信编程;7~12章主要介绍如何使用UML进行网络游戏程序设计;第13章介绍如何使用Visual C++编写具有一定难度的客户端程序;第14章主要介绍数据库编程。由于通过Visual C++进行网络游戏编程具有很大的难度,为了使读者对这些编程难点有一定的了解,特将本书内容结构安排如下:
1~4章,详细介绍了Socket通信程序设计。内容包括Windows Socket编程接口,以及Windows环境下网络编程采用的阻塞、非阻塞和异步通信方式;并且对Select模型、WSAAsyncSelect模型、WSAEventSelect模型、OverLapped模型与CompletionPort模型进行了详细的论述,还给出了实例讲解。
第5章,主要介绍多线程程序设计。详细讲解了工作者线程和UI线程的创建、启动方式,同时结合程序实例针对多线程程序设计中的难点--线程同步和线程间通信进行详细的讲解。
第6章,主要介绍服务器线程池模型。游戏服务器端由于必须同时支持大量的并发客户访问,所以服务器端采用线程池模型构建。为此详细描述了线程池构建的方式,同时结合UML语言描述了构建线程池模型的类框图,并给出了示例程序代码。
7~9章,主要介绍了使用Rational Rose工具对网络游戏进行可视化建模。为此描述了网络游戏的需求以及如何通过需求进行用例划分。
第10章,主要介绍了游戏协议处理打包机制。网络游戏的客户机/服务器随时都要进行大量数据的交互,故而详细讲解了协议的分类、协议打包格式及如何跟大量的数据打包/解包等内容。
11、12章,主要介绍游戏客户端和服务器端的类框图设计。按照功能将类分为不同的包,详细讲解了类中的操作和属性,让读者了解如何进行网络游戏类设计。
第13章,主要介绍游戏客户端框架程序构建。包括如何构建网络游戏客户端界面,通过图文并茂的方式讲解客户端界面的构成部分,同时结合程序代码给出了拆分框架的方法,并且详细讲解了客户端位图的构成方式。
第14章,主要介绍服务器端数据库处理。网络游戏的用户验证和用户数据保存必须以数据库方式进行,为此讲解了利用MFC开发数据库程序常用的几种方式,并且描述了如何采用数据库管理游戏用户资料。
由于本配套手册重点在于网络游戏整体框架的建模,并不是手把手教你如何编写网络游戏,所以在很多章节只是简单给出思路,同时部分章节给出了关键实现代码和设计类框图。希望有兴趣的读者能举一反三,在此基础上继续完善。
本配套手册主要面对具有Visual C++网络编程功底,同时对UML语言有一定了解、对网络游戏开发具有极大兴趣的读者。
光盘中提供有本配套手册所有的程序源代码。希望大家通过本光盘与配套手册的学习能够达到举一反三的目的,编写出更好的属于自己的供大家娱乐的网络游戏程序。光盘文件与本配套手册的对照表请参见光盘的Readme文件。
在本书出版之际,我们要衷心感谢在写作过程中曾给予我们大力支持的赵海教授和对UML有深入研究的赵景勋老师和胡文红老师,感谢对Visual C++编程有深刻造诣的陈宇的帮助。另外,在本书编写过程中,我们也参考了一些Internet上的游戏网站的建模方法,在此,一并表示感谢。同时也要感谢徐建军编辑,没有他细致的编辑工作,本书是很难与读者见面的。更要感谢夏非彼总编的指导和北京科海电子出版社给了我这次与读者交流的机会。最后要感谢我的家人,他们是我永远的力量。
由于时间仓促,作者水平有限,书中难免有不妥和错误之处,恳请读者批评指正。
编者
2003年4月