跳ねるボール アプレットについて、また質問があります。簡単に追加できるように、ボールのクラスを作成する必要があります。問題は、クラスに何を入れるかです。x、y、半径だけですか、それとももっとありますか?
これは私のコードのすべてです(オランダ語のコメントが付いているので、気にしないでください:))
import java.applet.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class BallApplet2 extends Applet implements Runnable
{
// de positie van de rode bal op de x-as en y-as en zijn straal
int x_pos1 = 150;
int y_pos1 = 301;
int radius1 = 20;
// de positie van de blauwe bal op de x-as en y-as en zijn straal
int x_pos2 = 250;
int y_pos2 = 301;
int radius2 = 20;
// de (willekeurige) snelheid van de rode bal wordt hier berekend
int randomspeed1 = (int )(Math.random() * 7 + 2);
// de (willekeurige) snelheid van de blauwe bal wordt hier berekend
int randomspeed2 = (int )(Math.random() * 7 + 2);
// het getal dat hierboven is berekend wordt toegewezen aan ballspeedx1
private float ballspeedx1 = -randomspeed1;
// het getal dat hierboven is berekend wordt toegewezen aan ballspeedx2
private float ballspeedx2 = randomspeed2;
public void init() {}
// de Thread wordt hier aangemaakt
public void start() {
Thread th = new Thread (this);
th.start (); }
public void stop() {}
public void destroy() {}
// de Thread wordt hier uitgevoerd door de methode run()
public void run () {
// de prioriteit van de Thread wordt verlaagd zodat hij niet nog een keer geactiveerd wordt tijdens het uitvoeren
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
while (true)
{
x_pos1 += ballspeedx1;
x_pos2 += ballspeedx2;
// repaint() update de positie van de ballen
repaint();
// als x_pos < 100 is draait de richting van de bal om
if (x_pos1 < 100) {
ballspeedx1 = -ballspeedx1;
x_pos1 = 100;
}
if (x_pos2 < 100) {
ballspeedx2 = -ballspeedx2;
x_pos2 = 100;
}
// als x_pos > 300 is draait de richting van de bal om
if (x_pos1 > 300) {
ballspeedx1 = -ballspeedx1;
x_pos1 = 300;
}
if (x_pos2 > 300) {
ballspeedx2 = -ballspeedx2;
x_pos2 = 300;
}
// als de positie van de blauwe bal (x_pos2) - de positie van de rode bal (x_pos1) kleiner is
// dan de som van de stralen van de rode en de blauwe bal draaien beide ballen om.
if (Math.abs(x_pos2-x_pos1)<radius1+radius2){
ballspeedx1 = -ballspeedx1;
ballspeedx2 = -ballspeedx2;
}
try { Thread.sleep (20); }
catch (InterruptedException ex) {}
Thread.currentThread().setPriority(Thread.MAX_PRIORITY); }}
public void paint (Graphics g) {
// de rode bal
g.setColor (Color.red);
g.fillOval (x_pos1 - radius1, y_pos1 - radius1, 2 * radius1, 2 * radius1);
// de blauwe bal
g.setColor (Color.blue);
g.fillOval (x_pos2 - radius2, y_pos2 - radius2, 2 * radius2, 2 * radius2);
g.setColor(Color.black);
g.drawLine(80,280,80,320); // lijn links
g.drawLine(320,280,320,320); // lijn rechts
g.drawLine(80,320,320,320); // lijn onder
}
}