我是新来的,虽然我已经多次在这里找到了很多信息,但这是我的第一个问题,所以现在就让我改变问题的方式。
好吧,我正在尝试创建一个简单的国际象棋Java程序,为此,我为每种不同类型的作品(骑士,女王,典当......)创建了一个不同的类,但现在我需要存储所有的他们在同一个阵列中设置并获得他们在董事会中的位置。
为了做到这一点,我想到了创建一个整数数组,它将存储对正确位置的不同对象的引用,并且在没有任何部分的地方都为null或0,但是我遇到了很多问题。
我还想过创建一个名为" pieces"的超类。或类似的东西,以及这个类的数组。这样,使用开关,我可以根据值调用每个子类(1为pawn,2为骑士...),但这似乎太破旧了,因为我应该修改很多东西,我确定有更好看的方法来做到这一点。
提前致谢!
编辑:这是我的班级女王的一些代码,所以你知道我是如何编码的:
public class Queen {
//Clase de la mejor banda de música de la historia
//Color. True when white, false when black.
private final boolean color;
//Parametres for position
private int x, y;
public Queen(boolean c, int x, int y){
color = c;
this.x=x;
this.y=y;
}
public String toString(){
String a;
if(color) a="q";
else a="Q";
return a;
}
/* Checks if the movement to the given space is possible or not.
* Returns true if possible, false if not.
*/
public boolean checkMove(int i, int j){
//Checks that the given space is right
if(i<1||i>8||j<1||j>8) return false;
//Space is the same of the piece
else if(i==x&&j==y) return false;
//Given space is in the same column as the piece
else if(i==x){
//Space is under the piece
if(j>y){
}
//Space is over the piece
else if(j<y){
}
}
//Given space is in the same row as the piece
else if(j==y){
//Space is to the right of the piece
if(i>x){
}
//Space is to the left of the piece
else if(i<x){
}
}
//DIAGONALS
else{
//Space is in a diagonal, down left of the piece
for(int aux_x=x, aux_y=y; aux_x>1 && aux_y<8; aux_x--, aux_y++){
if(aux_x==i && aux_y==j){
}
else if(Grid.board)
}
//
}
}
}
答案 0 :(得分:0)
创建一个名为file.read()
的超类,继承此类中的所有类(因为它们都是棋子)。 e=(((2,), (3,), (2,), (2, 2), (2,)), ((2,), (1, 2), (2,), (3,), (3,)))
将有一个变量来表示当前片段的位置。这似乎是最标准的做法。
e.g。
ChessPiece
然后,您可以创建ChessPiece
public abstract class ChessPiece {
// fields
protected boolean isWhite; // true if this is a white piece
protected int row; // current chess piece row
protected int col; // current chess piece column
并获取/设置其位置。
答案 1 :(得分:0)
考虑这个界面:
public interface ChessPiece {
public enum Color { BLACK, WHITE };
public Color getColor();
//Check if move to (i,j) is possible
public boolean checkMove(int i, int j);
}
这对你女王的改变:
public class Queen implements ChessPiece {
//Clase de la mejor banda de música de la historia
//Color. True when white, false when black.
private final Color color;
//Parametres for position
private int x, y;
public Queen(Color c, int x, int y){
color = c;
this.x=x;
this.y=y;
}
@Override
public Color getColor() {
return color;
}
public String toString(){
if(Color.BLACK.equals(color)) {
return "q";
} else {
return "Q";
}
}
/* Checks if the movement to the given space is possible or not.
* Returns true if possible, false if not.
*/
@Override
public boolean checkMove(int i, int j){
//Checks that the given space is right
if(i<1||i>8||j<1||j>8) return false;
//Space is the same of the piece
else if(i==x&&j==y) return false;
[...]
}
}
现在您可以简单地将所有部分保存在数组或列表中:
List<ChessPiece> onBoard = new ArrayList<ChessPiece>();
//Now add a queen
onBoard.add(new Queen(ChessPiece.Color.WHITE, 1, 4));
他们都可以告诉你一个举动是否有效:
public boolean isCheck(Color c) {
Point p = getPositionOfKing(c);
for(int i = 0; i <8; ++i) {
for(int j = 0; j <8; ++j) {
ChessPiece cp = getAt(i,j);
if(cp != null && !cp.getColor().equals(c)) {
if(cp.isValidMode(p.x, p.y)) {
//The piece on i, j could capture the king!
}
}
}
}
}