Java 跳棋游戏背后的逻辑?

Java 跳棋游戏背后的逻辑?,java,applet,logic,Java,Applet,Logic,我开始做一个跳棋游戏,我已经画了所有的图形和棋盘。 在我开始创作这些片段之前,我想知道处理片段运动的逻辑方面有多么简单。。我应该把每个正方形都做成一张桌子,检测它是否有一块,如果有,是什么颜色?i、 e 0=空,1=红,2=黑或者你们对这个问题有更好的想法吗?你们应该制作一个二维数组来表示电路板 int[][] board = new int[8][8]; 通过使用OOP原则,我将使用以下内容: enum Side { BLACK, RED; } class Position {

我开始做一个跳棋游戏,我已经画了所有的图形和棋盘。
在我开始创作这些片段之前,我想知道处理片段运动的逻辑方面有多么简单。。我应该把每个正方形都做成一张桌子,检测它是否有一块,如果有,是什么颜色?i、 e 0=空,1=红,2=黑或者你们对这个问题有更好的想法吗?

你们应该制作一个二维数组来表示电路板

int[][] board = new int[8][8];

通过使用OOP原则,我将使用以下内容:

enum Side {
  BLACK,
  RED;
}

class Position {
  int x, int y;
}

class Piece
{
  Position position; // position inside the board
  Side side; // which side the piece is
}

class Board
{
  Piece[][] board = new Piece[8][8];

  boolean isMoveLegal(Piece p, Position newPosition) {
    ...
  }

  void doMove(Piece p, Position newPosition) {
    if (isMoveLegal(p, newPosition) {
      // game logic of movement and eating other pieces if needed
    }
  }
}
更简单的方法可以使用简单的映射:

class Position {
  int x, int y;
}

class Piece
{
  Side side; // which side the piece is
}

class Board
{
  HashMap<Piece, Position> board;

  boolean isMoveLegal(Piece p, Position newPosition) {
    ...
  }

  void doMove(Piece p, Position newPosition) {
    if (isMoveLegal(p, newPosition) {
      // game logic of movement and eating other pieces if needed
    }
  }
}

这可以用来避免将棋子的当前位置存储在棋盘内部。

最好参考以下内容:-你是在询问计算机选择棋子的算法,还是在寻找逻辑来跟踪两个可能是人类玩家的棋盘位置?@Ted,在你的问题中跟踪移动和分段的逻辑几乎是重复的。这里有一些很好的答案。我不打算写他的跳棋游戏。他问如何代表董事会事实上,他问的是记录移动所需的簿记。这比仅仅将棋盘表示为矩阵要复杂得多。此外,这是棋盘格的糟糕表示,1/2的内存未使用,你必须编写大量例程,一个索引与另一个索引协调递增和递减。因此我必须预先定义数组中的各个部分?这似乎过于巴洛克风格。存在大量冗余数据,例如,存储在板[2][3]上的工件需要在其位置属性中存储[2][3]。每次工件移动时,您都需要以一致的方式更新两个位置的数据。这仅仅取决于您希望将移动逻辑放置在何处。我经常发现自己处于这样一种情况,即拥有冗余数据比找到一种方法来获取一些以前没有计划存储的信息要好。特别是对于一个简单的任务,如棋盘游戏,它碰巧发现自己在更复杂的环境中处于相同的情况,将位置与元素一起存储是一个不错的选择。如果不存储位置,你就无法拥有移动逻辑,而不指定除棋子之外的位置,这是一个品味的问题,我更喜欢movePiece,Position newPos,而不是movePiece,Position oldPos,Position newPos,或者更糟糕的movePosition oldPos,Position newPos,因为你甚至不需要从紧凑的角度了解这首曲子。