Rheinwerk Computing < openbook >


 
Inhaltsverzeichnis
Materialien
Vorwort
1 Java ist auch eine Sprache
2 Imperative Sprachkonzepte
3 Klassen und Objekte
4 Arrays und ihre Anwendungen
5 Der Umgang mit Zeichenketten
6 Eigene Klassen schreiben
7 Objektorientierte Beziehungsfragen
8 Ausnahmen müssen sein
9 Geschachtelte Typen
10 Besondere Typen der Java SE
11 Generics<T>
12 Lambda-Ausdrücke und funktionale Programmierung
13 Architektur, Design und angewandte Objektorientierung
14 Java Platform Module System
15 Die Klassenbibliothek
16 Einführung in die nebenläufige Programmierung
17 Einführung in Datenstrukturen und Algorithmen
18 Einführung in grafische Oberflächen
19 Einführung in Dateien und Datenströme
20 Einführung ins Datenbankmanagement mit JDBC
21 Bits und Bytes, Mathematisches und Geld
22 Testen mit JUnit
23 Die Werkzeuge des JDK
A Java SE-Module und Paketübersicht
Stichwortverzeichnis


Download:

- Listings, ca. 2,7 MB


Buch bestellen
Ihre Meinung?



Spacer
<< zurück
Java ist auch eine Insel von Christian Ullenboom

Einführung, Ausbildung, Praxis
Buch: Java ist auch eine Insel


Java ist auch eine Insel

Pfeil3 Klassen und Objekte
Pfeil3.1 Objektorientierte Programmierung (OOP)
Pfeil3.1.1 Warum überhaupt OOP?
Pfeil3.1.2 Denk ich an Java, denk ich an Wiederverwendbarkeit
Pfeil3.2 Eigenschaften einer Klasse
Pfeil3.2.1 Klassenarbeit mit Point
Pfeil3.3 Natürlich modellieren mit der UML (Unified Modeling Language) *
Pfeil3.3.1 Hintergrund und Geschichte der UML *
Pfeil3.3.2 Wichtige Diagrammtypen der UML *
Pfeil3.3.3 UML-Werkzeuge *
Pfeil3.4 Neue Objekte erzeugen
Pfeil3.4.1 Ein Exemplar einer Klasse mit dem Schlüsselwort new anlegen
Pfeil3.4.2 Deklarieren von Referenzvariablen
Pfeil3.4.3 Jetzt mach mal ’nen Punkt: Zugriff auf Objektattribute und -methoden
Pfeil3.4.4 Der Zusammenhang von new, Heap und Garbage-Collector
Pfeil3.4.5 Überblick über Point-Methoden
Pfeil3.4.6 Konstruktoren nutzen
Pfeil3.5 ZZZZZnake
Pfeil3.6 Pakete schnüren, Importe und Compilationseinheiten
Pfeil3.6.1 Java-Pakete
Pfeil3.6.2 Pakete der Standardbibliothek
Pfeil3.6.3 Volle Qualifizierung und import-Deklaration
Pfeil3.6.4 Mit import p1.p2.* alle Typen eines Pakets erreichen
Pfeil3.6.5 Hierarchische Strukturen über Pakete und die Spiegelung im Dateisystem
Pfeil3.6.6 Die package-Deklaration
Pfeil3.6.7 Unbenanntes Paket (default package)
Pfeil3.6.8 Compilationseinheit (Compilation Unit)
Pfeil3.6.9 Statischer Import *
Pfeil3.7 Mit Referenzen arbeiten, Vielfalt, Identität, Gleichwertigkeit
Pfeil3.7.1 null-Referenz und die Frage der Philosophie
Pfeil3.7.2 Alles auf null? Referenzen testen
Pfeil3.7.3 Zuweisungen bei Referenzen
Pfeil3.7.4 Methoden mit Referenztypen als Parametern
Pfeil3.7.5 Identität von Objekten
Pfeil3.7.6 Gleichwertigkeit und die Methode equals(…)
Pfeil3.8 Zum Weiterlesen
 

Zum Seitenanfang

3.5    ZZZZZnake Zur vorigen ÜberschriftZur nächsten Überschrift

Ein Klassiker aus dem Genre der Computerspiele ist Snake. Auf dem Bildschirm gibt es den Spieler, eine Schlange, Gold und eine Tür. Die Tür und das Gold sind fest, den Spieler können wir bewegen, und die Schlange bewegt sich selbstständig auf den Spieler zu. Wir müssen versuchen, die Spielfigur zum Gold zu bewegen und dann zur Tür. Wenn die Schlange uns vorher erwischt, haben wir Pech gehabt, und das Spiel ist verloren.

