CN105999702B - 一种基于数据重演机制的网页游戏存档还原方法 - Google Patents
一种基于数据重演机制的网页游戏存档还原方法 Download PDFInfo
- Publication number
- CN105999702B CN105999702B CN201610343237.9A CN201610343237A CN105999702B CN 105999702 B CN105999702 B CN 105999702B CN 201610343237 A CN201610343237 A CN 201610343237A CN 105999702 B CN105999702 B CN 105999702B
- Authority
- CN
- China
- Prior art keywords
- last
- event
- game
- gei
- player
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/45—Controlling the progress of the video game
- A63F13/49—Saving the game status; Pausing or ending the game
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/45—Controlling the progress of the video game
- A63F13/49—Saving the game status; Pausing or ending the game
- A63F13/493—Resuming a game, e.g. after pausing, malfunction or power failure
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/70—Game security or game management aspects
- A63F13/79—Game security or game management aspects involving player-related data, e.g. identities, accounts, preferences or play histories
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Business, Economics & Management (AREA)
- Computer Security & Cryptography (AREA)
- General Business, Economics & Management (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
一种基于数据重演机制的网页游戏存档还原方法,包括如下步骤:第一步:建立一个网页游戏存档还原结构框架,包括客户端和服务器端,客户端包括管理单元、鼠标事件收集单元、键盘事件收集单元、触摸事件收集单元、服务器通信单元;第二步:启动客户端,进入游戏主界面,判断该玩家是否为新玩家,若是则由服务器发送SSbegin至客户端;否则比较SSlast的时间戳是否小于事件日志文件中Elast的时间戳,若SSlast的时间戳小于Elast的时间戳,则执行数据重演,生成SSnew,更新SSlast为SSnew并发送SSlast至客户端;反之,则直接发送SSlast至客户端,玩家游戏过程中执行持续事件保护。本发明兼顾实时性和服务器低耗能。
Description
技术领域
本发明涉及到网页游戏存档技术领域,特别是一种基于数据重演机制的网页游戏存档还原方法。
背景技术
网页游戏又称Web游戏,简称页游,通常无需下载客户端,可直接通过浏览器进行游戏。随着HTML5标准的推出,在多方面加强了Web技术,网页游戏也取得了长足的发展。网页游戏的存档一般通过与服务器通信保存相关游戏数据来实现。由于网页游戏运行的宿主环境在浏览器中,存在用户误操作、浏览器崩溃、操作系统关机等意外情况使网页关闭,这些意外情况将导致游戏进度丢失。目前,游戏界实现游戏存档主要有以下方案:
方案一:将游戏存档数据保存在客户端本地,安全性较差,一般适用于单机游戏。
方案二:通过玩家手动存档,将序列化的游戏存档数据保存在服务器端,待下次还原游戏场景时,再读取,反序列化为内存中的游戏数据。安全性较高,但不能做到实时存档。
方案三:通过与服务器建立全双工通信,将序列化的游戏存档数据实时保存在服务器端,待下次还原游戏场景时,再读取,反序列化为内存中的游戏数据。安全性较高,但对服务器性能要求高。
学术界就游戏存档相关的领域也进行了相关研究,乐金电子(中国)研究开发中心有限公司金松姬等人于2005年提出一种用于移动通信终端的游戏存储方法,采用基于自动存储定时器的自动存储方式和用户手动存储方式来实现移动通信终端上游戏进度的还原。深圳市快播有限公司王欣等人于2006年提出一种单机存档游戏系统,采用基于文件数据压缩、解压、tcp私有协议以及云存储的服务器保存方式和本地保存方式来实现单机游戏存档的同步,以使玩家可以在不同的游戏平台上运行同一单机游戏时,能从上次的游戏进度开始。奇智软件(北京)有限公司照肖勇等人于2012年提出一种Flash游戏存档的方法和装置,采用预设钩子函数获取Flash游戏存档事件,将存档备份包发送至服务器端解决单机版Flash游戏无法多进度存档和无法异地获取存档记录的问题。
以上关于游戏存档的相关研究中主要存在以下不足:手动存档不能做到实时,无法精准还原游戏进度。通过与服务器建立全双工通信方案,虽然在一定程度上实现了实时存档,但传输的数据量大,对服务器性能要求比较高,在游戏高并发情况下对服务器性能有所影响,另外如果客户端掉线,服务器端保存的用户数据状态在用户长时间未登录情况下也可能会出现自动内存回收的处理,导致临时状态数据被清空,影响数据的实时性。因此,现有的游戏存档相关研究还无法同时满足存档实时性和服务器低耗能的要求。
发明内容
为了克服已有游戏存档方法的实时性较差、精准度较低、服务器能耗较高的不足,本发明提出一种兼顾实时性和服务器低耗能的基于数据重演机制的网页游戏存档还原方法,数据重演机制是一项数据演化技术,包括持续事件保护和快照技术两部分;采用该机制,玩家无需保存游戏,若出现断电等异常情况,再次登入也可实现游戏数据的精准还原,本发明主要适用于基于HTML5和JavaScript技术搭建的网页游戏。
本发明解决其技术问题所采用的技术方案是:
一种基于数据重演机制的网页游戏存档还原方法,所述方法包括如下步骤:
第一步:建立一个网页游戏存档还原结构框架,包括客户端C和服务器端S,客户端C包括管理单元M、鼠标事件收集单元ME、键盘事件收集单元KE、触摸事件收集单元TE、服务器通信单元SC,即C={M,ME,TE,KE,SC};
M用于负责接收玩家输入的信息和请求,在用户登录游戏后,若玩家请求对某一游戏进度存档的下载,则将该请求发送给服务器并接收服务器发送的游戏进度至玩家;
ME用于负责收集玩家的鼠标事件;
TE用于负责收集玩家的触摸事件;
KE用于负责收集玩家的键盘事件;
SC用于负责与服务器通信;
第二步:根据所述网页游戏存档还原结构框架,过程如下:
步骤2.1:启动客户端,进入游戏主界面;
步骤2.2:服务器判断该玩家是否为新玩家,若为新玩家,则由服务器发送SSbegin至客户端,进行步骤2.3操作;若为老玩家,则比较SSlast的时间戳是否小于事件日志文件中Elast的时间戳,若SSlast的时间戳小于Elast的时间戳,则执行数据重演,生成SSnew,将游戏快照SSlast更新为新生成的游戏快照SSnew,,更新SSlast为SSnew并发送SSlast至客户端。反之,则直接发送SSlast至客户端;
步骤2.3:玩家游戏过程中执行持续事件保护,即SC实时向S发送由ME、KE、TE记录玩家的鼠标事件、键盘事件、触摸事件,S将接收到的事件保存至内存中的事件队列中,并按照设定的时间间隔对内存事件队列进行持久化操作,将内存事件队列中的事件保存至服务器上的事件日志文件中,并清空内存事件队列中已经持久化的事件序列;若玩家游戏过程中,手动存档,则由SC发送SSnow至S,S更新SSlast为SSnow。
进一步,所述步骤2.2)中,所述数据重演过程如下:
2.2.1)服务器加载SSlast,读取并还原游戏上下文环境中所需的游戏脚本文件,初始化游戏中元素的状态与属性,通过还原SSlast,以实现last时刻游戏状态机的初始化;
2.2.2)记SSlast的时间戳为s_last,Elast的时间戳为e_last。将事件日志文件中起始时间为s_last,截止时间为e_last的所有事件集合记为CEPs_last e_last;
2.2.3)游戏逻辑运算推演
根据持续事件保护机制进行游戏逻辑运算推演,每个GEI都拥有有限数目的离散稳定、相互独立又相互联系的状态,这些状态在事件的驱动下相互转移,组成GEI的有限状态机FSM,记为GEIM,GEIM是由若干个不同类别的GEI状态机所组成的集合,即GEIM={GEI1 M,GEI2 M,…,GEIi M,…,GEIn M},其中,GEIM集合中的每一个GEIi M用于描述i这类游戏元素实体状态机在生命周期内响应输入事件所经历的状态变化,是i这类游戏元素实体的所有不同状态组成的集合,即GEIi M={GEIi M 1,GEIi M 2,…,GEIi M j,…,GEIi M t},GEIi M集合中每一个元素GEIi M j代表了该GEIi M所有状态中的某一个状态;
输入GEIM中的事件分为2种,一种是来自外部玩家输入的事件,即存在CEPs_last e_last中的Ei,另一种是与游戏逻辑相关的固化在GEIi M内的事件函数,记为Fi;
通过模拟持续事件保护队列中CEPs_last e_last中的事件Ei以还原玩家在s_last时间戳之后的所有输入事件,Ei输入到GEIi M中,激活固化在GEIi M游戏元素实体状态机中的某一个状态GEIi M j内的事件函数Fi,进行状态转换最终完成GEIi M的状态转移,实现游戏逻辑运算推演。
更进一步,所述步骤2.2.3)中,游戏逻辑运算推演分为以下4个步骤:
2.2.3.1):读取事件对象,事件分发器通过异步回调的方式读取CEPs_last e_last中的Ei,并将Ei以序列方式逐一分发至初始化的游戏状态机中进行推演;异步回调是指将事件函数E(i+1)作为输入参数传入事件函数Ei中,待Ei执行完后,再执行E(i+1);
2.2.3.2):分发事件对象,针对步骤一中单次事件对象的读取,事件分发器通过遍历每个GEI进行坐标碰撞检测,将事件Ei分发至所作用的GEI;
2.2.3.3):状态推演,GEIi M接收事件Ei的输入,开始GEIi M状态推演,触发游戏逻辑相关事件函数Fi;事件函数Fi可作为事件注入到GEIi M中,继续推演,也可作为事件注入到其他相关GEIi+1 M中产生连锁状态推演,直到连锁状态推演反应终止为止;
从开始符号到最近的结束符号代表来自CEPs_last e_last中事件Ei输入到GEIi M中进行状态推演的过程。GEIi M接收事件Ei输入后,触发游戏逻辑相关的事件函数Fi,可作为事件注入到GEIi M中的其他状态GEIi M j继续进行推演,也可作为事件注入到其他相关的游戏元素实体状态机GEIi+1 M中产生连锁状态推演,直到连锁状态推演终止为止。以上过程为模拟玩家事件Ei所完成的所有操作,最终达到游戏状态机的状态转化;
2.2.3.4):对于CEPs_last e_last中的所有事件,依次执行步骤2.2.3.1)至步2.2.3.3),最终推演到用户在游戏崩溃前的最后一个事件,此时形成的游戏数据即为用户的最终游戏状态,据以此实现无存档环境下的游戏数据的精准还原。
再进一步,所述步骤2.2)中,快照更新包括以下3中情况:
(a)玩家首次注册游戏时,S生成SSbegin并发送至C,此时SSbegin即为SSlast;
(b)玩家在游戏过程中手动存档,发送SSnow至S,S更新快照,此时SSnow即为SSlast;
(c)玩家登入时,S比较SSlast时间戳与事件日志中Elast时间戳,若SSlast时间戳小于Elast时间戳,则启动数据重演机制,在SSlast的基础上,模拟玩家的游戏行为,生成SSnew,更新SSlast,此时SSnew即为SSlast。
本发明的技术构思为:现有网页游戏主要通过用户的鼠标事件、键盘事件、触摸事件的输入来实现游戏逻辑。根据现有网页游戏的事件交互方式,本方法采用数据重演机制来实现网页游戏存档还原,包括基于持续事件保护机制和快照技术方法,即通过快照技术获取用户最后一个时间点的存档,基于持续事件保护机制获取用户在客户端游戏过程的所有输入。在游戏发生异常后,采用的数据重演机制基于快照还原出最后一次存档时所有的游戏数据,再根据持续事件保护机制来进行游戏运算推演,模拟玩家在快照时间节点之后的所以输入动作,动作以序列方式逐一输入至游戏环境中进行推演,最后将游戏环境推演到用户在游戏崩溃前的最后一个动作,此时形成的数据即用户的最终游戏状态,据以此实现无存档环境下的游戏数据精准还原。
本发明提出的数据重演机制是基于持续事件保护和快照技术两部分的,为便于论述,给出如下定义。
定义1:事件(Event,E)是指由{Time,Type,Key}组成的三元组,即E={Time,Type,Key},其中Time指本次事件产生的时间,精确到毫秒;Type指本次事件的类型,包括鼠标点击事件,键盘点击事件,触摸事件;Key指本次事件所作用的对象,包括鼠标被点击的坐标、键盘被点击的按键、玩家触摸屏幕的坐标。
定义2:En指在n时刻所发生的事件。n为last时,Elast指最近一次事件。
定义3:持续事件保护(Continuous Event Protection,CEP)指将玩家在游戏过程中的每一次鼠标事件和键盘事件记录并备份至服务器的事件日志文件中,是由E按照时间顺序所组成的序列,即CEP1 last=<E1,E2,…,Elast>表示起始时间为1,截止时间为last的所有事件集合。
定义4:快照(Snapshot,SS)指基于某个时间点的游戏环境的备份。
SSn指在n时刻的游戏快照。
n为begin时,SSbegin指初始化游戏快照。
n为now时,SSnow指当前游戏快照。
n为last时,SSlast指最近一次游戏快照。
n为new时,SSnew指最新的游戏快照。
定义5:数据重演(Data Replay,DP)是指玩家登入游戏时,若服务器端检测到SSlast的时间比事件日志文件中Elast时间小,则由服务器端读取事件日志中SSlast的时间点至Elast的时间点所记录的鼠标事件与键盘事件序列,在SSlast的基础上通过模拟玩家的游戏行为生成下次登入时游戏的快照。
定义6:游戏元素(Game Element,GE)指地图、主角、技能、道具、剧情、NPC(Non-Player-Controlled Character)等组成游戏的元素。游戏元素的实例被称为游戏元素实体(Game Element Instance,GEI)。GEI由不同游戏元素实体组成的集合,即GEI={GEI1,GEI2,…,GEIi,…,GEIn}。
本发明的有益效果主要表现在:(1)客户端与服务器端保持全双工通信,由于采用持续事件保护,发送至服务器端的数据量小,减轻服务器的压力。(2)服务器端根据持续事件保护和快照技术实现了在任何异常情况下退出后的游戏进度的精准还原。
附图说明
图1是基于本方法的网页游戏存档还原结构框架图。
图2是基于本方法客户端加载游戏快照流程图。
图3a是数据重演流程图。
图3b是游戏逻辑运算推演图。
图4是快照更新流程图。
具体实施方式
下面结合附图对本发明作进一步描述。
参照图1~图4,一种基于数据重演机制的网页游戏存档还原方法,包括如下步骤:
第一步:根据本方法构思,建立一个网页游戏存档还原结构框架如图1所示,包括客户端(Client,C)和服务器端(Server,S)。C包括管理单元(Management,M)、鼠标事件收集单元(Mouse Event,ME)、键盘事件收集单元(Keyboard Event,KE)、触摸事件收集单元(Touch Event,TE)、服务器通信单元(Server Communication,SC),即C={M,ME,TE,KE,SC}。
M负责接收玩家输入的信息和请求。在用户登录游戏后,若玩家请求对某一游戏进度存档的下载,则将该请求发送给服务器并接收服务器发送的游戏进度至玩家。
ME负责收集玩家的鼠标事件。
TE负责收集玩家的触摸事件。
KE负责收集玩家的键盘事件。
SC负责与服务器通信。
第二步:根据所述网页游戏存档还原结构框架,过程如下:
步骤2.1:启动客户端,进入游戏主界面。
步骤2.2:服务器判断该玩家是否为新玩家,若为新玩家,则由服务器发送SSbegin至客户端,进行步骤2.3操作;若为老玩家,则比较SSlast的时间戳是否小于事件日志文件中Elast的时间戳,若SSlast的时间戳小于Elast的时间戳,则执行数据重演,生成SSnew,更新SSlast为SSnew并发送SSlast至客户端。反之,则直接发送SSlast至客户端。
其中,以上所述数据重演过程如图3a所示。
2.2.1)服务器加载SSlast,读取并还原游戏上下文环境中所需的游戏脚本文件,初始化游戏中元素的状态与属性,例如人物的位置信息、血量等。通过还原SSlast,以实现last时刻游戏状态机的初始化。
2.2.2)记SSlast的时间戳为s_last,Elast的时间戳为e_last。将事件日志文件中起始时间为s_last,截止时间为e_last的所有事件集合记为CEPs_last e_last。
2.2.3)游戏逻辑运算推演
根据持续事件保护机制进行游戏逻辑运算推演,图3a中游戏逻辑运算推演环节中的带箭头圆弧代表对GEIM进行游戏逻辑推演,推演流程由图3b进行细化描述。每个GEI都拥有有限数目的离散稳定、相互独立又相互联系的状态,这些状态在事件的驱动下相互转移,组成GEI的有限状态机(Finite state machines,FSM),记为GEIM,GEIM是由若干个不同类别的GEI状态机所组成的集合,即GEIM={GEI1 M,GEI2 M,…,GEIi M,…,GEIn M}。其中,GEIM集合中的每一个GEIi M用于描述i这类游戏元素实体状态机在生命周期内响应输入事件所经历的状态变化,是i这类游戏元素实体的所有不同状态组成的集合,即GEIi M={GEIi M 1,GEIi M 2,…,GEIi M j,…,GEIi M t},GEIi M集合中每一个元素GEIi M j代表了该GEIi M所有状态中的某一个状态。
需要注意的是,输入GEIM中的事件分为2种,一种是来自外部玩家输入的事件,即存在CEPs_last e_last中的Ei,另一种是与游戏逻辑相关的固化在GEIi M内的事件函数,记为Fi。
通过模拟持续事件保护队列中CEPs_last e_last中的事件Ei以还原玩家在s_last时间戳之后的所有输入事件,Ei输入到GEIi M中,激活固化在GEIi M游戏元素实体状态机中的某一个状态GEIi M j内的事件函数Fi,进行状态转换最终完成GEIi M的状态转移,最终达到游戏逻辑运算推演的目的。
游戏逻辑运算推演主要分为以下4个步骤:
2.2.3.1):读取事件对象。事件分发器通过异步回调的方式读取CEPs_last e_last中的Ei,并将Ei以序列方式逐一分发至初始化的游戏状态机中进行推演。异步回调是指将事件函数E(i+1)作为输入参数传入事件函数Ei中,待Ei执行完后,再执行E(i+1)。
2.2.3.2):分发事件对象。针对步骤一中单次事件对象的读取,事件分发器通过遍历每个GEI进行坐标碰撞检测,将事件Ei分发至所作用的GEI。
2.2.3.3):状态推演。GEIi M接收事件Ei的输入,开始GEIi M状态推演,触发游戏逻辑相关事件函数Fi。事件函数Fi可作为事件注入到GEIi M中,继续推演,也可作为事件注入到其他相关GEIi+1 M中产生连锁状态推演,直到连锁状态推演反应终止为止。图3b中每一个大圆代表i这类游戏元素实体状态的集合,即GEIi M,其中GEIi M中的每个小圆代表i这类游戏元素实体的状态集合中的某个状态,即GEIi M j。从开始符号到最近的结束符号代表来自CEPs_last e_last中事件Ei输入到GEIi M中进行状态推演的过程。GEIi M接收事件Ei输入后,触发游戏逻辑相关的事件函数Fi,可作为事件注入到GEIi M中的其他状态GEIi M j继续进行推演,也可作为事件注入到其他相关的游戏元素实体状态机GEIi+1 M中产生连锁状态推演,直到连锁状态推演终止为止。以上过程为模拟玩家事件Ei所完成的所有操作,最终达到游戏状态机的状态转化。
2.2.3.4):对于CEPs_last e_last中的所有事件,依次执行2.2.3.1)至步2.2.3.3),最终推演到用户在游戏崩溃前的最后一个事件,此时形成的游戏数据即为用户的最终游戏状态,据以此实现无存档环境下的游戏数据的精准还原。
步骤2.3:玩家游戏过程中执行持续事件保护,即SC实时向S发送由ME、KE、TE记录玩家的鼠标事件、键盘事件、触摸事件,S将接收到的事件保存至内存中的事件队列中,并按照一定的时间间隔对内存事件队列进行持久化操作,将内存事件队列中的事件保存至服务器上的事件日志文件中,并清空内存事件队列中已经持久化的事件序列。若玩家游戏过程中,手动存档,则由SC发送SSnow至S,S更新SSlast为SSnow。
其中,以上所述快照更新总结为以下3种情况:
(b)玩家首次注册游戏时,S生成SSbegin并发送至C,此时SSbegin即为SSlast。
(b)玩家在游戏过程中手动存档,发送SSnow至S,S更新快照,此时SSnow即为SSlast。
(c)玩家登入时,S比较SSlast时间戳与事件日志中Elast时间戳,若SSlast时间戳小于Elast时间戳,则启动数据重演机制,在SSlast的基础上,模拟玩家的游戏行为,生成SSnew,更新SSlast,此时SSnew即为SSlast。
实例2:玩家在早上8点整的时候,注册进入游戏,服务器检测到该游戏玩家为新用户,没有历史快照的存在,于是发送初始化快照至客户端。客户端加载初始化快照后初始化游戏,在玩家玩的整个过程中,实时向服务器发送玩家的鼠标事件、键盘事件或者是触摸事件,服务器将接收到的事件保存至事件日志文件中,玩家在10点50的时候,手动保存了游戏进度,更新了服务器的历史快照,玩家玩到了11点整时,由于系统死机导致游戏崩溃。
11点10分时,玩家重启电脑登入游戏,服务器端检测到最近一次游戏快照的时间为10点50分,事件日志文件中最后一次事件的时间为10点59分34秒,由于快照的时间小于日志文件中最后一次事件的时间,服务器端启动数据重演机制,加载10点50分的历史快照,读取事件日志中10点50分后的所有事件,通过模拟玩家的事件行为来还原11点整时的游戏环境。
10点51分45秒的时候,玩家对某个坐标进行鼠标左键单击操作E10h51m45s,事件分发器读取E10h51m45s并分发至游戏主角状态机,游戏主角状态机接收该事件,触发固化在游戏主角状态机内的自动寻路函数FAutomaticMove(role),AutomaticMove(role)为自动寻路的函数名,role为传入自动寻路函数的游戏主角对象,自动寻路函数将在有障碍物的情况下根据实现主角当前位置以及E10h51m45s所对应的鼠标坐标,执行自动寻路。由于FAutomaticMove(role)只作用于游戏主角状态机,没有触发其他GEIi M连锁状态推演,更新游戏主角的坐标,完成了E10h51m45s的游戏逻辑运算推演。
事件分发器再次读取10点51分55秒时刻的事件,玩家对NPC进行了普通攻击操作,事件分发器将E10h51m55s分发至游戏主角状态机,游戏主角状态机接收该事件,触发固化在游戏主角状态机内的攻击函数Fattack(role,npc),attack(role,npc)为攻击函数名,其中,role为攻击对象即游戏主角对象,npc为被攻击对象即为敌方npc对象。由于Fattack(role,npc)关联了NPC实体状态机,产生连锁状态推演,Fattack(role,npc)引发NPC状态机的状态转换,直至游戏主角状态机、NPC实体状态机都完成状态更新,完成了E10h51m55s的游戏逻辑运算推演。
以此类推,直到事件分发器读取到最后一个事件,生成SSnew,SSnew更新SSlast发送SSlast至客户端。客户端接收SSlast还原游戏进度,玩家继续游戏。
Claims (4)
1.一种基于数据重演机制的网页游戏存档还原方法,其特征在于:所述方法包括如下步骤:
第一步:建立一个网页游戏存档还原结构框架,包括客户端C和服务器端S,客户端C包括管理单元M、鼠标事件收集单元ME、键盘事件收集单元KE、触摸事件收集单元TE、服务器通信单元SC,即C={M,ME,TE,KE,SC};
M用于负责接收玩家输入的信息和请求,在用户登录游戏后,若玩家请求对某一游戏进度存档的下载,则将该请求发送给服务器并接收服务器发送的游戏进度至玩家;
ME用于负责收集玩家的鼠标事件;
TE用于负责收集玩家的触摸事件;
KE用于负责收集玩家的键盘事件;
SC用于负责与服务器通信;
第二步:根据所述网页游戏存档还原结构框架,过程如下:
步骤2.1:启动客户端,进入游戏主界面;
步骤2.2:服务器判断该玩家是否为新玩家,若为新玩家,则由服务器发送SSbegin至客户端,SSbegin指初始化游戏快照,进行步骤2.3操作;若为老玩家,则比较SSlast的时间戳是否小于事件日志文件中Elast的时间戳,SSlast指最近一次游戏快照,Elast指最近一次事件,若SSlast的时间戳小于Elast的时间戳,则执行数据重演,生成SSnew,SSlast指最近一次游戏快照,将游戏快照SSlast更新为新生成的游戏快照SSnew,更新SSlast为SSnew并发送SSlast至客户端,反之,则直接发送SSlast至客户端;
步骤2.3:玩家游戏过程中执行持续事件保护,即SC实时向S发送由ME、KE、TE记录玩家的鼠标事件、键盘事件、触摸事件,S将接收到的事件保存至内存中的事件队列中,并按照设定的时间间隔对内存事件队列进行持久化操作,将内存事件队列中的事件保存至服务器上的事件日志文件中,并清空内存事件队列中已经持久化的事件序列;若玩家游戏过程中,手动存档,则由SC发送SSnow至S,S更新SSlast为SSnow。
2.如权利要求1所述的一种基于数据重演机制的网页游戏存档还原方法,其特征在于:所述步骤2.2)中,所述数据重演过程如下:
2.2.1)服务器加载SSlast,读取并还原游戏上下文环境中所需的游戏脚本文件,初始化游戏中元素的状态与属性,通过还原SSlast,以实现last时刻游戏状态机的初始化;
2.2.2)记SSlast的时间戳为s_last,Elast的时间戳为e_last,将事件日志文件中起始时间为s_last,截止时间为e_last的所有事件集合记为CEPs_last e_last;
2.2.3)游戏逻辑运算推演
根据持续事件保护机制进行游戏逻辑运算推演,每个GEI都拥有有限数目的离散稳定、相互独立又相互联系的状态,这些状态在事件的驱动下相互转移,组成游戏元素实体GEI的有限状态机FSM,记为GEIM,GEIM是由若干个不同类别的GEI状态机所组成的集合,即GEIM={GEI1 M,GEI2 M,…,GEIi M,…,GEIn M},其中,GEIM集合中的每一个GEIi M用于描述i这类游戏元素实体状态机在生命周期内响应输入事件所经历的状态变化,是i这类游戏元素实体的所有不同状态组成的集合,即GEIi M={GEIi M 1,GEIi M 2,…,GEIi M j,…,GEIi M t},GEIi M集合中每一个元素GEIi M j代表了该GEIi M所有状态中的某一个状态;
输入GEIM中的事件分为2种,一种是来自外部玩家输入的事件,即存在CEPs_last e_last中的Ei,另一种是与游戏逻辑相关的固化在GEIi M内的事件函数,记为Fi;
通过模拟持续事件保护队列中CEPs_last e_last中的事件Ei以还原玩家在s_last时间戳之后的所有输入事件,Ei输入到GEIi M中,激活固化在GEIi M游戏元素实体状态机中的某一个状态GEIi M j内的事件函数Fi,进行状态转换最终完成GEIi M的状态转移,实现游戏逻辑运算推演。
3.如权利要求2所述的一种基于数据重演机制的网页游戏存档还原方法,其特征在于:所述步骤2.2.3)中,游戏逻辑运算推演分为以下4个步骤:
2.2.3.1):读取事件对象,事件分发器通过异步回调的方式读取CEPs_last e_last中的Ei,并将Ei以序列方式逐一分发至初始化的游戏状态机中进行推演;异步回调是指将事件函数E(i+1)作为输入参数传入事件函数Ei中,待Ei执行完后,再执行E(i+1);
2.2.3.2):分发事件对象,针对步骤一中单次事件对象的读取,事件分发器通过遍历每个GEI进行坐标碰撞检测,将事件Ei分发至所作用的GEI;
2.2.3.3):状态推演,GEIi M接收事件Ei的输入,开始GEIi M状态推演,触发游戏逻辑相关事件函数Fi;事件函数Fi可作为事件注入到GEIi M中,继续推演,也可作为事件注入到其他相关的游戏元素实体状态机GEIi+1 M中产生连锁状态推演,直到连锁状态推演反应终止为止;
从开始符号到最近的结束符号代表来自CEPs_last e_last中事件Ei输入到GEIi M中进行状态推演的过程,GEIi M接收事件Ei输入后,触发游戏逻辑相关的事件函数Fi,可作为事件注入到GEIi M中的其他状态GEIi M j继续进行推演,也可作为事件注入到其他相关的游戏元素实体状态机GEIi+1 M中产生连锁状态推演,直到连锁状态推演终止为止,以上过程为模拟玩家事件Ei所完成的所有操作,最终达到游戏状态机的状态转化;
2.2.3.4):对于CEPs_last e_last中的所有事件,依次执行步骤2.2.3.1)至步2.2.3.3),最终推演到用户在游戏崩溃前的最后一个事件,此时形成的游戏数据即为用户的最终游戏状态,据以此实现无存档环境下的游戏数据的精准还原。
4.如权利要求1~3之一所述的一种基于数据重演机制的网页游戏存档还原方法,其特征在于:所述步骤2.2)中,快照更新包括以下3中情况:
(a)玩家首次注册游戏时,S生成SSbegin并发送至C,此时SSbegin即为SSlast;
(b)玩家在游戏过程中手动存档,发送SSnow至S,S更新快照,此时SSnow即为SSlast;
(c)玩家登入时,S比较SSlast时间戳与事件日志中Elast时间戳,若SSlast时间戳小于Elast时间戳,则启动数据重演机制,在SSlast的基础上,模拟玩家的游戏行为,生成SSnew,更新SSlast,此时SSnew即为SSlast。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610343237.9A CN105999702B (zh) | 2016-05-23 | 2016-05-23 | 一种基于数据重演机制的网页游戏存档还原方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610343237.9A CN105999702B (zh) | 2016-05-23 | 2016-05-23 | 一种基于数据重演机制的网页游戏存档还原方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105999702A CN105999702A (zh) | 2016-10-12 |
CN105999702B true CN105999702B (zh) | 2019-07-05 |
Family
ID=57095952
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610343237.9A Active CN105999702B (zh) | 2016-05-23 | 2016-05-23 | 一种基于数据重演机制的网页游戏存档还原方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105999702B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106693366B (zh) * | 2016-12-06 | 2020-04-21 | 北京奇虎科技有限公司 | 验证操作合法性的方法、装置和加固安装包的方法、装置 |
CN107634875B (zh) * | 2017-09-11 | 2020-08-28 | 中体彩科技发展有限公司 | 游戏数据离散通讯的方法及装置 |
CN108921407A (zh) * | 2018-06-20 | 2018-11-30 | 北京密境和风科技有限公司 | 一种任务处理系统和方法 |
CN108874592B (zh) * | 2018-06-20 | 2020-04-10 | 焦点科技股份有限公司 | 一种针对Log-structured存储引擎的数据冷备方法及系统 |
CN109289196A (zh) * | 2018-11-19 | 2019-02-01 | 杭州电魂网络科技股份有限公司 | 游戏存档处理方法及装置 |
CN112347065B (zh) * | 2019-08-07 | 2023-08-18 | 中国船舶工业系统工程研究院 | 一种警用预案制定过程记录重演方法及系统 |
CN110766770B (zh) * | 2019-10-16 | 2021-07-20 | 腾讯科技(深圳)有限公司 | 热力图生成方法、装置、可读存储介质和计算机设备 |
CN110898434B (zh) * | 2019-11-06 | 2023-07-25 | 上饶市中科院云计算中心大数据研究院 | 处理数据的方法、服务器、系统和计算机可读程序介质 |
CN111222071B (zh) * | 2020-01-03 | 2023-08-25 | 北京秒针人工智能科技有限公司 | 问卷处理方法、装置及电子设备 |
CN111505444B (zh) * | 2020-05-13 | 2022-04-15 | 中国南方电网有限责任公司 | 一种综合测距行波分析优化系统及方法 |
CN112675533B (zh) * | 2021-03-17 | 2021-07-23 | 北京海誉动想科技股份有限公司 | 基于云游戏的用户存档信息获取方法与装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101038607A (zh) * | 2006-03-17 | 2007-09-19 | 腾讯科技(深圳)有限公司 | 一种网络游戏中防止作弊的方法及系统 |
CN101059823A (zh) * | 2006-04-19 | 2007-10-24 | 腾讯科技(深圳)有限公司 | 网络休闲游戏录放方法 |
CN201917908U (zh) * | 2010-11-24 | 2011-08-03 | 深圳市快播科技有限公司 | 单机存档游戏系统 |
CN102663242A (zh) * | 2012-03-29 | 2012-09-12 | 奇智软件(北京)有限公司 | 一种Flash游戏存档的方法和装置 |
CN103067339A (zh) * | 2011-10-20 | 2013-04-24 | 深圳市快播科技有限公司 | 一种客户端网页游戏多帐号安全登录方法及系统 |
CN103577229A (zh) * | 2013-10-28 | 2014-02-12 | 北京奇虎科技有限公司 | 一种网页游戏的加载方法及网页浏览器 |
CN204087454U (zh) * | 2014-04-02 | 2015-01-07 | 薛峻杰 | 具有遥控功能的行动通讯装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9630097B2 (en) * | 2014-01-22 | 2017-04-25 | Skillz Inc. | Online software video capture and replay system |
-
2016
- 2016-05-23 CN CN201610343237.9A patent/CN105999702B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101038607A (zh) * | 2006-03-17 | 2007-09-19 | 腾讯科技(深圳)有限公司 | 一种网络游戏中防止作弊的方法及系统 |
CN101059823A (zh) * | 2006-04-19 | 2007-10-24 | 腾讯科技(深圳)有限公司 | 网络休闲游戏录放方法 |
CN201917908U (zh) * | 2010-11-24 | 2011-08-03 | 深圳市快播科技有限公司 | 单机存档游戏系统 |
CN103067339A (zh) * | 2011-10-20 | 2013-04-24 | 深圳市快播科技有限公司 | 一种客户端网页游戏多帐号安全登录方法及系统 |
CN102663242A (zh) * | 2012-03-29 | 2012-09-12 | 奇智软件(北京)有限公司 | 一种Flash游戏存档的方法和装置 |
CN103577229A (zh) * | 2013-10-28 | 2014-02-12 | 北京奇虎科技有限公司 | 一种网页游戏的加载方法及网页浏览器 |
CN204087454U (zh) * | 2014-04-02 | 2015-01-07 | 薛峻杰 | 具有遥控功能的行动通讯装置 |
Also Published As
Publication number | Publication date |
---|---|
CN105999702A (zh) | 2016-10-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105999702B (zh) | 一种基于数据重演机制的网页游戏存档还原方法 | |
CN105677477B (zh) | 一种优化应用程序资源的方法、装置及电子设备 | |
EP2456160A1 (en) | Method and device for synchronizing time of network games | |
US20140019528A1 (en) | Validation of device activity via logic sharing | |
CN107943618B (zh) | 仿真系统的数据快速恢复方法及存储介质 | |
CN102902746A (zh) | 一种海量数据处理方法、装置及系统 | |
JP2024500263A (ja) | クラウドコード開発システム、方法、装置、デバイス及び記憶媒体 | |
CN102999367A (zh) | 一种快速初始化iec61850智能装置客户端通讯的方法 | |
CN109165261A (zh) | 数据同步方法、装置、服务器及计算机存储介质 | |
CN110327625B (zh) | 文件的处理方法、装置、处理器、终端及服务器 | |
CN113032160B (zh) | 一种数据同步的管理方法以及相关装置 | |
CN112516598B (zh) | 游戏服务故障的处理方法、装置、服务器及介质 | |
CN116842205A (zh) | 一种游戏回放方法、装置及存储介质 | |
CN112891926A (zh) | 游戏终端、云服务器、云游戏控制方法和存储介质 | |
CN107168774A (zh) | 一种基于本地存储的虚拟机迁移方法及系统 | |
CN112650755A (zh) | 数据存储方法、查询数据的方法、数据库、以及可读介质 | |
CN113746931B (zh) | 数据同步方法及装置 | |
CN106953756B (zh) | 一种业务数据的模拟延时方法以及服务器 | |
CN113672354B (zh) | 一种虚拟机迁移方法及相关装置 | |
CN112138372B (zh) | 分布式系统中的数据同步方法及相关设备 | |
CN113312802B (zh) | 一种基于异构系统的联合仿真方法和装置 | |
CN111228818B (zh) | 通信交互方法、装置、存储介质、处理器及电子装置 | |
CN113448647B (zh) | 资源同步方法、实现设备及电子设备 | |
CN112764837B (zh) | 数据上报方法、装置、存储介质及终端 | |
CN109933479A (zh) | 故障模拟与仿真方法以及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |