C++之3D对战游戏编程学习(http://www.ixueyun.com/lessons/detail-lessonId-687.html)

12年前
学习地址:http://www.ixueyun.com/lessons/detail-lessonId-687.html

课程概述: 本课程主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开 发出中小型游戏项目或3D工业仿真项目;

本课程分为三个部分:
 1、 实现基本通信框架,包括对游戏的需求分析、设计及开发环境和通信框架的搭建;
 2、 实现网络底层操作,包括创建线程池、序列化网络包等;
 3、 实战演练,实现类似于CS反恐精英的3D对战网络游戏;

相关图片:







课程详细大纲
第一部分  实现基本通信框架

第一&二讲:3D对战网络游戏需求分析
一、导入
a) 该项目是以多玩家扮演的不同角色间的对战情形为背景实现的一个基于C/S架构的3D对战网络游戏的简单框架;
二、学习目标
a) 项目简介
b) 游戏服务器端功能需求
c) 网络底层接口需求
d) 游戏客户端界面功能需求
e) 3D场景模块接口需求
三、教学过程描述
a) 首先介绍了游戏背景,然后分别从服务器端和客户端对游戏做出了整体的功能需求;
b) 从玩家的角度介绍了游戏客户端的界面功能需求;
c)从开发者的角度介绍了关于网络底层模块以及场景模块的接口需求;
四、练习与作业
a) 熟悉UML的基本使用
b) 思考针对本节的需求如何对该服务器端进行总体设计?
c) 熟悉3D场景渲染的基础知识
d) 思考如何针对服务器和客户端的需求对该网络游戏框架进行设计?
五、小结
a) 介绍了对战游戏项目的游戏背景;
b) 从不同的角度介绍了关于该游戏项目的功能需求以及接口需求;


第三&四&五讲:3D对战网络游戏系统设计
一、上节回顾
a) 项目简介;
b) 游戏客户端和服务器端的功能需求;
c) 网络底层和3D场景模块的接口需求;
二、学习目标
a) 对3D对战网络游戏进行总体设计和概要设计;
b) 游戏服务器端详细设计;
c) 游戏客户端详细设计;
三、教学过程描述
a) 根据项目的需求分析,本节以模块功能图以及包图分别对该项目的各个模块进行了总体设计和概要设计;
b)对网络底层、服务器端数据存储、游戏计算逻辑等相关功能进行了详细设计;
c) 对客户端界面以及3D场景模型进行了详细设计;
四、练习与作业
a) 熟悉UML包图的使用方法;
b) 了解网络编程的常用模型以及需要考虑的问题;
c) 熟悉c++ boost库的使用;
d) 思考如何将设计模式中的工厂模式应用到网络包的创建中?
e) 了解并熟悉OpenGL的相关知识及使用;
f) 了解并熟悉Qt相关知识及应用;
五、小结
a) 以包图的形式对3D对战网络游戏进行了总体设计和概要设计;
b) 以类图的形式介绍了游戏服务器端以及游戏客户端的详细设计;


第六讲:系统开发环境与软件版本控制
一、        上节回顾
a) 以包图的形式对3D对战网络游戏进行了总体设计和概要设计;
b) 以类图的形式介绍了游戏服务器端以及游戏客户端的详细设计;
二、        学习目标
a) 介绍系统开发环境;
b) 介绍软件版本控制相关知识;
三、        教学过程描述
a) 系统开发环境中主要介绍了开发工具以及常用的开发技术(如Qt、boost等),同时也简单的介绍了关于开发环境的搭建;
b) 介绍软件版本控制相关知识,主要提到了关于SVN的使用;
四、        练习与作业
a) 配置开发环境;
b) 配置SVN本地管理软件版本的环境;
五、小结
a) 介绍了系统开发环境以及常用的开发技术;
b) 介绍了SVN的配置及使用;


