CN107126702B - 一种3d游戏随机地图的生成方法 - Google Patents
一种3d游戏随机地图的生成方法 Download PDFInfo
- Publication number
- CN107126702B CN107126702B CN201710261203.XA CN201710261203A CN107126702B CN 107126702 B CN107126702 B CN 107126702B CN 201710261203 A CN201710261203 A CN 201710261203A CN 107126702 B CN107126702 B CN 107126702B
- Authority
- CN
- China
- Prior art keywords
- nodes
- node
- key
- grid
- map
- 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/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
-
- 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
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/60—Methods for processing data by generating or executing the game program
- A63F2300/66—Methods for processing data by generating or executing the game program for rendering three dimensional images
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Radar, Positioning & Navigation (AREA)
- Physics & Mathematics (AREA)
- Optics & Photonics (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种3D游戏随机地图的生成方法,首先生成二维数组并将其映射为二维网格图,然后生成搜索列表用以储存需要扩展子节点的节点,在二维网格图中选择网格作为起始点,将其深度设为零放入搜索列表开始拓展。每次从列表中取出深度值最小的节点,以设定概率往上下左右方向拓展子节点,拓展的有效节点以设定概率设为关键节点,将非关键子节点加入列表,从列表中取出深度最小的节点进行下一轮扩展,直到关键节点的数量和列表中的节点的数量之和达到设定关键节点数量,将列表中的节点设置为关键节点。根据连接节点在二维网格图中与其父节点与子节点的位置关系确定其模块的形状与位置信息,根据二维数组信息完成3D模块拼接,实现3D地图的生成。
Description
技术领域
本发明涉及一种3D游戏随机地图的生成方法。
背景技术
在开发一款游戏时,往往存在很多类似的地图场景,这些地图场景由相似的模块构成,只是各个模块的组合方式有差别,如果对于每一个地图场景都手动的将各个模块拼接会消耗大量的时间,延长游戏的开发周期。自动生成随机地图能够在极短的时间内生成地图,美术人员所需要做的工作只要根据策划的要求选择一些比较符合要求的地图场景即可,这极大的加快了游戏的制作速度。另外有些游戏需要时时生成随机地图,这样游戏玩家在玩游戏时每次的地图场景都不一样,这样能极大的增强游戏的可玩性,吸引更多的游戏玩家。现有的随机地图生成方法是从一个模块出发,从它的接口向外随机的选择与其接口匹配的模块组成新模块,再从新模块的接口向外扩充,直到关键模块数满足设计要求,但这种做法可能使地图在某一方向上分布很多,而很多情况下我们希望地图在一个合理的范围内,另外这种做法在关键模块数较多的情况下比较耗费时间。
发明内容
为了解决上述问题,本发明提出了一种3D游戏随机地图的生成方法,该方法能够有效地随机产生地图,使地图在限定的合理范围内,并且能通过设定参数来控制地图的疏密程度。
本发明的目的是通过以下技术方案来实现的:一种3D游戏随机地图的生成方法,所述随机地图由关键模块以及连接关键模块的道路模块组成,该方法包括以下步骤:
步骤1:根据设定的关键模块数量的大小,生成一个二维数组保存地图信息,该数组映射为一个二维网格图,数组的每个元素为一个结构体,保存网格图上对应的网格放置的节点信息,包括节点的父节点和子节点、节点的深度、节点所要放置的3D模块的类型(关键模块或道路模块)和位置信息。数组维度的大小限定了要生成的随机地图的大致范围。
步骤2:在网格图中选取一个节点为起始节点,起始节点相当于树的根节点,将其深度设置为0,创建一个搜索列表,将初始节点加入搜索列表,列表中的元素相当于树的叶节点,根据搜索列表中节点的深度由小到大随机扩展其子节点。
步骤3,将上、下、左、右四个方向随机排列(如随机出的方向顺序为上,右,下,左),从搜索列表中取出深度值最小的节点(将其从搜索列表中删除),按照随机出的方向顺序来扩展其子节点,对于每个方向产生一个随机数,并将该随机数与一个可设定的数值(由用户根据每个节点需要扩展的子节点的数量设定)进行比较来决定这个方向是否拓展子节点,若比较的结果是往该方向拓展子节点,则判断该子节点是否位于网格图范围内以及该子节点对应的网格是否已有节点信息,将不符合要求的子节点销毁,符合要求的子节点深度设置为其父节点深度加1,并以一个可设定的概率(由用户根据需求设定)设置为关键节点,把没有设置为关键节点的子节点加入搜索列表。
步骤4:判断现在已有的关键节点的数量和搜索列表中的节点的数量之和是否大于设定的关键节点的数量,若是,将搜索列表中的所有节点设置为关键节点,若否,重复步骤3,直到搜索列表中的元素个数为零。检查关键节点的数量,如果关键节点的数量未达到设定值,则清空网格信息,重新回到步骤2。
步骤5:经过步骤4会得到关键节点和连接这些关键节点的道路节点,根据父节点和子节点在二维网格图的相对位置确定连接关键节点的道路节点应放置的道路模块的形状。例如,假设父节点在节点的左方,有两个子节点,分别在该节点的下和右方,则该节点应该放置道路模块为“T”型模块。
步骤6:根据步骤5所产生的网格图信息,由初始节点开始拼接3D地图模块,按照深度从小到大的顺序遍历所有的节点,拼接其对应的地图模块,形成随机地图。
本发明的有益效果是:与从一个模块开始延伸出去的方式相比,本发明能在模块数较多的情况下显著减少生成时间;可以通过设置随机出子节点的概率来控制地图的疏密程度;通过在随机出子节点的同时以一定的概率将道路节点设置为关键节点可以减少无效的随机过程,加快地图的生成,并且生成的地图的结构趋于合理,大大减小了地图的模块在一个地方集聚的概率。
附图说明
图1是网格图的随机生成过程图;
图2是最终生成的网格图;
图3是生成3D游戏随机地图的流程图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步详细说明。
本发明给出了一种3D游戏随机地图的生成方法,图3为生成地图的流程图,本发明方法包括以下几个步骤:
步骤1,首先创建一个二维数组P,来保存节点信息,数组元素是一个结构体,包括节点本身的位置,深度,父节点和子节点以及对应的3D模块类型信息。二维数组映射出一个网格图,如图1所示,例如给定的要生成的关键模块的数量等于8,一般取含有给定数量5倍大小网格的网格图能得到不错的效果,本例取得网格大小为7乘7。将节点的二维数组索引设置为节点的位置坐标,两个节点的方向关系可以用它们的位置坐标之差来表示,定义位置向量设为终止节点的位置坐标减去起始节点的位置坐标,规定了上,下,左,右四个方向向量,分别用(0,1),(0,-1),(-1,0),(1,0)来表示。
步骤2,在网格中取一点为初始节点,考虑到地图的主体形状最好集中在一个区域的范围内,本例将初始节点设置在网格图的中心位置,将起始位置的节点深度设置为0。创建搜索列表,将起始节点加入搜索列表中,搜索列表中保存的是需要进一步搜索其子节点的节点。
步骤3,将上、下、左、右四个方向随机排列(例如:随机出的方向顺序为上,右,下,左),从搜索列表中取出深度值最小的节点(将其从搜索列表中删除),按照随机出的方向顺序来扩展其子节点,对于每个方向产生一个随机数,并将该随机数与设定的数值(例如:0.3)进行比较,若大于设定值,则表明往该方向上拓展子节点,进一步判断该子节点是否符合位于网格图范围内以及该子节点对应的网格未被其他节点占住的要求,删掉不合要求的子节点,将符合要求的子节点以一定概率(例如:0.5)设置为关键节点,将未被设置成关键节点的子节点加入搜索列表。
步骤4,计算搜索列表中节点个数和关键节点的个数之和,判断其是否大于等于关键节点数量的设定值,若是,按深度顺序取出搜索列表中的全部元素,将其置为关键节点,若否,重复步骤3,直到搜索列表中的节点个数为零。然后检查关键节点的个数,如果房间节点的个数未达到设定值,则清除网格数据,重新回到步骤2。
步骤5,经过步骤4得到一系列关键节点和一系列连接关键节点的道路节点,如图1所示,正方形表示关键节点,圆形表示道路节点,数字表示节点的深度。现在来确定各节点对应的3D模型信息,对于关键模块,只需调整方向即可,对于道路模块,首先得确定道路节点所对应的道路模型。用一个4位二进制数a表示哪个方向上存在节点,0001表示该节点右边存在节点,0010表示该节点上方存在节点,0100表示该节点左边存在节点,1000表示该节点下边存在节点。将a的初值设为0,遍历a点的父节点和所有子节点,计算他们的相对位置,将对应的4位二进制数加到a上,对于图1的P[3][3]节点来说,下,右,上三个方向上存在节点,那么此时a的值为1000加0001加上0010等于1011。换算成整数值为11,由图可知该点对应的模块应为形,也就是说当a的值为11时对应的道路模块为形,依次类推,建立所有的道路模型与a的对应关系,然后通过计算每个道路节点的a值就可以确定其对应的道路模块。
步骤6:根据步骤5所产生的网格图信息,由初始节点开始拼接3D地图模块,按照深度从小到大的顺序遍历生成的节点树的所有元素后形成所需的随机地图。
本发明所述的3D游戏随机地图生成方法采取的技术方案是:先生成二维网格图,用以保存3D模块的相对位置信息以及每个网格节点应放置的3D模块信息,然后从一个起始节点出发,随机出其子节点,将子节点按一定概率设置为关键节点,最后形成关键节点和连接房间节点的道路节点,根据父节点和子节点的位置情况,确定道路节点对应的3D模型,最后根据网格图信息,从起始节点开始,取相应的3D模块完成拼接,得到3D随机地图。
图1显示了一个简单的随机地图实例,设定的关键节点的数量为8,结合表1,首先将P[3][3]加入搜索列表,将其深度设置为0,列表节点数量和关键数量之和为1,小于8,所以从搜索列表中取出P[3][3](将其从搜索列表中删除),随机出P[2][3]、P[3][4]和P[4][3]三个子节点,将他们的深度设置为1,这三个节点都没有被随机成房间节点,将这三个节点加入搜索列表,列表节点数和关键节点数量之和为3,小于8,继续从搜索列表中取出P[2][3],随机出子节点P[1][3]和P[2][4],将深度设置为2,P[2][4]被随机成了房间节点,将P[1][3]加入搜索列表。此时列表元素如表1所示,列表节点数和关键节点数量之和为4,小于8,继续从搜索列表中取出P[3][4]节点,随机出的子节点为P[2][4]和P[3][5],将其深度设置为2,P[2][4]已经是P[2][3]的子节点,故将P[2][4]从P[3][4]的子节点中删除,将P[3][5]加入搜索列表,此时列表节点数和关键节点数量之和为4,小于8,继续从搜索列表中取出P[4][3],随机出P[4][2]和P[5][3],将其深度设置为2,P[5][3]被随机成了关键节点,将P[4][2]加入搜索列表,此时列表节点数和关键节点数量之和为5,小于8,继续取出搜索列表中深度最小的元素P[1][3],随机出P[1][2]和P[0][3],将其深度设置为3,P[1][2]被随机成关键节点,将P[0][3]加入到搜索列表,此时列表节点数和关键节点数量之和为6,小于8,继续取搜索列表中深度最小的元素P[3][5],随机出P[3][6]和P[4][5],将其深度设置为3,P[3][6]被随机成为房间节点,将P[4][5]加入搜索列表。此时列表节点数和关键节点数量之和为7,小于8,继续取搜索列表中深度最小的元素P[4][2],随机出P[4][1]和P[5][2],将其深度设置为3,两者均未被随机成关键节点,将两者加入搜索列表,此时列表节点数和关键节点数量之和为8等于设定值。将搜索列表中的所有节点都设置为关键节点,结束循环,最终生成的网格图如图2所示。根据节点的父节点和子节点的信息,道路节点所对应的道路模块的形状如表2所示。
表1随机生成网格图的过程中搜索列表和关键节点情况示意图
表2道路节点所对应的道路模型
最后根据网格图信息,从起始节点开始,取相应的3D模块完成拼接,得到3D随机地图。
Claims (1)
1.一种3D游戏随机地图的生成方法,所述随机地图由关键模块以及连接关键模块的道路模块组成,其特征在于,该方法包括以下步骤:
步骤1,根据设定的关键模块数量的大小,生成一个二维数组保存地图信息,该数组映射为一个二维网格图,数组的每个元素为一个结构体,保存网格图上对应的网格放置的节点信息,包括节点的父节点和子节点、节点的深度、节点所要放置的3D模块的类型和位置信息;所述3D模块是指关键模块或道路模块;
步骤2,在网格图中取一个网格,将其设为起始节点,深度设置为0,建立一个搜索列表,将起始节点加入搜索列表;
步骤3,将上、下、左、右四个方向随机排列,从搜索列表中取出深度值最小的节点,即将其从搜索列表中删除,按照随机出的方向顺序来扩展其子节点,对于每个方向产生一个随机数,并将该随机数与一个可设定的数值进行比较来决定这个方向是否拓展子节点,该数值由用户根据每个节点需要扩展的子节点的数量设定,若比较的结果是往该方向拓展子节点,则判断该子节点是否位于网格图范围内以及该子节点对应的网格是否已有节点信息,将不符合要求的子节点销毁,符合要求的子节点深度设置为其父节点深度加1,并以一个可设定的概率设置为关键节点,把没有设置为关键节点的子节点加入搜索列表;概率由用户根据需求设定;
步骤4,判断现在已有的关键节点的数量和搜索列表中的节点的数量之和是否大于设定的关键节点的数量,若是,将搜索列表中的所有节点设置为关键节点,若否,重复步骤3,直到搜索列表中的元素个数为零;检查关键节点的数量,如果关键节点的数量未达到设定值,则清空网格信息,重新回到步骤2;
步骤5,经过步骤4会得到关键节点和连接这些关键节点的道路节点,根据父节点和子节点在二维网格图的相对位置确定连接关键节点的道路节点应放置的道路模块的形状;
步骤6,根据前5步生成的地图信息,设置各个节点所放置的3D模块的位置、方向信息,从地图的起始节点出发,开始拼接3D模块,完成随机地图的生成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710261203.XA CN107126702B (zh) | 2017-04-20 | 2017-04-20 | 一种3d游戏随机地图的生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710261203.XA CN107126702B (zh) | 2017-04-20 | 2017-04-20 | 一种3d游戏随机地图的生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107126702A CN107126702A (zh) | 2017-09-05 |
CN107126702B true CN107126702B (zh) | 2020-08-25 |
Family
ID=59716367
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710261203.XA Active CN107126702B (zh) | 2017-04-20 | 2017-04-20 | 一种3d游戏随机地图的生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107126702B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109675313B (zh) * | 2018-12-24 | 2022-04-29 | 网易(杭州)网络有限公司 | 随机游戏地图的生成方法及装置、电子设备、存储介质 |
CN109718550B (zh) * | 2018-12-29 | 2022-04-12 | 福建天晴在线互动科技有限公司 | 一种游戏地图中多物块拼接体的绘制方法及终端 |
CN111340704B (zh) * | 2020-02-25 | 2023-08-22 | 网易(杭州)网络有限公司 | 地图的生成方法、装置、存储介质和电子装置 |
CN111445576B (zh) * | 2020-03-17 | 2022-09-13 | 腾讯科技(深圳)有限公司 | 地图数据的获取方法和装置、存储介质及电子装置 |
CN111603769B (zh) * | 2020-06-28 | 2022-09-13 | 上海完美时空软件有限公司 | 游戏内容的生成方法及装置、存储介质、计算机设备 |
CN113827976A (zh) * | 2021-09-28 | 2021-12-24 | 完美世界(重庆)软件科技有限公司 | 一种随机地图生成方法、装置、存储介质及计算设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101021951A (zh) * | 2007-03-28 | 2007-08-22 | 成都金山互动娱乐科技有限公司 | 一种利用随机数构建3d游戏地图的方法 |
CN102155942A (zh) * | 2011-02-26 | 2011-08-17 | 山东大学 | 大范围环境下基于模糊拓扑地图的全局路径规划方法 |
CN102289466A (zh) * | 2011-07-21 | 2011-12-21 | 东北大学 | 一种基于区域覆盖的k近邻查询方法 |
CN104199878A (zh) * | 2014-08-21 | 2014-12-10 | 西安闻泰电子科技有限公司 | 游戏引擎最短路径搜索方法、游戏引擎系统 |
CN106204719A (zh) * | 2016-06-30 | 2016-12-07 | 西安电子科技大学 | 基于二维邻域检索的三维场景中海量模型实时调度方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6520362B2 (ja) * | 2014-08-25 | 2019-05-29 | 富士通株式会社 | 生成方法、装置、及びプログラム |
-
2017
- 2017-04-20 CN CN201710261203.XA patent/CN107126702B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101021951A (zh) * | 2007-03-28 | 2007-08-22 | 成都金山互动娱乐科技有限公司 | 一种利用随机数构建3d游戏地图的方法 |
CN102155942A (zh) * | 2011-02-26 | 2011-08-17 | 山东大学 | 大范围环境下基于模糊拓扑地图的全局路径规划方法 |
CN102289466A (zh) * | 2011-07-21 | 2011-12-21 | 东北大学 | 一种基于区域覆盖的k近邻查询方法 |
CN104199878A (zh) * | 2014-08-21 | 2014-12-10 | 西安闻泰电子科技有限公司 | 游戏引擎最短路径搜索方法、游戏引擎系统 |
CN106204719A (zh) * | 2016-06-30 | 2016-12-07 | 西安电子科技大学 | 基于二维邻域检索的三维场景中海量模型实时调度方法 |
Non-Patent Citations (1)
Title |
---|
游戏地图寻路及其真实性研究;韩玮;《西南大学硕士学位论文》;20130430;第2-3章 * |
Also Published As
Publication number | Publication date |
---|---|
CN107126702A (zh) | 2017-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107126702B (zh) | 一种3d游戏随机地图的生成方法 | |
CN101930627B (zh) | 一种基于二维户型图的三维户型建模方法 | |
CN104613976B (zh) | 确定路径的方法及装置 | |
KR101420237B1 (ko) | 이웃 포인트의 탐색이 용이한 3d 영상 처리 방법 | |
JP7456644B2 (ja) | マップ生成方法、装置、電子機器及びコンピュータ記憶媒体 | |
CN107730583B (zh) | 一种基于三维场景的地形瓦片数据动态调度方法及装置 | |
CN110738577A (zh) | 社区发现方法、装置、计算机设备和存储介质 | |
CN103366402B (zh) | 三维虚拟服饰的快速姿态同步方法 | |
CN107423373A (zh) | 一种城市级三维建筑模型索引方法 | |
CN106096118B (zh) | 用于机电集成产品中基于橡皮筋的三维电路自动布线方法 | |
CN111798558A (zh) | 数据处理方法及装置 | |
Londoño et al. | Graph Grammars for Super Mario Bros Levels. | |
CN107016727A (zh) | 一种输电线路的三维场景优化管理方法 | |
CN108744520A (zh) | 确定游戏模型摆放位置的方法、装置和电子设备 | |
CN112687007A (zh) | 一种基于lod技术的立体网格图生成方法 | |
CN109827585B (zh) | 一种快速填补栅格地图中凹形区域的方法 | |
US20220379224A1 (en) | Chess self-learning method and device based on machine learning | |
JPH10293862A (ja) | 三次元オブジェクトデータ処理方法 | |
CN110716547A (zh) | 一种基于波前算法的3d探索的方法 | |
CN113181655B (zh) | 地形构造方法、装置、电子设备和存储介质 | |
CN113673006B (zh) | 一种物理热工耦合可视化全堆芯复杂几何建模方法及系统 | |
Chmielewski et al. | Computer Vision and Graphics | |
CN115761159A (zh) | 基于曲线的湖泊建模方法、装置、设备及存储介质 | |
Antoniuk et al. | Procedural generation of underground systems with terrain features using schematic maps and L-systems | |
CN115501585A (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 |