Извините за стену текста, но в настоящее время в тупик. Я не прошу «кормить ложкой», так как у меня есть базовая идея для каждого куска, просто у меня трудное время, как закончить определение моей логики движения. Позвольте мне объяснить подробнее. Я также опубликую свой код для лучшей справки.
Я пишу со структурой MVC. У меня есть модель, которая представляет собой 2D-массив BoardSquares. Какие эти BoardSquares отслеживают его местоположение на доске, какой кусок в нем (если он есть), какого цвета этот кусок (если он есть), и если он пустой. Вот код для этого:
public class BoardSquare {
// Private information stored in each BoardSquare
private boolean isSquareEmpty;
private int row;
private int col;
private String space;
private String pColor;
// Constructor to make an empty space on the board
public BoardSquare(int row, int col) {
space = "";
pColor = "";
this.row = row;
this.col = col;
SquareEmpty();
}
//Constructor to get the information of a space with a piece
public BoardSquare(BoardPiece piece, int row, int col) {
this.space = piece.getModelName();
this.pColor = Character.toString((piece.getModelName().charAt(0)));
this.row = row;
this.col = col;
SquareNotEmpty();
}
public String getpColor() {
String temp = getPieceColor(pColor);
return temp;
}
//A bunch of auto generated getters/setters...
// Gets the correct color label for the piece
public String getPieceColor(String info){
String temp;
if(info.equalsIgnoreCase("b")){
temp = "Black";
}
else {
temp = "White";
}
return temp;
}
В настоящее время все мои Pieces расширяют абстрактный класс BoardPiece, который также имеет несколько абстрактных методов, но мой кусок знает о его расположении на доске, его названии, цвете и массиве 2D-плат для того, как я генерирую действительные ходы.
Я генерирую их, проверяя пробелы, в которые он может переместиться, и проверяя, пусты ли они, добавляя их в ArrayList, сравнивая и проверяя, содержит ли этот список введенный пункт назначения.
Однако у меня возникают проблемы с размышлениями о том, как прекратить проверку, если, скажем, Черная Ладья находилась на левой стороне доски и хотела двигаться полностью вправо, но справа от Ладьи была Черная Пешка предотвращая это от этого. Я пытаюсь в общих чертах подумать об этом, чтобы сделать мою жизнь проще, и я могу реализовать ее и в других классах, так что вот код Rook:
public class Rook extends BoardPiece{
private String name = "Rook";
private String color;
private String modelName;
BoardSquare board[][];
// Both should remain 0 - 7
private int row;
private int col;
public Rook (String modelName, int row, int col, String color, BoardSquare[][] field) {
this.modelName = modelName;
this.row = row;
this.col = col;
this.color = color;
this.board = field;
}
@Override
void move(BoardSquare target) {
if(!getPossibleMove(board).contains(target)){
//Sysout false move
}
}
@Override
Collection<BoardSquare> getPossibleMove(BoardSquare[][] board) {
ArrayList<BoardSquare> validMoves = new ArrayList<BoardSquare>();
for(int i = 0; i < 8; i++){
// Checks every column of the row that the piece is on
if(moveValidator(board[row][i])){
validMoves.add(board[row][i]);
}
// Checks every row of the column that the piece is on
if(moveValidator(board[i][col])){
validMoves.add(board[i][col]);
}
}
return validMoves;
}
@Override
boolean moveValidator(BoardSquare space) {
// Removes the current square the piece is on as a valid move
if(space.getRow() == getRow() && space.getCol() == getCol()){
return false;
}
//Checks if the space is not empty and the piece in the spot is the same color as the piece itself
if(!space.isEmptySquare() && space.getpColor().equalsIgnoreCase(color)){
return false;
}
return true;
}
Как я уже сказал, любая помощь или толчок в правильном направлении будут оценены. Извините за стену текста, но стараюсь быть настолько ясным, насколько я могу, чтобы тот, кто хочет помочь, мог полностью понять и увидеть мою логику.
РЕДАКТИРОВАТЬ: Забыл заметить, что Ладья также имеет автоматически генерируемые геттеры и сеттеры.