首页 > 其他分享 >大型网络游戏任务系统的架构与设计

大型网络游戏任务系统的架构与设计

时间:2023-12-04 10:25:33浏览次数:38  
标签:架构 领取 解锁 玩家 奖励 任务 网络游戏 客户端

在网路游戏中做任务已经成为游戏很重要的一个核心功能和玩法,如何做好一个灵活可扩展的任务系统的架构与设计,今天来给大家分享一些我们的设计经验。接下来我把整个的任务系统分成以下6个模块:

(1) 任务配置表设计与管理;

(2) 游戏任务的解锁与生成;

(3) 任务完成判定;

(4) 任务完成后的奖励生成;

(5) 奖励的领取;

(6) 客户端的界面展示;

对于单机游戏而言,这6个模块都放在客户端直接处理,对于网路游戏而言,模块1~5实现在服务端,模块6实现在客户端

更多教学视频以及源码素材​www.bycwedu.com/promotion_channels/2146264125

任务配置表设计与管理

任务配置表主要是给策划来编辑游戏任务的具体内容,同时程序根据策划编辑的任务配置来生成游戏的任务,获取任务描述, 获取奖励描述, 任务完成判定,游戏奖励领取。对于程序而言,要充分的调研游戏任务系统的功能需求,并设计出管理代码+策划编辑游戏任务的工作方式。我们拿一个比较通用的任务配置表的需求来进行分析,将一个任务配置设计下列字段:

任务ID:唯一代表该任务类型的ID号;

任务解锁的条件: 解锁该任务的条件(这里有N种完全不同的规则)

任务的文字描述: 描述改任务的内容,主要用于客户端UI界面的显示;

任务完成达成的条件: 完成该任务要达成的条件(这里有N种不同的规则);

任务完成获得的奖励: 完成该任务可获的奖励(这里有N种不同的奖励规则);

任务奖励描述: 完成任务后可获得哪些奖励的文字描述,主要用户客户端UI展示;

任务解锁条件,任务达成条件,任务奖励,不同任务都有不同的规则,那么这个如何设计呢?这里就需要充分的调查任务系统的需求,然后总结出规则,做一个规则描述表给策划,方便策划填写数据,同时方便程序按照规则解析条件表达式,例如解锁任务A,需要达到10等级。解锁任务B,需要收集10张卡, 这里解锁任务就有2种不同的规则,就需要定规则给策划填写,给程序解析,就可以生成一个这样的解锁条件表:

解锁方式ID 解锁条件描述, 解锁参数解析模板,如

10000 策划填写ulevel=10, 达到等级10后解锁, type=10000, ulevel=%d

20000 策划填写cards=10, 收集10张卡后解锁, type=20000, ucards = %d

在策划的任务配置表里面就可以按照这个规则来填写,程序根据type类型来对应解析规则,解析解锁条件。如下:

任务ID 任务解锁条件 任务文字描述 任务完成条件, 达成奖励

10001 type=10000,ulevel=10 挖10个宝石, …

10002 type=10000,ulevel=20 挖10个水晶, …

10003 type=10000,uelvel=30 挖10个金币, …

20001 type=20000,ucards=10 合成初级战衣 …

20002 type=20000,ucards=20 合成中级战衣 …

任务完成条件与达成奖励条件也可以按照解锁条件类似的方式来编写和制定规则。所以这里在设计的时候一定要充分的调研任务系统的需求,程序根据type类型来解析规则的参数获得对应的条件规则。

游戏任务的解锁与生成

任务配置表的设计完成后,策划就会给游戏编辑好任务配置表,在游戏运行中要给每个玩家来解锁对应的任务并生成任务,这个时候还需要有一个玩家任务表,这个表描述了所有玩家的所有任务,这个表的设计如下:

ID: 任务的唯一ID号

uid: 这个任务对应的玩家ID号

tid: 标识玩家正在进行的任务,根据tid可在任务配置表里面找到对应的任务和描述;

