gpt4 book ai didi

java - 在国际象棋中实现城堡移动

转载 作者:搜寻专家 更新时间:2023-11-01 03:17:37 26 4
gpt4 key购买 nike

我想用 Java 实现国际象棋作为练习棋子位置你必须知道是否有另一个棋子可以去到新的位置(我们知道只有马不能跳过其他棋子)。

另一个问题是城堡移动的实现。

相关代码:

片段:

 enum Color {BLACK , WHITE}
enum TYPE {ROOK , BISHOP , KNIGHT , QUEEN , KING , PAWN}

public abstract class Piece {

private boolean available;
private char x;
private int y;
Color color;
TYPE type;

public Piece(boolean available, char x, int y, Color color, TYPE type) {
this.available = available;
this.x = x;
this.y = y;
this.color = color;
this.type = type;
}

public boolean validateMove(ChessBoard board,char fromX, int fromY, char toX, int toY) {
if(toX == fromX && toY == fromY)
return false;

if(getX() != fromX || toY != fromY)
return false;

if(toX - 'a' < 0 || toX - 'a' > 7 || toY < 0 || toY > 7 || fromX - 'a' < 0 || fromX - 'a' > 7 || fromY < 0 || fromY > 7)
return false;
protectingTheWay(board);
return true;
}

(and all it's getter and setter).

主教:

public class Bishop extends Piece {


public Bishop(boolean available, char x, int y, Color color, TYPE type) {
super(available, x, y, color, type);
}

@Override
public boolean validateMove(ChessBoard board,char fromX, int fromY, char toX, int toY) {
if(super.validateMove(board,fromX, fromY, toX, toY) == false)
return false;
if( abs(toX - 'a' - (fromX - 'a')) == abs(toY - fromY) )
return true;
return false;
}
}

骑士:

public class Knight  extends Piece {
public Knight(boolean available, char x, int y, Color color, TYPE type) {
super(available, x, y, color, type);
}

@Override
public boolean validateMove(ChessBoard board,char fromX, int fromY, char toX, int toY) {
if( super.validateMove(board,fromX, fromY, toX, toY) == false)
return false;
if(toX - 'a' != fromX - 'a' - 1 || toX - 'a' != fromX - 'a' + 1 || toX - 'a' != fromX - 'a' + 2 || toX - 'a' != fromX - 'a' - 2)
if(toY != fromY - 2 || toY != fromY + 2 || toY != fromY - 1 || toY != fromY + 1)
return false;
return true;
}
}

和其他作品。

最佳答案

这听起来像是一个很酷的练习,对我来说,这听起来像是您陷入了实际上是设计问题,而不是编码问题。即使您不是熟悉设计模式和 SOLID 的 OOP 大师,甚至不是 Long 中有多少位,您通常也可以通过编写一些描述您正在构建的系统的文本来改进面向对象的应用程序,并且然后记下该文本中的各种名词和动词。

因此,让我们从一个简单(显然不全面)描述您的问题域的示例开始:

Chess is a game, played on a board called a chessboard, with the goal of capturing a specific piece on the opposing player's side - their king. There are two players, one playing white and the other playing black. Each player starts with a fixed number of pieces of various types (king is among those). Each piece can only move in predefined ways. The game starts when the white player makes a legal move, and each player takes turns moving one piece at a time until the game ends. The game can end when one in put in check-mate (meaning their own king will be captured on the next move by their opponent and the king cannot escape, block, or eliminate the threat of capture), when there is a draw (where neither player can possibly capture the opponent's king), or when one player surrenders to the other (because ... reasons).

如果您查看该描述,请注意各种名词和动词。名词是程序中的候选对象,动词是候选操作(方法)。

在上面的代码中,我看到代表一些棋子和棋盘的对象。将您所拥有的与我上面的简单描述进行比较,并问问自己还缺少哪些其他可能的对象。一个有趣的含义可能是您是否将国际象棋的移动视为潜在对象或其他对象可以执行的操作。

具体针对您的问题 - 您将如何根据您提议的系统中的其他对象和方法来定义城堡?易位当然是一种特定类型的着法,并且对于哪些棋子可以参与其中,开始和结束的位置以及您可以执行的方向都有限制(向左易位!=向右易位)。

关于java - 在国际象棋中实现城堡移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43211838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com