有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

交易是这样的,我必须做一个类似于吃豆人的游戏,有地图、点数、幽灵等等。 整个过程就像一个数组[8][8],它从一个数组中读取墙壁的位置和鬼魂的初始位置。txt文件,PacMan从固定位置开始,水果是随机的。游戏开始时的任何空白都会被一个简单的点球填满。 我已经完成了地图,它显示了它和一切,但我似乎无法想出一种方法,让玩家可以用键盘控制PacMan。。。这就是我到目前为止尝试过的。。。 在球员课上

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

然后对其他移动关键点重复该操作

PacMan类中的单个移动方法如下所示

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) 个答案

  1. # 1 楼答案

    It always gives me an ArrayOutOfBounds Exception

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

    anyone can help me with a more efficient way to do this?

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

  2. # 2 楼答案

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

    你需要在“移动”时检查j + 1 < Tablero.length

    您也可以简单地移动PacMan的同一个实例,而不是创建一个新实例:

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