第七讲:搭建C/S架构的基本通信框架
一、上节回顾
a) 介绍了系统开发环境以及常用的开发技术;
b) 介绍了SVN的配置及使用;
二、学习目标
a) 项目源代码及文件管理;
b) 搭建网络通信框架;
三、教学过程描述
a) 主要介绍了如何管理项目源代码及相关文档才能合理的体现代码的组织结构;
b) 以流程图的形式展现了网络通信框架的基本工作流程;
四、练习与作业
a) 熟悉代码中涉及到的boost相关技术点;
b) 思考基本异步机制的网络通信环境应该如何搭建?
五、小结
a) 介绍了项目源代码及文件管理;
b) 搭建基本的网络通信框架;




第二部分  实现网络底层操作
第八讲:实现网络底层操作(构建消息体)
一、上节回顾
a) 项目源代码及文件管理;
b) 搭建网络通信框架;
二、学习目标
a) 构建消息体;
b) 测试消息体;
三、教学过程描述
a) 首先介绍了网络通信中消息结构的定义;
b) 其次介绍了关于消息体的处理流程;
c) 结合网络通信框架对消息体进行了测试;
四、练习与作业
a) 思考如何使用内存池来创建消息体以满足大流量的网络包数据的处理?
b) 思考如何管理多线程环境下的消息数据?
c) 了解数据校验的相关知识,并思考如何应用到网络通信?
五、小结
a) 首先介绍了消息体的结构以及消息结构;
b) 通过示例演示了管理消息体的测试;

第九讲:实现网络底层操作(构建并发线程池)
一、上节回顾
a) 首先介绍了消息体的结构以及消息处理流程;
b) 通过示例演示了管理消息体的测试;
二、学习目标
a) 线程池简介;
b) 建立并发线程池;
三、教学过程描述
a) 首先介绍关于线程池的原理以及线程池的优点;
b) 通过示例介绍了建立并发线程池的操作;
四、练习与作业
a) 思考有哪些其它的线程调度算法,以及如何将这些算法应用到本节的线程池中?
五、小结
a) 首先介绍了线程池简介;
b) 然后通过示例演示了关于并发线程池的构建;


第十讲:实现网络底层操作(建立阻塞队列)
一、上节回顾
a) 线程池简介;
b) 建立并发线程池;
二、学习目标
a) 建立阻塞队列;
b) 应用生产者/消费者模式;
三、教学过程描述
a) 首先介绍针对多线程下的数据读写,采用条件变量管理并发的手段,这样就可以被多个线程使用,同时采用类模板实现多种类型的数据存储;
b) 介绍了如何将阻塞队列应用于生产者/消费者模式;
四、练习与作业
a) 根据本节的内容,使用睡眠功能实现一个线程调度器,可以满足定时调度线程的功能;
五、小结
a) 建立阻塞队列;
b) 应用生产者/消费者模式;


第十一&十二讲:实现网络底层操作(构建TCP通信会话端)
一、上节回顾
a) 建立阻塞队列;
b) 应用生产者/消费者模式;
二、学习目标
a) TCP通信会话端功能简介;
b) 实现数据异步读写;
c) 实现线程调度器;
d) 实现TCP通信连接;
三、教学过程描述
a) 首先介绍TCP通信会话端的主要功能是处理网络通信,并实现数据收发的核心功能,然后介绍了相关的异步处理流程;
b)然后介绍了线程调度器是以线程的睡眠功能实现函数的定时调用的目的,主要用于客户端定时发起连接的操作等相关功能;
四、练习与作业
a) 根据本节中的safe_atom设计方法与思路,实现其它类似的多线程环境安全的容器类,比如vector、map等;
b) 编写测试代码测试本节中的异步读写类;
c) 在本节的基础上实现数据的通信(类似于之前同步机制下的回显功能);
五、小结
a) 简单介绍了TCP通信会话端的功能,然后实现了数据的异步读写操作;
b) 实现了线程调度器,并且实现了TCP通信连接;


