CN107050860B - 地图生成的方法、装置、存储介质和处理器 - Google Patents
地图生成的方法、装置、存储介质和处理器 Download PDFInfo
- Publication number
- CN107050860B CN107050860B CN201710271158.6A CN201710271158A CN107050860B CN 107050860 B CN107050860 B CN 107050860B CN 201710271158 A CN201710271158 A CN 201710271158A CN 107050860 B CN107050860 B CN 107050860B
- Authority
- CN
- China
- Prior art keywords
- room
- components
- coordinate
- grid
- component
- 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
Images
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/50—Controlling the output signals based on the game progress
- A63F13/53—Controlling the output signals based on the game progress involving additional visual information provided to the game scene, e.g. by overlay to simulate a head-up display [HUD] or displaying a laser sight in a shooting game
- A63F13/537—Controlling the output signals based on the game progress involving additional visual information provided to the game scene, e.g. by overlay to simulate a head-up display [HUD] or displaying a laser sight in a shooting game using indicators, e.g. showing the condition of a game character on screen
- A63F13/5378—Controlling the output signals based on the game progress involving additional visual information provided to the game scene, e.g. by overlay to simulate a head-up display [HUD] or displaying a laser sight in a shooting game using indicators, e.g. showing the condition of a game character on screen for displaying an additional top view, e.g. radar screens or maps
-
- 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/50—Controlling the output signals based on the game progress
- A63F13/52—Controlling the output signals based on the game progress involving aspects of the displayed game scene
-
- 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/60—Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
Abstract
本发明公开了一种地图生成的方法、装置、存储介质和处理器。地图生成方法包括:将用于放置房间组件的地图划分为若干格子,其中,若干格子中的每一个格子的面积大于等于面积最大的房间组件的面积,每一个房间组件的边缘中至少有一个边缘有开口,每个格子内最多放置一个房间组件;选择多个房间组件并放置在若干格子的部分或全部格子中,其中,相邻的格子中的房间组件的开口相适配;将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图。通过本发明解决了现有技术无法高效的生成更加灵活多变的地图问题,生成一种便于制作和灵活多变的地图。
Description
技术领域
本发明涉及地图领域,具体而言,涉及地图生成的方法、装置、存储介质和处理器。
背景技术
游戏的吸引力除了来自有趣的挑战,还来自对未知的探索,若玩家多次进入同一个场景,面对着同样的地图,玩家会因为不断做重复的事情而感到厌烦,最终离开这个游戏。同时,让美术人员制作多个同一风格的场景也会花费大量的人力和时间。因此如何实现一个随机地图是很多游戏非常关注的问题。
现有技术中生成随机地图的方法主要有以下三种。方法1,同样的地图,改变玩家出生地点和摄像机方向,营造一种换了地图的假象。方法2,预先制作大小统一,开口位置一致的房间,然后通过一系列算法,从预先制作的房间列表中抽取一定数量的房间进行拼接;方法3,随机生成一批互不覆盖的房间,每次生成一个新房间的时候,如果发现它跟其它房间有重合,那就丢弃掉,然后用随机的通道将它们连接起来。
上述方法存在以下缺点:
方法1:对于多次进入过游戏地图并且有一定观察力的玩家来说,很容易穿帮。
方法2:所有房间大小必须一致,并且为了方便地块的拼接,房间之间的连接处必须相对固定,这样会对美术制作人员的制作有很大的限制,限制自由度的发挥。
方法3:当房间越来越多的时候,生成失败房间的几率就会越来越高。同时随机生成的通道可能会出现互相交叠的情况,并且通道的长度不可控。
上述方法主要是针对一些2D场景或者是房间之间不存在高低差的一些3D场景;在层次感和布局上都会有些欠缺,无法塑造有层次感的3D地图。
针对现有技术中无法高效的生成更加灵活多变的地图的问题,目前尚未提出有效地解决方案。
发明内容
本发明提供了地图生成的方法、装置、存储介质和处理器,以解决现有技术中无法高效的生成更加灵活多变的地图问题。
根据本发明实施例的一个方面,提供了一种地图生成的方法,包括:将用于放置房间组件的地图划分为若干格子,其中,所述若干格子中的每一个格子的面积大于等于面积最大的房间组件的面积,每一个房间组件的边缘中至少有一个边缘有开口,每个格子内最多放置一个房间组件;选择多个房间组件并放置在所述若干格子的部分或全部格子中,其中,相邻的格子中的所述房间组件的开口相适配;将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图。
进一步地,选择所述多个房间组件放置在所述部分或全部格子中包括:选择一个格子和放置在该格子中的房间组件,并将选择出的房间组件放置到对应的格子中;根据已经放置在格子中的房间组件的开口选择放置在相邻格子中的房间组件,并将选择出的房间组件放置在对应的格子中,直至满足预定条件后停止。
进一步地,将选择出的房间组件放置在对应的格子中包括:将选择出的房间组件放置在对应的格子中的随机位置,其中,所述房间组件的边缘不超出所述格子的边缘。
进一步地,选择放置在所述格子中的所述房间组件包括:根据放置在所述格子中的所述房间组件的开口要求,选择与该开口要求对应的房间组件的类型,其中,所述房间组件的类型是根据开口方向的不同来区分的;从所述类型中选择出放置在该格子中的房间组件,其中,每种类型的房间组件中包括一个或多个房间组件。
进一步地,从所述类型中选择出的房间组件的开口在边缘上的位置为随机的。
进一步地,根据已经放置在格子中的房间组件的开口选择放置在相邻格子中的房间组件包括:寻找前一次放置了房间组件的格子的相邻格子,其中,所述相邻格子是与所述房间组件有开口的边缘相邻的所有格子;判断所述相邻格子是否放置有房间组件;如果没有放置房间组件,则将所述相邻的格子作为待放置格子;根据所述前一次放置的房间组件的开口选择放置在所述待放置格子中的房间组件。
进一步地,相邻格子中的房间组件的开口通过相邻格子中的房间组件对应的掩码来适配的,其中,所述掩码用于指示该房间组件的开口方向。
进一步地,所述掩码为二进制数据,其中,所述二进制数据至少包括N位,N位中的每一位均表明在一个方向上是否存在开口。
进一步地,根据已经放置在格子中的房间组件的开口选择放置在相邻格子中的房间组件,并将选择出的房间组件放置在对应的格子中,直至满足预定条件后停止包括:判断待封住的开口数量与已经放置所述房间组件的格子数量之和是否大于格子的总数量,如果小于或等于则根据已经放置在格子中的房间组件的开口从第一房间组件或第二候选房间组件中选择所述房间组件,并将选择出的房间组件放置在对应的格子中,其中,所述第一候选房间组件是封住了前一次放置的所述房间组件的开口同时产生新开口的房间组件,所述第二候选房间组件是封住了前一次放置的所述房间组件的开口而不产生新的开口的房间组件;如果大于则根据已经放置在格子中的房间组件的开口从第二候选房间组件中选择所述房间组件,并将选择出的房间组件放置在对应的格子中后停止放置。
进一步地,选择所述多个房间组件放置在多个格子中之后,将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图之前包括:调整所述房间组件在所述格子中的随机位置使所述房间组件的边缘与所述格子的边缘至少距离一个单位。
进一步地,选择所述多个房间组件放置在多个格子中之后,将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图之前还包括:将每个房间组件在高度上作随机调整。
进一步地,将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图包括:判断将相邻的格子中的所述房间组件的两个开口的连线是沿横坐标轴,还是沿纵坐标轴;当相邻的格子中的所述房间组件的两个开口的连线是沿横坐标轴时,将所述两个开口分别设置为第一坐标和第二坐标,在第一坐标的横坐标和第二坐标之间的横坐标随机选取一个随机横坐标,将随机横坐标与第一坐标的纵坐标组成为第三坐标,将随机横坐标与第二坐标的纵坐标组成为第四坐标,连接第一坐标与第三坐标,连接第三坐标与第四坐标,连接第四坐标与第二坐标形成通道,或,当相邻的格子中的所述房间组件的两个开口的连线是沿纵坐标轴时,将所述两个开口分别设置为第五坐标和第六坐标,在第五坐标的横坐标和第六坐标之间的纵坐标随机选取一个随机纵坐标,将随机纵坐标与第五坐标的横坐标组成为第七坐标,将随机纵坐标与第六坐标的横坐标组成为第八坐标,连接第五坐标与第七坐标,连接第七坐标与第八坐标,连接第八坐标与第六坐标形成通道。
根据本发明实施例的另一个方面,还提供了一种地图生成装置,包括:划分单元,用于将用于放置房间组件的地图划分为若干格子,其中,所述若干格子中的每一个格子的面积大于等于面积最大的房间组件的面积,每一个房间组件的边缘中至少有一个边缘有开口,每个格子内最多放置一个房间组件;选择单元,用于选择多个房间组件并放置在所述若干格子的部分或全部格子中,其中,相邻的格子中的所述房间组件的开口相适配;生成单元,用于将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图。
进一步地,所述选择单元包括:第一选择模块,用于选择一个格子和放置在该格子中的房间组件,并将选择出的房间组件放置到对应的格子中;第二选择模块,用于根据已经放置在格子中的房间组件的开口选择放置在相邻格子中的房间组件,并将选择出的房间组件放置在对应的格子中,直至满足预定条件后停止。
进一步地,所述第一选择模块或所述第二选择模块包括:第一放置子模块,用于将选择出的房间组件放置在对应的格子中的随机位置,其中,所述房间组件的边缘不超出所述格子的边缘。
进一步地,所述第一选择模块或所述第二选择模块包括:第一选择子模块,用于根据放置在所述格子中的所述房间组件的开口要求,选择与该开口要求对应的房间组件的类型,其中,所述房间组件的类型是根据开口方向的不同来区分的;第二选择子模块,用于从所述类型中选择出放置在该格子中的房间组件,其中,每种类型的房间组件中包括一个或多个房间组件。
进一步地,所述第一选择子模块包括:随机子模块,从所述类型中选择出的房间组件的开口在边缘上的位置为随机的。
进一步地,所述第二选择模块包括:寻找子模块,用于寻找前一次放置了房间组件的格子的相邻格子,其中,所述相邻格子是与所述房间组件有开口的边缘相邻的所有格子;第一判断子模块,用于判断所述相邻格子是否放置有房间组件;第二放置子模块,用于如果没有放置房间组件,则将所述相邻的格子作为待放置格子;第三放置子模块,用于根据所述前一次放置的房间组件的开口选择放置在所述待放置格子中的房间组件。
进一步地,所述装置还包括:适配子模块,用于将相邻格子中的房间组件的开口通过相邻格子中的房间组件对应的掩码来进行适配的,其中,所述掩码用于指示该房间组件的开口方向。
进一步地,所述装置还包括:所述掩码为二进制数据,其中,所述二进制数据至少包括N位,N位中的每一位均表明在一个方向上是否存在开口。
进一步地,第二选择模块包括:第二判断子模块,用于判断待封住的开口数量与已经放置所述房间组件的格子数量之和是否大于格子的总数量,如果小于或等于则根据已经放置在格子中的房间组件的开口从第一候选房间组件或第二候选房间组件中选择所述房间组件,并将选择出的房间组件放置在对应的格子中,其中,所述第一候选房间组件是封住了前一次放置的所述房间组件的开口同时产生新开口的房间组件,所述第二候选房间组件是封住了前一次放置的所述房间组件的开口而不产生新的开口的房间组件;第三判断子模块,用于如果大于则根据已经放置在格子中的房间组件的开口从第二候选房间组件中选择所述房间组件,并将选择出的房间组件放置在对应的格子中后停止放置。
进一步地,所述装置还包括:第一调整单元,用于在选择所述多个房间组件放置在所述多个格子中之后,将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图之前,调整所述房间组件在所述格子中的随机位置使所述房间组件的边缘与所述格子的边缘至少距离一个单位。
进一步地,所述装置还包括:第二调整单元,用于在选择所述多个房间组件放置在所述多个格子中之后,将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图之前,将每个房间组件在高度上作随机调整。
进一步地,生成单元包括:判断模块,用于判断将相邻的格子中的所述房间组件的两个开口的连线是沿横坐标轴,还是沿纵坐标轴;第一连接模块,用于当相邻的格子中的所述房间组件的两个开口的连线是沿横坐标轴时,将所述两个开口分别设置为第一坐标和第二坐标,在第一坐标的横坐标和第二坐标之间的横坐标随机选取一个随机横坐标,将随机横坐标与第一坐标的纵坐标组成为第三坐标,将随机横坐标与第二坐标的纵坐标组成为第四坐标,连接第一坐标与第三坐标,连接第三坐标与第四坐标,连接第四坐标与第二坐标形成通道,或,第二连接模块,用于当相邻的格子中的所述房间组件的两个开口的连线是沿纵坐标轴时,将所述两个开口分别设置为第五坐标和第六坐标,在第五坐标的横坐标和第六坐标之间的纵坐标随机选取一个随机纵坐标,将随机纵坐标与第五坐标的横坐标组成为第七坐标,将随机纵坐标与第六坐标的横坐标组成为第八坐标,连接第五坐标与第七坐标,连接第七坐标与第八坐标,连接第八坐标与第六坐标形成通道。
根据本发明实施例的另一个方面,还提供给了一种存储介质,所述存储介质上保存有程序,所述程序被运行时执行上所述的方法。
根据本发明实施例的另一个方面,还提供给了一种处理器,所述程序被运行时执行上述的方法。
根据本发明实施例中,采用将用于放置房间组件的地图划分为若干格子,其中,所述若干格子中的每一个格子的面积大于等于面积最大的房间组件的面积,每一个房间组件的边缘中至少有一个边缘有开口,每个格子内最多放置一个房间组件;选择多个房间组件并放置在所述若干格子的部分或全部格子中,其中,相邻的格子中的所述房间组件的开口相适配;将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图。通过本发明解决了现有技术无法高效的生成更加灵活多变的地图问题,生成一种便于制作和灵活多变的地图。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种地图生成方法的流程图;
图2是根据本发明实施例的一种地图生成方法的房间组件类型示意图;
图3是根据本发明实施例的一种地图生成方法的房间组件特殊类型示意图;
图4是根据本发明实施例的一种地图生成方法的通道类型示意图;
图5是根据本发明实施例的一种地图生成方法的有高度差的通道示意图;
图6是根据本发明实施例的一种地图生成方法的掩码使用示意图;
图7是根据本发明实施例的一种地图生成方法的房间连接示意图;
图8是根据本发明实施例的一种地图生成方法的具体流程图;
图9是根据本发明实施例的一种地图生成方法的地图生成示意图;
图10是根据本发明实施例的一种地图生成装置的结构图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
下面对本实施例中出现的参数名词的含义进行说明:
Block:划分地图的格子;
Room:房间预制组件;
Aisle:通道预制组件;
tile:Block、Room和Aisle大小的最小单位;
h:通道出入口高度差的最小单位;
mask:预制组件用于匹配出口的二进制码;
RoomNum:地图最大房间数(除去出入口房间)
DesignatedRooms:必出的房间组件列表
NormalRooms:房间组件列表;
NormalAisles:通道组件列表;
block_map:地图格子表;
block_map[i][j]表示第i行第j列的格子;
room_list:最终选出的房间列表;
open_blocks:需要填充Room的Block;
room_num:当前选出的Room的数量;
open_num:当前没有堵上的开口数量。
本发明实施例提供了一种地图生成方法。图1是根据本发明实施例的一种地图生成方法的流程图。如图1所示,该方法包括如下步骤:
步骤S102,将用于放置房间组件的地图划分为若干格子,其中,若干格子中的每一个格子的面积大于等于面积最大的房间组件的面积,每一个房间组件的边缘中至少有一个边缘有开口,每个格子内最多放置一个房间组件;将地图按一定格子大小进行划分,可以使房间在地图中的分布相对更加均匀一些,不会出现房间相互交叠的情况,同时通过设置格子的大小可以控制房间之间的疏密程度,间接地也可以将房间之间的通道长度控制在有效的范围之内,并且通道之间也不会出现交叠。
步骤S104,选择多个房间组件并放置在若干格子的部分或全部格子中,其中,相邻的格子中的房间组件的开口相适配;
步骤S106,将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图。相邻的房间组件之间用通道进行连接,一方面可以使的房间有不同的组合从而增加玩家的探索趣味,另一方面房间不用再制作成同样的规格大小,也就可以生成更加灵活多变的地图。
上述步骤通过格子控制房间组件的整体数量以及控制房间组件之间的疏密度,还通过格子控制房间组件的大小规格以及房间组件的开口位置,实现了美术人员可以自由制作房间,以及避免了房间组件相互交叠的情况,与现有技术相比,本实施例解决了现有技术中无法高效的生成更加灵活多变的地图的问题,生成一种便于制作和灵活多变的地图。
在步骤S104中选择多个房间组件放置在部分或全部格子中需要相邻的格子中的房间组件的开口相适配,在一个可选地实施方式中,即选择一个格子和放置在该格子中的房间组件,并将选择出的房间组件放置到对应的格子中;根据已经放置在格子中的房间组件的开口选择放置在相邻格子中的房间组件,并将选择出的房间组件放置在对应的格子中,直至满足预定条件后停止。
通过上述方法根据已经放置在格子中的房间组件的开口方向选择开口方向对的上的房间组件,放入到相邻的格子中,不必像现有技术中那样需要保证房间的大小一致并且开口连接处需要固定,本实施例只需要保证相邻格子中的房间组件的开口方向对的上即可,也就是只要相邻格子中的房间组件的相邻边缘均有开口,并且数量一致即可,减少了对房间组件的大小及开口位置的限制,从而使得地图的生成更加灵活多变,同时便于美术人员的发挥制作地图。
上述步骤中开口可以是每个房间组件的每个方向上的边缘最多一个或者一个以上。优选控制每个房间组件的每个方向上的边缘最多一个开口,可以简化整个地图生成过程,提高生成算法的效率。
上述步骤中选择一个格子和放置在该格子中的房间组件后,在一个可选地实施方式中,需要将选择出的房间组件放置在对应的格子中的随机位置,其中,预制房间组件的边缘不超出格子的边缘。而在选择一个格子和放置在该格子中的房间组件时,第一个所选择的房间组件可以有两种情况,第一种是所选的待放置的格子中必须放置特殊的房间组件,第二种是待放置的格子中不必放置特殊的房间组件。第一种情况用于第一个随机选择的放置房间组件的格子是随机的,但是该格子的位置在地图的边缘,所以此时必须从特殊的房间组件中随机选择放置在该格子中的房间组件,然后将选择出的房间组件放置在该格子中的随机位置。第二种情况是指第一次所选择放置房间组件的格子不是位于边缘的格子,此时放置在该格子中的房间组件可以任意选择,只要房间组件的边缘不超出格子的边缘即可。
通过上述步骤中对格子的随机选择,对房间组件的随机选择以及在格子中房间组件的位置的随机选择,增加的地图的灵活多变性。
选择放置在格子中的房间组件是从预先配置好的房间组件的类型中进行选择的,在一个可选地实施方式中,首先根据放置在格子中的房间组件的开口要求,选择与该开口要求对应的房间组件的类型,其中,房间组件的类型是根据开口方向的不同来区分的;其次,从类型中选择出放置在该格子中的房间组件,其中,每种类型的房间组件中包括一个或多个房间组件。
预先配置好的地图组件主要分为两类,一类为房间组件(Room),一类为通道组件(Aisle),下面举例详细介绍下地图预制组件的种类以及其制作规范:
房间组件(Room)的长宽通常都是tile的整数倍,为方便制作和拼接,每个Room至少都会有一个开口,并且在每个方向最多只有一个开口。因此按照此规则,房间最多有15中类型,分别为1个开口的4种,2个开口的6种,3个开口的4种,4个开口的1种。如图2所示,图2是根据本发明实施例的一种地图生成方法的房间组件类型示意图;外围黑色方形边框标示出一个Room的大小,中间多边形部分为Room的实体部分,每个中间部分的一个小块是代表一个tile。对于每种类型的房间本实施例都会制作多份,以保证随机地图更多样化。同时Room的制作也不拘泥于统一的规格,对于一些特殊Room,遵循上述规则的前提下,其大小和形状都可随意调整,例如,图3就是一个有3个方向开口的Room,其中,图3是根据本发明实施例的一种地图生成方法的房间组件特殊类型示意图。
通道组件(Aisle)相对于Room在规格上要小很多,一般所有的Aisle都是按1个tile的规格来制作的。并且所有的Aisle可以有两个开口,一个入口和一个出口。因此如图4所示,图4是根据本发明实施例的一种地图生成方法的通道类型示意图;在Aisle只有两个开口时,Aisle只存在6种类型,为了能制作出有高低起伏的地图,Aisle在此基础上还需要制作出高低差,以横向的通道为例,本实施例可以按照图5制作出一个右边出口高于左边入口h高度的Aisle组件,同样也可以反过来制作一个右边出口低于左边入口h高度的Aisle组件,其中,图5是根据本发明实施例的一种地图生成方法的有高度差的通道示意图。因此对于上述的6种类型Aisle,每种都可扩展出两个存在高度差的Aisle,因此最终需要制作18个Aisle预制组件。
上述房间组件在预先制作时,房间组件的开口在每个边缘上的位置也可以是随机的,在一个可选地实施方式中,从类型中选择出的房间组件的开口在边缘上的位置为随机的。也可以不考虑房间组件在边缘上的开口的位置是否是随机的,仅仅考虑开口的数量作为房间组件的分类标准,也就是将房间组件某个边缘上是否存在开口作为划分房间类型的标准,如果存在开口,无论该开口在该边缘的什么位置都将该房间组件划为一类。当每个房间组件的每个方向上的边缘有一个以上的开口时,也可以将多个开口的分类等同于一个开口的分类。
通过上述步骤增加了地图的多样性和变化,同时又简化了房间组件的分类和运算。
在上述步骤中,在随机挑选出第一个房间组件随机放到一个格子的随机位置后,再根据第一个放置的房间组件在其余未放置房间组件的格子中放置第二个房间组件,依次放置第三个房间组件、第四个房间组件……直到满足地图绘制结束的条件为止,即始终根据前一个已经放置在格子中的房间组件的开口选择放置在相邻格子中的房间组件,在放置房间组件之间,需要查看下待放置房间组件的格子是否已经被放置了房间组件,找出空的并且符合放置条件的格子再放置房间组件,在一个可选地实施方式中,首先,寻找前一次放置了房间组件的格子的相邻格子,其中,相邻格子是与房间组件有开口的边缘相邻的所有格子;其次,判断相邻格子是否放置有房间组件;如果没有放置房间组件,则将相邻的格子作为待放置格子;最后,根据前一次放置的房间组件的开口选择放置在待放置格子中的房间组件。
通过上述步骤,在每次放置房间组件之前都判断下需要放置的格子是否为空,从而减小运算量,提高地图的生成效率。
上述步骤中,判断地图中的每个格子是否需要放置房间组件以及放置房间组件的类型时,需要使用预先制定的掩码来进行适配,在一个可选地实施方式中,即相邻格子中的房间组件的开口通过相邻格子中的房间组件对应的掩码来适配的,其中,掩码用于指示该房间组件的开口方向。优选地,掩码为二进制数据,其中,二进制数据至少包括N位,N位中的每一位均表明在一个方向上是否存在开口。
通过上述步骤更加高效的寻找到可以匹配的房间组件。
下面举例对掩码进行说明:
在上一个例子中提到过同一类型场景的Room组件根据开口方向可以分成15个子系列,程序中每个出口的方向用一个字节的低四位表示,每一位表示一个方向。如表1所示,字节的第一位若是1则表示区块的西面有出口,第二位表示东面,第三位表示南面,第四位表示北面,房间组件的开口方向匹配在随机程序选择房间组件时起着重大作用。
表1
为方便理解mask(掩码)的使用方法,在这里列举一个掩码使用的例子,如图6所示,图6是根据本发明实施例的一种地图生成方法的掩码使用示意图。在生成随机地图的过程中,BlockA的北面BlockB中有1个开口向南的Room,在其西面BlockC中有个开口向东的Room,然后其他方向的Block中都没有Room,现在如果要选取一个Room放置到该BlockA中,则该Room必须满足在西北方向都有开口,通过查询上表可知西北方向开口的二进制码为00001001,因此只要Room的mask二进制码满足等于00001001时,即可堵上上面两个开口。通过mask二进制码匹配的机制,只需要通过一次计算判断便可知道该Room是否满足条件,上述判断方法比起逐个开口方向去比较要高效很多。
上述在格子中放置房间组件的过程直到满足地图绘制结束的条件为止。计算已经选出的房间数和还没封闭的开口数,如果数量已经达到最大房间数时,将所有开口用只有一个开口的房间堵上,不然可继续放置房间组件,在一个可选地实施方式中,每次放置房间组件之后都需要判断待封住的开口数量与已经放置预制房间组件的格子数量之和是否大于格子的总数量,如果小于或等于则根据已经放置在格子中的房间组件的开口从第一候选房间组件或第二候选房间组件中选择房间组件,并将选择出的房间组件放置在对应的格子中,其中,第一候选房间组件是封住了前一次放置的房间组件的开口同时产生新开口的房间组件,第二候选房间组件是封住了前一次放置的房间组件的开口而不产生新的开口的房间组件;如果大于则根据已经放置在格子中的房间组件的开口从第二候选房间组件中选择房间组件,并将选择出的房间组件放置在对应的格子中后停止放置。
通过上述判断过程使得最终所生成的地图的边缘没有未封住的开口,从而形成一副完整的地图,避免在使用时出现玩家走出地图的情况。在生成完整地图的同时,又保证了地图的随机性和灵活性,使得生成的地图多种多样,变化程度高,不会使玩家枯燥或者发现地图重叠。
将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图之前,选择多个房间组件放置在多个格子中之后,在一个可选地实施方式中,需要调整房间组件在格子中的随机位置使房间组件的边缘与格子的边缘至少距离一个单位。这是为了保证两个房间组件Room直接能有空间添加连接的通道组件Aisle。
在将所有的房间组件选择好并放置在格子中后,在一个可选地实施方式中,需要对每一个房间组件的高度做随机调整,使得相邻格子中的房间有高度差,从而形成3D的地图,地图在纵向上也有变化可以增加地图的多变性,生成更加多样的地图。例如,对所有Room做一个高度上的随机,随机范围可以在(-h,0,h)中选取。
在调整好了各个房间的随机高度之后,再将相邻格子中的房间用通道组件进行连接,在一个可选地实施方式中,判断将相邻的格子中的房间组件的两个开口的连线是沿横坐标轴,还是沿纵坐标轴;当相邻的格子中的房间组件的两个开口的连线是沿横坐标轴时,将两个开口分别设置为第一坐标和第二坐标,在第一坐标的横坐标和第二坐标之间的横坐标随机选取一个随机横坐标,将随机横坐标与第一坐标的纵坐标组成为第三坐标,将随机横坐标与第二坐标的纵坐标组成为第四坐标,连接第一坐标与第三坐标,连接第三坐标与第四坐标,连接第四坐标与第二坐标形成通道,或,当相邻的格子中的房间组件的两个开口的连线是沿纵坐标轴时,将两个开口分别设置为第五坐标和第六坐标,在第五坐标的横坐标和第六坐标之间的纵坐标随机选取一个随机纵坐标,将随机纵坐标与第五坐标的横坐标组成为第七坐标,将随机纵坐标与第六坐标的横坐标组成为第八坐标,连接第五坐标与第七坐标,连接第七坐标与第八坐标,连接第八坐标与第六坐标形成通道。
上述将相邻格子中的房间用通道进行连接的过程中,房间之间可以存在一定的高度差别,用通道组件来协调房间之间的高度差,如果两个房间存在高度差,则与房间开口相接的通道用有高度差的通道块,其它地方都用普通通道块。如图7,图7是根据本发明实施例的一种地图生成方法的房间连接示意图。白色线为画出的格子,“#”号围住的是房间,房间之间由“║”,“═”,“╔”,“╗”,“╝”,“╚”这样的通道块进行连接。
下面结合一个可选的实施方式举例对上述所有步骤进行说明:
为方便起见,以下所涉及到的坐标的最小单位都是按tile来作为标准,随机地图的生成过程为:
1.判断DesignatedRooms是否为空,如不为空则在该列表中随机选取一个Room,否则从NormalRooms(预先制定好的房间组件类型)中随机选取一个Room加入到room_list(所选择的房间组件的列表)中,并将其放入到地图中的一个格子中,为方便理解本实施例假设将其放入block_map[0][0]中,设置room_num(放入格子中的房间组件的数量)为1,然后根据该Room的开口数量设置open_num(开口数量),并更新open_blocks(有开口的格子),详细描述见子算法1。
2.判断open_num加上room_num是否大于RoomNum(格子的总数量),如果是则跳到4。否则跳转到步骤3。
3.按顺序从open_blocks中取出一个Block,根据Block相邻格子中房间组件放置的情况,从NormalRooms列表中挑选出一个合适的组件Room进行放置,详见子算法2,并将其加入到room_list中。此时根据Room堵上的开口和新增的开口情况去更新open_num,同时room_num加1。同时新添加进来的Room可能产生新的开口,可根据算法1更新open_blocks。执行完毕后跳转到2,直到open_blocks为空。
4.如果open_blocks不为空,则按顺序遍历open_blocks,按照子算法2挑选出合适的Room放入对应的Block中,并将其都添加到room_list中。
5.随机调整Room在其对应Block中的位置,保证Room在Block中,并且Room的边缘和Block的边缘至少相隔一个tile,这是为了保证两个Room直接能有空间添加连接的Aisle,同时对所有Room做一个高度上的随机,随机范围在(-h,0,h)中选取。
6.判断所有相邻Block中的Room是否有开口对接,如果有则按照子算法3在其之间生成通道,最终形成一个完全闭合的随机地图。
具体流程图如图8所示,图8是根据本发明实施例的一种地图生成方法的具体流程图。子算法1:判断地图的格子是否需要填入房间组件
由于每向Block中添加一个新的Room,就可能会产生新的出口,为保证最终地图的闭合性,该出口方向相邻的Block中需要去添加新的Room。因此该算法可简单归纳如下:
当已经在block_map[i][j]中添加了一个Room,根据Room的开口方向检测相邻Block。
当Room有东面方向开口,检测block_map[i][j+1],若果block_map[i][j+1]中没有Room,则将block_map[i][j+1]添加到open_blocks中。
当Room有南面方向开口,检测block_map[i+1][j],若果block_map[i+1][j]中没有Room,则将block_map[i+1][j]添加到open_blocks中。
当Room有西面方向开口,检测block_map[i][j-1],若果block_map[i][j-1]中没有Room,则将block_map[i][j-1]添加到open_blocks中。
当Room有北面方向开口,检测block_map[i-1][j],若果block_map[i-1][j]中没有Room,则将block_map[i-1][j]添加到open_blocks中。
本实施例可参考图9来对该方法进行理解,图9是根据本发明实施例的一种地图生成方法的地图生成示意图。当本实施例向地图的BlockA(格子A)中放入一个开口向下的Room,根据Room开口方向本实施例找到其下方的BlockB,为保证最终地图的闭合性,在接下来的Room摆放中,BlockB必将会放入一个Room,因此将BlockB添加到open_blocks中。接下来在上述的算法的步骤3中,当本实施例遍历到BlockB时,选取了一个3个方向开口的Room填充到BlockB中。根据Room的开口方向本实施例遍历BlockA,BlockC和BlockD,由于BlockA中已经填充了Room,因此BlockA不用添加到open_blocks中,只需将BlockC和BlockD添加到open_blocks中。
子算法2:寻找匹配的房间组件
首先,需要生成一个过滤二进制码filter_mask,和一个开口二进制码open_mask,当需要向block_map[i][j]中添加了一个Room时,对其4个方向上的Block进行检测,如果Block中有Room,则将filter_mask的相应字节位标记为1,不然标记为0。如果该Block中有Room且Room有开口方向朝向block_map[i][j],则将open_mask相应字节位标记为1,否则标记为0,以图6为例,BlockA的filter_mask为00001011,open_mask为00001001。
然后,遍历NormalRooms中所有Room的mask,将mask与filter_mask做与操作,当结果等于open_mask的时候,将该Room放入到候选Room列表中。这里将会把候选的Room分为两类,一类是堵住所有开口并不会产生新的开口的Room,其mask将于open_mask完全一致,这里称其为CloseRooms(第二候选房间组件),另一类为堵住了原来开口,同时产生新的开口的,其mask与open_mask不一致,这里称其为OpenRooms(第一候选房间组件)。
最后,如果是在上述算法的步骤4中调用该方法,则优先从CloseRooms中选取一个作为最终结果。否则优先从OpenRooms中选取一个Room作为最终结果,如果OpenRooms为空,再从CloseRooms中选取一个Room作为最终结果返回。
子算法3:房间组件之间通道的生成
本算法主要是解决两个相邻格子中的房间之间的连通问题,其主要步骤如下:
1.从room_list中取出一个Room,如果room_list已空,跳转到步骤6,否则根据该Room的开口方向找到其相邻Block中的Room,跳转步骤2。
2.检查两个Room相对开口的走向,如果是南北向,跳转的到步骤3,如果是东西向,跳转到步骤4。
3.先找出两个Room开口所在位置,以图9为例,BlockA和BlockB中的开口位置分别为(x1,y1)和(x2,y2),在y1到y2之间随机取一个值yn,然后本实施例可以在(x1,y1)和(x2,y2)之间生成如下一条3段式路径:(x1,y1),(x1,y1-1)……(x1,yn),(x1-1,yn)……(x2,yn),(x2,yn-1)……(x2,y2)。跳转到步骤5.
4.先找出两个Room开口所在位置,以图9为例,BlockB和BlockC中的开口位置分别为(x3,y3)和(x4,y4),在x3到x4之间随机取一个值xn,然后本实施例可以在(x3,y3)和(x4,y4)之间生成如下一条3段式路径:(x3,y3),(x3-1,y3)……(xn,y3),(xn,y3-1)……(xn,y4),(xn-1,y4)……(x4,y4)。跳转到步骤5
5.根据路径的走向为每个路点生成一个aisle_mask路点二进制码,在NormalAisles中挑选与aisle_mask完全一致的Aisle,如果路径的起始点存在高度差,则起始点的位置采用有高度差的Aisle,保证中间路点的Aisle都处于0高度。
6.完成所有通道的生成。
本发明实施例还提供了一种地图生成装置,该装置可以通过划分单元102、选择单元104、生成单元106实现其功能。需要说明的是,本发明实施例的一种地图生成装置可以用于执行本发明实施例所提供的一种地图生成方法,本发明实施例的一种地图生成方法也可以通过本发明实施例所提供的一种地图生成装置来执行。图10是根据本发明实施例的一种地图生成装置的示意图。如图10所示,图10是根据本发明实施例的一种地图生成装置的结构图。一种地图生成装置包括:
划分单元102,用于将用于放置房间组件的地图划分为若干格子,其中,若干格子中的每一个格子的面积大于等于面积最大的房间组件的面积,每一个房间组件的边缘中至少有一个边缘有开口,每个格子内最多放置一个房间组件;
选择单元104,用于选择多个房间组件并放置在若干格子的部分或全部格子中,其中,相邻的格子中的房间组件的开口相适配;
生成单元106,用于将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图。
在一个可选地实施方式中,生成单元106包括:第一选择模块,用于选择一个格子和放置在该格子中的房间组件,并将选择出的房间组件放置到对应的格子中;第二选择模块,用于根据已经放置在格子中的房间组件的开口选择放置在相邻格子中的房间组件,并将选择出的房间组件放置在对应的格子中,直至满足预定条件后停止。
在一个可选地实施方式中,第一选择模块或第二选择模块包括:第一放置子模块,用于将选择出的房间组件放置在对应的格子中的随机位置,其中,预制房间组件的边缘不超出格子的边缘。
在一个可选地实施方式中,第一选择模块或第二选择模块包括:第一选择子模块,用于根据放置在格子中的房间组件的开口要求,选择与该开口要求对应的房间组件的类型,其中,房间组件的类型是根据开口方向的不同来区分的;第二选择子模块,用于从类型中选择出放置在该格子中的房间组件,其中,每种类型的房间组件中包括一个或多个房间组件。
在一个可选地实施方式中,第一选择子模块包括:随机子模块,从类型中选择出的房间组件的开口在边缘上的位置为随机的。
在一个可选地实施方式中,第二选择模块包括:寻找子模块,用于寻找前一次放置了房间组件的格子的相邻格子,其中,相邻格子是与房间组件有开口的边缘相邻的所有格子;第一判断子模块,用于判断相邻格子是否放置有房间组件;第二放置子模块,用于如果没有放置房间组件,则将相邻的格子作为待放置格子;第三放置子模块,用于根据前一次放置的房间组件的开口选择放置在待放置格子中的房间组件。
在一个可选地实施方式中,适配子模块,相邻格子中的房间组件的开口通过相邻格子中的房间组件对应的掩码来适配的,其中,掩码用于指示该房间组件的开口方向。
在一个可选地实施方式中,掩码子模块,掩码为二进制数据,其中,二进制数据至少包括N位,N位中的每一位均表明在一个方向上是否存在开口。
在一个可选地实施方式中,第二选择模块包括:第二判断子模块,用于判断待封住的开口数量与已经放置预制房间组件的格子数量之和是否大于格子的总数量,如果小于或等于则根据已经放置在格子中的房间组件的开口从第一候选房间组件或第二候选房间组件中选择房间组件,并将选择出的房间组件放置在对应的格子中,其中,第一候选房间组件是封住了前一次放置的房间组件的开口同时产生新开口的房间组件,第二候选房间组件是封住了前一次放置的房间组件的开口而不产生新的开口的房间组件;第三判断子模块,用于如果大于则根据已经放置在格子中的房间组件的开口从第二候选房间组件中选择房间组件,并将选择出的房间组件放置在对应的格子中后停止放置。
在一个可选地实施方式中,装置还包括:第一调整单元,用于在选择多个房间组件放置在多个格子中之后,将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图之前,调整房间组件在格子中的随机位置使房间组件的边缘与格子的边缘至少距离一个单位。
在一个可选地实施方式中,装置还包括:第二调整单元,用于在选择多个房间组件放置在多个格子中之后,将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图之前,将每个房间组件在高度上作随机调整。
在一个可选地实施方式中,生成单元106包括:判断模块,用于判断将相邻的格子中的房间组件的两个开口的连线是沿横坐标轴,还是沿纵坐标轴;第一连接模块,用于当相邻的格子中的房间组件的两个开口的连线是沿横坐标轴时,将两个开口分别设置为第一坐标和第二坐标,在第一坐标的横坐标和第二坐标之间的横坐标随机选取一个随机横坐标,将随机横坐标与第一坐标的纵坐标组成为第三坐标,将随机横坐标与第二坐标的纵坐标组成为第四坐标,连接第一坐标与第三坐标,连接第三坐标与第四坐标,连接第四坐标与第二坐标形成通道,或,第二连接模块,用于当相邻的格子中的房间组件的两个开口的连线是沿纵坐标轴时,将两个开口分别设置为第五坐标和第六坐标,在第五坐标的横坐标和第六坐标之间的纵坐标随机选取一个随机纵坐标,将随机纵坐标与第五坐标的横坐标组成为第七坐标,将随机纵坐标与第六坐标的横坐标组成为第八坐标,连接第五坐标与第七坐标,连接第七坐标与第八坐标,连接第八坐标与第六坐标形成通道。
上述一种地图生成的装置实施例是与一种地图生成的方法相对应的,所以对于有益效果不再赘述。通过上述实施例的分析描述,相对于现有技术检测来说,上述实施例中的部分可选实施方式有以下技术上的效果:
1.提供一套可供策划配置的方案,可以控制房间的整体数量,以及房间之间的疏
密度。
2.房间大小规格以及开口位置可由美术自由返回。
3.更高效的地图生成算法。
4.实现房间之间有高低落差。
本发明实施例提供了一种存储介质,存储介质包括存储的程序,其中,在程序运行时控制存储介质所在设备执行上述方法。
本发明实施例提供了一种处理器,处理器包括处理的程序,其中,在程序运行时控制处理器所在设备执行上述方法。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、移动终端、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种地图生成方法,其特征在于,包括:
将用于放置房间组件的地图划分为若干格子,其中,所述若干格子中的每一个格子的面积大于等于面积最大的房间组件的面积,每一个房间组件的边缘中至少有一个边缘有开口,每个格子内最多放置一个房间组件;
选择多个房间组件并放置在所述若干格子的部分或全部格子中,其中,相邻的格子中的所述房间组件的开口相适配;
将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图;
其中,选择所述多个房间组件放置在所述部分或全部格子中包括:选择一个格子和放置在该格子中的房间组件,并将选择出的房间组件放置到对应的格子中;根据已经放置在格子中的房间组件的开口选择放置在相邻格子中的房间组件,并将选择出的房间组件放置在对应的格子中,直至满足预定条件后停止。
2.根据权利要求1所述的方法,其特征在于,将选择出的房间组件放置在对应的格子中包括:
将选择出的房间组件放置在对应的格子中的随机位置,其中,所述房间组件的边缘不超出所述格子的边缘。
3.根据权利要求1所述的方法,其特征在于,选择放置在所述格子中的所述房间组件包括:
根据放置在所述格子中的所述房间组件的开口要求,选择与该开口要求对应的房间组件的类型,其中,所述房间组件的类型是根据开口方向的不同来区分的;
从所述类型中选择出放置在该格子中的房间组件,其中,每种类型的房间组件中包括一个或多个房间组件。
4.根据权利要求3所述的方法,其特征在于,从所述类型中选择出的房间组件的开口在边缘上的位置为随机的。
5.根据权利要求1所述的方法,其特征在于,根据已经放置在格子中的房间组件的开口选择放置在相邻格子中的房间组件包括:
寻找前一次放置了房间组件的格子的相邻格子,其中,所述相邻格子是与所述房间组件有开口的边缘相邻的所有格子;
判断所述相邻格子是否放置有房间组件;
如果没有放置房间组件,则将所述相邻的格子作为待放置格子;
根据所述前一次放置的房间组件的开口选择放置在所述待放置格子中的房间组件。
6.根据权利要求1至5中任一项所述的方法,其特征在于,相邻格子中的房间组件的开口通过相邻格子中的房间组件对应的掩码来适配的,其中,所述掩码用于指示该房间组件的开口方向。
7.根据权利要求6所述的方法,其特征在于,所述掩码为二进制数据,其中,所述二进制数据至少包括N位,N位中的每一位均表明在一个方向上是否存在开口。
8.根据权利要求1所述的方法,其特征在于,根据已经放置在格子中的房间组件的开口选择放置在相邻格子中的房间组件,并将选择出的房间组件放置在对应的格子中,直至满足预定条件后停止包括:
判断待封住的开口数量与已经放置所述房间组件的格子数量之和是否大于格子的总数量,如果小于或等于则根据已经放置在格子中的房间组件的开口从第一候选房间组件或第二候选房间组件中选择所述房间组件,并将选择出的房间组件放置在对应的格子中,其中,所述第一候选房间组件是封住了前一次放置的所述房间组件的开口同时产生新开口的房间组件,所述第二候选房间组件是封住了前一次放置的所述房间组件的开口而不产生新的开口的房间组件;
如果大于则根据已经放置在格子中的房间组件的开口从第二候选房间组件中选择所述房间组件,并将选择出的房间组件放置在对应的格子中后停止放置。
9.根据权利要求1所述的方法,其特征在于,选择所述多个房间组件放置在多个格子中之后,将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图之前包括:
调整所述房间组件在所述格子中的随机位置使所述房间组件的边缘与所述格子的边缘至少距离一个单位。
10.根据权利要求1所述的方法,其特征在于,选择所述多个房间组件放置在多个格子中之后,将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图之前还包括:
将每个房间组件在高度上作随机调整。
11.根据权利要求1所述的方法,其特征在于,将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图包括:
判断将相邻的格子中的所述房间组件的两个开口的连线是沿横坐标轴,还是沿纵坐标轴;
当相邻的格子中的所述房间组件的两个开口的连线是沿横坐标轴时,将所述两个开口分别设置为第一坐标和第二坐标,在第一坐标的横坐标和第二坐标之间的横坐标随机选取一个随机横坐标,将随机横坐标与第一坐标的纵坐标组成为第三坐标,将随机横坐标与第二坐标的纵坐标组成为第四坐标,连接第一坐标与第三坐标,连接第三坐标与第四坐标,连接第四坐标与第二坐标形成通道,或,
当相邻的格子中的所述房间组件的两个开口的连线是沿纵坐标轴时,将所述两个开口分别设置为第五坐标和第六坐标,在第五坐标的横坐标和第六坐标之间的纵坐标随机选取一个随机纵坐标,将随机纵坐标与第五坐标的横坐标组成为第七坐标,将随机纵坐标与第六坐标的横坐标组成为第八坐标,连接第五坐标与第七坐标,连接第七坐标与第八坐标,连接第八坐标与第六坐标形成通道。
12.一种地图生成装置,其特征在于,包括:
划分单元,用于将用于放置房间组件的地图划分为若干格子,其中,所述若干格子中的每一个格子的面积大于等于面积最大的房间组件的面积,每一个房间组件的边缘中至少有一个边缘有开口,每个格子内最多放置一个房间组件;
选择单元,用于选择多个房间组件并放置在所述若干格子的部分或全部格子中,其中,相邻的格子中的所述房间组件的开口相适配;
生成单元,用于将相邻的格子中的房间组件之间的开口通过匹配的通道连接生成地图;
其中,所述选择单元包括:第一选择模块,用于选择一个格子和放置在该格子中的房间组件,并将选择出的房间组件放置到对应的格子中;第二选择模块,用于根据已经放置在格子中的房间组件的开口选择放置在相邻格子中的房间组件,并将选择出的房间组件放置在对应的格子中,直至满足预定条件后停止。
13.一种存储介质,其特征在于,所述存储介质上保存有程序,所述程序被运行时执行权利要求1至11中任一项所述的方法。
14.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序被运行时执行权利要求1至11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710271158.6A CN107050860B (zh) | 2017-04-24 | 2017-04-24 | 地图生成的方法、装置、存储介质和处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710271158.6A CN107050860B (zh) | 2017-04-24 | 2017-04-24 | 地图生成的方法、装置、存储介质和处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107050860A CN107050860A (zh) | 2017-08-18 |
CN107050860B true CN107050860B (zh) | 2021-02-12 |
Family
ID=59603484
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710271158.6A Active CN107050860B (zh) | 2017-04-24 | 2017-04-24 | 地图生成的方法、装置、存储介质和处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107050860B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107632285B (zh) * | 2017-09-19 | 2021-05-04 | 北京小米移动软件有限公司 | 地图创建及修改方法与装置 |
CN108744517B (zh) * | 2018-04-27 | 2022-02-22 | 网易(杭州)网络有限公司 | 音频处理方法、装置、终端和存储介质 |
CN108926845A (zh) * | 2018-07-24 | 2018-12-04 | 合肥爱玩动漫有限公司 | 一种基于游戏时间和随机点数分配游戏场景的方法 |
CN111308994B (zh) * | 2018-11-23 | 2023-07-25 | 苏州科瓴精密机械科技有限公司 | 机器人控制方法以及机器人系统 |
CN111185009B (zh) | 2020-01-02 | 2021-03-26 | 腾讯科技(深圳)有限公司 | 地图生成方法和装置 |
CN113633980B (zh) * | 2021-08-04 | 2023-12-05 | 北京中清龙图网络技术有限公司 | 数据生成方法、装置、计算机设备和存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101827355B1 (ko) * | 2012-12-04 | 2018-02-08 | 한국전자통신연구원 | 게임 로그 데이터를 통한 맵 정보 생성 방법 및 장치 |
CN104484513B (zh) * | 2014-12-02 | 2018-07-03 | 厦门飞游信息科技有限公司 | 一种地图生成方法和计算设备 |
CN105597318B (zh) * | 2015-12-25 | 2019-02-22 | 珠海金山网络游戏科技有限公司 | 一种自动生成随机游戏场景的方法、系统和装置 |
-
2017
- 2017-04-24 CN CN201710271158.6A patent/CN107050860B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN107050860A (zh) | 2017-08-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107050860B (zh) | 地图生成的方法、装置、存储介质和处理器 | |
CN105597318A (zh) | 一种自动生成随机游戏场景的方法、系统和装置 | |
CN111135574B (zh) | 游戏场景生成方法、装置、计算机可读介质及电子设备 | |
US20130053545A1 (en) | Identifying components of a network having high importance for network integrity | |
CN105407323B (zh) | 一种监控视频的分屏方法及装置 | |
CN108057245B (zh) | 地图的生成方法和装置、存储介质及终端 | |
CN103839222B (zh) | 一种基于分层次边界拓扑搜索模型的栅格转矢量并行系统 | |
CN108038270A (zh) | 基于bim的景观植物族库搭建方法、电子终端及存储介质 | |
CN111737800A (zh) | 图元选择方法、装置及电子设备 | |
CN106709974A (zh) | 游戏场景绘制方法及装置 | |
CN110058829A (zh) | 一种图像数据处理方法、装置及存储介质 | |
Vinay Kumar et al. | Multi-culture diversity based self adaptive particle swarm optimization for optimal floorplanning | |
CN107209793A (zh) | 具有用于3d集成电路的折叠块及复制引脚的知识产权块设计 | |
US10719982B2 (en) | Surface extrction method, apparatus, and non-transitory computer readable storage medium thereof | |
CN102354117B (zh) | 一种适应设备动态配置的生产线系统的工艺排序方法 | |
CN109821233A (zh) | 一种数据分析方法和装置 | |
CN109999497B (zh) | 虚拟对象的控制方法和装置、存储介质和电子装置 | |
Wodzinski | A computer program to determine yields of lumber | |
Oezluek et al. | Designing building automation systems using evolutionary algorithms with semi-directed variations | |
CN109461198A (zh) | 网格模型的处理方法及装置 | |
CN107045732A (zh) | 数字地面模型化简方法及装置 | |
CN110442147A (zh) | 一种基于变分法的无人机最优能耗路径的规划方法 | |
CN112337093B (zh) | 一种虚拟对象的分簇方法、装置、存储介质和电子装置 | |
CN108235244A (zh) | 一种在网络规划仿真中自动布置基站的方法及装置 | |
CN103309980A (zh) | 演出数据处理方法、装置及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |