- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
问题
我正在尝试为游戏创建一个城市生成器,该游戏创建具有类型(住宅、工业、商业)的 block 。我所有的街道都是 90 度,因为我希望它是 block 状的(而不是之字形)。
方法
我的第一个方法是选择一个起点,然后在 map 上随机移动 X 次。如果我遇到了死胡同,我会回溯一些随机数,有点像迷宫生成器,但这给我留下了很多区域,这些区域的道路相邻,而道路不是直线行驶。我也研究过使用 perlin 噪音,但我相信这两个会给我经常曲折的道路。
当前解决方案
我想出了一种方法,几乎可以满足我的需求,但我认为它比它需要的更复杂,或者至少比它可能的效率低。目前,如果我尝试将其放大到更大的 map ,可能需要几秒钟的时间来处理。
JS fiddle
https://jsfiddle.net/jrj2211/0exe9jne/
算法
缩放数组示例(有点像缩放图像):
[1, 2, 2] [1, 1, 2, 2, 2, 2]
[1, 3, 3] => [1, 1, 3, 3, 3 ,3]
[4, 4, 4] [4, 4, 4, 4, 4, 4]
我放大网格的原因是,如果我不这样做,任何以前面积为 1x1 的图 block 都会生成一个 map ,其中两个或多个道路图 block 将成为邻居。
可视化
最终输出
注意:这与可视化中的输出不同
总结
总结一下我的问题,有没有人对如何提高效率或清洁度有任何建议。我认为很难为我当前的流程编写伪代码,所以我认为还有改进的余地。我还必须让它变得更加复杂,比如删除 1x1 的单元格,因为没有房子会四面八方被街道包围。我也不希望城市成为一个完美的正方形(所以我不得不删除边界上的随机区域并关闭它们的街道)。
最佳答案
避免创建大型数组的一种方法是直接实现所需的布局。关键是缩放 curTile
而不是 grid
,注意从 ++
到 +=2
的变化。
// Get all cells as a 1 dimensional array
function GetAllCells() {
var cells = [];
for (var i = 0; i < mapSize; i+=2) {
for (var j = 0; j < mapSize; j+=2) {
cells.push(grid[i][j]);
}
}
return cells;
}
背靠背
IsInBoundsScaled
→ IsInBounds
新网格
→ 网格
迭代
要获得相同的 block 顺序,我们必须将正方形大小加倍(引用 minSize
、maxSize
)。
// Get a random order to loop through the cells
var checkOrder = shuffle(GetAllCells());
var minSize = 4;
var maxSize = 10;
for (var id = 1; id < checkOrder.length; id++) {
var curTile = checkOrder[id];
if (curTile.type == TYPES.NONE) {
var direction = (Math.random() > .5 ? 1 : 0);
var square_width = RandomRange(minSize, (direction ? maxSize : minSize));
var square_height = RandomRange(minSize, (direction ? minSize : maxSize));
var zones = [TYPES.RESIDENTIAL, TYPES.COMMERCIAL, TYPES.COMMERCIAL, TYPES.RESIDENTIAL, TYPES.INDUSTRIAL];
var zone = zones[Math.floor(Math.random() * zones.length)];
var color = getRandomColor();
for (var i = 0; i < square_width; i+=2) {
for (var j = 0; j < square_height; j+=2) {
if (IsInBounds(curTile.i + i+1, curTile.j + j+1)) {
grid[curTile.i + i][curTile.j + j].id = id; // [x] O
grid[curTile.i + i][curTile.j + j].type = zone; // O O
grid[curTile.i + i+1][curTile.j + j].id = id; // x [O]
grid[curTile.i + i+1][curTile.j + j].type = zone; // O O
grid[curTile.i + i][curTile.j + j+1].id = id; // x O
grid[curTile.i + i][curTile.j + j+1].type = zone; // [O] O
grid[curTile.i + i+1][curTile.j + j+1].id = id; // x O
grid[curTile.i + i+1][curTile.j + j+1].type = zone; // O [O]
}
}
}
}
}
JS fiddle fork
关于algorithm - 在网格上生成城市/城镇(只是我的方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48318881/
是否可以获得维基百科上所有有关系的国家、地区和城市的列表?我找不到任何适合此任务的 API。解析我需要的所有信息的最简单方法是什么?PS:我知道,我可以从其他数据源获取此信息。但我对维基百科感兴趣..
我有一个表“位置”,其结构如下 CREATE TABLE IF NOT EXISTS `locations` ( `id` int(11) NOT NULL, `city_code` int(11
我正在使用地点选择器的 Intent 来获取地点。现在我想将地址以国家、城市、密码、州的形式保存。我怎样才能从地点选择器的地址得到所有这些? 代码: public class NameOfBusine
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
我需要在地理图上绘制一些数据。具体来说,我想强调数据来自的国家和州。 我的数据集是 Year Country State/City 0 2009 BGR Sofia 1
我正在寻找一个可以将用户的输入转换为具有特定规则的新输出的函数。 这条规则是: 第一个字母大写(例如:Paris) 如果字符串的每个单词之间包含两个破折号 (-),则对第二个单词的第一个字母应用大写(
总共可能最多有 1000 个字符串。这些应该硬编码还是存储在数据库中?这些内容经常被访问,因为每次用户想要注册或结帐商品时,他们都需要查看区域/郊区/省/国家/地区列表。 如果我有一堆枚举,我认为性能
我有像国家/州和城市这样的下拉列表。有什么办法可以等到人口下降后再继续进行吗?就像首先加载国家/地区,然后根据选择的国家/地区然后加载州/省,与城市相同...... function populate
我想使用 PHP 和 jQuery 执行以下操作 https://www.careerbuilder.com/share/register.aspx?sc_cmp1=JS_LoginASPX_RegN
我正在建立一个网站,其中将有很多公司及其业务列表,因此他们将有他们的地址、城市、州、邮政编码等。 我在这里找到了这个网站: http://jesseprice.com/mysql-city-state
如何使用单一选择器 Objective-C 来管理国家/州/城市的值(value)? 当我尝试它时,它会因索引更改而崩溃。它适用于城市城市和州,但与城市有关。哪个库会更好用? 查看下面的代码 - (v
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 8 年前。 Improv
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我有一张 homes 表,其中包含国家、城市、大陆字段。 当某些人搜索房屋时,如果他输入例如“rom”我想返回 罗马 (30) 罗马尼亚 (120) 我该怎么做? 编辑使用此处的搜索表单 http:/
我希望将 HTML5 地理定位功能集成到网站中。我遇到的问题是在选定的列表中获取最近的城市/城镇。该网站仅在一定数量的城镇和引用中受支持/营销,因此浏览器可以找到其位置并选择最近的城镇或城市。听起来很
我想做一个马来西亚州和城市的下拉列表。 这是我的初始页面:(test3.php) 当我选择KL时,我对该城市的期望输出如下: 当我选择雪兰莪时,我对该城市的预期输出如下: 状态数据 json ($st
我已经实现了一个仅使用整数类型的邻接矩阵图。(我在这里提到的所有内容都考虑 C++) 我正在实现另一个图表,该图表将使用我的旧实现方案接收顶点中的城市和边中的距离。我想知道这是一个好主意还是我应该使用
我正在寻找一些关于在星际争霸/帝国时代等游戏中寻找基础设施开发策略的论文。这些游戏的基本特征是: 连续时间(好吧 - 它可以分成 10 秒的周期,或类似的时间) 许多描述增长的变量(许多资源、建筑物级
我目前有 3 个表存储有关世界上所有主要城市、与这些国家对应的每个地区/州以及这些州/地区中的每个城市的信息。 现在我的数据库中还有大约 6 个其他表,例如需要完全相同的 5 列的用户或组织表:地址、
我正在使用 django 构建一个旅游网站。当用户输入目的地城市名称(或兴趣点,如黄石)时,我想进行 ajax 自动建议。问题是我如何获得建议数据库?有没有网络服务?最好它也能支持外国城市。非常感谢。
我是一名优秀的程序员,十分优秀!