游戏模式的切换方法、装置、电子设备及存储介质与流程

文档序号:17988721发布日期:2019-06-22 00:36阅读:255来源:国知局
游戏模式的切换方法、装置、电子设备及存储介质与流程

本申请涉及游戏技术领域,尤其涉及一种游戏模式的切换方法、装置、电子设备及存储介质。



背景技术:

随着电子娱乐行业的发展,游戏受到越来越多用户的喜爱。游戏为用户提供了多种游戏模块,其中,游戏模式也可以称为战斗模式;用户可以采用不同的游戏模式进行游戏。其中,主要的游戏模式为正常模式和编辑器模式;正常模式下,游戏设定了游戏的逻辑,用户依据游戏提供的逻辑进行游戏;编辑器模式下,用户可以自己设定游戏的逻辑,用户依据自己设定的逻辑进行游戏。在开发游戏的时候,会将编辑器模式下的逻辑和正常模式下的逻辑混在一起;从而,在用户进行游戏时,在用户每进行一次动作或操作的时候,电子设备需要依据游戏中的判断逻辑确定当前是编辑器模式还是正常模式。从而,开发人员需要在游戏中增加大量的判断逻辑,代码的开发量较大。

现有技术中,为了减少代码的开发量,电子设备可以在游戏开始的时候,判断当前的游戏模式,然后电子设备将当前的游戏模式对应的代码放到内存中;进而,电子设备获取内存中的代码,以在游戏模式下运行游戏。

然而现有技术中,每次切换游戏模式的时候,都需要再次获取游戏模式对应的代码,将代码放入到内存中,以根据内存中的代码去运行游戏;在将游戏模式对应的代码放到内存中之后,是无法自动删除的,只能人工手动的删除内存中的代码。进而,会占用较多的内存,进一步的,内存较多被占用,会影响到电子设备的运行速率。



技术实现要素:

本申请提供一种游戏模式的切换方法、装置、电子设备及存储介质,以解决现有技术中游戏过程中会占用较多的内存的问题。

第一方面,本申请实施例提供一种游戏模式的切换方法,包括:

在切换游戏的游戏模式时,获取与第一游戏模式对应的第一代码模块,所述第一游戏模式为待转换的游戏模式;

将内存中存储的与第二游戏模式对应的第二代码模块,替换为所述第一代码模块,得到替换后的第二代码模块,其中,所述第二游戏模式为当前运行的游戏模式;

根据所述替换后的第二代码模块,运行所述游戏。

进一步地,所述获取与第一游戏模式对应的第一代码模块,包括:

确定所述游戏的操作动作,并获取与第一游戏模式对应的所述操作动作的第一代码模块;

所述将内存中存储的与第二游戏模式对应的第二代码模块,替换为所述第一代码模块,得到替换后的第二代码模块,包括:

将所处内存中存储的与第二游戏模式对应的所述操作动作的第二代码模块,替换为所述操作动作的第一代码模块,以得到所述替换后的第二代码模块。

进一步地,所述第一代码模块中包括至少一个代码文件,所述第二代码模块中包括至少一个代码文件;所述第二代码模块具有对应的正常模式下的原始代码模块,所述原始代码模块中包括至少一个代码文件;

所述将内存中存储的与第二游戏模式对应的第二代码模块,替换为所述第一代码模块,得到替换后的第二代码模块,包括:

对于同名的代码文件,检测所述同名的代码文件的类属性,其中,所述同名的代码文件为在所述原始代码模块和所述第一代码模块中命名相同的代码文件;

根据与所述类属性对应的替换方式,将所述第二代码模块中的同名的代码文件替换为所述第一代码模块中的同名的代码文件;

删除所述第二代码模块中的待删除的代码文件,其中,所述待删除的代码文件为所述第一代码模块中没有出现的代码文件;

将所述第一代码模块中的新增的代码文件存储至所述内存中,以得到所述替换后的第二代码模块,其中,所述新增的代码文件为所述第二代码模块中没有出现的代码文件。

进一步地,检测所述同名的代码文件的类属性,包括:

检测所述内存中的所述第二代码模块中是否具有所述同名的代码文件;

若不具有,则获取所述原始代码模块中的同名的代码文件,将所述原始代码模块中的同名的代码文件存储所述内存中,并检测所述同名的代码文件的类属性;

若具有,则检测所述同名的代码文件的类属性。

进一步地,所述类属性为静态方法或类方法,则根据与所述类属性对应的替换方式,将所述第二代码模块中的同名的代码文件替换为所述第一代码模块中的同名的代码文件,包括:

将所述第二代码模块中的同名的代码文件的类属性信息替换为所述第一代码模块中的同名的代码文件的类属性信息,以将所述第二代码模块中的同名的代码文件替换为所述第一代码模块中的同名的代码文件。

进一步地,所述类属性为函数类型,则根据与所述类属性对应的替换方式,将所述第二代码模块中的同名的代码文件替换为所述第一代码模块中的同名的代码文件,包括:

采用函数属性替换的方式,将所述第二代码模块中的同名的代码文件替换为所述第一代码模块中的同名的代码文件。

进一步地,在所述在切换游戏的游戏模式时,获取与第一游戏模式对应的第一代码模块之前,还包括:

接收切换指令,其中,所述切换指令用于指示切换游戏模式。

第二方面,本申请实施例提供一种游戏模式的切换装置,包括:

获取单元,用于在切换游戏的游戏模式时,获取与第一游戏模式对应的第一代码模块,所述第一游戏模式为待转换的游戏模式;

替换单元,用于将内存中存储的与第二游戏模式对应的第二代码模块,替换为所述第一代码模块,得到替换后的第二代码模块,其中,所述第二游戏模式为当前运行的游戏模式;

运行单元,用于根据所述替换后的第二代码模块,运行所述游戏。

进一步地,所述获取单元,具体用于:

确定所述游戏的操作动作,并获取与第一游戏模式对应的所述操作动作的第一代码模块;

所述替换单元,具体用于:

将所处内存中存储的与第二游戏模式对应的所述操作动作的第二代码模块,替换为所述操作动作的第一代码模块,以得到所述替换后的第二代码模块。

进一步地,所述第一代码模块中包括至少一个代码文件,所述第二代码模块中包括至少一个代码文件;所述第二代码模块具有对应的正常模式下的原始代码模块,所述原始代码模块中包括至少一个代码文件;

所述替换单元,包括:

检测模块,用于对于同名的代码文件,检测所述同名的代码文件的类属性,其中,所述同名的代码文件为在所述原始代码模块和所述第一代码模块中命名相同的代码文件;

替换模块,用于根据与所述类属性对应的替换方式,将所述第二代码模块中的同名的代码文件替换为所述第一代码模块中的同名的代码文件;

删除模块,用于删除所述第二代码模块中的待删除的代码文件,其中,所述待删除的代码文件为所述第一代码模块中没有出现的代码文件;

存储模块,用于将所述第一代码模块中的新增的代码文件存储至所述内存中,以得到所述替换后的第二代码模块,其中,所述新增的代码文件为所述第二代码模块中没有出现的代码文件。

进一步地,所述检测模块,具体用于:

检测所述内存中的所述第二代码模块中是否具有所述同名的代码文件;

若不具有,则获取所述原始代码模块中的同名的代码文件,将所述原始代码模块中的同名的代码文件存储所述内存中,并检测所述同名的代码文件的类属性;

若具有,则检测所述同名的代码文件的类属性。

进一步地,所述类属性为静态方法或类方法,则所述替换模块,具体用于:

将所述第二代码模块中的同名的代码文件的类属性信息替换为所述第一代码模块中的同名的代码文件的类属性信息,以将所述第二代码模块中的同名的代码文件替换为所述第一代码模块中的同名的代码文件。

进一步地,所述类属性为函数类型,则所述替换模块,具体用于:

采用函数属性替换的方式,将所述第二代码模块中的同名的代码文件替换为所述第一代码模块中的同名的代码文件。

进一步地,所述装置,还包括:

接收单元,用于在所述获取单元在切换游戏的游戏模式时,获取与第一游戏模式对应的第一代码模块之前,接收切换指令,其中,所述切换指令用于指示切换游戏模式。

第三方面,本申请实施例提供一种电子设备,包括:存储器和处理器,存储器中存储有所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行第一方面中任一项所述的方法。

第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面任一项所述的方法。

本申请提供一种游戏模式的切换方法、装置、电子设备及存储介质,通过在切换游戏的游戏模式时,获取与第一游戏模式对应的第一代码模块,第一游戏模式为待转换的游戏模式;将内存中存储的与第二游戏模式对应的第二代码模块,替换为第一代码模块,得到替换后的第二代码模块,其中,第二游戏模式为当前运行的游戏模式;根据替换后的第二代码模块,运行游戏。在切换游戏的游戏模式时,将待转换的游戏模式对应的代码模块,去替换内存中的代码模块,进而将内存中的代码模块重新更改;然后,依据内存中的代码模块运行游戏。实现了不同的游戏模式的逻辑分离,例如,正常模式与编辑器模式的逻辑分离;并且,采用代码模块的替换的方式,使得内存中的代码模块不会大量增加,可以减少内存的占用;加快电子设备的运行速率;并且,本实施例提供的方案,不需要大量的判断逻辑的代码,可以减少游戏的代码开发量,减少游戏开发成本。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的一种游戏模式的切换方法的流程图;

