如何制作一个方法来移动数组中的字符?

时间:2012-02-11 17:17:41

标签: java arrays

这是交易,我必须制作一个类似PacMan的游戏,包括地图,点,鬼等。 整个事情就像一个阵列[8] [8],它从.txt文件中读取墙壁的位置和鬼魂的初始位置,PacMan从一个固定的位置开始,水果是随机的。游戏开始时的任何空白区域都会填充一个简单的点状颗粒。 我已经完成了地图,它显示了它和一切,但我似乎无法想出一种允许玩家用键盘控制PacMan的方法......这是我到目前为止所尝试的... 。 在Player类

BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
String mov = read.readLine();
if (mov.equals("w"))
{
  PacMan.MoveU();
}

然后重复其他移动键。

PacMan类中的各个Move方法看起来像这样

public static void MoverR()
{
  for (int i=0;i<Tablero.length;i++)
  {
    for (int j=0;j<Tablero.length;j++)
    {
      if (Tablero[i][j] instanceof PacMan)
        Tablero[i][j]=null;
        Tablero[i][j+1]=new PacMan();
      }
    }
  }
}

这显然不起作用,所以我想知道是否有人能以更有效的方式帮助我做到这一点?我真的不介意从头开始这两个班...... 感谢。

2 个答案:

答案 0 :(得分:1)

  

它总是给我一个ArrayOutOfBounds异常

ArrayOutOfBounds异常是由Tablero[i][j+1]=new PacMan(); j == 7引起的,因为您尝试访问无效位置(Tablero[i][8])。

  

任何人都可以通过更有效的方式帮助我做到这一点吗?

你不需要检查整个数组以找出Pacman的位置,你可以将该位置存储为Pacman的私有变量,但是在这种情况下你不应该每次都创建一个新的Pacman实例需要移动它,就像你正在使用当前的实现一样。

答案 1 :(得分:0)

您获得ArrayOutOfBoundsException的一个原因是,在您的循环中,您将PacMan移动到位置[i][j +1],其中j + 1可能大于数组长度。

当你'移动'j + 1 < Tablero.length时,你需要检查PacMan

此外,您只需移动PacMan的同一个实例,而不是创建一个新实例:

     ...
     if (Tablero[i][j] instanceof PacMan) {
            if (j + 1 < Tablero.length) {
                Tablero[i][j+1] = Tablero[i][j];
                Tablero[i][j] = null;
            }
       }