import Prog1Tools.*;
public class SpringendeBaelle
{
// Wieviel Zeilen hat der Screen
public static final int SCREEN_ZEILEN = 25;
// Wieviel Spalten hat der Screen
public static final int SCREEN_SPALTEN = 80;
// Schrittanzahl
private static final int SCHRITTE = 100;
// Ballsymbol
private static final char BALL_SYMBOL = 'o';
// Verzögere jeden Schritt um das Zeichnen besser verfolgen zu können
private static final int VERZOEGERUNG = 100;
// Main Methode
public static void main (String[] args)
{
// EJE-Screen
TextScreen screen = TextScreen.getInstance();
// Zeichne Title
screen.setTitle("Schritt (0 / " + SCHRITTE + ")");
// Erzeuge Bälle
Ball ball1 = new Ball();
Ball ball2 = new Ball();
Ball ball3 = new Ball();
Ball ball4 = new Ball();
// Setze Anfangsposition
ball1.setZeile(0);
ball1.setSpalte(0);
ball2.setZeile(0);
ball2.setSpalte(SCREEN_SPALTEN-1);
ball3.setZeile(SCREEN_ZEILEN-1);
ball3.setSpalte(SCREEN_SPALTEN-1);
ball4.setZeile(SCREEN_ZEILEN-1);
ball4.setSpalte(0);
// Zeichne Anfangsposition
screen.write(ball1.getZeile(), ball1.getSpalte(), BALL_SYMBOL);
screen.write(ball2.getZeile(), ball2.getSpalte(), BALL_SYMBOL);
screen.write(ball3.getZeile(), ball3.getSpalte(), BALL_SYMBOL);
screen.write(ball4.getZeile(), ball4.getSpalte(), BALL_SYMBOL);
// Führe Ballbewegung x mal aus
for(int i=0; i < SCHRITTE; i++)
{
// Zeige aktuellen Schritt an
screen.setTitle("Schritt (" + (i + 1) +" / " + SCHRITTE + ")");
// Pause um Programmverlauf besser verfolgen zu können
screen.pause(VERZOEGERUNG);
// Berechne neue Position
ball1.neuePositionBerechnen();
ball2.neuePositionBerechnen();
ball3.neuePositionBerechnen();
ball4.neuePositionBerechnen();
// Zeichne Ball
screen.write(ball1.getZeile(), ball1.getSpalte(), BALL_SYMBOL);
screen.write(ball2.getZeile(), ball2.getSpalte(), BALL_SYMBOL);
screen.write(ball3.getZeile(), ball3.getSpalte(), BALL_SYMBOL);
screen.write(ball4.getZeile(), ball4.getSpalte(), BALL_SYMBOL);
}
}
}
class Ball implements BallSpec
{
// Variablen deklarieren
private int zeile;
private int spalte;
private boolean zeileSteigend;
private boolean spalteSteigend;
// Setter und Getter definieren
public void setZeile(int zeile)
{
this.zeile = zeile;
}
public void setSpalte(int spalte)
{
this.spalte = spalte;
}
public int getZeile()
{
return zeile;
}
public int getSpalte()
{
return spalte;
}
// Ball-Logik
public void neuePositionBerechnen()
{
//
// Teste auf Kollision und ändere Richtung entsprechend
//
// y-Achsen Kollision ?
if ( zeile <= 0 ) // Oben angestoßen
{
zeileSteigend = true;
}
else if (zeile >= SpringendeBaelle.SCREEN_ZEILEN-1) // Unten angestoßen
{
zeileSteigend = false;
}
// x-Achsen Kollision ?
if (spalte <= 0) // Links angestoßen
{
spalteSteigend = true;
}
else if (spalte >= SpringendeBaelle.SCREEN_SPALTEN-1) // Rechts angestoßen
{
spalteSteigend = false;
}
//
// Bewege Ball wie eingestellt
//
// y-Achse bewegen
if (zeileSteigend)
{
zeile++;
}
else
{
zeile--;
}
// x-Achse bewegen
if (spalteSteigend)
{
spalte++;
}
else
{
spalte--;
}
}
}
// Ball Interface
interface BallSpec
{
public final String BALL = null;
public void setZeile (int zeile);
public void setSpalte (int spalte);
public int getZeile ();
public int getSpalte ();
public void neuePositionBerechnen ();
}
Read more: http://feeds.dzone.com/~r/dzone/snippets/~3/dgM-f7TIio8/12689