图2为本申请实施例提供的另一种游戏模式的切换方法的流程图;

图3为本申请实施例提供的一种游戏模式的切换装置的结构示意图;

图4为本申请实施例提供的另一种游戏模式的切换装置的结构示意图;

图5为本申请实施例提供的一种电子设备的结构示意图。

通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

下面以具体地实施例对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。

游戏为用户提供了多种游戏模块,其中,游戏模式也可以称为战斗模式;用户可以采用不同的游戏模式进行游戏。其中,主要的游戏模式包括了正常模式和编辑器模式。在正常模式下,游戏已经设定了固定的游戏逻辑,用户依据固定的游戏逻辑进行游戏;在编辑器模式下,用户可以自己设定游戏的逻辑,用户依据自己设定的逻辑进行游戏。举例来说,用户可以自己设定游戏的玩法,用户自定义的玩法与游戏同的正常战斗玩法不同;例如,对于英雄闪现的场景,在正常游戏模式下,即在正常战斗模式下,游戏人物可以从墙上闪现到墙下面的平地上;用户可以自定义游戏场景,用户可以设定在迷宫地图让游戏人物不能穿越地形等等。

在开发游戏的时候,会将编辑器模式下的逻辑和正常模式下的逻辑混在一起;从而,在用户进行游戏时,在用户每进行一次动作或操作的时候,电子设备需要依据游戏中的判断逻辑确定当前是编辑器模式还是正常模式;例如,在游戏的场景中,需要在游戏人物的每一个变换动作或变换操作的威视上,都去增加一个判断逻辑,即增加判断的代码。从而,开发人员需要在游戏中增加大量的判断逻辑,代码的开发量较大。

举例来说,在游戏人物进行跳跃的时候,电子设备需要先判断此时是正常模式还是编辑器模式,正常模式下的跳跃动作的代码为a1,编辑器模式下的跳跃动作的代码为a2;电子设备若确定此时是正常模式,则电子设备调用跳跃动作的代码a1,然后根据代码a1运行游戏;然后,下一步中,在在游戏人物进行走路的时候,电子设备需要先判断此时是正常模式还是编辑器模式,正常模式下的走路动作的代码为b1,编辑器模式下的走路动作的代码为b2;电子设备若确定此时是编辑器模式,则电子设备调用走路动作的代码b2,然后根据代码b2运行游戏;再下一步的过程,以此类推。可知,开发人员需要在游戏中增加大量的判断逻辑,代码的开发量较高,游戏开发和维护的成本较高。

现有技术中,为了减少代码的开发量,电子设备可以在游戏开始的时候,判断当前的游戏模式,然后电子设备将当前的游戏模式对应的代码放到内存中;进而,电子设备获取内存中的代码,以在游戏模式下运行游戏。举例来说,对于游戏的某一个操作,正常模式下的代码模块为a1,编辑器模式下的代码模块为a2;电子设备在确定当前游戏模式为正常模式的时候,将代码模块a1放到内存中;电子设备根据内存中的代码模块a1去创建实例,进而运行游戏;这样,也可以做到游戏模式的逻辑的相互独立。

然而现有技术中,每次切换游戏模式的时候,都需要再次获取游戏模式对应的代码,将代码放入到内存中,以根据内存中的代码去运行游戏。具体来说,在将游戏模式对应的代码放到内存中之后,电子设备可以依据内容的代码运行游戏;当再次需要切换游戏模式的时候,电子设备还需要获取游戏模式对应的代码,再将代码放入到内存中;当下一次需要切换游戏模式的时候,电子设备还需要去获取游戏模式对应的代码,并将代码放入内存中。在将游戏模式对应的代码放到内存中之后,是无法自动删除的,只能人工手动的删除内存中的代码。进而,会占用较多的内存;进一步的,内存较多被占用,会影响到电子设备的运行速率。

举例来说,当采用python语言开发游戏的时候,电子设备在确定游戏模式为正常模式的时候,电子设备需要获取正常模式对应的代码;电子设备将正常模式对应的代码放入到一个命名为sys.modules的模块中,此时,代码会占用一块内存;然后,电子设备在切换游戏模式的时候,电子设备需要获取编辑器模式对应的代码;电子设备将编辑器模式对应的代码放入到一个命名为sys.modules的模块中,此时,代码会占用一块内存;当电子设备再次切换游戏模式的时候,电子设备重复以上过程。从而,内存中存储了较多的代码;代码是无法自动删除的,只能人工手动的删除内存中的代码。

