游戏任务系统实现思路

文章目录

  • 一、需求介绍
  • 二、数据库设计
  • 3、代码部分实现


一、需求介绍

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分钟、杀死一个野怪等等。这些时间会触发我们的任务。
在触发任务后,需要统计角色的信息,然后用这些信息去遍历任务表,看看哪些任务可以解锁,将其添加至个人任务表。
随后遍历个人任务,查看哪些符合完成条件,对符合条件的发放奖励。

大致流程:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/310704.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前馈神经网络复习

习题4-1 对于一个神经元(wx b),并使用梯度下降优化参数w时如果输入x 恒大于0,其收敛速度会比零均值化的输入更慢 在全连接网络模型中,将输入的x值进行零均值化是一种预处理方法,旨在将训练集中的每个输入值x减去其均值,以0为中心&#xff0…

用IDEA创建/同步到gitee(码云)远程仓库(保姆级详细)

前言: 笔者最近在学习java,最开始在用很笨的方法:先克隆远程仓库到本地,再把自己练习的代码从本地仓库上传到远程仓库,很是繁琐。后发现可以IDEA只需要做些操作可以直接把代码上传到远程仓库,也在网上搜了些…

Python 下载与安装

1、下载 打开Python官网:Welcome to Python.org 点击下图所示的【Downloads】按钮进入下载页面。 ​ 进入下载页面后下拉至下图位置,选择版本,点击下载按钮下载。 页面会跳转至下一页下载页面,下拉到下图位置,选择…

缓存cache和缓冲buffer的区别

近期被这两个词汇困扰了,感觉有本质的区别,搜了一些资料,整理如下 计算机内部的几个部分图如下 缓存(cache) https://baike.baidu.com/item/%E7%BC%93%E5%AD%98 提到缓存(cache),就…

51单片机项目(25)——基于51单片机电子秒表的protues仿真

1.功能设计 使用51单片机,完成0-59s的计时,并且实时显示在数码管上。使用一个按键控制计时器的启停。 仿真截图如下: 2.模块介绍 独立按键: 独立按键也称为轻触式开关,是一种简单的电气开关设备。它是一种手动操作Sw…

ERD Online更换Licence为最友好的MIT协议

ERD Online一直秉承着开放、灵活、用户友好的理念,为用户提供高品质的服务。我们非常激动地宣布,ERD Online的许可证已经进行了重大更新,将采用MIT(麻省理工学院)协议,这一变更旨在进一步提升用户体验&…

计算机网络【EPOLL 源码详解】

IO多路复用 在以前,传统的网络编程是多线程模型,一个线程单独处理一个请求。 然而,线程是很昂贵的资源: 线程的创建和销毁成本很高,linux的线程实际上是特殊的进程;因此通常会使用线程池来减少线程创建和…

鸿蒙应用开发 应用内字体大小调节

1 数据管理概述 在移动互联网蓬勃发展的今天,移动应用给我们生活带来了极大的便利,这些便利的本质在于数据的互联互通。因此在应用的开发中数据存储占据了非常重要的位置,HarmonyOS 应用开发也不例外。 本文将为您介绍 HarmonyOS 提供的数据…

STM32——通用计时器

通用计时器框图 1.时钟源 1)内部时钟(CK_INT) 2)外部时钟模式 1:外部输入引脚(TIx),x1,2(即只能来自于通道 1 或者通道 2) 3)外部时钟模式 2:外部触发输入(ETR) 4&#…

CSU计算机学院2021年C语言期末题目思路分享(后两道题)

文章目录 E: 实数相加——大数加法的拓展原题题目描述输入输出样例输入 Copy样例输出 Copy 题目思路实现步骤代码和注释 X: 谍影迷踪——链表的思想原题题目描述输入输出样例输入 Copy样例输出 Copy 题目思路 E: 实数相加——大数加法的拓展 原题 题目描述 C语言就要期末考试…

FileZilla的使用及主动模式与被动模式[FileZilla]

目录 一.FileZilla的简介 二.FileZilla的安装及准备工作 三.FileZilla使用 四.主动模式与被动模式 主动模式(Active Mode): 被动模式(Passive Mode): 如何在FileZilla中选择模式: 今天的到…

linux安装java8

1、下载java 根据自己系统的位数下载 查看系统位数命令:getconf LONG_BIT 下载地址 https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 2、解压、移动 将下载的文件上传到linux系统中并解压 tar -zxvf jdk-8u333-linux…