制作一个Ball类

时间:2013-10-29 07:46:36

标签: java class bounce

我回来了另一个关于我的弹跳球小程序的问题。我必须为球做一个课程,这样你就可以轻松添加更多。问题是:我在课堂上放什么?只是一个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



 }  
  } 

2 个答案:

答案 0 :(得分:1)

面向对象的主要优势之一是能够将数据和逻辑组合在一起。将所有这些属性设为私有,并向球本身添加bounce()方法(使用您需要的任何参数进行参数化)。然后你可以简单地实例化3个球并让它们自己反弹:

final Ball ball1 = new Ball(150, 301, 20);
ball1.bounce();

然后您可以添加其他功能,例如:Ball.collidesWith(Ball other),以使主逻辑易于阅读和实现。

详细了解encapsulation

答案 1 :(得分:0)

当你设计一个类时,你会输入你现在需要的属性。如果xyradius足以让您上课,那么您可以使用它,您就可以了。您不需要考虑可能需要的所有可能属性。

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;

将好的候选人归为单独的球类。