本申请提供一种游戏模式的切换方法、装置、电子设备及存储介质,可以采用代码模块的替换的方式,使得内存中的代码模块不会大量增加,可以减少内存的占用;加快电子设备的运行速率。

下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。

图1为本申请实施例提供的一种游戏模式的切换方法的流程图,如图1所示,本实施例中的方法可以包括:

s101、在切换游戏的游戏模式时,获取与第一游戏模式对应的第一代码模块,第一游戏模式为待转换的游戏模式。

可选的,步骤s101具体包括:确定游戏的操作动作,并获取与第一游戏模式对应的操作动作的第一代码模块。

本实施例中,本申请实施例的执行主体可以是电子设备、或者终端设备、或者服务器、或者游戏模式的切换装置或设备、或者其他可以执行本申请提供的方法的装置或设备。本实施例以执行主体为电子设备进行说明。

电子设备执行游戏,游戏当前的游戏模式为第二游戏模式;电子设备需要将游戏模式切换为第一游戏模式。电子设备确定需要从第二游戏模式切换到第一游戏模式,电子设备首先需要获取与第一游戏模式对应的第一代码模块。例如,第一游戏模式为编辑器模式,第二游戏模式为正常模式;或者,第一游戏模式为正常模式,第二游戏模式为编辑器模式。

具体来说,游戏模式下具有多个操作动作,其中,操作动作也可以称为游戏人物的动作、或操作、或技能。从而,第一游戏模式下具有多个操作动作,同样的,第二游戏模式下具有多个操作动作。

举例来说,正常模式下包括第一代码模块a、第一代码模块b、第一代码模块c;编辑器模式下包括第二代码模块a、第二代码模块b、第二代码模块c;命名相同的代码模块为相同的操作动作,第一代码模块a和第二代码模块a都对应着操作动作a,第一代码模块b和第二代码模块b都对应着操作动作b,第一代码模块c和第二代码模块c都对应着操作动作c。

从而,在切换游戏模式的时候,电子设备可以首先确定当前的操作动作,然后,电子设备从第一游戏模式对应的各个代码模块中,获取到与当前的操作动作对应的第一代码模块。

举例来说,第一游戏模式下具有与操作动作a对应的第一代码模块a、与操作动作b对应的第一代码模块b、与操作动作c对应的第一代码模块c;电子设备确定当前为第二游戏模式,并且,电子设备确定需要切换游戏模式;电子设备确定当前的操作动作为a,则电子设备获取第一游戏模式的与操作动作a对应的第一代码模块a。

s102、将内存中存储的与第二游戏模式对应的第二代码模块,替换为第一代码模块,得到替换后的第二代码模块,其中,第二游戏模式为当前运行的游戏模式。

可选的,步骤s102具体包括:将所处内存中存储的与第二游戏模式对应的操作动作的第二代码模块,替换为操作动作的第一代码模块,以得到替换后的第二代码模块。

本实施例中,由于电子设备的当前游戏模式为第二游戏模式,电子设备已经在内存中存储了与第二游戏模式对应的第二代码模块;电子设备在获取到与第一游戏模式对应的第一代码模块之后,电子设备将内存中与第二游戏模式对应的第二代码模块,替换为与第一游戏模式对应的第一代码模块,进而得到替换后的第二代码模块。

具体来说,由于游戏模式下具有多个操作动作,电子设备在从第一游戏模式对应的各个代码模块中,获取到与当前的操作动作对应的第一代码模块之后,电子设备将与第二游戏模式对应的操作动作的第二代码模块,替换为操作动作的第一代码模块。

举例来说,第一游戏模式下具有与操作动作a对应的第一代码模块a、与操作动作b对应的第一代码模块b、与操作动作c对应的第一代码模块c;第二游戏模式下具有与操作动作a对应的第二代码模块a、与操作动作b对应的第二代码模块b、与操作动作c对应的第二代码模块c,电子设备确定当前为第二游戏模式,并且,电子设备确定需要切换游戏模式;电子设备确定当前的操作动作为a,则电子设备获取第一游戏模式下的与操作动作a对应的第一代码模块a;电子设备将内存中的第二游戏模式下具有与操作动作a对应的第二代码模块a,替换为第一游戏模式下的与操作动作a对应的第一代码模块a。

s103、根据替换后的第二代码模块,运行游戏。

本实施例中,终端设备采用替换的方式,将与第一游戏模式对应的第一代码模块存储到了内存中,此时,内存中不具有与第二游戏模式对应的第二代码模块中的内容,可以得到替换后的第二代码模块;终端设备依据替换后的第二代码模块,运行游戏,此时是在第一游戏模式下运行游戏。

