网站首页 > 技术文章 正文
一、魔兽世界后端搭建前置知识
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.游戏体验
- 下载游戏客户端
- 在本网页右上角,注册账号
- zip 解压客户端,运行批处理程序,进入游戏
4.游戏内容展示
猜你喜欢
- 2024-09-15 网络I/O模型(我们所熟知的网络io模型)
- 2024-09-15 C++资深开发工程师带你深入浅出了解Linux后台开发
- 2024-09-15 浅谈linux下C++ 协程与网络编程(linux c++线程同步)
- 2024-09-15 刚学会C++的小白用这个开源框架,做个 RPC 服务要多久?
- 2024-09-15 精选 22 个 C++ 项目,推荐新人练手首选
- 2024-09-15 Node.js 程序员的 C++ 进修指南「1」:SetTimeout
- 2024-09-15 Linux多线程服务端编程 第五章 高效的多线程日志
- 2024-09-15 Linux多线程服务端编程 第七章 muduo 编程示例 后半部分
- 2024-09-15 TCP/IP详解 卷2:实现 第二章 存储器缓存
- 2024-09-15 高性能IO模型分析-Reactor模式和Proactor模式(二)
- 1512℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 556℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 504℃MySQL service启动脚本浅析(r12笔记第59天)
- 482℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 480℃启用MySQL查询缓存(mysql8.0查询缓存)
- 460℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 440℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 438℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)