小编Smo*_*tor的帖子

Java编程 - 国际象棋移动(基本,没有AI)

我在设计国际象棋游戏时需要帮助.我已经开始了,但还没有走远,因为我对Java很陌生,实际上是编程新手.

无论如何,我有我的抽象类Piece和各个部分作为子类.我有一个方法movePiece,在我的抽象类中,我想为所有子类定义.

它目前所做的就是将这件作品从一个方格移动到另一个方格.我有一个可以容纳Piece对象的Square类,该板由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 …
Run Code Online (Sandbox Code Playgroud)

java chess

10
推荐指数
1
解决办法
4万
查看次数

如何使我的自定义Swing组件可见?

我不知道它为什么不显示.首先,我创建一个组件实例,然后将其添加到二维JPanel数组中的某个元素.然后我循环遍历该数组并将每个JPanel添加到另一个JPanel容器中,该容器用于容纳所有JPanel.

然后我将最终容器添加到我的JFrame窗口并将可见性设置为true,它应该是可见的吗?

public class View extends JFrame {

    Board      gameBoard;
    JFrame     gameWindow   = new JFrame("Chess");
    JPanel     gamePanel    = new JPanel();
    JPanel[][] squarePanel  = new JPanel[8][8];
    JMenuBar   gameMenu     = new JMenuBar();
    JButton    restartGame  = new JButton("Restart");
    JButton    pauseGame    = new JButton("Pause");
    JButton    log          = new JButton("Log");

    View(Board board){
        gameWindow.setDefaultCloseOperation(EXIT_ON_CLOSE);
        gameWindow.setSize(400, 420);
        gameWindow.getContentPane().add(gamePanel, BorderLayout.CENTER);
        gameWindow.getContentPane().add(gameMenu, BorderLayout.NORTH);
        gameMenu.add(restartGame);
        gameMenu.add(pauseGame);
        gameMenu.add(log);
        gameBoard = board;
        drawBoard(gameBoard);
        gameWindow.setResizable(false);
        gameWindow.setVisible(true);

    }

    public void drawBoard(Board board){
        for(int row = 0; row < 8; row++){
            for(int col = 0; …
Run Code Online (Sandbox Code Playgroud)

java swing

3
推荐指数
1
解决办法
2461
查看次数

将JLabel添加到JPanel是否"隐藏"JPanel?

如果我在GridLayout中有几个JPanels,每个都有一个MouseAdapter,然后创建JLabel(带文本)并添加到每个JPanels.请注意,JLabel没有侦听器.如果我渲染它并尝试单击JPanel,或者,最终尝试单击JLabel,MouseAdapter会将其注册为事件吗?

基本上我希望JPanels注册事件和JPanels只显示JPanels上面的文本.此外,面板具有背景颜色.

如果JLabel确实"隐藏"了注册事件,我该如何解决这个问题呢?

java swing chess jlabel jpanel

0
推荐指数
1
解决办法
2083
查看次数

标签 统计

java ×3

chess ×2

swing ×2

jlabel ×1

jpanel ×1