You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中批量创建37个六边形网格Tile对象并添加至列表

批量生成37个六边形Tile的Java实现方案

嘿,这个问题我太懂了!37个Tile正好对应半径为3的六边形网格(中心1个,三层环分别是6、12、18个,加起来1+6+12+18=37),完全不用手动一个个创建,通过循环遍历符合六边形坐标规则的坐标对就能批量生成。

核心思路:利用六边形轴向坐标系统

六边形网格常用的轴向坐标(q, r)可以唯一确定每个Tile的位置,且满足q + r + s = 0(s是隐含的第三个坐标,无需存储)。对于半径为3的网格,q的取值范围是-3到3,每个q对应的r值范围需要根据q来计算,确保所有坐标都落在网格范围内。

具体代码实现

假设你的Vector类支持传入轴向坐标(q, r),Tile类的构造方法接受Vector参数,代码如下:

import java.util.ArrayList;
import java.util.List;

public class HexGridGenerator {
    public static void main(String[] args) {
        List<Tile> tileList = new ArrayList<>();
        final int GRID_RADIUS = 3; // 对应37个Tile的网格半径

        // 遍历所有合法的轴向坐标q值
        for (int q = -GRID_RADIUS; q <= GRID_RADIUS; q++) {
            // 计算当前q对应的r值范围,确保坐标落在网格内
            int rMin = Math.max(-GRID_RADIUS, -q - GRID_RADIUS);
            int rMax = Math.min(GRID_RADIUS, -q + GRID_RADIUS);
            
            // 遍历当前q下所有合法的r值
            for (int r = rMin; r <= rMax; r++) {
                // 创建坐标向量
                Vector tileCoords = new Vector(q, r);
                // 创建Tile并加入列表
                Tile newTile = new Tile(tileCoords);
                tileList.add(newTile);
            }
        }

        // 验证生成数量(应该输出37)
        System.out.println("生成的Tile总数:" + tileList.size());
    }
}

适配调整说明

  • 如果你的Vector类使用的是立方体坐标(x, y, z),只需在循环中计算s = -q - r,然后用new Vector(q, r, s)创建坐标即可。
  • 如果Tile的构造逻辑需要额外参数,只需在创建Tile对象时补充对应的参数即可。
  • 后续如果需要更大的网格,只需修改GRID_RADIUS的值,公式1 + 6*(1+2+...+radius)可以计算对应网格的Tile总数。

内容的提问来源于stack exchange,提问作者doofesohr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:21:48