我的任务系统
任务/成就系统
游戏中任务/成就系统是必不可少的,如何实现一个成就系统?
任务系统基本需求
- 检测玩家完成该任务
- 奖励
- 领取奖励有触发下一阶段任务
名词解析:
任务链:
同一类型的任务为一个链
如:
玩家连续登陆任务,连续登陆1天,连续登陆2天,连续登陆3天,…为一种类型的任务链
获得多少金币,
通过多少次副本,
加多少好友
…
任务进度监听 采用的模式
基于事件系统的任务监听模式:
pub/sub, nodejs的event模式(`event.on("update",function(){对相应任务进行更新})`)
主动调用(在需要更新任务的地方,主动调用更新方法)
任务类型(任务链):
次数类型任务--加多少好友
收集类型任务--收集多少个宠物,卡片...
游戏进程任务--(通过某个关卡,或者打败某个boss之类的)
##任务基础结构
静态信息:(可保存在配置文件中,使用id映射具体的任务)
id:任务id
title:标题
type:任务类型
descs:任务描述
reward:奖励
param:任务需求参数(重要)
pic:任务图标
nextId:下一个任务id(重要)
begin:是否起点任务(重要)
everyday:是否每日任务(重要)
...
动态信息:
progress:任务完成进度
status: 任务状态
##代码结构
###任务基础类
- 定义一个任务基础类– 包含任务动态信息,用于记录任务基础信息,以数组形式保存在玩家数据中
包含属性:
任务id
任务进度
任务状态
直接添加一个任务管理类,处理玩家任务初始化工作,任务监控工作–当任务完成时,对任务状态进行修改,触发玩家任务完成事件–推送任务完成信息给玩家.
任务管理类
1.定义一个任务管理者–用于检测更新玩家任务数据
事件机制:
事件主体:任务管理者
诱发外因:玩家操作
导致结果:任务改变--进度改变,状态改变
2.为任务管理者绑定事件
应有事件:
任务进度触发事件,根据传入不同的任务类型,对不同的任务进行操作.
1 | def update_task(cls, types, player): |
任务奖励
根据传入任务,获取任务奖励,为玩家添加任务链下一个任务1
2
3
4
5
6
7
8
9
10
11
reward = sta_task.get("reward")
# 为玩家添加reward
# 添加任务链下一个任务
if sta_task.get("nextID"):
task= Task()
task.task_id= sta_task.get("nextID")
task.progress = 0
task.status = Task_Status.Uncomplete
self.player.add_task(task)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 JIE's Blos!