客户端发送消息,统一在服务器端触发战斗
服务器端驱动战斗过程
客户端端接收用户输入向服务器发送消息
客户端接收服务器消息显示客户端表现
 
1. 服务器--客户端交互(战斗流程)
整战斗流程分为4个状态:战斗准备,战斗开始,战斗进行,战斗结束。其中战斗进行状态时服务器客户端可以进行两种交互,一种是服务器端定时器触发战斗循环,另一种是客户端玩家发送战斗操作。具体如下:
a. 战斗准备
 
b. 战斗开始
· 初始化战斗相关信息,即从基础信息模块中获得角色、阵型、属性,从战斗中获得战场
· 启动战斗实例的定时器,一个战斗实例用一个定时器。
· 在初始化战斗,特别是定时器的数据步骤中,需要根据属性建立战斗对象的出招队列。战斗对象可以在战斗实例定时器下排成队列一个接一个地调用。看策划需求,相较而言ARPG的野怪可以实现为每个野怪在该心跳下的一个定时器而非队列。
 
c. 战斗循环
· buff发生改变的情况包括:
1. buff定时失效 ,根据buff到达失效时间发送消息
2. buff定时扣血,根据扣血间隔发送buff改变消息
· 客户端接收到buff改变的消息后要在相应操作:
buff扣血 ,客户端播放扣血与buff的动画特效
buff失效,客户端停止播放buff的动画特效
· 获得出招队列首位角色的仇恨对象,如果该角色没有仇恨对象,就直线向前移动,并结束该次心跳
仇恨角色的选取:
1. 玩家指定(我自己设计)
2. 系统指派,系统以一定半径搜索角色周围
· 通过与仇恨对象的距离判断是否攻击
与仇恨对象距离过远,则朝向仇恨对象移动,并结束该次心跳
与仇恨对象距离可以发动攻击,检查攻击间隔
攻击间隔已到则朝对象发动攻击
攻击间隔未到则结束该次心跳
· 如果发动攻击,计算扣血
如果仇恨对象被攻击死亡,清空进攻角色的仇恨对象
 
d. 战斗操作
我自己设计了玩家在场景中拖拽部队选择其攻击对象的功能。
战斗操作只是更改战斗对象的一些数据,这些数据不会即时影响战斗循环,故不需要与战斗循环的心跳做同步。
 
e. 战斗结束
 
2. 服务器端战斗系统结构
CWarMgr是服务器的一个单例组件,负责管理服务器所有的战斗,包括创建战斗、向战斗实例派发消息、维持战斗心跳、结束战斗。
 
IWar是战斗实例的接口,派生出CWarPve,CWarPvpOnline,CWarPvpOffline三种实现类去处理三种不同的战斗。
IWar的创建应用了抽象工厂模式,由IWarCreator接口派生的实现类创建。
IWar包含了战斗双方的数据,由于服务器战斗循环以及客户端发起战斗操作(在更改战斗双方的数据时需要考虑多线程数据的同步,固客户端更改数据需要加锁?)
 
3. 客户端战斗系统结构
相较服务器而言,客户端增加了一个CWarScene战斗场景类负责管理战斗场景,它将包含一些IWarEffect战斗特效类(战斗特效的更新与播放)。IWarEffect主要派生出四种具体特效实现类,包括操作特效(仅变化模型着色以提示玩家)、粒子特效(特效只包含粒子)、动画特效(特效包含粒子和动画)、跳字特效(用于扣血等属性数值的增减)。这些特效都在OnUpdate中查询对于的SBuffInfo结构体,以确定特效是否和如何播放。
 
4. 如何应对策划修改
多数情况下都是策划攻,程序受,一起来探讨一下逆天的策划会有什么逆天的设计,如何留好接口进行扩展去应对这些设计。
a. 世界boss,多个玩家挑战同一个超级boss 
b. 大乱斗,玩家中途参战 
c. 帮派战,前军中军后军3vs3 
d. 自动战斗,中途加入操作

