游戏中任务系统设计_游戏任务种类-程序员宅基地

技术标签: 游戏开发  

1、任务分类

         游戏中任务可以分为主线任务、支线任务、日常任务、周任务、节日活动任务,其中周任务和节日任务可以根据设定的日期进行开启关闭,属于重复性任务。

2、游戏条件

        各类任务开启条件:1、玩家等级 2、玩家攻击力3、前置任务等等

        完成条件:玩家进行任务进度是否达成

        任务关闭:1、玩家领取奖励后关闭任务。2、时间过期

3、任务逻辑类型:

      任务逻辑有多种,这个往往跟游戏内容相关,比如 杀怪、采集、聊天、升级、完成某家物品等等。每种任务逻辑配置成一张表,例如杀怪类,有任务id,场景(或副本)id,npc id等,这样执行任务判断时直接根据配置表进行判断,任务进行是否一致,然后进行任务进度计算。

      也有一些任务逻辑可以配置成脚本,程序根据脚本内容进行判断。

       简单任务逻辑处理方式(伪代码):

void kill_boss()
{
    //玩家杀死怪物
    TaskTrigger->updateTask(player,taskid, npcid);
}


class TaskLogic
{
public:
    virtual bool logic(tableElement *pelem, int n, ...) = 0; //tableElement代表策划配置表
};

class KillBossTaskLogic : public TaskLogic
{
public:
    bool logic(tableElement *pelem, int n, ...)
    {
        va_list arg;
        va_start(arg, n);
        int bossid = va_arg(arg, int);
        if (bossid == pelem->bossid)
        {
            return true;
        }
        va_end(arg);
        return false;
    }
};

class Task
{

public:
    //根据任务分类进行逻辑初始化
    void SetLogic(TaskLogic *pLogic);
    void updateTask(std::tuple& t)
    {
        if(pLogic->logic(t))
        {
            process+=1;
        }
    }

    int process; //进度计数
    int taskid;
    int tasktype;
    enum taskstate;
    TaskLogic* pLogic;
};


class TaskTrigger{

public:

    void updateTask(player,taskid, npcid)
    {
        for(auto& it : mmTasks)
        {
            it.second->updateTask(npcid);
        }
    }
    
    void AddTask();
    void DelTask();

    std::map<taskid, task> mmTasks;
};

4、任务过程

      接收任务(将任务内容放到玩家身上)------->任务进行中(进行进度计数,也有一些直接判断完成任务例如聊天)-------->任务完成(根据配置逻辑判断任务是否完成)-------->任务奖励发放(玩家领取或者自动发放)------->领取新的任务。

5、任务状态

      不可接任务、可接任务、任务进行中、任务完成(未领取奖励)、任务完成(领取奖励)

                 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chinabhlt/article/details/102846321

智能推荐

CSS3 column 分栏-程序员宅基地

文章浏览阅读68次。column的布局形式还没有使用过,后续的bug和解决方案有待检验。columncolumn-count:number; 设置内容分为多少栏显示column-width:长度单位;设置每一栏的宽度而不设定元素的宽度column-gap:长度单位;设置多栏之间的间隔距离column-rule:宽度,颜色;在栏与栏之间增加一条间隔线。类似border.column-spa..._h5 column-span

在ArcGIS+Server里把屏幕像素点数所代表的距离转换为实际地理距离-程序员宅基地

