| www.r-krell.de |
| Webangebot für Schule und Unterricht, Software, Fotovoltaik und mehr |
Willkommen/Übersicht > Informatik > Informatik mit Java, Teil b) > Java-Autorennen
Autorennen für zwei Personen
Links oben erscheint ein Extra-Fenster mit den beiden Autos:
Wer seine Taste schneller bzw. öfter drückt, gewinnt!
Applet nach Zieleinlauf eines Autos mit Taste 'E' beenden
-- beim Anklicken des Schließknopfes 'x'
schließt sich eventuell auch der Internet-Explorer!
Achtung: Java-Applets müssen zugelassen sein. Erscheint in Ihrem Internet-Explorer
oben eine gelbe Leiste, bitte drauf klicken und geblockte Inhalte zulassen...!
Nachfolgend der Quelltext des Autorennens „Formel 1", der auf vier Dateien verteilt ist:
Außerdem wird dargestellt, wie ein Applet aus einer Webseite aufgerufen werden kann:
zum Inhaltsverzeichnis (oben) / zum Seitenende
Erste Java-Datei: „Fomel1_Auto.java" -- Bauplan für ein bzw. für jedes Auto
// Auto fürs Formel1-Autorennen:
// R. Krell, 9/2003 -- Java-JDK + stiftUndCo
// http://www.r-krell.de
import stiftUndCo.*;
import java.awt.*; // für Color
public class Formel1_Auto
{
private BuntStift stift = new BuntStift();
private String name;
private int x, y;
public Formel1_Auto (int xPos, int yPos, Color farbe, String bezeichnung)
{ // Konstruktor
x = xPos; // füllt Datenfelder mit den übergebenen Werten ..
y = yPos;
name = bezeichnung;
stift.setzeFarbe (farbe);
zeichneAuto (true); // .. und zeichnet Auto erstmalig
}
private void zeichneAuto (boolean sichtbar)
{
if (sichtbar)
{
stift.normal();
}
else
{
stift.radiere();
}
stift.hoch();
stift.bewegeBis (x, y);
stift.runter();
stift.bewegeBis (x+42, y);
stift.bewegeBis (x+1, y-12);
stift.bewegeBis (x, y); //..Karosserie
stift.hoch();
stift.bewegeBis (x+8, y-2);
stift.zeichneKreis (7); // Hinterrad
stift.bewegeBis (x+33, y);
stift.zeichneKreis (5); // Vorderrad
}
public void fahreUm (int deltaX)
{
zeichneAuto (false); // löscht altes Auto
x = x + deltaX;
zeichneAuto (true); // zeichnet neues Auto
}
public int wo ()
{
return (x+42); // x-Position der Spitze des Autos
}
public String wer ()
{
return (name);
}
}
zum Inhaltsverzeichnis (oben) / zum Seitenende
Zweite Java-Datei: „Fomel1_Strecke.java" -- Bauplan für die Rennstrecke
// Rennstrecke fürs Formel1-Autorennen:
// R. Krell, 9/2003 -- Java-JDK + stiftUndCo
// http://www.r-krell.de
import stiftUndCo.*;
public class Formel1_Strecke
{
Bildschirm gelände;
BuntStift stift;
int x0, x1, y0;
public Formel1_Strecke (int xStart, int xZiel, int yStart)
{ // Konstruktor :
x0 = xStart; // füllt Datenfelder ..
x1 = xZiel;
y0 = yStart;
gelände = new Bildschirm (x1+20, y0+200,
"Autorennen -- [S]=(wieder) sichtbar machen) -- www.r-krell.de");
stift = new BuntStift(); // .. und erzeugt Bildschirn und Stift
}
public void zeichneStrecke()
{
gelände.löscheAlles(); // für nochmaligen Start
stift.bewegeBis (x0, y0); // zeichnet Straße
stift.runter();
stift.bewegeBis (x1, y0);
stift.hoch();
stift.bewegeBis (x0, y0+50);
stift.runter();
stift.bewegeBis (x1, y0+50);
stift.hoch();
stift.bewegeBis (x0, y0+100);
stift.runter();
stift.bewegeBis (x1, y0+100);
stift.hoch();
stift.bewegeBis (x0, y0+120); // beschriftet Start und Ziel
stift.schreibe ("Start");
stift.bewegeBis (x1-20, y0+120);
stift.schreibe ("Ziel");
stift.bewegeBis(175,200); // Spielanleitung
stift.schreibe ("Tasten [R] und/oder [B] drücken!");
}
}
zum Inhaltsverzeichnis (oben) / zum Seitenende
Dritte Java-Datei: „Fomel1_Rennen.java" -- Bauplan für die Steuerung des Rennens
// Renn-Steuerung fürs Formel1-Autorennen:
// R. Krell, 9/2003 -- Java-JDK + stiftUndCo
// http://www.r-krell.de
import stiftUndCo.*;
public class Formel1_Rennen
{
Formel1_Strecke monza = new Formel1_Strecke (10, 500, 50);
Formel1_Auto ferrari, williams;
Tastatur taste;
BuntStift stift;
public void spielen ()
{
do
{
monza.zeichneStrecke();
ferrari = new Formel1_Auto (10, 80, Farbe.ROT, "Der rote Ferrari");
williams = new Formel1_Auto (10,130, Farbe.BLAU, "Der blaue BMW-Williams");
taste = new Tastatur ();
stift = new BuntStift();
rennen();
siegerEhrung ();
} while (nochmal());
}
private void rennen ()
{
while ((ferrari.wo()<500)&&(williams.wo()<500))
// Autos bewegen, solange keins am Ziel
{
if (taste.wurdeGedrueckt())
{
switch (taste.zeichen())
{
case 'r' : ;
case 'R' : ferrari.fahreUm (2); break; // Taste [R]: ferrari
case 'b' : ;
case 'B' : williams.fahreUm (2); break; // Taste [B]: williams
case 's' : ;
case 'S' : monza.zeichneStrecke(); // Taste [S]: alles nochmal ..
ferrari.fahreUm (0); //.. ohne Bewegung zeichnen,
williams.fahreUm (0); //.. weil Fenster verdeckt war
}
}
}
}
private void siegerEhrung ()
{
stift.bewegeBis (50,180); // löscht Spielanleitung
stift.setzeFarbe (Farbe.WEISS);
stift.setzeFuellMuster(Muster.GEFUELLT);
stift.zeichneRechteck(450,30);
stift.setzeFarbe (Farbe.SCHWARZ);
stift.bewegeBis(100,200); // nennt Gewinner
if (ferrari.wo()>=500)
{ // wenn ferrari vorne steht
stift.schreibe (ferrari.wer()+" hat gewonnen");
}
else
{
stift.schreibe (williams.wer()+" hat gewonnen");
}
}
private boolean nochmal ()
{
stift.schreibe (" -- [N]=Neustart, [E]=Ende");
char zchn;
do // do-Schleife: Wartet auf Taste [N] oder [E]
{
while (!taste.wurdeGedrueckt()); // nichts tun: Warten, auf Taste
zchn = taste.zeichen();
if ((zchn == 's')||(zchn == 'S')) // evtl. noch bei Taste [S]
{ // Hinweis auf erwartete Eingabe
stift.bewegeBis(140,200);
stift.schreibe("Rennen beendet -- [N]=Neustart, [E]=Ende");
}
} while ((zchn!='e')&&(zchn!='E')&&(zchn!='n')&&(zchn!='N'));
return ((zchn=='n')||(zchn=='N')); // true: nochmal Neustart gewünscht
}
}
zum Inhaltsverzeichnis (oben) / zum Seitenende
Vierte Java-Datei: „Fomel1_Start.java" -- Startdatei
// Startdatei fürs Formel1-Autorennen:
// R. Krell, 9/2003 -- Java-JDK + stiftUndCo
// http://www.r-krell.de
public class Formel1_Start extends java.applet.Applet
{
public void init() // Start als Applet bzw. ..
{
Formel1_Rennen rennSpiel = new Formel1_Rennen();
rennSpiel.spielen();
}
public static void main (String[] s) //.. als Application
{
Formel1_Rennen rennSpiel = new Formel1_Rennen();
rennSpiel.spielen();
}
}
zum Inhaltsverzeichnis (oben) / zum Seitenende
HTML-Datei: Quelltext einer Webseite zum Start als Applet
Hier die wesentlichen Elemente einer HTML-Seite, die das Applet aufruft - wie in der Quelltext-Ansicht des HTML-Editors phase 5 angezeigt (Bezugsquelle siehe meine Java-Seite a)).

Beim Aufruf bzw. bei der Anzeige der Webseite im Browser wird das Applet dann automatisch geladen und gestartet. Das
Archiv mit den class-Dateien muss dazu mit der Webseite auf den Server geladen werden - wenn (wie hier) keine
besonderen Pfadangaben gemacht werden, muss das Archiv dort ins gleiche Verzeichnis wie die Webseite!
zurück zur Seite „Informatik mit Java, Teil b)"