我回来了另一个关于我的弹跳球小程序的问题。我必须为球做一个课程,这样你就可以轻松添加更多。问题是:我在课堂上放什么?只是一个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
}
}
答案 0 :(得分:1)
面向对象的主要优势之一是能够将数据和逻辑组合在一起。将所有这些属性设为私有,并向球本身添加bounce()
方法(使用您需要的任何参数进行参数化)。然后你可以简单地实例化3个球并让它们自己反弹:
final Ball ball1 = new Ball(150, 301, 20);
ball1.bounce();
然后您可以添加其他功能,例如:Ball.collidesWith(Ball other)
,以使主逻辑易于阅读和实现。
详细了解encapsulation。
答案 1 :(得分:0)
当你设计一个类时,你会输入你现在需要的属性。如果x
,y
和radius
足以让您上课,那么您可以使用它,您就可以了。您不需要考虑可能需要的所有可能属性。
E.g。当您发现几天后需要color
时,请添加它。就这么简单。
然而,你的
// 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;
将好的候选人归为单独的球类。