0

25個のランダムな楕円を生成し、ボールを描画してバウンドさせるプログラムを作成しようとしています。ある程度完了し、楕円を生成し、ボールを動かしましたが、スレッドを追加すると、楕円の描画が繰り返されましたループ、私はこれが起こっている理由をいくらか理解していますが、それを修正する方法がわかりません.

基本的に私のプログラムは:

  1. 境界内のランダムな位置に 25 個のランダムなサイズの楕円を描画 -完了
  2. ボールを描いて動かす -完成
  3. ボールをバウンドさせる - 完了していませんが、方法は知っています

しかし、それはステップ1を繰り返し続けます。

これは私が書いた私のコードです。ああ、今すぐアプレットを使用する必要があります。コースの一部です。スイングなどを使用することを提案しないでください。

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;

public class As4B extends Applet implements Runnable 
{

    public int x, y;
    public int width = 854;
    public int height = 480;
    public int border = 20;
    public Image offscreen;
    public Graphics d;


    public void init()
    {
        setSize(width,height);
        Thread th = new Thread(this);
        th.start();
        offscreen = createImage(width,height);
        d = offscreen.getGraphics();
    }

    public void run() 
    {
        x = 100;
        y = 100;
        while(true)
        {
            x ++;
            y ++;
            repaint();
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
    public void paint(Graphics gfx)
    {
        d.setColor(java.awt.Color.black);
        d.fillRect(0, 0, width, height);
        d.setColor(java.awt.Color.green);
        d.fillRect(0 + border, 0 + border, (width - (border * 2)), (height - (border* 2)));
        genOval(25, d);

        d.setColor(Color.gray);
        d.fillOval(x, y, 50, 50);
        gfx.drawImage(offscreen, 0, 0, this);

    }
    public int random(int low, int high)
    {
        int answer =(int)((Math.random()*(high-low))+ low);
        return answer;
    }
    public void genOval(int amount, Graphics f)
    {
        int ranWidth, ranHeight, ranX, ranY, red, blue, green;
        int i = 0;
        while(i < 25)
        {
            green = random(0,255);
            blue = random(0,255);
            red = random(0,255);

            f.setColor(new Color(red,green,blue));

            ranWidth = random(30,400);
            ranHeight = random(30,200);
            ranX = random(0 + border, ((width - border)- (ranWidth)));
            ranY = random(0 + border , ((height - border)- (ranHeight)));

            f.fillOval(ranX, ranY, ranWidth, ranHeight);
            i++;
        }   
    }

    public void update(Graphics gfx) {
        paint(gfx);
      }
}
4

1 に答える 1