我所理解的网络游戏<?>:战斗逻辑设计

客户端发送消息,统一在服务器端触发战斗

服务器端驱动战斗过程

客户端端接收用户输入向服务器发送消息

客户端接收服务器消息显示客户端表现

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. 自动战斗,中途加入操作

我所理解的网络游戏<?>:战斗逻辑设计

时间: 06-09

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

我所理解的网络游戏&lt;一&gt;:网游的顶层设计

网游的基本结构 各大模块的基本功能如下 · 服务器端 登陆服:处理新建玩家.登陆逻辑. 场景服:处理场景服中的逻辑. 中心服:处理跨服的逻辑,实现不同场景服进程的数据调度,以及向数据库查询数据. 数据库前端:定时将这里缓存的数据存入数据库. 服务器管理服:通过配置xml管理多个服务器的启动关闭,作为守护程序定期与所有服务器相连,当不能接受到某个服务器的定期连接时认为该服务器宕机,做相应处理并重启服务器. 运营对接服务器:连接多个服务器,做GM管理,处理来自运营平台的登陆.充值.身份验证. 日志服

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

[实例演示 —— 实体之间的关系] [逻辑设计的工作] ① 将需求转化为数据库的逻辑模型 ② 通过 ER 图的形式对逻辑模型进行展示 ③ 同所选用的具体的 DBMS 系统无关 [名词解释] 候选码可以简单理解为数据库的主键或唯一索引 主码即主键 [ER图例说明] [ER图实例——小型电商网站] [设计范式概要] 常见的数据库设计范式包括:第一范式,第二范式,第三范式 及 BC 范式.第四范式和第五范式等. [数据库操作异常及数据冗余] 数据冗余:相同的数据在多个地方存在,或者说表中的某个列可以由

做一个有产品思维的研发:逻辑设计

每天10分钟,解决一个研发问题. 如果你想了解我在做什么,请看<做一个有产品思维的研发:课程大纲>传送门:https://www.cnblogs.com/hunttown/p/10490965.html 今天我们说一下逻辑设计问题: 对于逻辑设计的形式和它的出场顺序有很大的争议. 1.先出一下它的设计形式 在很多人的印象中,逻辑设计应该以“E-R”图或“UML”图出场,所以很多人在进行逻辑设计的时候,都会按教材上所写的一板一眼的做. 我想说的是:完全没有必要 为什么? 一是画得费劲,浪费太多时

工程开发的程序设计与逻辑设计

很多时候我们要做庞大工程, 就像一棵大树, 方方面面都有自己的细枝末节,而作为开发员的我们,无法时时刻刻去保持对程序的全面认知,所以我们要把程序设计与逻辑设计区分开来. 那么什么是程序设计和逻辑设计,举个例子来说,统计一群人,程序上可以做到对人群的归类字典统计,也可以做成每个人有自己的属性之类的,而作为逻辑上,需要知道人的名字,性别,身高之类.其实这个例子你可能看不太清晰,很多时候程序和逻辑是混合在一起的.比如我抛一个小球,逻辑上已经设计了重力,环境,以及墙壁,从逻辑上我这个小球会按照一切安排的

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

 ASP.NET中登录功能的简单逻辑设计                               概述                               逻辑设计                               1.接收参数                               2.判断参数合法性                               3.访问数据库                               4.保存Session     

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

非常多时候我们要做庞大project, 就像一棵大树, 方方面面都有自己的细枝末节,而作为开发员的我们,无法时时刻刻去保持对程序的全面认知,所以我们要把程序设计与逻辑设计区分开来. 那么什么是程序设计和逻辑设计,举个样例来说,统计一群人,程序上能够做到对人群的归类字典统计.也能够做成每一个人有自己的属性之类的,而作为逻辑上,须要知道人的名字.性别.身高之类.事实上这个样例你可能看不太清晰.非常多时候程序和逻辑是混合在一起的.比方我抛一个小球.逻辑上已经设计了重力,环境,以及墙壁,从逻辑上我这个小

数据库设计理论与实践&#183;&lt;二&gt;概念设计与逻辑设计

2一.概念设计 1.1 概念设计关键知识 1.2 辨析 实体与属性的区别: ①实体能进一步用多个属性来描述,属性却不能,属性是不可再细分/分割的原子项. ②实体内部或者多个实体之间存在联系,而属性无. 实体与联系的区别: ①联系不能单独存在,必须由它联系的双方或者多方共同决定,而实体不需要. ②联系的码由它关联的实体的主码决定,而实体的码和其它实体或联系无关. 一般很多人容易将三元联系和三个二元联系混淆. 1.3 附属图 图1.1 三元联系(三个实体的关系) 图1.2 一元联系 图1.3 各类属

数字电路逻辑设计摘要

数字电路逻辑设计摘要 BCD码 Binary Coded Decimal, 使用二进制码(4位)的形式来表示(一位)十进制 有权BCD码: 8421, 2421等 无权BCD码: 余3码等 一个逻辑表达式的功能表达方式 通过真值表显示 通过真值表我们已经知道了该表达式的逻辑功能, 现在我们根据真值表画出卡诺图得出最小项 $\to$ 我们的表达式 最小项的重要性 现在给出一个逻辑表达式式: AB + BC, 现在要我们通过设计一个电路实现这个表达式 该表达式中有ABC三个变量, 我们需要有三个输入

Unity3D游戏开发之网络游戏服务器架构设计培训(如何做一名好主程)

在我们初期学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发.后面就应该朝着主程的方面前进 今天给大家讲一下如何做一个好的主程 入手 假如,我现在接手一个新项目,我的身份还是主程序.在下属人员一一到位之前,在和制作人以及主策划充分沟通后,我需要先独自思考以下问题: 1.服务器跑在什么样的操作系统环境下?2.采用哪几种语言开发?主要是什么?3.服务器和客户端以什么样的接口通讯?4.采用哪些第三方的类库? 除了技术背