首页 > 其他分享 >游戏开发:阶段排期管理器

游戏开发:阶段排期管理器

时间:2024-03-23 20:34:43浏览次数:26  
标签:object 管理器 游戏 -- 排期 阶段 xxx

常有的业务需求场景是一个配置自然时间的多阶段玩法。这里讨论阶段管理逻辑的实现方案。

实现一个排期管理模块,应该解决的问题有:

state object:抽象出object原型描述单个阶段的属性,提供 [query, set] API;

local object = {
    _st, 		-- 阶段号
    _bt, 		-- 阶段开启时间戳
    _et, 		-- 阶段结束时间戳
    _bcmd, 	-- 阶段开始handler name
    _ecmd, 	-- 阶段结束handler name
}

state manager:抽象阶段管理object原型负责组织管理所有相关state object的逻辑;

local object = {
    id,				-- 管理器ID
    list,			-- state object list
    initing, 	-- 初始化ing状态
}

1)阶段管理器以原型给出,支持独立的上下文;

driver:排期管理驱动器,提供定时心跳触发阶段检查和数据检验;

local object = {
    id,			-- 排期ID
    db,			-- 存盘数据
    st2cmd,	-- 排期配置
    mgr,		-- 阶段管理器object
    ctx,		-- 玩法上下文
}

1)驱动器以原型给出,支持独立的上下文,与外部玩法解耦,每个驱动器object持有外部玩法ctx,通过ctx[cmd]的方式调用到特定玩法的业务逻辑;

2)驱动器支持数据进行读写存盘;

3)驱动器启动参数:阶段ID对应处理cmd信息;

--[[
@@param:
	bt : 阶段开启时间戳
	et : 阶段结束时间戳
	bcmd : 阶段开启处理handler name
	ecmd : 阶段结束处理handler name
--]]
st2cmd = {
  	"signup"= { bt = xxxx, et = xxx, bcmd = xxx, ecmd = xxx },
  	"group"	=	{ bt = xxxx, et = xxx, bcmd = xxx, ecmd = xxx },
  -- ...
}

4)核心检查逻辑:比对当前所处阶段和预期应在阶段,当阶段不相等时,触发阶段切换。逻辑确保有序地切换到定义的下一阶段,直到到达期望应在的阶段,每次心跳回调只执行单次切换;

5)心跳回调碰撞处理:心跳handler需要处理两次心跳触发之间相互碰撞的问题,避免逻辑被多次执行引发异常。方案是模拟加锁操作,在回调入口检查如果已被lock住则本次回调直接返回,否则标记lock并执行,完成后标记unlock退出;

6)异常中断处理:有限状态机

标签:object,管理器,游戏,--,排期,阶段,xxx
From: https://www.cnblogs.com/linxx-/p/18091632

相关文章

  • 用函数和数组实现扫雷游戏(从0开始)
    文章目录概要整体架构流程(这里用VS2023来制作)代码实现小结概要学完数组和函数后我们可以通过所学知识写一个扫雷游戏,并实现一些拓展功能。我们采用多文件联调的模式来制作,这里需要先建好三个文件game.hgame.cminesweeper.c整体架构流程(这里用VS2023来制作)在......
  • c++小游戏
    #include<bits/stdc++.h>#include<windows.h>usingnamespacestd;inta,b,c;voidOK(){ system("cls"); cout<<"你时不时有饼?\n(1:yes2:NO)\n"; cin>>a; if(a==1){ cout<<"您以通关!"; }else{ system(&q......
  • 游戏开发(skynet框架):开服操作接入中央后台
    一个需求:控制游戏单服开服接入中央后台,支持定时(指定时间)、定量(当前已开放最新服的已注册数量)的方式;定时定量开服主要是中央后台功能,游戏服只需要接入控制开服逻辑。那么中央后台怎么通知游戏服;通过http协议;(skynet框架提供了http组件的支持,可以方便快速地搭建起来)对于滚服架构,......
  • 游戏开发:移植golang共享库 for lua
    一些奇奇怪怪的尝试:)随笔记录下将golang模块导出为共享库供lua使用(一般用于功能模块适配和迁移),这里给出一个借助c语言实现中间层通信的方案(不要问我为什么不使用ffi)。假设使用go实现底层模块core,export相关API(如下例的G_Signature)供外部使用,这里是被C层使用。那么需要将go模块编......
  • 基于ssm+vue.js的游戏销售系统附带文章和源代码设计说明文档ppt
    文章目录前言详细视频演示具体实现截图技术栈后端框架SSM前端框架Vue持久层框架MyBaits系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 游戏开发:服务器部署监控告警
    线上服务器的监控告警,我们暂且从三个层级上分析;业务层:业务相关的日志告警机制。跟业务设计强相关,比如客户端的业务上行请求数据异常之类的告警,业务上定义日志级别(INFO/WARN/ERROR),输出到指定日志文件并通过业务层逻辑抛出,数据分析的埋点、业务行为相关的辅助日志都在这里实现;一套......
  • 边玩边学?这些游戏帮你更好的学习编程,妈妈终于不用担心家里不让玩游戏了
    编程,我相信在大多数人的眼中都是一件枯燥乏味的事情,而当你不再是初学者的时候,你就会意识到编程其实非常简单。如果在编程的基础上放入游戏,我相信绝大多数网友应该都会有那么一点兴趣来体验。下面小编就为大家带来了编程游戏让你边玩游戏边做代码。游戏介绍:每个人都在谈......
  • LeetCode 55.跳跃游戏
    题目:方法一:给定数组中,每一位都可以确定出他所能跳到的最远距离(nums[i]+i)当然,前提是当前该位能够由前面的位置跳到我们可以定义一个总的最远距离(maxdistance)来记录(最远距离:当前能够到达的最大下标值)如果当前位置能够被跳到且其所能跳到的最远距离大于maxdistance,那么更新......
  • 反外挂 DDos UDP 攻击只需客户端 开着游戏客户端
    #include<WINSOCK2.H>#include<iostream>#include<string>usingnamespacestd;#include<stdlib.h>#defineBUF_SIZE1377#pragmacomment(lib,"WS2_32.lib")intmain(){WSADATAwsd;SOCKETsHost;SOCKADDR_INse......
  • 通用人工智能的基石 —— 人工智能“新基建、关键基础设施”—— 3D游戏引擎
    相关:https://www.unrealengine.com/zh-CN/uses/simulationhttps://www.epicgames.com/site/zh-CN/careers/jobs?lang=zh-CN3D游戏引擎是人工智能的“新基建、关键基础设施”,这个概念或许很多人都没有听说过,甚至初听好感觉离谱、可笑,不过这却是事实。3D游戏引擎对于AI领域可以......