文章浏览阅读495次。/*** @description 把屏幕像素点数所代表的距离转换为实际地理距离 * @author brian* @param mapScale地图比例尺 * @param pixelUnits屏幕像素个数 * @return double 实际地理距离 */public double ConvertPixelsToMapUnits(WebMa..._像素距离和实际距离转换

STM32开发系列之寄存器(二)GPIO口位带操作实现_gpiob->odr |=1<<6-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏8次。位带操作顾名思义就是可以单独对CPU寄存器某个位进行读写操作,采取这种方式,将会大大减少我们写代码的难度,不用像上篇博客那样进行与或运算和移位,降低了出错的可能性。如果之前有使用过8051单片机的话,应该体会过这种操作的好处。例如,在51单片机中,P1.0上挂了一个灯,我们想要他点亮,可以直接P1.0=0或者P1.0=1这样写,直接对P1端的某个IO口进行操作。但在STM32中并不允许这样操作,..._gpiob->odr |=1<<6

【C++】字符串(string)的使用_c++ string 子串-程序员宅基地

文章浏览阅读2.4k次,点赞5次,收藏22次。C++ 中,`std::string` 是用于处理字符串的标准库类。它提供了一系列成员函数和操作符,使得字符串的操作更加方便和灵活。_c++ string 子串

MySQL 慢查询-程序员宅基地

文章浏览阅读1.2w次,点赞7次,收藏41次。一、什么是慢查询慢查询,顾名思义,执行很慢的查询。有多慢?超过long_query_time参数设定的时间阈值(默认10s),就被认为是慢的,是需要优化的。慢查询被记录在慢查询日志里。慢查询日志默认是不开启的。如果需要优化SQL语句,就可以开启这个功能,它可以让你很容易地知道哪些语句是需要优化的。1️⃣show variables like 'slow_query_log';查询是否开启慢查询日志【开启慢查询sql:set global slow_query_log = 1/on;】【关闭慢查询sq_慢查询

redis-shiro session 共享 session, SimpleSession序列化大坑_shiro simplesession-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏7次。shiro 通过redis实现session共享共享Session目的在分布式服务的工程中,一个服务器断了,负载均衡服务器会把请求分配给其他的服务器,如果设置了session共享,就不需要用户再次登录了.shiro实现session共享的原理默认的情况下,shiro的session是在服务器上的,当该服务器宕掉了,session就不存在了,用户必须重新登录,如果我们把shiro的session存到redis服务器上,就可以实现session共享了.如何实现?如果我们想通过redis实现shiro_shiro simplesession

随便推点

一阶电路中的时间常数_学电路原理,你得这么做-程序员宅基地

文章浏览阅读720次。如果你是学电气专业的话,电路原理是最基础最重要的一门课。学不好它,后面的模电、电机、电力系统分析、高压简直没办法学。对于这门课,你要想真正的领悟和掌握,奥秘就在于不能停止思考。而且我觉得这是最重要的一点。我以江辑光的《电路原理》为例(这本书编的相当不错)解释为何不能停止思考。电路几乎是第一本开始培养你工程师思维的书,它不同于数学物理,很多可以理论推导。而电路更多的是你的思考和不断累积的经验。在江的..._1/jwc 正弦

C语言学生成绩管理系统设计 《C语言程序设计》实训报告_c语言学生成绩管理系统设计报告-程序员宅基地

文章浏览阅读10w+次,点赞399次,收藏3.2k次。C语言学生成绩管理系统设计 《C语言程序设计》实训报告_c语言学生成绩管理系统设计报告

2016年8月6日 星期六 --出埃及记 Exodus 16:6-程序员宅基地

文章浏览阅读96次。2016年8月6日 星期六 --出埃及记 Exodus 16:6So Moses and Aaron said to all the Israelites, "In the evening you will know that it was the LORD who brought you out of Egypt,摩西,亚伦对以色列众人说,到了晚上,你们要知道是耶和华将你们从埃及地领出..._出埃及记16

软件架构, 软件框架,设计模式的区别_比较架构模式,设计模式,惯用法的区别和联系-程序员宅基地

文章浏览阅读1.8k次,点赞4次,收藏7次。已剪辑自: https://www.cnblogs.com/lsm-boke/p/12657791.html一、架构**架构即软件架构,**是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。软件体系结构是构建计算机软件实践的基础,简单来说,软件架构是一个系统的草图,是一种设计方案,将客户的不同需求抽象成为抽象组件,各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。_比较架构模式,设计模式,惯用法的区别和联系

文本挖掘入门-程序员宅基地

文章浏览阅读1.1k次,点赞4次,收藏23次。总之,词嵌入是一种有助于RNN模型理解文本语义的技术,而RNN则用于在文本生成任务中考虑文本的顺序和上下文信息,从而生成连贯的文本。文本挖掘是从文本数据中提取有用信息的过程,通常包括文本预处理、特征提取和建模等步骤。:选择合适的机器学习或深度学习算法,根据任务类型进行建模,例如文本分类、情感分析、主题建模等。:使用标注好的数据集训练模型,并使用评估指标(如准确度、F1分数、均方误差等)来评估模型性能。函数将使用RNN模型生成文本,它会根据先前生成的文本以及上下文信息来预测下一个单词。_文本挖掘

oracle 表空间和数据文件管理 移动数据文件 重命名数据文件 数据文件重命名_如何使用oracle创建表空间,数据文件命名为-程序员宅基地

文章浏览阅读2.7k次。oracle 11g2 一个数据文件在同一个时刻仅属于同一个表空间,仅属于同一个数据库。TEMP文件是一类在临时表空间中被使用的特殊数据文件。 当数据库创建或重用i一个数据文件——操作系统文件被重用和初始化——被一个规则的二进制零所填充。这些初始化不会发生在临时文_如何使用oracle创建表空间,数据文件命名为

推荐文章

热门文章

相关标签