status: 当前任务的状态:

未解锁【0】

已解锁,待执行【1】

进行中【2】

已结束【3】

奖励未领取【4】

奖励已领取【5】

例如:

ID uid tid status

1 玩家A 10001 1

2 玩家B 10001 1

3 玩家C 20001 2

玩家任务表定义好后,任务系统监听与任务解锁触发相关的游戏事件,比如玩家升级了,升级的同时通过事件订阅模块抛出一个事件出来,任务系统监听到这个事件后根据事件类型,玩家的游戏数据,以及策划编辑的任务配置表看是否有新任务被触发解锁(根据解锁规则表里面配置的判定),如果有,就往任务表里面插入一条记录,这样该玩家解锁了某个任务。当玩家打开任务列表的时候,就从这个表里面检索出来属于这个玩家的所有正在进行中的任务。

任务进行中与任务完成判定

玩家解锁了任务以后,在任务表里面就有这个玩家所对应的任务记录了,状态也改成了正在进行中,当玩家触发一个游戏事件后抛出一个事件,任务系统监听对任务判定有影响的事件。当有这样的事件抛出后,就去看下是哪个玩家触发的,然后根据任务配置表中任务的完成判断条件规则进行判断,如果条件成立,修改任务的状态。

任务完成后的奖励生成

达到任务的判定条件后, 如果这个任务的类型是有奖励的,这个时候根据任务类型的描述配置表的奖励规则来生成对应的奖励。任务配置表里面有奖励的类型,以及奖励的数据,程序根据奖励规则表中奖励的类型来解析对应的奖励数据生成奖励。如果是直接给奖励,根据任务的奖励内容给玩家的数据加上对应的奖励即可,并通知前端来播放奖励动画。并标记任务已完成。如果奖励需要玩家自己去领取,可以将任务的状态改成”奖励未领取”,这样玩家拉去任务列表的时候,就可以根据这个”奖励未领取”状态来显示还有奖励可以领取,客户端显示领取按钮。

奖励的领取

奖励分为直接奖励与玩家主动领取的奖励,这个根据游戏的需求来就可以了,对于任务系统而言,如果是直接奖励,那么直接给玩家加上对应的数据属性就可以了,比如奖励金币,奖励宝石等,奖励的时候可以通知客户端,这样客户端可以播放一个奖励动画出来让玩家知道自己获得了奖励,如果奖励需要玩家主动领取,当玩家拉取任务列表的时候,可以根据任务的状态”奖励未领取”,把没有领取奖励的任务拉去下来,并展示一个”领取”按钮。当玩家点击领取的时候,服务器根据任务ID来获取任务数据,检查任务的状态是否为”奖励未领取”,如果是,再获取任务的ID号,根据任务的ID号获取具体的奖励数值,给对应的数值加上对应的奖励,并修改任务的状态未奖励已领取,并通知客户端展示动画。

客户端的界面展示

任务系统的后台逻辑设计好了以后,剩下的就是任务系统的界面展示。客户端登录以后向服务器拉取这个玩家的所有任务,一般状态包含”已解锁待执行”,”正在进行中”与”奖励未领取”的任务。拉取下来,客户端显示的时候还需要显示任务的描述和奖励描述等,所以需要把策划的任务配置表从服务端拉取下来,或者通过资源更新的方式来更新下来,这样我们就能根据任务的tid来从描述表里面获取任务描述与奖励描述,这样客户端就完整的展现出任务来了。当有”领取奖励”,”领取任务”按钮的时候,通过向服务端发送对应的请求来做对应的处理,服务端

以上就从6个维度详细的描述了一个大型网络游戏的任务系统应该如何设计,关注我可以学习到更多的大型网路游戏的架构与设计相关知识分享。

标签:架构,领取,解锁,玩家,奖励,任务,网络游戏,客户端
From: https://www.cnblogs.com/liuwenyi/p/17874323.html

