-1

跳ねるボール アプレットについて、また質問があります。簡単に追加できるように、ボールのクラスを作成する必要があります。問題は、クラスに何を入れるかです。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



 }  
  } 
4

2 に答える 2

1

オブジェクト指向の主な強みの 1 つは、データとロジックをグループ化できることです。これらすべてのプロパティを非公開bounce()にし、ボール自体にメソッドを追加します (必要な引数でパラメーター化します)。次に、単純に 3 つのボールをインスタンス化して、それらを独自にバウンドさせることができます。

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

次に、次のような他の機能を追加できますBall.collidesWith(Ball other)。メインロジックを読みやすく実装しやすくします。

カプセル化の詳細をお読みください。

于 2013-10-29T07:59:18.063 に答える
0

クラスを設計するときは、今必要なプロパティを入れます。xyおよび 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 に答える