0

ヘビと同じシステムでゲームを作ろうとしています。JPanel背景とユーザーに正方形を表示するための線を描画して、ウィンドウを作成しました。

ボードは600x600です(すべてが表示されるようにするには601x601)。正方形は20x20です。

今、私は色付きの正方形をボードに配置し、色付きの正方形がすでに理想的に存在するかどうかを検出する方法を追加しようとしています。

public class CreateWindow extends JFrame {

    JPanel GameArea;
    static JLayeredPane Java_Window;
    Image Background;

    public void CreateWindow() {
        Dimension Panel_Size = new Dimension(800, 800);
        this.setSize(800,800);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible( true );
        this.setTitle("LineRage");
        getContentPane().setBackground(Color.white); 

        Java_Window = new JLayeredPane();
        this.add(Java_Window);
        Java_Window.setPreferredSize(Panel_Size);

        GameArea = new JPanel()
        {
            @Override
            public void paint(Graphics g) {
                g.setColor(Color.BLACK);
                g.fillRect(0,0,601,601);

                g.setColor(Color.GRAY);
                // Cut map into sections
                int x;
                //draw vertical lines
                for(x = 0; x < 31; x++) {
                    g.drawLine(x*20,0,x*20,600);
                }    
                //draw horizontal lines
                for(x = 0; x < 31; x++) {
                    g.drawLine(0,x*20,600,x*20);
                }     
            }

            public void PaintSquare (int x,int y) {
                //Check if square painted

                //Paint square
                Rectangle rect = new Rectangle(x, y, 20, 20);
                GameArea.add(rect);
            }
        };
        Java_Window.add(GameArea, JLayeredPane.DEFAULT_LAYER);
        GameArea.setBounds(20, 20, 601, 601);
        GameArea.setVisible(true);
    }
}

つまりJava_Window、(800x800)の背景は白で、 Game_Area(601x601)の背景は黒で、正方形に分割するために32本の線が並んでいます。

public void PaintSquare (int x, int y) {
    //Check if square painted

    //Paint square
    Rectangle square = new Rectangle(x, y, 20, 20);
    GameArea.add(square);
}

PaintSquare別のオブジェクト(メインゲーム)から呼び出され、正方形の背景を確認します。空いている場合は、正方形をペイントします(20x20)。

4

2 に答える 2

1

あなたの正確な質問は不明ですが、ここにいくつかの指針があります:

  • Swing でカスタム ペイントを行う場合paintComponentよりも使用します。paint電話することを忘れないでくださいsuper.paintComponent(g)
  • java.awt.RectangleJComponentは(または)から派生していComponentないため、コンテナーに追加できません。
  • 取るべき 1 つのアプローチは、fillRectを使用して正方形を「ペイント」することです。

また、Java では、メソッドは小文字で始まります。これと前のポイントを一緒に追加すると、次のことができます。

public void paintSquare(Graphics g, int x, int y) {
   g.fillRect(x, y, 20, 20);
}

ここで、paintSquareメソッドは から呼び出されpaintComponentます。

于 2013-03-04T12:58:31.600 に答える
0

Reimeusのアドバイスに従い、さらに、GUI モデルを作成する必要があります。

ゲーム モデル クラスで、ゲーム ボードと同じサイズの Rectangle 配列を定義します。

Rectangle[][] board;

そうすれば、すでにペイントしたものを心配するのではなく、モデル クラスで重複するヘビをテストできます。

paintComponent メソッドはかなり単純になります。

protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    model.draw(g);
}

詳細な説明については、この回答を参照してください。

于 2013-03-04T17:31:14.090 に答える