1

我正在创建一个基于网格的迷宫游戏,我目前正在使用一个 10 x 10 2d 整数数组来处理绘制迷宫和简单的碰撞检测。

我的问题是,当使用嵌套的 for 循环绘制网格时,它会在列中绘制网格并且绘制的迷宫被翻转。例如

int [][] map= {
                 {0,0,0,0,0,0,0,0,0,0,},
                 {0,0,0,0,0,0,0,0,0,0,},
                 {2,1,1,1,0,0,0,0,0,0,},
                 {0,0,0,1,0,0,0,1,1,2,},
                 {0,0,0,1,0,0,0,1,0,0,},
                 {0,0,0,1,0,0,0,1,0,0,},
                 {0,0,0,1,1,1,1,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,}
               };

for(int i=0;i<map.length;i++){
   for(int j=0;j<map.length[0];j++){
     switch(map[i][j]){
      case 0:drawRect(i,j,width,height,blue);
       break;
      case 1:drawRect(i,j,width,height,white);
       break;
      case 2: drawRect(i,j,width,height,red);
       break;
     }
   }  
}

画了这个

在此处输入图像描述

代替

在此处输入图像描述

我目前解决这个问题的方法是翻转 i 和 j 值。但是有没有办法以写出的方式绘制二维数组,或者甚至是创建仍然非常简单的网格迷宫的更好方法?

4

2 回答 2

4

它正在横向绘制您的地图,因为您已经以这种方式读取了 i / j 值。循环获取左上角的值并在绘制时向下读取,然后进入下一列并再次向下绘制。这就是为什么翻转 i / j 会修复它的绘制方式。

于 2013-04-19T13:06:51.323 回答
1

实际问题是您提供 row 和 col to drawRect,它需要 col 和 row。

在您的代码中, i 是当前行, j 是当前列。

但是,在 Rectangle 构造函数中:Rectangle(int x, int y, int width, int height)x 是列,y 是行。

正如其他人建议的那样,为了清楚起见,将 i 和 j 换成 row 和 col,然后以drawRect正确的顺序将它们传递给您。

于 2013-04-19T13:24:25.067 回答