游戏任务系统实现思路

2023-12-31 13:46:39


一、需求介绍

1、首先任务的类型不同,可以分为:日常任务、成长任务、活动任务等等。
2、当达到任务目标时,自动发放任务奖励。
3、任务需要后台可配置,例如:任务名称、完成条件、奖励内容等等。

二、数据库设计

1、任务表

字段名称注释
task_id任务id
type任务类型(日常、成长、活动等)
task_describe任务描述
reward_describe奖励描述
unlock_rule解锁条件
finish_rule完成条件
reward_rule完成奖励
number每日可完成次数
start_time任务开始时间
end_time任务结束时间

2、解锁条件配置表

字段名称注释
unlock_id解锁条件id
describe解锁条件描述
unlock_rule解锁条件规则

在unlock表中,我们配置一些任务解锁的条件:

INSERT INTO `sys_task_unlock_config` (`unlock_id `, `describe`, `unlock_rule `) VALUES (11000, '邀请%d个好友', 'type=11000&num=%d');
INSERT INTO `sys_task_unlock_config` (`unlock_id `, `describe`, `unlock_rule `) VALUES (12101, '累计拿到%d次SSS成绩', 'type=12101&num=%d');

比如:累计拿到3次SSS成绩的解锁条件为累计拿到1次SSS成绩,那么在任务表中,unlock_rule 解锁条件配置为 type=12101&num=1

3、完成条件配置表

字段名称注释
finish_id完成条件id
describe完成条件描述
finish_rule完成条件规则

与解锁表相同,我们插入两条演示数据:

INSERT INTO `sys_task_finish_config` (`finish_id`, `describe`, `finish_rule `) VALUES (21000, '邀请%d个好友', 'type=21000&num=%d');
INSERT INTO `sys_task_finish_config` (`finish_id`, `describe`, `finish_rule `) VALUES (22101, '累计拿到%d次SSS成绩', 'type=22101&num=%d');

那么拿到3次SSS成绩的完成配置:type=22101&num=3

4、奖励条件配置表

字段名称注释
reward_id奖励条件id
describe奖励条件描述
reward_rule奖励条件规则

同上,插入两条演示数据:

INSERT INTO `sys_task_rewaed_config` (`reward_id`, `describe`, `reward_rule `) VALUES (31000, '奖励%d个宝石', 'type=31000&num=%d');

那么,奖励条件配置为:type=31000&num=3,即为完成任务奖励3个宝石

5、个人任务表

字段名称注释
task_record_id任务记录id
user_id用户id
task_id任务id
type任务类型
status任务完成情况
completed_times已完成次数
number每日可完成次数

3、代码部分实现

首先需要监听游戏中发生的各种事件,比如:在线10分钟、杀死一个野怪等等。这些时间会触发我们的任务。
在触发任务后,需要统计角色的信息,然后用这些信息去遍历任务表,看看哪些任务可以解锁,将其添加至个人任务表。
随后遍历个人任务,查看哪些符合完成条件,对符合条件的发放奖励。

大致流程:

在这里插入图片描述
另外,我们在创建角色时,需要将一些没有解锁条件的任务添加至数据库。
我们在添加有时间期限的任务时,需要添加定时任务,在活动到期时将任务从个人任务表删除。

文章来源:https://blog.csdn.net/weixin_49832841/article/details/135314378
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。