本实施例,通过在切换游戏的游戏模式时,获取与第一游戏模式对应的第一代码模块,第一游戏模式为待转换的游戏模式;将内存中存储的与第二游戏模式对应的第二代码模块,替换为第一代码模块,得到替换后的第二代码模块,其中,第二游戏模式为当前运行的游戏模式;根据替换后的第二代码模块,运行游戏。在切换游戏的游戏模式时,将待转换的游戏模式对应的代码模块,去替换内存中的代码模块,进而将内存中的代码模块重新更改;然后,依据内存中的代码模块运行游戏。实现了不同的游戏模式的逻辑分离,例如,正常模式与编辑器模式的逻辑分离;并且,采用代码模块的替换的方式,使得内存中的代码模块不会大量增加,可以减少内存的占用;加快电子设备的运行速率;并且,本实施例提供的方案,不需要大量的判断逻辑的代码,可以减少游戏的代码开发量,减少游戏开发成本。

图2为本申请实施例提供的另一种游戏模式的切换方法的流程图,如图2所示,本实施例中的方法可以包括:

s201、接收切换指令,其中,切换指令用于指示切换游戏模式。

本实施例中,本申请实施例的执行主体可以是电子设备、或者终端设备、或者服务器、或者游戏模式的切换装置或设备、或者其他可以执行本申请提供的方法的装置或设备。本实施例以执行主体为电子设备进行说明。

电子设备执行游戏,游戏当前的游戏模式为第二游戏模式。电子设备可以根据游戏的进程,确定需要切换游戏模式,则电子设备自动生成一个切换指令;或者,用户向电子设备中输入一个切换指令。

s202、在切换游戏的游戏模式时,获取与第一游戏模式对应的第一代码模块,第一游戏模式为待转换的游戏模式。

本实施例中,本步骤可以参见图1的步骤s101,不再赘述。

本实施例中,电子设备确定需要从第二游戏模式切换到第一游戏模式,电子设备首先需要获取与第一游戏模式对应的第一代码模块。例如,第一游戏模式为编辑器模式,第二游戏模式为正常模式;或者,第一游戏模式为正常模式,第二游戏模式为编辑器模式。

其中,每一个代码模块中包括了一个或多个代码文件。即,第一代码模块中包括了一个或多个代码文件,第二代码模块中包括了一个或多个代码文件。

s203、第一代码模块中包括至少一个代码文件,第二代码模块中包括至少一个代码文件;第二代码模块具有对应的正常模式下的原始代码模块,原始代码模块中包括至少一个代码文件;对于同名的代码文件,检测同名的代码文件的类属性,其中,同名的代码文件为在原始代码模块和第一代码模块中命名相同的代码文件。

可选的,检测同名的代码文件的类属性,包括:检测内存中的第二代码模块中是否具有同名的代码文件;若不具有,则获取原始代码模块中的同名的代码文件,将原始代码模块中的同名的代码文件存储内存中,并检测同名的代码文件的类属性;若具有,则检测同名的代码文件的类属性。

本实施例中,由于第一代码模块中包括了一个或多个代码文件,第二代码模块中包括了一个或多个代码文件,第一代码模块与第二代码模块之间的代码文件的命名可能相同或不同,不同命名的代码文件属于不同的操作,相同命名的代码文件属于同一种操作。

举例来说,正常模式下的第二代码模块a,编辑器模式下的第一代码模块b;第二代码模块a中包括代码文件a1.py、代码文件a2.py和代码文件a3.py;第一代码模块b中包括代码文件a1.py、代码文件a2.py和代码文件b1.py。并且,第二代码模块a位于内存中。其中,命名相同的代码文件为相同的操作,代码文件a1.py对应的操作a,代码文件a2.py对应的操作b,代码文件a3.py对应的操作c,代码文件b1.py对应的操作d。并且,编辑器模式下的第一代码模块b是对正常模式下的第二代码模块a的修改;命名相同的代码文件的内容相同或不同,命名相同的代码文件指的是同名的代码文件。编辑器模式下的第一代码模块b中的代码文件b1.py,是新增的代码文件;并且第一代码模块b中减少了代码文件a3.py。

并且,对于内存中的第二代码模块与第一代码模块,两个代码模块都对应着同一个操作动作;在正常模式下,该操作动作具有一个原始代码模块,同样的,原始代码模块中包括一个或多个代码文件。

举例来说,在正常模式下,具有一个原始代码模块c,原始代码模块c中包括代码文件a1.py、代码文件a2.py和代码文件a3.py;在内存中,具有与正常模式对应的第二代码模块a;需要将编辑器模式下的第一代码模块b,替换到内存中,即,将与正常模式对应的第二代码模块a替换为与编辑器模式对应的第一代码模块b;内存中的第二代码模块a中包括代码文件a1.py、代码文件a2.py和代码文件a3.py;第一代码模块b中包括代码文件a1.py、代码文件a2.py和代码文件b1.py。