第十三讲:实现网络事件的分派处理
一、上节回顾
a) 简单介绍了TCP通信会话端的功能,然后实现了数据的异步读写操作;
b) 实现了线程调度器,并且实现了TCP通信连接;
二、学习目标
a) 实现网络回调事件;
b) 测试网络回调事件;
三、教学过程描述
a) 首先介绍对网络回调事件进行了分类,包括网络连接或断开的网络事件以及接收数据和发送数据的网络事件;
b)  然后介绍了关于设计网络回调事件操作的设计思路以及测试网络回调事件的思路;
四、练习与作业
a) 实现多个客户端连接一个服务器的功能,同时将客户端实现为一个可以根据输入发送数据的流程,并且服务器可以将某一个客户端的输入回显给所有客户端(类似于聊天功能);
五、小结
a) 首先介绍对网络回调事件进行了分类;
b) 然后介绍了关于设计网络回调事件操作的设计思路以及测试网络回调事件的思路;

第十四&十五讲:实现支持序列化与反序列化的网络包
一、上节回顾
a) 实现网络回调事件;
b) 测试网络回调事件;
二、学习目标
a) 序列化简介;
b) 实现序列化接口;
c) 测试序列化接口;
d) 应用序列化网络包;
e) 测试网络通信;
三、教学过程描述
a) 首先介绍了关于序列化以及反序列化的相关功能;
b) 通过思考如何实现序列化与反序列化网络包的作用等相关问题实现了关于序列化的相关操作;
c) 在实现的基础上并对序列化相关接口进行了测试和应用的操作;
四、练习与作业
a) 根据serial_packet的定义,思考如何在网络数据收发过程中使用,以及如果将网络包类型以网络包的类名来进行识别,应该怎样做?
b) 思考游戏中涉及的数据,建立相应的序列化网络包结构;
c) 思考如何简化序列化网络包的分派处理?


第十六&十七讲:实现网络包的分派处理
一、上节回顾
a) 序列化简介;
b) 实现序列化接口;
c) 测试序列化接口;
d) 应用序列化网络包;
e) 测试网络通信;
二、学习目标
a) 实现动态创建网络包;
b) 测试网络包创建工厂;
c) 实现线程安全的容器;
d) 实现网络包分派处理;
三、教学过程描述
a) 首先介绍了工厂模式,工厂模式就是为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类;
d) 介绍了管理测试网络包创建工厂的测试思路;
c) 介绍了关于实现线程安全的容器以及网络包分派处理的设计思路;
四、练习与作业
a) 根据本节中网络包分派处理的相关知识,思考关于网络包动态创建部分的优点及不足,以及针对不足的地方有什么样的改进方法?
b) 思考如何通过快速检测网络连接状态等相关方法以提高网络包分派处理的效率?
c) 思考如何测试网络底层的稳定性等相关问题?
五、小结
a) 介绍了工厂模式;
d) 介绍了管理测试网络包创建工厂的测试思路;
c) 介绍了关于实现线程安全的容器以及网络包分派处理的设计思路;



第十八讲:实现网络底层操作(网络连接状态检测,心跳包的设计)
一、上节回顾
a) 实现动态创建网络包;
b) 测试网络包创建工厂;
c) 实现线程安全的容器;
d) 实现网络包分派处理;
二、学习目标
a) 心跳检测简介;
b) 实现网络连接状态检测;
三、教学过程描述
a) 介绍了关于心跳包的相关概念及其作用;
b) 介绍了实现网络连接状态的设计思路;
四、练习与作业
a) 实现网络连接状态检测的具体操作,主要处理建立网络连接但未进行数据通信的会话端的相关问题;五、小结
a) 心跳检测简介;
b) 实现网络连接状态检测;


第十九讲:实现服务器和客户端的外部网络接口
一、上节回顾
a) 心跳检测简介;
b) 实现网络连接状态检测;
二、学习目标
a) 设计网络底层接口;
b) 实现网络底层接口;
三、教学过程描述
a) 介绍了关于设计网络接口以及简化外部调用的思路;
b) 介绍了如何实现服务器端以及客户端对外的网络接口基本一致?
四、练习与作业
a) 了解动态链接库的相关知识,思考如何将网络底层 封装成动态链接库的方式使用?
五、小结
a) 设计网络底层接口;
b) 实现网络底层接口;