相关文章

  • 计划任务
    计划任务使用方法计划任务的作用:是做一些周期性的任务,在生产中的主要用来定期备份数据CROND:这个守护进程是为了周期性执行任务或处理等待事件而存在任务调度分两种:系统任务调度,用户任务调度计划任务的安排方式分两种:一种是定时性的,也就是例行。就是每隔一定的周期就要重复......
  • Linux下设置定时任务常用的三种方法
    在Linux系统中,设置定时任务是一项常见且重要的操作,它有助于自动化执行各种任务,如系统维护、备份和日志审计。Linux提供了多种工具来安排这些自动化任务,其中最常用的三种方法是Cron、At和SystemdTimers。1.cronCron是Linux中最传统且广泛使用的定时任务工具。它允许用......
  • 基于Docker搭建 Mysql8.0 主从架构
    创建主从数据库文件夹mkdir-p/usr/local/mysql/master1/confmkdir-p/usr/local/mysql/master1/datamkdir-p/usr/local/mysql/slave1/confmkdir-p/usr/local/mysql/slave1/data初始化主数据库配置文件cd/usr/local/mysql/master1/confvimy.cnf-----------------......
  • 极语言3-13任务栏对象、链接对象、存储对象、自动化对象——方法表
    英文名字中文名称作用解释ITaskbarList任务栏对象公开控制任务栏的方法。它允许动态添加、删除和激活任务栏上的项。任务栏对象——方法表QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。AddRef计数递增对象上接口的引用计数。对于指向对象上接口的指针的每个新......
  • SpringBoot如何使用@Scheduled创建定时任务?
    前言随着软件业务日益复杂,有时候需要创建一些定时任务以满足特定业务需求。在Java编程语言中,使用Spring框架可以轻松地创建出定时任务。SpringBoot作为Spring框架中的一员,在创建定时任务方面也提供了便利性和灵活性。本文将介绍SpringBoot如何使用@Scheduled创建定时任务。摘要......
  • OpenDevOps 使用任务平台
    一、任务平台演示(不带参数)1)创建不带参数的命令  指定强制主机会强制在该机器执行 2)创建执行用户,在模板添加的执行的命令里面需要选择执行用户3)创建不带参数模板  id需要记录下来,需要授权给相关用户,用户才能对该模板进行操作 4)创建标签树。标签树也就是组的......
  • django-apschedule定时任务异常停止
    背景在django项目中使用django-apschedule来实现定时任务,使用的是BackgroundScheduler调度类,该调度的实现是通过后台线程的方式执行定时任务。其中任务都是持久化到数据库中的。在项目的运行过程中,因为数据库的异常,导致定时任务线程异常终止,即使数据库后续恢复正常,但也不再继续执行......
  • 跑腿小程序开发解析:技术架构、接口设计和前沿趋势
    随着生活节奏的加快和个人需求的增加,跑腿小程序成为了人们生活中不可或缺的一部分。从技术角度来看,一个高效、安全、以及用户友好的跑腿小程序是由多个关键要素构成的,包括技术架构、接口设计和前沿趋势。技术架构1.前端技术选型选择合适的前端框架如ReactNative、Flutter、Vue.j......
  • 基于社区电商的Redis缓存架构-写多读多场景下的购物车缓存架构
    社区电商的购物车缓存架构在购物车中的功能主要有这几个:商品加入购物车、查看购物车列表、删除购物车商品、选中购物车商品进行结算这里购物车的场景和之前用户信息以及菜谱分享信息还不同,如果在举办了大型购物活动时,购物车可能需要面临写多读少或者写多读多的场景,面临高并发的读和......
  • “QtRunWork”任务返回了 false,但未记录错误"
    编译一个复制过来的QT工程的时候出现了"errorMSB4181:“QtRunWork”任务返回了false,但未记录错误"。查看工程下的“.log”文件发现在“errorMSB4181:“QtRunWork”任务返回了false,但未记录错误。”的log上面还有一条log是RCC:Errorin'D:\xxxx':Cannotfindfile'xxx......