或者,举例来说,在正常模式下,具有一个原始代码模块c,原始代码模块c中包括代码文件a1.py、代码文件a2.py和代码文件a3.py;在内存中,具有与正常模式对应的第二代码模块a;需要将编辑器模式下的第一代码模块b,替换到内存中,即,将与正常模式对应的第二代码模块a替换为与编辑器模式对应的第一代码模块b;内存中的第二代码模块a中包括代码文件a2.py和代码文件a3.py;第一代码模块b中包括代码文件a1.py、代码文件a2.py和代码文件b1.py。

电子设备可以依据原始代码模块,确定原始代码模块与第一代码模块中的同名的代码文件;然后,电子设备确定内存中第二代码模块中是否具有该同名的代码文件。

若确定内存中具有该同名的代码文件,则电子设备直接检测内存中的该同名的代码文件的类属性。若确定内存中不具有该同名的代码文件,则电子设备需要从原始代码模块中,获取该同名的代码文件;然后,电子设备将获取到的该同名的代码文件,存储到内存中;电子设备再去检测该同名的代码文件的类属性。

举例来说,在正常模式下,具有一个原始代码模块c,原始代码模块c中包括代码文件a1.py、代码文件a2.py和代码文件a3.py;在内存中,具有与正常模式对应的第二代码模块a;需要将编辑器模式下的第一代码模块b,替换到内存中,即,将与正常模式对应的第二代码模块a替换为与编辑器模式对应的第一代码模块b;内存中的第二代码模块a中包括代码文件a2.py和代码文件a3.py;第一代码模块b中包括代码文件a1.py、代码文件a2.py和代码文件b1.py;电子设备可以确定原始代码模块c与第一代码模块b之间具有同名的代码文件,分别为代码文件a1.py和a2.py;电子设备根据内存中的第二代码模块a,可以确定内存中具有代码文件a2.py,则电子设备可以直接检测内存中的代码文件a2.py的类属性;电子设备可以确定内存中不具有代码文件a1.py,原始代码模块c中是具有代码文件a1.py的,且第一代码模块b具有代码文件a1.py,则电子设备需要从原始代码模块c中获取代码文件a1.py,电子设备将获取到的代码文件a1.py存储到内存中,然后,电子设备检测内存中的代码文件a1.py的类属性。

根据以上方式,可以保证在内存中的代码文件的名字的唯一性,只是内存中的代码文件的内容被替换了。当采用python语言开发游戏的时候,电子设备将当前运行的游戏模式的代码文件放入到一个命名为sys.modules的模块中;采用本实施例的以上方式,可以保证在切换游戏模式的时候,sys.modules的模块中代码文件命名唯一。

例如,当从正常模式切换到编辑器模式的时候,内存中的正常模式下的第二代码模块a下具有代码文件a1.py,其中,第二代码模块a的代码文件a1.py命名为a.a1;编辑器模式下的第一代码模块b下具有代码文件a1.py,其中,第一代码模块b的代码文件a1.py命名为b.a1;采用以上替换方式,可以保证内存中一直具有的是,第二代码模块下的代码文件a1.py,只是代码文件a1.py的内容被替换了,但是名字没有被改变。名字一直都是a.a1。

然后,在进行代码文件的替换的时候,可以将第一代码模块的代码文件编译成一个编译代码模块;然后根据该编译代码模块,生成一个不会被加载sys.modules中的模块;然后,根据该不会被加载内存中的模块,去替换内存中第二代码模块中的代码文件。具体过程,可以参见步骤s204-步骤s206。

举例来说,将第一代码模块的代码文件a1.py,采用如下代码,编译成编译代码模块code_obj:

data=open(path_for_b_a1,"ru").read()+"\n";code_obj=compile(data,path_for_b_a1,"exec",0,false)。

然后根据此编译代码模块code_obj,采用如下代码,生成一个不会被加到内存中的模块module:

module=new.module(name);execcode_objinmodule.__dict_。

然后,采用该模块module替换内存中的sys.modules里面的第二代码模块的代码文件a1.py的内容。

s204、根据与类属性对应的替换方式,将第二代码模块中的同名的代码文件替换为第一代码模块中的同名的代码文件。

可选的,若类属性为静态方法或类方法,则步骤s204具体包括:将第二代码模块中的同名的代码文件的类属性信息替换为第一代码模块中的同名的代码文件的类属性信息,以将第二代码模块中的同名的代码文件替换为第一代码模块中的同名的代码文件。

可选的,若类属性为函数类型,则步骤s204具体包括:采用函数属性替换的方式,将第二代码模块中的同名的代码文件替换为第一代码模块中的同名的代码文件。