第二十讲:实现网络层封装(DLL)
一、上节回顾
a) 设计网络底层接口;
b) 实现网络底层接口;
二、学习目标
a) 动态链接库简介;
b) 封装网络底层操作;
三、教学过程描述
a) 介绍了关于动态链接库的功能以及动态链接库的功能;
b) 介绍了关于封装网络底层操作的设计思路;
四、练习与作业
a) 在本节的基础上测试网络底层操作,包括快速发送大量数据的操作等;
b) 了解和熟悉qt以及opengl的相关基础知识;
五、小结
a) 动态链接库简介;
b) 封装网络底层操作;



第三部分  实战演练(实现类似于CS反恐精英的3D网络对战游戏)
第二十一讲:设计游戏通信协议(基本协议类型的划分)
一、上节回顾
a) 动态链接库简介;
b) 封装网络底层操作;
二、学习目标
a) 设计基本通信协议;
b) 实现基本通信协议;
三、教学过程描述
a) 介绍了基本通信类型的划分,并分别介绍了通信协议的设计,包括请求协议、回复协议等;
b) 介绍了关于实现基本通信协议的方案;
四、练习与作业
a) 思考本游戏中还有哪些通信协议?
b) 思考通信协议的设计需要考虑哪些问题,以及如何解决或避免影响设计的相关问题?
五、小结
a) 设计基本通信协议;
b) 实现基本通信协议;


第二十二讲:实现游戏登录界面
一、上节回顾
a) 设计基本通信协议;
b) 实现基本通信协议;
二、学习目标
a) 设计游戏登录界面;
b) 实现游戏登录操作;
三、教学过程描述
a) 介绍了如何根据需求分析及详细设计来设计游戏登录界面的思路;
b) 介绍了关于实现游戏登录操作的相关方法;
四、练习与作业
a) 结合本节的内容,实现登录界面的记住密码功能及自动登录功能;
b) 思考针对游戏客户端的登录操作,服务器端应该有哪些对应的响应操作?
五、小结
a) 设计游戏登录界面;
b) 实现游戏登录操作;




第二十三讲:实现服务器端数据存储
一、上节回顾
a) 设计游戏登录界面;
b) 实现游戏登录操作;
二、学习目标
a) 设计数据存储功能;
b) 实现客户端数据信息的存储;
三、教学过程描述
a) 介绍了关于数据存储以及数据管理的设计思路;
b) 介绍了关于客户端数据信息存储的相关流程;
四、练习与作业
a) 在游戏客户端实现类似于ServerDataManager类的操作对客户端的数据进行管理;
五、小结
a) 设计数据存储功能;
b) 实现客户端数据信息的存储;


第二十四讲:实现游戏大厅框架
一、上节回顾
a) 设计数据存储功能;
b) 实现客户端数据信息的存储;
二、学习目标
a) 设计游戏大厅界面;
b) 实现游戏大厅基本操作;
三、教学过程描述
a) 介绍了游戏大厅的显示功能以及相关的大厅操作;
b) 介绍了服务器端如何实现有玩家登录或断开连接时对客户端的实时更新?
四、练习与作业
a) 思考如何设计游戏分组的界面以及游戏分组涉及哪些具体的操作?
b) 完善本节中部分辅助信息的显示功能;
五、小结
a) 设计游戏大厅界面;
b) 实现游戏大厅基本操作;


第二十五&二十六讲:实现游戏分组
一、上节回顾
a) 设计游戏大厅界面;
b) 实现游戏大厅基本操作;
二、学习目标
a) 设计游戏分组界面;
b) 实现分组界面操作;
c) 实现分组界面管理;
d) 实现数据交互操作;
三、教学过程描述
a) 介绍了游戏分组界面的显示功能以及相关的操作;
b) 介绍了如何实现单个分组的操作,以满足多个分组时的统一操作?
c) 介绍了如何在游戏大厅中实现添加分组的灵活性及分组界面布局的管理?
四、练习与作业
a) 思考如何在游戏大厅中对分组界面进行管理?
b) 思考服务器端针对游戏分组有哪些响应和操作?
c) 结合游戏大厅及游戏分组的内容,思考如何实现进入游戏的相关逻辑操作?
d) 熟悉QGLWidget的相关操作;
五、小结
a) 设计游戏分组界面;
b) 实现分组界面操作;
c) 实现分组界面管理;
d) 实现数据交互操作;



