Java国际象棋小程序

Java国际象棋小程序,java,swing,chess,japplet,Java,Swing,Chess,Japplet,我正在用java编写一个国际象棋程序,它必须显示在小程序中。我目前在填充棋子数组时遇到问题。目前这是在JApplet的paint()方法中完成的,我知道这是错误的,因为paint可以被多次调用。我尝试过创建数组并将其填充到我的initialize方法中,但这根本不起作用。任何帮助都将不胜感激 public class DrawChessBoard extends JApplet implements MouseListener, MouseMotionListener {

我正在用java编写一个国际象棋程序,它必须显示在小程序中。我目前在填充棋子数组时遇到问题。目前这是在JApplet的paint()方法中完成的,我知道这是错误的,因为paint可以被多次调用。我尝试过创建数组并将其填充到我的initialize方法中,但这根本不起作用。任何帮助都将不胜感激

public class DrawChessBoard extends JApplet
        implements MouseListener, MouseMotionListener {

    ChessPiece myPiece;
    ImageIcon square;
    ImageObserver observer;
    ChessBoard gameBoard;
    boolean isMouseDragging = false;
    int size; //square dimensions   

    public void initialize() {
        setBackground(Color.white);
        Image bSquare = square.getImage();
        size = bSquare.getWidth(observer);
        addMouseListener(this);
        addMouseMotionListener(this);
    }

    public void paint(Graphics h) {
        Graphics2D g = (Graphics2D) h;
        //System.out.println("Am I being called more than once?");
        gameBoard = new ChessBoard(8);
        gameBoard.start();
        gameBoard.paintBoard(g);
        gameBoard.paintComponent(g);
    }
}

不要在paint方法中执行程序逻辑--period。这在很多方面都是错误的。该代码不仅会被多次调用并超出您的控制,还会使程序图形变得缓慢。应该使用JPanel或其他JComponent的paintComponent方法进行绘制,并且该方法应该只关注绘制

顺便问一下,你的init方法在哪里?这就是大部分代码应该用到的地方


下面是一个在JPanel上完成的国际象棋应用程序示例:。由于它位于JPanel上,因此可以轻松地将其放置在JApplet的contentPane中并显示在小程序中。

不要在paint方法中执行程序逻辑--period。这在很多方面都是错误的。该代码不仅会被多次调用并超出您的控制,还会使程序图形变得缓慢。应该使用JPanel或其他JComponent的paintComponent方法进行绘制,并且该方法应该只关注绘制

顺便问一下,你的init方法在哪里?这就是大部分代码应该用到的地方


下面是一个在JPanel上完成的国际象棋应用程序示例:。由于它位于JPanel上,因此可以轻松地将其放置在JApplet的内容窗格中,并显示在小程序中。

您必须将游戏规则与应用程序的可视化部分分开


阅读有关模型视图演示器或模型视图控制器设计模式的信息。它将帮助您。

您必须将游戏规则与应用程序的可视化部分分开

阅读有关模型视图演示器或模型视图控制器设计模式的信息。它将帮助您。

尝试设计模式。在该模式中,程序逻辑在控制器部分执行,但您在视图部分执行。有龙

试试设计模式。在该模式中,程序逻辑在控制器部分执行,但您在视图部分执行。有龙

看看这个,定义“根本不起作用”?我想这正是你想要初始化它的地方,至少是为了让事情开始。(例如,您可能还希望在新游戏开始时对其进行初始化。)查看此内容并定义“根本不起作用”?我想这正是你想要初始化它的地方,至少是为了让事情开始。(例如,您可能还希望在新游戏开始时对其进行初始化。)