【问题标题】:Having trouble making tiles swap positions - bejeweled无法使瓷砖交换位置 - 宝石般的
【发布时间】:2013-05-24 14:19:58
【问题描述】:

我是 Java 新手,在我正在创建的游戏中遇到数组问题,这与 Bejeweled 类似。

在这个游戏中,我有一个名为 Tile 的类,它代表棋盘上的一个彩色棋子,以及棋盘上的列和行(整数)。我有另一个用于棋盘的类,称为 Board,它在一个二维整数数组中管理这些图块,按列和行组织。

我的问题是我在屏幕上交换了两个图块。发生这种情况时,它们的列和行被交换,但保存它们的数组无法识别这种变化。在屏幕上,一切看起来都很好。两个图块将交换位置。

例如,如果我想要切换两个相邻的图块,分别位于 (column0, row0)(column1, row0)。在我的磁贴数组中,这些磁贴是array[0][0]array[1][0]。当我切换它们时,第一个图块现在位于第二个图块的旧位置,第二个图块现在位于第一个图块的旧位置。但是,第一个图块仍被识别为 array[0][0],即使它现在应该是 array[1][0]

这样做的意义是我的程序不会识别三个连续的相同颜色的瓷砖,因此它不会将它们从板上清除。 有什么办法可以解决这个问题吗?

如果您有任何建议,那就太好了。谢谢。

【问题讨论】:

  • 您能发布执行交换的代码段吗?交换的一个常见错误是 a = b; b = 一个;但这实际上会将两个变量都分配给 b 的旧值。您需要一个临时位置来保存 a 的旧值: tmp = a; a = b; b = tmp.
  • 是的,我有用于切换列和行的占位符。我认为这就是为什么它仍然正确地绘制在屏幕上的原因。好主意
  • 你会交换数组元素吗?数组不会自动注意到您更改 Tile 内的坐标...听起来您仍然需要执行 tmp = array[c0][r0];数组[c0][r0] = 数组[c1][r1];数组[c1][r1] = tmp
  • 好的,我试试。谢谢
  • 你如何识别女巫瓷砖在阵列中的女巫位置?

标签: java arrays


【解决方案1】:

不确定您的描述到底有什么问题。代码应该类似于:

class Tile {
  int col;
  int row;
  void setPos(int newCol, int newRow) {
    col = newCol;
    row = newRow;
}

class Board {
  Tile[][] array;

  void swap(int col0, int row0, int col1, int row1) {
    // Get hold of the tile objects to swap
    Tile tile0 = array[col0][row0];
    Tile tile1 = array[col1][row1];

    // Swap the positions stored in the tile objects
    tile0.setPos(col1, row1);
    tile1.setPos(col0, row0); 

    // Swap the tile objects in the array
    array[col0][row0] = tile1;
    array[col1][row1] = tile0;
  }
}

【讨论】:

  • 是的,我几乎有这个。它只是在我拥有的另一种方法中导致 nullpointerexception 错误。我现在正在努力。不过非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
相关资源
最近更新 更多