Vielleicht hört sich das auf den ersten Blick komplex an, aber wir haben alle Bausteine zusammen, um dieses Spiel zu programmieren:

  • Spieler, Schlange, Gold und Tür sind Point-Objekte, die mit Koordinaten vorkonfiguriert sind.

  • Eine Schleife läuft alle Koordinaten ab. Ist ein Spieler, die Tür, die Schlange oder Gold »getroffen«, gibt es eine symbolische Darstellung der Figuren.

  • Wir testen drei Bedingungen für den Spielstatus: 1. Hat der Spieler das Gold eingesammelt und steht auf der Tür? (Das Spiel ist zu Ende.) 2. Beißt die Schlange den Spieler? (Das Spiel ist verloren.) 3. Sammelt der Spieler Gold ein?

  • Mit dem Scanner können wir auf Tastendrücke reagieren und den Spieler auf dem Spielbrett bewegen.

  • Die Schlange muss sich in Richtung des Spielers bewegen. Während der Spieler sich nur entweder horizontal oder vertikal bewegen kann, erlauben wir der Schlange, sich diagonal zu bewegen.

Im Quellcode sieht das so aus:

Listing 3.5    ZZZZZnake.java

public class ZZZZZnake {



public static void main( String[] args ) {

java.awt.Point playerPosition = new java.awt.Point( 10, 9 );

java.awt.Point snakePosition = new java.awt.Point( 30, 2 );

java.awt.Point goldPosition = new java.awt.Point( 6, 6 );

java.awt.Point doorPosition = new java.awt.Point( 0, 5 );

boolean rich = false;



while ( true ) {

// Raster mit Figuren zeichnen



for ( int y = 0; y < 10; y++ ) {

for ( int x = 0; x < 40; x++ ) {

java.awt.Point p = new java.awt.Point( x, y );

if ( playerPosition.equals( p ) )

System.out.print( '&' );

else if ( snakePosition.equals( p ) )

System.out.print( 'S' );

else if ( goldPosition.equals( p ) )

System.out.print( '$' );

else if ( doorPosition.equals( p ) )

System.out.print( '#' );

else System.out.print( '.' );

}

System.out.println();

}



// Status feststellen



if ( rich && playerPosition.equals( doorPosition ) ) {

System.out.println( "Gewonnen!" );

return;

}

if ( playerPosition.equals( snakePosition ) ) {

System.out.println( "ZZZZZZZ. Die Schlange hat dich!" );

return;

}

if ( playerPosition.equals( goldPosition ) ) {

rich = true;

goldPosition.setLocation( -1, -1 );

}



// Konsoleneingabe und Spielerposition verändern



switch ( new java.util.Scanner( System.in ).next() ) {

// Spielfeld ist im Bereich 0/0 .. 39/9

case "h" : playerPosition.y = Math.max( 0, playerPosition.y - 1 ); break;

case "t" : playerPosition.y = Math.min( 9, playerPosition.y + 1 ); break;

case "l" : playerPosition.x = Math.max( 0, playerPosition.x - 1 ); break;

case "r" : playerPosition.x = Math.min( 39, playerPosition.x + 1 ); break;

}



// Schlange bewegt sich in Richtung Spieler



if ( playerPosition.x < snakePosition.x )

snakePosition.x--;

else if ( playerPosition.x > snakePosition.x )

snakePosition.x++;

if ( playerPosition.y < snakePosition.y )

snakePosition.y--;

else if ( playerPosition.y > snakePosition.y )

snakePosition.y++;

} // end while

}

}

Die Point-Eigenschaften, die wir nutzen, sind:

  • die Objektzustände x, y: Der Spieler und die Schlange werden bewegt, und die Koordinaten müssen neu gesetzt werden.

  • die Methode setLocation(…): Ist das Gold aufgesammelt, setzen wir die Koordinaten so, dass die Koordinate vom Gold nicht mehr auf unserem Raster liegt.

  • die Methode equals(…): Testet, ob ein Punkt auf einem anderen Punkt steht.

Erweiterung

Wer Lust hat, an der Aufgabe noch ein wenig weiterzuprogrammieren, der kann Folgendes tun:

  • Spieler, Schlange, Gold und Tür sollen auf Zufallskoordinaten gesetzt werden.

  • Statt nur eines Stücks Gold soll es zwei Stücke geben.

  • Statt einer Schlange soll es zwei Schlangen geben.

  • Mit zwei Schlangen und zwei Stücken Gold kann es etwas eng für den Spieler werden. Er soll daher am Anfang 5 Züge machen können, ohne dass die Schlangen sich bewegen.

  • Für Vorarbeiter: Das Programm, das sich bisher nur in der main-Methode befindet, soll in verschiedene Methoden aufgespalten werden.

 


Ihre Meinung?

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Java ist auch eine Insel Java ist auch eine Insel

Jetzt Buch bestellen


 Buchempfehlungen
Zum Rheinwerk-Shop: Captain CiaoCiao erobert Java

Captain CiaoCiao erobert Java




Zum Rheinwerk-Shop: Java SE 9 Standard-Bibliothek

Java SE 9 Standard-Bibliothek




Zum Rheinwerk-Shop: Algorithmen in Java

Algorithmen in Java




Zum Rheinwerk-Shop: Objektorientierte Programmierung

Objektorientierte Programmierung




 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und in die Schweiz

InfoInfo



 

 


Copyright © Rheinwerk Verlag GmbH 2021

Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.

Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 

[Rheinwerk Computing]



Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de



Cookie-Einstellungen ändern