0

アプレットに表示する必要があるチェス プログラムを Java で作成しています。現在、チェスの駒の配列を埋めるのに問題があります。これは現在、JApplet の paint() メソッドで行われていますが、paint は複数回呼び出される可能性があるため、これが間違っていることはわかっています。配列を作成して初期化メソッドに入力しようとしましたが、まったく機能しません。どんな助けでも大歓迎です。

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);
    }
}
4

3 に答える 3

3

paint メソッドでプログラム ロジックを実行しないでください -- ピリオド。それは非常に多くの点で間違っています。そのコードが何度も呼び出されて制御不能になるだけでなく、プログラムのグラフィックスが遅くなります。ペイントは、JPanel またはその他の JComponent の paintComponent メソッドで実行する必要があります。このメソッドは、ペイントのみに関係する必要があります。

ところで、あなたの init メソッドはどこにありますか? これは、このコードの大部分が行くべき場所です。

以下は、JPanel で行われたチェス アプリの例です: does-adding-a-jlabel-to-a-jpanel-hide-the-jpanel。JPanel 上にあるため、JApplet の contentPane に簡単に配置して、アプレットに表示できます。

于 2011-11-05T03:02:13.530 に答える
2

アプリケーションの視覚化部分からゲーム ルールを分離する必要があります。

Model-View-Presenter または Model-View-Controller デザイン パターンについてお読みください。それはあなたを助けるでしょう。

于 2011-11-05T03:04:50.570 に答える
0

Model-View-Controller設計パターンを試してください。そのパターンではプログラム ロジックは Controller 部分で実行されますが、View 部分で実行しています。ドラゴンがいる!

于 2011-11-05T10:04:36.613 に答える