本实施例中,已经预先设置了与不同的类属性对应的不同的替换方式;电子设备就可以根据与类属性对应的替换方式,将第二代码模块中的同名的代码文件替换为第一代码模块中的同名的代码文件。

如果类属性为静态方法staticmethod或类方法classmethod,则电子设备可以将内存中同名的代码文件的类属性信息替换为第一代码模块中的同名的代码文件的类属性信息,进而就可以将第二代码模块中的同名的代码文件替换为第一代码模块中的同名的代码文件。

举例来说,对于代码文件a1.py中的类class,遍历类class的属性dict,属性dict例如是名字、词等等;若果确定代码文件a1的类属性为静态方法staticmethod或类方法classmethod,则将内存中的代码文件a1.py的类属性的__func__,替换为第一代码模块中的代码文件a1.py的类属性的__func__。

如果类属性为函数类型,则电子设备可以采用函数属性替换的方式,将内存中的同名的代码文件替换为第一代码模块中的同名的代码文件。

举例来说,对于代码文件a1.py中的类class,遍历类class的所有属性,若确定为类class的函数属性,则电子设备直接进行函数属性替换,不能直接替换函数;这是因为有可能有其他地方对这个函数的引用;但是,对于func_code、func_defaults、func_doc、func_dict其他属性可以直接做替换处理。其中,可以采用预设的函数inspect.isfunction,来判断代码文件a1.py是否为函数属性,即函数类型。

如果类属性不是静态方法,也不是类方法,也不是函数类型,而是其他类型,则可以采用直接替换的方式,将内存中的同名的代码文件替换为第一代码模块中的同名的代码文件

举例来说,对于代码文件a1.py中的类class,遍历类class的所有属性,若确定类class为module行或其他属性,例如,dict、list、tuple等等,则可以直接进行替换、删除、新增处理。

s205、删除第二代码模块中的待删除的代码文件,其中,待删除的代码文件为第一代码模块中没有出现的代码文件。

本实施例中,对于第二代码模块和第一代码模块中的相互独立的代码文件,直接替换即可。

具体来说,对于第一代码模块中没有出现的代码文件,若该代码文件在第二代码模块中出现,则电子设备删除第二代码模块中的该待删除的代码文件。

s206、将第一代码模块中的新增的代码文件存储至内存中,以得到替换后的第二代码模块,其中,新增的代码文件为第二代码模块中没有出现的代码文件。

本实施例中,对于内存中的第二代码模块中没有出现的代码文件,若该代码文件在第一代码模块中出现,则电子设备将第一代码模块中的该新增的代码文件,存储至内存中的第一代码模块中。

举例来说,在正常模式下,具有一个原始代码模块c,原始代码模块c中包括代码文件a1.py、代码文件a2.py和代码文件a3.py;在内存中,具有与正常模式对应的第二代码模块a;需要将编辑器模式下的第一代码模块b,替换到内存中,即,将与正常模式对应的第二代码模块a替换为与编辑器模式对应的第一代码模块b;内存中的第二代码模块a中包括代码文件a2.py和代码文件a3.py;第一代码模块b中包括代码文件a1.py、代码文件a2.py和代码文件b1.py;电子设备可以确定原始代码模块c与第一代码模块b之间具有同名的代码文件,分别为代码文件a1.py和a2.py;电子设备可以确定代码文件a3.py在内存中的第二代码模块a中出现了,但是代码文件a3.py在第一代码模块b没有出现,则电子设备删除内存中的代码文件a3.py;电子设备可以确定代码文件b1.py在第一代码模块b出现了,但是代码文件b1.py在内存中的第二代码模块a中没有出现,则电子设备将代码文件b1.py存储到内存中的第二代码模块a中。

并且,对于代码文件b1.py,电子设备采用如下代码,确定代码文件b1.py的类class的名字:setattr(sys.modules[module.__name__],name,class)。

s207、根据替换后的第二代码模块,运行游戏。

本实施例中,本步骤可以参见图1的步骤s103,不再赘述。

本实施例,通过在切换游戏的游戏模式时,将待转换的游戏模式对应的代码模块,去替换内存中的代码模块,进而将内存中的代码模块重新更改;然后,依据内存中的代码模块运行游戏。实现了不同的游戏模式的逻辑分离,例如,正常模式与编辑器模式的逻辑分离;并且,采用代码模块的替换的方式,使得内存中的代码模块不会大量增加,可以减少内存的占用;加快电子设备的运行速率;并且,本实施例提供的方案,不需要大量的判断逻辑的代码,可以减少游戏的代码开发量,减少游戏开发成本。并且,采用本实施例提供的代码文件的替换方式,可以使得内存中的代码文件被替换了,但是保证了内存中的代码文件的命名的唯一性。

