Я работаю над созданием настольной игры для шахмат и шашек (и нескольких вариаций, которые я хочу сделать). У меня есть класс Board, который расширяет JPanel и настраивает массив JPanel с двумя измерениями, чтобы действовать как моя доска. Вот некоторый код для моего класса доски:
public class Board extends JPanel {
private static final int COLS = 8;
private static final int ROWS = 8;
private JPanel[][] board = new JPanel[COLS][ROWS];
private JPanel chessBoard;
public Board() {
super();
super.setLayout(new BorderLayout());
chessBoard = new JPanel();
chessBoard.setLayout(new GridLayout(COLS,ROWS));
// Set up JPanels on bottom and right to display letters and numbers for the board
// JPanels are called south and west
super.add(chessBoard, BorderLayout.CENTER);
super.add(south, BorderLayout.SOUTH);
super.add(west, BorderLayout.WEST);
for (int i=0; i<COLS; i++) {
for (int j=0; j<ROWS; j++) {
// Set up the grid
board[i][j] = new JPanel();
board[i][j].setBackground(getColor(i,j));
chessBoard.add(board[i][j]);
}
}
super.validate();
}
private Color getColor(int x, int y) {
if ((x + y) % 2 == 0) {
return Constants.GOLD;
} else {
return Constants.PURPLE;
}
}
public void addPiece(Piece piece) {
JLabel p = piece.getImage();
board[piece.getX()][piece.getY()].add(p);
chessBoard.validate();
}
}
Произведение - это интерфейс, который я собираюсь использовать для всех своих произведений. Я настроил интерфейс и настроил один класс, который реализует интерфейс (класс Checker). Я все это настроил. Части JLabels с ImageIcons в них. Единственная проблема, которую я имею до сих пор, это написание метода перемещения. Я могу понять логику, чтобы убедиться, что ход действителен, я просто не знаю, как на самом деле сделать это движение.
РЕДАКТИРОВАТЬ: Я даже не спрашиваю о слушателях мыши или о чем-то в этом роде, я просто хочу, чтобы какой-нибудь псевдокод объяснил, как заставить кусок перемещаться из одного места в массиве в другое.
РЕДАКТИРОВАТЬ 2: Вот код для моего класса шашки.
public class Checker implements Piece {
private int side,xPos,yPos;
private JLabel img;
public Checker(int team, int x, int y) {
BufferedImage image;
try {
if (team == 0)
image = ImageIO.read(new File("img/RedPiece.png"));
else
image = ImageIO.read(new File("img/BlackPiece.png"));
} catch(IOException e) {
image = null;
System.out.printf("Image file wasn't found!!!");
System.exit(1);
}
img = new JLabel(new ImageIcon(image), SwingConstants.CENTER);
img.setVerticalAlignment(SwingConstants.CENTER);
xPos = x;
yPos = y;
}
// TODO Figure out move method
public void move(int dx, int dy) {
}
// Also typical gets and sets for instance variables
Итак, я думаю, что я вызываю метод перемещения для части шашек и, предполагая, что я двигаюсь от нижней части экрана к вершине, это будет piece.move(-1,1);
, и я должен удалить piece
из его текущего позиция, то это новая позиция в массиве [x + dx][y + dy]