第二十七讲:设计3D游戏界面
一、上节回顾
a) 设计游戏分组界面;
b) 实现分组界面操作;
c) 实现分组界面管理;
d) 实现数据交互操作;
二、学习目标
a) 设计3D界面显示内容;
b) 实现3D界面窗口管理;
三、教学过程描述
a) 介绍了如何根据需求分析及前期设计思考3D游戏界面中包含哪些基本的显示内容?
b) 介绍了如何在Qt窗口中初始化OpenGL操作?
四、练习与作业
a) 完善游戏分组的相关处理,并思考如何设计游戏开始等相关逻辑操作?
b) 熟悉OpenGL的机制;
五、小结
a) 设计3D界面显示内容;
b) 实现3D界面窗口管理;


第二十八讲:设计游戏模式及玩家角色
一、上节回顾
a) 设计3D界面显示内容;
b) 实现3D界面窗口管理;
二、学习目标
a) 设计游戏模式;
b) 设计玩家角色;
三、教学过程描述
a) 介绍了如何实现需求分析中提到的至少五个玩家同时在线的需求?
b) 介绍了如何满足玩家动态加入游戏分组的操作?   
c) 介绍了如何设计玩家的角色以满足游戏的丰富性?
d) 介绍了玩家角色包含的属性?

四、练习与作业
a) 思考如何具体的完成游戏角色的划分?
b) 测试游戏服务器与游戏客户端已完成的功能,并针对不足的地方进行修改和完善;
五、小结
a) 设计游戏模式;
b) 设计玩家角色;



第二十九讲:测试游戏服务器端和客户端基本通信
一、上节回顾
a) 设计游戏模式;
b) 设计玩家角色;
二、学习目标
a) 测试游戏基本通信;
b) 完善界面状态更新;
三、教学过程描述
a) 介绍了游戏服务器端和客户端的基本通信应该包含的测试内容?
b)介绍了游戏服务器端和客户端的交互过程中存在的状态更新;
四、练习与作业
a) 继续思考并完善状态更新的操作;
b) 思考如何简化界面状态更新的操作;
c) 了解界面设计的方法,熟悉MVC模式的基本含义及使用;
五、小结
a) 测试游戏基本通信;
b) 完善界面状态更新;



第三十&三十一讲:实现基于OpenGL的3D场景渲染框架
一、上节回顾
a) 测试游戏基本通信;
b) 完善界面状态更新;
二、学习目标
a)OpenGL简介;
b)OpenGL使用示例;
c)实现场景渲染框架;
d)测试场景渲染框架;
三、教学过程描述
a) 介绍了OpenGL的概念、特点及工作方式;
b)通过win32控制台的应用程序实现基本的OpenGL图形的渲染操作和流程;
c) 介绍了如何将之前介绍的OpenGL渲染的相关内容结合起来实现场景渲染框架的具体操作?
d) 介绍了如何测试关于游戏场景的显示模块及游戏场景的渲染操作?
四、练习与作业
a) 加深理解OpenGL的使用,熟悉前面提到的关于OpenGL的主要知识点,重点关注坐标变换的相关知识;
b) 熟悉OpenGL中关于贴图的相关知识;
c) 修改本节中融合部分的相关参数,对比不同的融合因子的融合效果;
d) 思考如何在本节中将光标的位置始终设置在准心的位置;
五、小结
a)OpenGL简介;
b)OpenGL使用示例;
c)实现场景渲染框架;
d)测试场景渲染框架;

