无论如何,我有一个抽象类Piece和各种棋子作为其子类。我有一个movePiece方法在我的抽象类中,我想为所有子类定义这个方法。
目前它只是将棋子从一个方格移动到另一个方格。我有一个Square类可以容纳Piece对象,棋盘由一个64x1的Square数组组成。
我知道棋子如何移动,但我该如何进行编程呢? 我想尝试应用MVC模式,但这真的是我第一次使用模式。
基本上,我打算使用Graphics2D为每个Square创建一个框。然后当玩家点击一个棋子时,移动后可用的方块将用某种颜色进行轮廓描绘。 玩家点击其中一个方块后,将运行我已经在movePiece方法中编写的代码。
我想要做的是在每个Piece子类中覆盖我的movePiece方法。问题是,其中一个这些方法的代码可能会是什么样子呢? 以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]。
我试图让它不那么难。我可能可以将颜色和所有者组合为一个属性,并使其成为枚举(BLACK或WHITE)。
如果格式不好,很抱歉。