-1

我带着另一个关于我的弹跳球小程序的问题回来了。我必须为球制作一个课程,以便您可以轻松添加更多内容。问题是:我在课堂上放了什么?只是一个 x、ay 和一个半径,还是还有更多?

这是我所有的代码(带有荷兰语注释,不要关注它们:))

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



 }  
  } 
4

2 回答 2

1

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

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

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

阅读有关封装的更多信息。

于 2013-10-29T07:59:18.063 回答
0

当你设计一个类时,你输入了你现在需要的属性。如果x,y和 aradius对您的班级来说已经足够了,那么您就可以使用它了,那就没问题了。您无需考虑在某个时候可能需要的所有可能属性。

例如,当您发现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;

是否将优秀的候选人分组到单独的球类中。

于 2013-10-29T07:51:57.900 回答