第三十二讲:实现3D场景中的文字显示
一、上节回顾
a)OpenGL简介;
b)OpenGL使用示例;
c)实现场景渲染框架;
d)测试场景渲染框架;
二、学习目标
a)3D场景文字显示简介;
b)实现3D场景文字显示;
三、教学过程描述
a) 介绍了OpenGL中纹理映射以及显示列表等相关概念;
b)介绍并实现3D场景中的文字显示;
四、练习与作业
a) 实现中文字体的显示;
b) 实现位图字体的显示;
五、小结
a)3D场景文字显示简介;
b)实现3D场景文字显示;

第三十三讲:实现游戏中辅助信息的显示
一、上节回顾
a)3D场景文字显示简介;
b)实现3D场景文字显示;
二、学习目标
a)显示不同颜色的文字;
b)实现游戏辅助信息显示;
三、教学过程描述
a) 介绍了如何在OpenGL中实现不同颜色的文字显示,以及如何简化颜色设置步骤?
b)介绍实现游戏辅助信息的显示内容;
四、练习与作业
a) 根据本节的内容,思考如何实现将字体的显示位置设置为鼠标在屏幕上的位置?
b) 思考在OpenGL中还有哪些功能可以使用类似于ColorProxy类的方法实现以简化使用步骤?
五、小结
a)显示不同颜色的文字;
b)实现游戏辅助信息显示;

第三十四讲:实现游戏场景中的天空盒
一、上节回顾
a)显示不同颜色的文字;
b)实现游戏辅助信息显示;
二、学习目标
a)天空盒简介;
b)实现游戏背景显示;
三、教学过程描述
a) 介绍了天空盒的原理;
b)介绍了如何管理贴图的加载?如何确定贴图显示的坐标? 如何将视点限制在场景中?
四、练习与作业
a) 根据本节中提到的地图文本信息,思考并调研游戏地图数据编辑的相关方法,作为本节的延伸,实现本游戏基本数据的编辑功能;
五、小结
a)显示不同颜色的文字;
b)实现游戏辅助信息显示;



第三十五&三十六讲:加载并显示MD2动画模型
一、上节回顾
a)天空盒简介;
b)实现游戏背景显示;
二、学习目标
a)MD2动画模型简介;
b)MD2动画模型加载;
c)实现MD2模型显示;
d)实现MD2模型动画效果;
三、教学过程描述
a) 介绍了MD2模型的概念;
b)介绍了MD2模型文件结构
c)介绍了MD2模型加载步骤及常用操作;
d)介绍了如何将针对MD2模型的相关操作应用到游戏场景中以实现MD2的显示?
e)介绍了如何将游戏场景中的MD2模型以动画的效果进行显示,以及如何设置动画显示的帧数?
四、练习与作业
a) 将本节中的相关算法封装成一个类以满足关于MD2动画模型的相关操作;
b) 使用本节的算法加载MD2动画模型并将模型显示在游戏场景中;
c)        整理MD2模型以动画效果进行显示的相关操作,思考如何提高3D模型的显示效率;
d)        了解关于3DS模型的相关知识,实现3DS模型的加载以及显示;
五、小结
a)MD2动画模型简介;
b)MD2动画模型加载;
c)实现MD2模型显示;
d)实现MD2模型动画效果;



第三十七&三十八讲:加载并显示MDL动画模型
一、上节回顾
a)MD2动画模型简介;
b)MD2动画模型加载;
c)实现MD2模型显示;
d)实现MD2模型动画效果;
二、学习目标
a)MDL动画模型简介;
b)MDL动画模型加载;
c)封装MDL模型操作;
d)实现MDL模型显示;
三、教学过程描述
a) 介绍了MDL模型的概念以及相对于MD2模型的优势;
b)介绍了MDL模型文件结构
c)介绍了如何将MDL的相关操作封装以满足对战游戏场景中关于MDL模型加载的操作?
e)        介绍了实现MDL模型的实现思路;
四、练习与作业
a) 下载关于MDL模型的制作工具,并通过本节的MDL相关算法加载MDL模型以加速对MDL;
b)        调研并熟悉关于SMD文件的相关知识;
c)调整本节中MDL模型的位置以及上一节中MD2模型的位置,思考如何实现MDL的射击效果以及MD2中枪倒下的效果?
五、小结
a)MDL动画模型简介;
b)MDL动画模型加载;
c)封装MDL模型操作;
d)实现MDL模型显示;



