Мне нужна помощь в разработке шахматной игры. Я уже начал, но не получил далеко, поскольку я довольно новичок в Java, совершенно новый для программирования.
Во всяком случае, у меня есть мой абстрактный класс Piece и различные части как подклассы. У меня есть метод movePiece, в моем абстрактном классе, который я хочу определить для всех подклассов.
Все, что он сейчас делает, - это перемещение части с одного квадрата на другой. У меня есть квадратный класс, который может содержать объект Piece, плата состоит из квадрата размером 64x1.
Я знаю, как перемещаются фигуры, но как я вообще делаю программирование? Я хочу попробовать применить шаблон MVC, но это действительно первый раз, когда я буду использовать шаблоны.
В основном я думал об использовании Graphics2D для создания окна для каждой площади. Затем, когда игрок нажимает кусок, квадраты, которые доступны в качестве места назначения после перемещения, будут выделены в некотором цвете. После того, как игрок нажмет на один из этих квадратов, код, который у меня уже есть в моем методе movePiece, будет запущен.
Что я хочу сделать, это переопределить мой метод movePiece в каждом подклассе Piece. Вопрос в том, как код мог выглядеть в одном из этих методов? например, возьмите подкласс Pawn.
Я не прошу код для копирования/вставки, просто некоторые указатели на то, как это сделать, в конце концов, пример кода.
Спасибо!
public class Game {
@SuppressWarnings("unused")
public static void main(String[] args){
Board board = new Board();
} }
public class Board {
Square[] grid;
public Board(){
grid = new Square[64];
}
public Square getSquare(int i){
return grid[i];
}
public void setDefault(){
}
public Boolean isMoveValid(){
return null;
} }
public class Square {
private Piece piece;
public void addPiece(Piece pieceType, String pieceColour, String pieceOwner)
throws ClassNotFoundException, InstantiationException, IllegalAccessException{
PieceFactory factory = new PieceFactory();
Piece piece = factory.createPiece(pieceType);
piece.setColour(pieceColour);
piece.setOwner(pieceOwner);
this.piece = piece;
}
public void addPiece(Piece pieceType){
this.piece = pieceType;
}
public void removePiece(){
piece = null;
}
public Piece getPiece(){
return piece;
}
class PieceFactory {
@SuppressWarnings("rawtypes")
public Piece createPiece(Piece pieceType)
throws ClassNotFoundException, InstantiationException, IllegalAccessException{
Class pieceClass = Class.forName(pieceType.toString());
Piece piece = (Piece) pieceClass.newInstance();
return piece;
} }
public void setColour(String colour){
} }
public abstract class Piece {
Board board;
public void setColour(String pieceColour) {
}
public void setOwner(String pieceOwner) {
}
public String getColour() {
return "";
}
public String getOwner() {
return "";
}
public void movePiece(int oldIndex, int newIndex){
board.getSquare(oldIndex).removePiece();
board.getSquare(newIndex).addPiece(this);
}
public String toString(){
return this.getClass().getSimpleName();
} }
Вы хотели видеть код, очень простой, я знаю. И я изменю [64] на [8] [8]. Я пытаюсь не сделать это сложнее, чем это должно быть. Я могу, возможно, совместить цвет и владельца как атрибут и сделать его перечислением (либо ЧЕРНЫМ или БЕЛОЙ).
Извините, если форматирование не подходит.