魔兽世界后端服务器搭建指南:游戏开发篇

发表时间: 2023-11-27 22:25

一、魔兽世界后端搭建前置知识

1. lua程序设计

  • lua基础
  • lua错误处理
  • lua编译与预编译
  • lua模块与包
  • 元表与元方法
  • 环境
  • lua/c接口编程

2. C++新特性

  • 智能指针 shared_ptr, unique_ptr
  • 函数对象以及闭包
  • 右值引用
  • 原子操作与锁: atomic、mutex、 condition_variable
  • 多线程环境队列设计: MPSCQueue、ProducerConsumerQueue

3.C++设计模式

  • 单例模式
  • 工厂模式
  • 模板模式
  • 访问者模式
  • 责任链模式

二、TrinityCore

1.CMake项目构建

1.1 CMake的使用

  • 什么是CMake , CMake 的工作流程
  • CMakeLists.txt的编写规则
  • 静态库生成以及链接
  • 动态库生成以及链接
  • 嵌套CMake


1.2 Windows和Linux下编

  • 译调试环境搭建
  • cmake和graphviz生成目标依赖图
  • linux vscode编程环境搭建
  • cmake和clangd实现精准跳转
  • C/C++插件实现调试
  • vs2019 windows下编译调试搭建

2.数据库模块

2.1 连接池设计概要

  • 什么是连接池
  • 为什么需要复用连接
  • 为什么固定连接数
  • 主要应用场景


2.2 同步连接池实现

  • 同步连接池的线程模型
  • 同步连接池接口封装
  • 同步连接池接口使用
  • 同步连接池应用场景


2.3 异步连接池实现

  • 异步连接池的线程模型
  • 异步连接池接[口封装
  • 异步连接池接口使用
  • 异步连接池应用场景


2.4 事务处理

  • 什么是事务
  • 什么情况下讨论事务
  • 事务操作
  • TrinityCore 中事务处理封装
  • TrinityCore 中事务处理案例


2.5 数据库模块实践

  • 剥离可复用数据库模块
  • 应用同步连接池案例
  • 异步连接池-单SQL语句的使用
  • 异步连接池-多SQL语句chain式应用
  • 异步连接池多SQL语句holder式应用
  • 异步连接池多SQL语句transaction式应用

3.日志模块

3.1 日志模块概要

  • 日志模块的作用
  • 日志模式核心抽象: logger和appender
  • logger规则:继承关系、日志级别、以圾appender列表
  • appender如何定义日志打印目的地


3.2 日志模块实现

  • 日志模块单例构建
  • 采用宏定义定制日志使用接口
  • 如何扩展appender
  • appender中设计模式模板模式
  • 同步日志方式实现
  • 异步日志方式实现
  • 异步日志线程模型


3.3 日志模块实践

  • 剥离可复用日志模块
  • 为什么推荐使用异步日志
  • 异步日志日志安全分析及测试

4.网络模块

4.1 阻塞io网络模型编程

  • 什么是阻塞io网络模型
  • 阻塞io解决连接建立的问题
  • 阻塞io解决连接断开的问题
  • 阻塞io解决数据接收的问题
  • 阻塞io解决数据发送的问题
  • 阻塞io解决网络问题的弊端


4.2 reactor网络模型编程

  • 什么是reactor ?
  • reactor构成部分
  • reactor解决连接建立的问题
  • reactor解决连接断开的问题
  • reactor解决数据接收的问题
  • reactor解决数据发送的问题
  • reactor解决网络问题的特征: io同步, 事件异步


4.3 windows iocp网络编程

  • 什么是完成端口
  • 重叠io的作用
  • iocp解决连接建立的问题
  • iocp解决连接断开的问题
  • iocp解决数据接收的问题
  • iocp解决数据发送的问题
  • iocp编程步骤
  • iocp与reactor在编程处理io时的差异


4.4 boost.asio网络编程

  • boostasio跨平台网络库
  • cmake如何在项目中弓入boost.asio
  • boost.asio中核心命名空间
  • boost.asio中核心对象: io_ context, socket、 endpoint
  • boost.asio中异步io接口
  • asio解决连接建立的问题
  • asio解决连接断开的问题
  • asio解决数据接收的问题
  • asio解决数据发送的问题


4.5 网络缓冲区设计

  • 为什么需要在用户层实现网络缓冲区
  • 读缓冲区的工作原理
  • 写缓冲区的工作原理
  • 手撕缓冲区实现


4.6 网络模块实践

  • 剥离可复用网络模块
  • AsyncAcceptor职责与实现
  • NetworkThread职责与实现
  • Socket职责与实现
  • 手撕多线程模式下网络模块的应用

5.地图模块

5.1 地图模块概要

  • 哪些功能模块需要用到地图模块
  • 地图模块的功能构成
  • 地图对象抽象: map、area、 grid、 cell
  • 网络数据驱动地图模块
  • 定时更新驱动地图模块


5.2 地图模块AOI核心算法

  • AOI有哪些实现方式
  • AOI静态数据工具生成
  • AOI静态数据数据划分
  • AOI静态数据组织方式
  • AOI动态数据组织方式
  • AOI动态数据驱动方式
  • AOI地图数据加载
  • grid网格状态机以及状态转换
  • AOI地图数据卸载
  • 采用访问者模式实现地图数据与算法的隔离


5.3 AABB算法实现碰撞检测

  • 轴对称边界盒算法AABB算法
  • TrinityCore中AABB算法实现
  • AABB算法优化
  • 碰撞检测接C口封装以及应用


5.4 A*寻路算法

  • A*寻路算法概述
  • recast-detour开源库
  • recast根据模型生成导航数据
  • detour利用导航网格做寻路
  • 寻路接口封装以及应用

6.战斗模块

6.1 技能设计

  • 技能设计概述
  • 技能数据库表设计(配置)
  • 技能触发:距离、冷却时间、消耗等
  • 技能效果:伤害计算、增益效果等
  • 技能释放流程


6.2 AI设计

  • AI设计概述
  • 基于行为树的AI设计
  • AI类继承层次关系;
  • AI攻击目标选择
  • AI攻击方式选择
  • AI移动方式选择
  • AI基于事件的驱动机制


6.3 怪物管理

  • 怪物数据库设计(配置)-属性和行为
  • 怪物刷新规则设计-时间间隔以及范围
  • 怪物属性、技能、掉落、AI


6.4 战场副本设计

  • 创建和咖载battlegrounds场景地图数据
  • battlegrounds规则实现
  • battlegrounds队伍匹配、队伍平衡以及角色分配
  • battlegrounds奖励系统和排名机制

7.mmorpg核心功能与玩法

7.1 任务系统设计

  • 任务系统数据库设计(配置)
  • 玩家数据库状态存储
  • 任务类型设计
  • 任务触发机制


7.2 背包设计

  • 背包数据结构设计以及数据库表设计
  • 背包容量控制
  • 背包格子管理
  • 背包交互功能实现


7.3 工会系统设计

  • 数据库表结构设计
  • 工会创建逻辑实现
  • 工会成员管理
  • 工会资源管理及分配机制
  • 工会活动与事件
  • 工会排名实现
  • 工会权限控制

三、项目实际展示效果体验(【24届校招】c++选手上岸资料包)

1.客户端下载

魔兽3.3.5a(Windows PC版本)

2.项目详细学习路线

3.游戏体验

  1. 下载游戏客户端
  2. 在本网页右上角,注册账号
  3. zip 解压客户端,运行批处理程序,进入游戏

4.游戏内容展示