图3为本申请实施例提供的一种游戏模式的切换装置的结构示意图,如图3所示,本实施例的装置,可以包括:

获取单元31,用于在切换游戏的游戏模式时,获取与第一游戏模式对应的第一代码模块,第一游戏模式为待转换的游戏模式;

替换单元32,用于将内存中存储的与第二游戏模式对应的第二代码模块,替换为第一代码模块,得到替换后的第二代码模块,其中,第二游戏模式为当前运行的游戏模式;

运行单元33,用于根据替换后的第二代码模块,运行游戏。

本实施例的装置,可以执行图1所示方法中的技术方案,其具体实现过程和技术原理参见图1所示方法中的相关描述,此处不再赘述。

图4为本申请实施例提供的另一种游戏模式的切换装置的结构示意图,在图3所示实施例的基础上,如图4所示,本实施例的装置,获取单元31,具体用于:确定游戏的操作动作,并获取与第一游戏模式对应的操作动作的第一代码模块。

替换单元32,具体用于:将所处内存中存储的与第二游戏模式对应的操作动作的第二代码模块,替换为操作动作的第一代码模块,以得到替换后的第二代码模块。

第一代码模块中包括至少一个代码文件,第二代码模块中包括至少一个代码文件;第二代码模块具有对应的正常模式下的原始代码模块,原始代码模块中包括至少一个代码文件;替换单元32,包括:

检测模块321,用于对于同名的代码文件,检测同名的代码文件的类属性,其中,同名的代码文件为在原始代码模块和第一代码模块中命名相同的代码文件。

替换模块322,用于根据与类属性对应的替换方式,将第二代码模块中的同名的代码文件替换为第一代码模块中的同名的代码文件。

删除模块323,用于删除第二代码模块中的待删除的代码文件,其中,待删除的代码文件为第一代码模块中没有出现的代码文件。

存储模块324,用于将第一代码模块中的新增的代码文件存储至内存中,以得到替换后的第二代码模块,其中,新增的代码文件为第二代码模块中没有出现的代码文件。

检测模块321,具体用于:检测内存中的第二代码模块中是否具有同名的代码文件;若不具有,则获取原始代码模块中的同名的代码文件,将原始代码模块中的同名的代码文件存储内存中,并检测同名的代码文件的类属性;若具有,则检测同名的代码文件的类属性。

类属性为静态方法或类方法,则替换模块32,具体用于:将第二代码模块中的同名的代码文件的类属性信息替换为第一代码模块中的同名的代码文件的类属性信息,以将第二代码模块中的同名的代码文件替换为第一代码模块中的同名的代码文件。

类属性为函数类型,则替换模块32,具体用于:采用函数属性替换的方式,将第二代码模块中的同名的代码文件替换为第一代码模块中的同名的代码文件。

本实施例提供的装置,还包括:

接收单元41,用于在获取单元41在切换游戏的游戏模式时,获取与第一游戏模式对应的第一代码模块之前,接收切换指令,其中,切换指令用于指示切换游戏模式。

本实施例的装置,可以执行图2所示方法中的技术方案,其具体实现过程和技术原理参见图2所示方法中的相关描述,此处不再赘述。

图5为本申请实施例提供的一种电子设备的结构示意图,如图5所示,本实施例的电子设备50可以包括:处理器51和存储器52。

存储器52,用于存储计算机程序(如实现上述方法的应用程序、功能模块等)、计算机指令等;

上述的计算机程序、计算机指令等可以分区存储在一个或多个存储器42中。并且上述的计算机程序、计算机指令、数据等可以被处理器51调用。

处理器51,用于执行存储器52存储的计算机程序,以实现上述实施例涉及的方法中的各个步骤。

具体可以参见前面方法实施例中的相关描述。

处理器51和存储器52可以是独立结构,也可以是集成在一起的集成结构。当处理器51和存储器52是独立结构时,存储器52、处理器51可以通过总线53耦合连接。

本实施例的电子设备可以执行图1、图2所示方法中的技术方案,其具体实现过程和技术原理参见图1、图2所示方法中的相关描述,此处不再赘述。

此外,本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当用户设备的至少一个处理器执行该计算机执行指令时,用户设备执行上述各种可能的方法。

其中,计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于asic中。另外,该asic可以位于用户设备中。当然,处理器和存储介质也可以作为分立组件存在于通信设备中。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

本申请还提供一种程序产品,程序产品包括计算机程序,计算机程序存储在可读存储介质中,服务器的至少一个处理器可以从可读存储介质读取计算机程序,至少一个处理器执行计算机程序使得服务器实施上述本申请实施例任一的方法。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1