第三十九&四十讲:实现模型在3D场景中漫游
一、上节回顾
a)MDL动画模型简介;
b)MDL动画模型加载;
c)封装MDL模型操作;
d)实现MDL模型显示;
二、学习目标
a)实现3D向量基本操作;
b)设计3D场景漫游功能;
c)完善3D场景漫游功能;
d)实现3D场景漫游操作;
三、教学过程描述
a) 介绍了在关于向量的应用中,向量一般包括哪些基本的计算或操作?
b)介绍了关于3D场景漫游功能的设计思路;
c)介绍了在上节的摄像机的基础上,如何通过鼠标和键盘的操作来实现场景的漫游功能?
c)        介绍了如何在游戏场景中初始化摄像机的相关参数以及实现视点按鼠标的位置进行移动的操作?
四、练习与作业
a) 如何使用本节中实现的3D向量进行摄像机移动时的坐标变换相关功能?
b) 思考如何在3D向量中实现计算两向量的水平方向的夹角以及垂直方向上的夹角?
c) 思考如何在游戏场景中生成随机的视点位置,同时该视点是在非障碍物范围内(即一个合法的显示范围矩形内,该功能主要满足多玩家初始位置的随机性)?
五、小结
a)实现3D向量基本操作;
b)设计3D场景漫游功能;
c)完善3D场景漫游功能;
d)实现3D场景漫游操作;






第四十一讲:实现玩家发射子弹的动作
一、上节回顾
a)实现3D向量基本操作;
b)设计3D场景漫游功能;
c)完善3D场景漫游功能;
d)实现3D场景漫游操作;
二、学习目标
a)设计玩家数据管理逻辑;
b)实现玩家发射子弹的动作;
三、教学过程描述
a) 介绍了根据游戏及玩家角色相关的介绍,思考游戏进行中的玩家实时数据包括哪些内容?
b)        介绍了关于实现玩家发射子弹的动作的设计思路;
四、练习与作业
a) 思考如何在本节的基础上丰富子弹发射的动作(该部分内容可先参考关于模型数据包含哪些动作)?b) 思考如何进行子弹与模型之间的碰撞检测?
五、小结
a)设计玩家数据管理逻辑;
b)实现玩家发射子弹的动作;

第四十二讲:实现子弹与模型的碰撞检测算法
一、上节回顾
a)设计玩家数据管理逻辑;
b)实现玩家发射子弹的动作;
二、学习目标
a)实现3D向量夹角计算;
b)实现碰撞检测算法;
三、教学过程描述
a) 介绍了如何计算三维空间中的两个向量之间的夹角?
b)介绍了如何精确的实现子弹与敌人的人物模型之间的碰撞检测(敌人的人物模型即加载的MD2模型)?
四、练习与作业
a) 修改本节中的碰撞检测算法,完善人物模型在障碍物背后时的碰撞检测(本节中没有考虑子弹与障碍物的碰撞检测算法);
b)        实现人物模型之间的碰撞检测;
五、小结
a)实现3D向量夹角计算;
b)实现碰撞检测算法;


第四十三讲:实现子弹与模型的碰撞效果
一、上节回顾
a)实现3D向量夹角计算;
b)实现碰撞检测算法;
二、学习目标
a)实现子弹爆炸的效果;
b)实现模型倒下的效果;
三、教学过程描述
a) 介绍了如何使用类似于绘制准心的方法实现绘制子弹爆炸的效果?
b)        介绍了如何使用游戏场景中的MD2模型模拟被击中然后倒下的效果?
四、练习与作业
a)        整理本节中的模型操作,思考如何更方便快捷的管理模型的不同动作的显示?
b)        思考游戏中的音效应该如何实现?
五、小结
a)实现子弹爆炸的效果;
b)实现模型倒下的效果;



