- EINSTIEG IN JAVA - (1/5) Datum: 2.2 Wir lernen die Programmiersprache Java und entwickeln ein Computerspiel Schritt #1: Constructor-Methoden: Wir setzen die beiden Spieler in die 'Welt' (das Spielfeld) 1) Erzeuge zwei neue Unterklassen (new subclass ) der Actor-Klasse mit NamenSpieler1 und Spieler2. Wähle die entsprechenden Bilder aus. 2) Füge eine neue Unterklasse MyWorld der World-Klasse mit entsprechendem Hintergrund ein. 3) Füge den folgenden Code ein. 4) Wir lernen: Aus 2.1 wissen wir die Bedeutungen der Java-Wörter 'public', 'import', extends', 'class' und der geschweiften Klammern. Bitte lernen! Constructor new super '=' Der Constructor (oder Konstruktor) ist eine Methode, die aus einer Klasse (eine Schablone auf der Festplatte) ein neues Objekt im RAM erzeugt. Der Aufruf erfolgt mit 'new'. Der Constructor wird immer groß geschrieben und hat den gleichen Namen wie die Klasse. 'super' ruft den Constructor der Vorfahrenklasse (der Welt auf). Wir brauchen uns nur um das zu kümmern, was die 'World'-Klasse noch nicht hat. '=' schreibt Daten in einen Bereich des RAM der durch eine Variable festgelegt ist. Spieler1 s1=new Spieler1 bedeutet also: Nach der Größe der Klasse (Schablone) Spieler1 wird im Arbeitsspeicher (RAM) ein Abschnitt ab der Speicherstelle s1 reserviert. In diesen Bereich schreibt dann der Constructor den Objektcode mit möglicherweise abgeänderten Daten. 'addobject( )' ist kein Java. Diese Greenfoot-Methode setzt die Bilder eines Objektes auf einen bestimmten Punkt der Welt.
- EINSTIEG IN JAVA - (2/5) Datum: Schritt #2 Andere Methodenarten in Java: Einfügen einer Steuerung durch Tastatur 1) ergänze die act() - Methoden der beiden Spieler um die folgenden Codes: 2) Der linke Spieler reagiert also auf die Tasten w,a,s,d der rechte auf die Pfeiltasten. 3) Bitte merken: In Java gibt es nicht nur Objekte, sondern auch einfache (primitive) Datentypen. Zum Beispiel int (integer, das sind positive oder negative ganze Zahlen), double (Kommazahlen) oder boolean (wahr oder falsch). Eine Methode hat in Java den folgenden Aufbau: <Rückgabe> <Methodenname> Objekt oder einfacher Speicherstelle im RAM für Datentyp oder nichts den Methodencode void keine Rückgabe setlocation Actor-Methode (<Übergabe; oft mehrere Parameter >) Datentypen oder Objekte oder nichts (x,y) 2 int- Parameter für die Koordinaten boolean Greenfoot.isKeyDown ( Tastencode in '' '') int getx () keine Übergabe keine Rückgabe act () keine Übergabe void act() ist eine Methode die regelmäßig vom Greenfoot- System aufgerufen wird. Das Tempo lässt sich durch den Schieberegler oder die Methode Greenfoot.setSpeed(int speed) ändern. 'int x=getx()' bedeutet: für die X-Koordinate wird in unter der integer-variablen x eine Speicherstelle im RAM reserviert und diese Koordinate als Rückgabe von 'getx()' dann dort hineingeschrieben. 'getx' ist also auch nur die Speicherstelle des Methodencodes im RAM.
- EINSTIEG IN JAVA - (3/5) Datum: 'Schritt #3: Die Zählschleife mit 'for'. Schätze werden gesammelt. 1.) Legt eine neue Actor- Unterklasse 'Schatz' mit Bild an. 2.) Fügt in die Spieler- Codes unter der Tastatursteuerung ein: 'removetouching(schatz.class);' Damit wird das Bild eines Schatzes von der Welt gelöscht, wenn es berührt wird. 3.) Ergänze im Constructor der Welt eine Zählschleife. Es sollen 20 Schätze an zufälligen Koordinaten in die Welt gesetzt werden. 4) Schleifen sind Programmstücke die häufiger fast gleich wiederholt werden. Eine Zählschleife (for-schleife) wird sooft durchlaufen, wie der Schleifenkopf angibt: for (<Anfangswert Zählvariable>; <zählt solange wie Bedingung gilt>; <zählt immer um 1 hoch>;) { folgt der Code, der mehrfach durchlaufen wird} for (int i=0; i<20;i=i+1) bedeutet also: Die integer-zahl i ist am Anfang 0; solange i kleiner als 20 ist; wird um 1 hochgezählt; Die Variable i hat also die Werte 0 bis 19. Es gilt die Kurzschreibweise: i=i+1 ist kurz i++. stz.getimage().scale(16,16) ist ebenfalls eine Kurzschreibweise und bedeutet: Die Actor-Metode getimage() wird aufgerufen und auf die Rückgabe (das Bild) die Methode GreenfoorImage.scale(int breite, int hoehe) angewendet. Schritt #4: Attribute; Counter werden eingeführt. 1.) Über den Menuepunkt Bearbeiten Import class wird die Actor- Klasse Counter importiert. 2.) Zwei Objekte dieser Klasse werden über den Spielern in die Welt gesetzt. 3.) Attribute sind Variablen für Objekte oder einfache Datentypen die für alle Methoden einer Klasse gelten (Klassenvariablen). Die Vereinbarung (Speicherplatzreservierung, Deklaration) muss direkt unter dem Klassenkopf über der ersten Methode erfolgen. Da ab jetzt die Spieler-Objekte und die Counter-Objekte in mehreren Methoden verwendet werden, müssen diese als Attribute vereinbart (deklariert) werden. 4) Der Speicherplatzreservierung für die Spielerobjekte und die Counter darf im Constructor nicht noch einmal erfolgen. Spieler1, Spieler2 und Counter dürfen als Klassenabfrage daher nicht noch einmal vorkommen, sonst würde neuer Speicher im RAM reserviert und der alte bleibt leer. 5) Die Constructor Methode der Counter wird mit der Beschriftung als Zeichenkette (String) in '' '' aufgerufen.
- EINSTIEG IN JAVA - (4/5) Datum: 6) Schreibe in den Code der beiden Spieler unter den Klassenkopf das Attribut: public boolean hit=false; Eine boolean-variable soll also anzeigen, ob ein Schatz getroffen wurde (Zu Anfang false). Unter die Zeilen mit der Tastensteuerung, aber vor Löschen des Schatz- Objektes schreiben wir: if (istouching(schatz.class))hit=true; 7) Die 'act()'-methode der Welt wird vor der der Actors aufgerufen. Wir schreiben diese neu. Sie sorgt dafür, dass die Counter zählen können. 'c1.add()' bedeutet, dass die add() - Methode des Counters um 1 hochzählt. '==' ist ein Java-Wort, ein Vergleich. 's1.hit == true' bedeutet, dass das Attribut hit des Spielers s1 wahr ist, das heißt ein Schatz getroffen wurde. 8) Aufgabe: Beschreibe mit eigenen Worten, wie es kommt, dass die Counter zählen können. Wie funktioniert also die 'act()'-methode der Welt?
- EINSTIEG IN JAVA - (5/5) Datum: Schritt #5: Logische Glierderung; Auswertung des Spiels 1) Wir fügen in der Welt die folgenden Attribute neu ein. Begründung? 2) Die 'act()'-methode wird um die entscheidende if-abfrage erweitert. Es wird die Anzeige der Auswertung (Klasse Spielende) in die Welt gesetzt. Für weitere Spielrunden und Levels wird die erreichte Punkzahl jeweils wieder auf 0 gesetzt. 3) Der selbst geschriebene Constructor der Spielende-Klasse bekommt die beiden Punktzahlen übergeben. Er demonstriert Layoutfunktionen der GreenfootImage-Klasse.