我所理解的网络游戏<?>:战斗逻辑设计的更多相关文章

  1. 深入理解计算机系统(4.2)------逻辑设计和硬件控制语言HCL

    上一篇博客我们简单介绍了Y86指令集体系,而这篇博客我们将介绍指令集体系的逻辑设计和硬件控制语言HCL,为后面去实现Y86打下基础. 在硬件设计中,用电子电路来计算对位进行运算的函数,以及在各种存储器 ...

  2. 我所理解的RESTful Web API [设计篇]

    <我所理解的RESTful Web API [Web标准篇]>Web服务已经成为了异质系统之间的互联与集成的主要手段,在过去一段不短的时间里,Web服务几乎清一水地采用SOAP来构建.构建 ...

  3. MySQL 数据库设计 笔记与总结(2)逻辑设计

    [实例演示 —— 实体之间的关系] [逻辑设计的工作] ① 将需求转化为数据库的逻辑模型 ② 通过 ER 图的形式对逻辑模型进行展示 ③ 同所选用的具体的 DBMS 系统无关 [名词解释] 候选码可以 ...

  4. 小梅哥FPGA数字逻辑设计教程——基于线性序列机的TLC5620型DAC驱动设计

    基于线性序列机的TLC5620型DAC驱动设计 目录 TLC5620型DAC芯片概述:    2 TLC5620型DAC芯片引脚说明:    2 TLC5620型DAC芯片详细介绍:    3 TLC ...

  5. 图解 CSS: 理解样式表的逻辑(转载)

    原文:http://www.cnblogs.com/del/archive/2009/02/01/1382141.html 样式表可以是外部的.内联的或嵌入的; 链接外部样式文件一般是:<lin ...

  6. 数据库设计理论与实践·<二>概念设计与逻辑设计

    2一.概念设计 1.1 概念设计关键知识 1.2 辨析 实体与属性的区别: ①实体能进一步用多个属性来描述,属性却不能,属性是不可再细分/分割的原子项. ②实体内部或者多个实体之间存在联系,而属性无. ...

  7. project开发的程序设计与逻辑设计

    非常多时候我们要做庞大project, 就像一棵大树, 方方面面都有自己的细枝末节,而作为开发员的我们,无法时时刻刻去保持对程序的全面认知,所以我们要把程序设计与逻辑设计区分开来. 那么什么是程序设计 ...

  8. ASP.NET中登录功能的简单逻辑设计

     ASP.NET中登录功能的简单逻辑设计                               概述                               逻辑设计             ...

  9. Mysql业务设计(逻辑设计)

    逻辑设计 数据库设计三大范式 数据库设计第一大范式 数据库表中所有的字段都只具有单一属性 单一属性的列是由基本数据类型所构成 设计出来的表都是简单的二维表 数据库设计的第二大范式 要求表中只有一个业务 ...

  10. 理解RESTful架构——Restful API设计指南

    理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...

随机推荐

  1. [leetcode]215. Kth Largest Element in an Array 数组中第k大的元素

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  2. PAT 1010 一元多项式求导 (25)(STL-map+思路)

    1010 一元多项式求导 (25)(25 分)提问 设计函数求一元多项式的导数.(注:x^n^(n为整数)的一阶导数为n*x^n-1^.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均 ...

  3. POJ 3709 K-Anonymous Sequence - 斜率优化dp

    描述 给定一个数列 $a$, 分成若干段,每段至少有$k$个数, 将每段中的数减少至所有数都相同, 求最小的变化量 题解 易得到状态转移方程 $F_i = \min(F_j  + sum_i - su ...

  4. 有符号无符号bit转换

    int main(){ unsigned short i = 65434; short p = i; printf("%d", p); int sp; scanf_s(" ...

  5. sublime3中运行python 和设置

    点bulid system建立下面文件 {"cmd":["C:/ProgramData/Anaconda3/python.exe", "-u" ...

  6. 2018.09.20 atcoder Painting Graphs with AtCoDeer(tarjan+polya)

    传送门 一道思维题. 如果没有环那么对答案有k的贡献. 如果恰为一个环,可以用polya求贡献. 如果是一个有多个环重叠的双联通的话,直接转化为组合数问题(可以证明只要每种颜色被选取的次数相同一定可以 ...

  7. Part 2 - Fundamentals(4-10)

    https://simpleisbetterthancomplex.com/series/2017/09/11/a-complete-beginners-guide-to-django-part-2. ...

  8. 人体感应模块控制LCD1602背景灯是否开启

    /* Web client This sketch connects to a website (http://www.google.com) using an Arduino Wiznet Ethe ...

  9. Vim配置(转)

    1.按F5可以直接编译并执行C.C++.java代码以及执行shell脚本,按“F8”可进行C.C++代码的调试 2.自动插入文件头 ,新建C.C++源文件时自动插入表头:包括文件名.作者.联系方式. ...

  10. C和指针小结(C/C++程序设计)

    C和指针 相关基础知识:内存的分配(谭浩强版) 1.整型变量的地址与浮点型/字符型变量的地址区别?(整型变量/浮点型变量的区别是什么) 2.int *p,指向整型数据的指针变量. 3.通过指针变量访问 ...