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

Java游戏地图矩阵创建问题:生成结果与预期不符求助

修正游戏地图矩阵生成代码,实现预期的墙与地板布局

问题背景

你在生成游戏地图矩阵时遇到了布局不符合预期的问题,先理清楚你的需求和当前的问题:

预期矩阵样式(1=Wall1,2=Wall2,0=Floor):

2 2 2 2 2 2 2 2 2 2 2 2
1 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1

实际生成的异常矩阵:

2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
1 0 0 0 0 1
0 0 0 0 1
0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

你的原始代码:

void prepareMatrix(int width, int height) {
 room = new int[height][width];
 for(int i = 0; i < height; i++) {
 for(int j = 0; j < width; j++) {
 if(i < height/4) {
 room[i][j] = 2;
 } else if(j == 0 || j == --width) {
 room[i][j] = 1;
 } else if(i == --height) {
 room[i][j] = 1;
 } else {
 room[i][j] = 0;
 }
 }
 }
}

问题分析

核心问题出在你使用了--width和--height来判断边界:

  • 这两个操作会直接修改循环的边界变量,导致每一轮循环时,width或height的值会递减,最终矩阵的行数和列数越来越少,出现不规则的布局
  • 条件判断的顺序也有问题,底部墙的判断应该放在合理的位置,避免被其他条件覆盖

修正后的代码

void prepareMatrix(int width, int height) {
    // 初始化矩阵
    room = new int[height][width];
    
    for(int i = 0; i < height; i++) {
        for(int j = 0; j < width; j++) {
            // 处理顶部的Wall2(前1/4高度的行)
            if(i < height / 4) {
                room[i][j] = 2;
            } 
            // 处理四周的Wall1:左右边界 或者 最后一行(底部)
            else if(j == 0 || j == width - 1 || i == height - 1) {
                room[i][j] = 1;
            } 
            // 其余位置都是Floor
            else {
                room[i][j] = 0;
            }
        }
    }
}

代码解释

  1. 保留原始边界值:用width - 1和height - 1来判断边界,不再修改传入的width和height参数,确保循环的行列数始终正确
  2. 调整条件顺序:
    • 先判断顶部的Wall2区域,确保前1/4高度的行全部填充为2
    • 然后判断左右列(j=0或j=width-1)和最后一行(i=height-1),填充为Wall1
    • 最后剩下的中间区域自动填充为Floor(0)
  3. 逻辑更清晰:每个条件对应明确的布局区域,避免了变量修改导致的循环异常

这样修改后,就能生成你预期的规则地图矩阵了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:49:44