# Autorennen



## MsvP@habdichliebhasi (17. März 2004)

Hey jungs & mädels 

Brauche eure Hilfe, meine Freundin hat momentan im Info Unterricht Java, jetzt haben die ein Autorennen in Java bekommen, was die jetzt umprogramieren müssen für JavaScript, dämliche aufgabe, wie ich finde, aber naja... vielleicht könnt ihr ja mal drüber schauen und ihr helfen, sie ist schon ganz verzweifelt )))


Gruß Micha.

Das ist das Java proggi:

```
// 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();
  }
}
```


----------



## Fabian H (17. März 2004)

Ich habs mal ins Java-Forum verschoben


----------



## MsvP@habdichliebhasi (18. März 2004)

jo, ok...

kann denn keienr meiner freundinhelfen?!

nen tipp würde shcon reichen, wei man sowas in javascript um schreibt.

kenne mich leider mit beidem nicht so gut aus


----------



## Christian Fein (19. März 2004)

> _Original geschrieben von MsvP@habdichliebhasi _
> *jo, ok...
> 
> kann denn keienr meiner freundinhelfen?!
> ...



Auch wenn das leider ins Java Forum verschoben worden ist.

Ich kann dir zwar das Java Programm lesen, aber ich JavaScript geh ich aus dem
Weg, weshalb ich dir da nicht weiterhelfen kann, sorry


----------



## MsvP@habdichliebhasi (19. März 2004)

mist, dann wärs bei javascript vielleicht doch besser aufgehoben!


----------



## LordNikkon (23. März 2004)

Das hier sollte mal ein Ansatz für die Klasse Formel1_Auto sein.
Müsste eigentlich so funktionieren -- bin mir da aber net 100%ig sicher, da ich mit Javascript normalerweise nur einfache Funktionen mache und keine oop Umsetzungen versuche. Konstruktor entfällt.
Sollte analog auch auf die anderen Klassen anwendbar sein. Alle Funktionen werden in Html eingebettet.
Leider hast du die Stift Klasse nicht mit gegeben.
Zeichnen tut man mit JS so:

  einen Punkt mit:
         document.open();
         new Pixel(x, y, "Farbe in hex"); 
         // die Punkte sind aber nicht 1x1 Punkte groß sondern 2x2 glaub ich
         document.close();


```
// Auto fürs Formel1-Autorennen: 
<script language="JavaScript1.2">
<!--

function Formel1_Auto (xPos, yPos, farbe, bezeichnung) 
{ 
  var  name = bezeichnung; 
  var  x = xPos;
  var  y = yPos; 
  var stift = new BuntStift(); 
   
     stift.setzeFarbe (farbe); 
     zeichneAuto (true); 

  this.zeichneAuto = function(sichtbar) 
  { 
     if (sichtbar) 
     { 
       this.stift.normal(); 
     } 
     else 
     { 
       this.stift.radiere(); 
     } 
     this.stift.hoch(); 
     this.stift.bewegeBis (this.x, this.y); 
     this.stift.runter(); 
     this.stift.bewegeBis (this.x+42, this.y); 
     this.stift.bewegeBis (this.x+1, this.y-12); 
     this.stift.bewegeBis (this.x, this.y);          //..Karosserie 
     this.stift.hoch(); 
     this.stift.bewegeBis (this.x+8,this. y-2);        
     this.stift.zeichneKreis (7);          // Hinterrad 
     this.stift.bewegeBis (this.x+33, this.y); 
     this.stift.zeichneKreis (5);          // Vorderrad 
  } 

  this.fahreUm = function(deltaX) 
  { 
    this.zeichneAuto (false);  // löscht altes Auto 
  this.x = this.x + deltaX; 
  this.zeichneAuto (true);   // zeichnet neues Auto 
  } 

  this.wo= function () 
  { 
    return (this.x+42);   // x-Position der Spitze des Autos 
  } 

  this.wer =function() 
  { 
    return (this.name); 
  } 
     
} 

-->
</script>
```


----------



## MsvP@habdichliebhasi (24. März 2004)

Hey super, vielen vielen dank! 

Ich hoffe das meien freundin damit zurecht kommt. Wenn nicht, hagelts Fragen *lol!

Greetz Msv P!


----------



## LordNikkon (30. März 2004)

no prob!



PS: Schicke Seite hast du da (habdichliebhasi)! Lustig gemacht! ;-)


----------

