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; } } } }
代码解释
- 保留原始边界值:用
width - 1和height - 1来判断边界,不再修改传入的width和height参数,确保循环的行列数始终正确 - 调整条件顺序:
- 先判断顶部的Wall2区域,确保前1/4高度的行全部填充为2
- 然后判断左右列(j=0或j=width-1)和最后一行(i=height-1),填充为Wall1
- 最后剩下的中间区域自动填充为Floor(0)
- 逻辑更清晰:每个条件对应明确的布局区域,避免了变量修改导致的循环异常
这样修改后,就能生成你预期的规则地图矩阵了。
内容的提问来源于stack exchange,提问作者user8914529
相关产品推荐
相关产品推荐

