0

いくつかのオプションを選択できるメニューを作成しました。これらのオプションの 1 つは、ゲームを開始する「コンピューターで遊ぶ」です。

        JButton ai = new JButton("Play with computer");
    ai.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            GameBoard play = new GameBoard();
            hi.dispose(); //jframe
        }
    });

そして、GameBoard が登場します。

@SuppressWarnings("serial")
public class GameBoard extends Canvas {
    private Image dbi;
    private Graphics db;
    private JFrame okno;
    Rectangle aiPaddle = new Rectangle(10, 590, 10, 50);
    Rectangle pPaddle = new Rectangle(10, 100, 10, 50);
    Rectangle ball = new Rectangle(560, 10, 10, 10);
    Player p = new Player(this);
    Ai a = new Ai(this);
    Ball b = new Ball(this);
    GameBoard() {
        okno = new JFrame();
        okno.setTitle("Pink Ponk");
        okno.setSize(600, 300);
        okno.getContentPane().setBackground(Color.black);
        okno.setResizable(false);
        okno.setVisible(true);
        okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        addKeyListener(p);
    }

    public static void main(String[] args) {
        GameBoard gra = new GameBoard();
        gra.okno.add(gra);
    }

    @Override
    public void update(Graphics g) {
        dbi = createImage(10, 50);
        db = dbi.getGraphics();
        paint(db);
        g.clearRect(0, 0, 600, 300);
        g.setColor(Color.white);
        g.drawRect(p.getX(), p.getY(), 10, 50);
        g.fillRect(p.getX(), p.getY(), 10, 50);
        g.drawOval(b.getX(), b.getY(), 10, 10);
        g.fillOval(b.getX(), b.getY(), 10, 10);
        g.drawRect(a.getX(), a.getY(), 10, 50);
        g.fillRect(a.getX(), a.getY(), 10, 50);
    }

    @Override
    public void paint(Graphics g) {
        pPaddle = new Rectangle(p.getX(), p.getY(), 10, 50);
        aiPaddle = new Rectangle(a.getX(), a.getY(), 10, 50);
        ball = new Rectangle(b.getX(), b.getY(), 10, 10);
        g.clearRect(0, 0, 600, 300);
        g.setColor(Color.white);
        g.drawRect(p.getX(), p.getY(), 10, 50);
        g.fillRect(p.getX(), p.getY(), 10, 50);
        g.drawOval(b.getX(), b.getY(), 10, 10);
        g.fillOval(b.getX(), b.getY(), 10, 10);
        g.drawRect(a.getX(), a.getY(), 10, 50);
        g.fillRect(a.getX(), a.getY(), 10, 50);
    }

}

うまくいくはずですが、うまくいきません。長方形や楕円形のない黒い画面が表示されます。私はまだゲームに負けているので、他のクラスのスレッドは機能しています。:)

4

1 に答える 1

1

スタート ボタンが押されたときに呼び出す唯一の GameBoard コンストラクターは、新しいフレームを作成し、その背景を設定して、表示します。ただし、フレームにコンポーネントを追加することはありません。おそらく追加する必要があります

okno.add(this);

ただし、フレームを表示してこのフレームに追加するのは、キャンバスのコンストラクターの責任ではないことに注意してください。フレームの作成をコンストラクタの外に移動します。コンストラクターが本来すべきこと、つまりオブジェクトの構築を行います。

于 2012-07-10T11:17:58.080 に答える