第四十四讲:实现游戏场景中的音效
一、上节回顾
a)实现3D向量夹角计算;
b)实现碰撞检测算法;
二、学习目标
a)实现射击声音效果;
b)实现声音管理逻辑;
三、教学过程描述
a) 介绍了如何在游戏中控制发射子弹时的发出的声音效果,以及实现声音的播放?
b) 介绍了使用OpenAL实现声音管理的逻辑处理;
五、        练习与作业
a) 整理本节中的模型操作,思考如何更方便快捷的管理模型的不同动作的显示?
b) 思考游戏中的音效应该如何实现?
五、小结
a)实现射击声音效果;
b)实现声音管理逻辑;


第四十五&四十六讲:实现对战游戏的逻辑处理
一、上节回顾
a)实现射击声音效果;
b)实现声音管理逻辑;
二、学习目标
a) 实现随机生成玩家信息
b) 定义实时数据网络包结构
c) 服务器端实时数据处理
d) 客户端实时数据处理
三、教学过程描述
a) 介绍了如何在对战游戏中生成随机并且合法的玩家位置等相关信息?
b) 介绍了玩家的实时数据信息以及如何组织并初始化相关的信息?
c) 介绍了服务器端接收到玩家的实时数据后应如何处理以满足各玩家的实时更新?
d) 介绍了客户端实时数据处理的操作;
四、        练习与作业
a) 思考如何分别实现游戏服务器端以及游戏客户端对实时数据的处理?
b) 思考如何修改本节中的包结构以满足多种游戏实时状态的改变?
c) 思考对战游戏的系统测试方案,并修改相关的缺陷和不足;
d) 优化游戏界面
五、小结
a) 实现随机生成玩家信息
b) 定义实时数据网络包结构
c) 服务器端实时数据处理
d) 客户端实时数据处理


第四十七讲:系统测试
一、上节回顾
a) 实现随机生成玩家信息
b) 定义实时数据网络包结构
c) 服务器端实时数据处理
d) 客户端实时数据处理
二、学习目标
a) 系统测试简介
b) 游戏测试方案
三、教学过程描述
a) 介绍了系统测试的定义、系统测试的内容、以及系统测试的分类等相关知识;
b) 介绍了测试本游戏的模块划分;
四、        练习与作业
a) 思考如何根据本节中提出的测试方案及相关的方法对系统进行测试;
b) 修改本游戏项目中的缺陷与不足,并完善相应的功能;
五、小结
a) 系统测试简介
b) 游戏测试方案



第四十八讲:游戏开发相关技术介绍
一、上节回顾
a) 系统测试简介
b) 游戏测试方案
二、学习目标
a) 游戏基本分类
b) 游戏架构设计
三、教学过程描述
a) 介绍了关于游戏的大体分类;
b) 介绍了游戏架构设计的相关内容,包括游戏策划、游戏模型、以及音效设计等;
四、练习与作业
a)        了解关于MMP类型的游戏;
b)        了解并熟悉游戏脚本的应用(如Python等);
五、小结
a) 游戏基本分类
b) 游戏架构设计






第四十九讲:总结课程
一、上节回顾
a) 游戏基本分类
b) 游戏架构设计
二、学习目标
a) (总结)游戏分析与设计
b) (总结)实现网络底层操作
c) (总结)实现3D对战网络游戏
三、教学过程描述
a)  总结了游戏分析与设计相关的知识点;
b)  总结了实现网络底层操作相关的知识点;
c)  总结了实现3D对战网络游戏相关的知识点;
四、        练习与作业
a) 整理并封装游戏中关于3D场景模块的功能,实现3D场景模块的独立性(类似于网络底层dll);
五、小结
a) (总结)游戏分析与设计
b) (总结)实现网络底层操作
c) (总结)实现3D对战网络游戏

视频课程请点击:《基于C/S架构的3D对战网络游戏开发视频教程》