-1

このような質問はたくさんありますが、私はそれらをすべてチェックしましたが、どれも私が抱えている問題を解決しなかったので、これを重複して閉じないでください。

徐々に大きくなっている他の6つの円に囲まれた、真ん中に1つの大きな円を置いてゲームを作成しています。6つの円の1つが中央の円と衝突したら、ゲームを終了したいと思います。誰かが適切な解決策を提供できますか?

これが私のコードです:

package virus;


import java.awt.*;
import java.util.Random;
import javax.swing.JPanel;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;


public class VirusGamePanel extends JPanel implements MouseListener{
    private static final long serialVersionUID = 1L;//serialVersionUID field
    Random colour = new Random();//the outside ovals will always be a random colour
    private int sizeX1 = 0;//the x size of the outside ovals 
    private int sizeX2 = 0;
    private int sizeX3 = 0;
    private int sizeX4 = 0;
    private int sizeX5 = 0;
    private int sizeX6 = 0;

    private int sizeY1 = 0;//the y size of the outside ovals
    private int sizeY2 = 0;
    private int sizeY3 = 0;
    private int sizeY4 = 0;
    private int sizeY5 = 0;
    private int sizeY6 = 0;
    int score = 0;

    static String scorestring = "Score: ";
    Color rand = new Color(colour.nextInt(255), colour.nextInt(255), colour.nextInt(255)); //generate the random colour

    public void paint(Graphics g)
    {
        super.paint(g);
        g.setColor(Color.magenta);
        g.drawString(scorestring+score,275,250);
        g.setColor(Color.orange);
        g.drawOval(200, 150, 200, 200);
        g.setColor(rand);
        g.fillOval(300 - sizeX1 / 2, 50 - sizeY1 / 2, sizeX1, sizeY1);//these six ovals are supposed to increase in size
        g.fillOval(130 - sizeX2 / 2,100 - sizeY2 / 2, sizeX2, sizeY2);
        g.fillOval(480 - sizeX3 / 2,100 - sizeY3 / 2, sizeX3, sizeY3);
        g.fillOval(130 - sizeX4 / 2,400 - sizeY4 / 2, sizeX4, sizeY4);
        g.fillOval(480 - sizeX5 / 2,400 - sizeY5 / 2, sizeX5, sizeY5);
        g.fillOval(305 - sizeX6 / 2,450 - sizeY6 / 2, sizeX6, sizeY6);


        try
        {
            Thread.sleep(100);
        }
        catch(InterruptedException e)
        {
            e.printStackTrace();
        }
        inc();
    }


    private void inc()//increase the size of the ovals
    {

            sizeX1++;
            sizeY1++;
            sizeX2++;
            sizeY2++;
            sizeX3++;
            sizeY3++;
            sizeX4++;
            sizeY4++;
            sizeX5++;
            sizeY5++;
            sizeX6++;
            sizeY6++;
            repaint();

    }


    public static void main(String[] args) {}
4

1 に答える 1

3

円が重なっているかどうかを計算するのはそれほど難しくありません。2つの円は、両方の円の半径の合計がそれらの中心点間の距離以上になるとすぐに重なります。

それらをGoogleに入れると、必要な式が得られます。

その隣に、あなたのコードについてのいくつかの意見

  • paintComponentメソッドの代わりにメソッドをpaintオーバーライドする
  • UIをブロックするため、イベントディスパッチスレッドを呼び出さないでください。私の推測では、現在のコードでは、再描画は表示されません。詳細については、Swingチュートリアルの同時実行性を参照してください。あなたがやりたいことの解決策は、Swingを使用することですThread.sleepTimer
于 2012-08-26T07:43:07.150 に答える