当前位置: 首页 > 面试题库 >

Java:用于存储无限游戏世界的坐标图的良好数据结构是什么?

魏波娃
2023-03-14
问题内容

我习惯于使用PHP进行编码,但是我并不真正精通Java,这已经有一段时间了。我希望它是一个相当简单的解决方案,但是我以任何搜索方式都找不到任何好的示例代码,所以这里是:

我正在编写一个游戏,该游戏发生在基于图块的地图上的2d随机生成的无限世界中(挑剔:我知道它不是真正的无限。我只是希望世界会很大)。map [x]
[y]多维数组的常用方法最初是一个基本概念,但是由于Java没有像PHP一样提供非整数(即,负数)数组键恶作剧的方法,因此我无法正确使用(- (x,+
x,-y,+ y)坐标系,带有数组键。

我需要能够在特定的x,y坐标处找到图块上的对象,以及找到某个图块的“相邻图块”。(如果可以getObjectAt(x,y),可以得到(x +
1,y),依此类推)

我已经读过关于四叉树和R树等的文章。这个概念令人兴奋,但是我还没有看到Java中任何好的简单示例实现。此外,我不太确定那是否是我真正需要的。

欢迎任何建议

谢谢


问题答案:

我遇到了同样的问题,但是我的解决方案是使用Map /
HashMaps
,但是它们是一维的。

为了克服这个问题,我使用了通用的Pair类(不是在普通的Java库中会找到的东西),而不是在地图中使用地图(这会造成混乱和效率低下),尽管您可以将其替换为Position类。
(实际上是相同的代码,但不是通用代码,而是整数或浮点数)。

因此,在定义地图时: Map<Pair, Tile> tiles = new HashMap<Pair, Tile>;

为了将瓷砖对象放置在我所使用的地图上tiles.put(new Pair(x, y), new GrassTile());以及检索对象tiles.get(new Pair(x, y));

[x / y将是您希望放置的任何坐标( 这将允许负坐标 而不会造成任何混乱!),“ new
GrassTile()”只是在地图创建过程中放置​​某种类型的图块的示例。显然-如前所述-Pair类是可替换的。]

为什么不问您的ArrayList?因为数组列表比映射更线性,而且我认为添加和检索图块更加困难,尤其是在2维上。

更新:

对于想知道为什么Java中没有Pair()类的人,这里有一个解释。



 类似资料:
  • 主要内容:图存储结构基本常识,图存储结构的分类我们知道,数据之间的关系有 3 种,分别是 "一对一"、"一对多" 和 "多对多",前两种关系的数据可分别用 线性表和树结构存储,本节学习存储具有"多对多"逻辑关系数据的结构—— 图存储结构。 图 1 图存储结构示意图 图 1 所示为存储 V1、V2、V3、V4 的图结构,从图中可以清楚的看出数据之间具有的"多对多"关系。例如,V1 与 V4 和 V2 建立着联系,V4 与 V1 和 V3 建立着

  • 描述无定向多图的最佳数据结构是什么(针对速度和内存进行了优化)? 一个边的列表是不合适的,因为在我的代码中,获取顶点的邻居经常发生。 邻接列表是不好的,因为我必须保留关于已访问边的信息,并且当从1到3的边被访问时(假设我遍历1的邻居,发现一条边通向3并且具有weight),我必须在3的邻居列表中找到相同的边以将其标记为已访问,这很慢。 当每个单元格都是时,我考虑过邻接矩阵,其中是表示顶点是否被访问

  • 问题内容: 我需要存储一个2d矩阵,其中包含邮政编码以及每个邮政编码之间的距离(以km为单位)。我的客户有一个计算距离的应用程序,然后将其存储在Excel文件中。目前,有952个地方。因此,矩阵将具有952x952 = 906304条目。 我试图将其映射到HashMap [Integer,Float]。整数是两个字符串在两个位置(例如“ A”和“ B”)的哈希码。浮点值是它们之间的距离(以公里为单

  • 问题内容: 前言:前几天,我在考虑为新应用程序使用新的数据库结构,并意识到我们需要一种有效地存储历史数据的方法。我想让其他人看一看,看看这种结构是否有任何问题。我意识到这种存储数据的方法很可能以前就已经发明了(我几乎可以肯定已经有了),但是我不知道它是否有名称,并且我尝试过的一些Google搜索都没有产生任何结果。 问题:假设您有一个订单表,并且订单与下订单的客户的客户表相关。在正常的数据库结构中

  • 我想在redis中存储用户的配置文件,因为我必须经常阅读多个用户的配置文件…目前我看到的选项有两个: 选项1:-为每个用户的配置文件存储单独的哈希键 null [哈希]-用户-配置文件u1{ID:u1,名称:user1,电子邮件:user1@domain.com,照片:URL} [哈希]-用户-配置文件u2{ID:u2,名称:user2,电子邮件:user2@domain.com,照片:URL}

  • 主要内容:树的结点,子树和空树,结点的度和层次,有序树和无序树,森林,树的表示方法,总结之前介绍的所有的 数据结构都是 线性存储结构。本章所介绍的树结构是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合。                                                                          (A)