Rheinwerk Computing < openbook >


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


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

Pfeil 3 Klassen und Objekte
Pfeil 3.1 Objektorientierte Programmierung (OOP)
Pfeil 3.1.1 Warum überhaupt OOP?
Pfeil 3.1.2 Denk ich an Java, denk ich an Wiederverwendbarkeit
Pfeil 3.2 Eigenschaften einer Klasse
Pfeil 3.2.1 Klassenarbeit mit Point
Pfeil 3.3 Natürlich modellieren mit der UML (Unified Modeling Language) *
Pfeil 3.3.1 Wichtige Diagrammtypen der UML *
Pfeil 3.4 Neue Objekte erzeugen
Pfeil 3.4.1 Ein Exemplar einer Klasse mit dem Schlüsselwort new anlegen
Pfeil 3.4.2 Deklarieren von Referenzvariablen
Pfeil 3.4.3 Jetzt mach mal ’nen Punkt: Zugriff auf Objektvariablen und -methoden
Pfeil 3.4.4 Der Zusammenhang von new, Heap und Garbage-Collector
Pfeil 3.4.5 Überblick über Point-Methoden
Pfeil 3.4.6 Konstruktoren nutzen
Pfeil 3.5 ZZZZZnake
Pfeil 3.6 Pakete schnüren, Importe und Compilationseinheiten
Pfeil 3.6.1 Java-Pakete
Pfeil 3.6.2 Pakete der Standardbibliothek
Pfeil 3.6.3 Volle Qualifizierung und import-Deklaration
Pfeil 3.6.4 Mit import p1.p2.* alle Typen eines Pakets erreichen
Pfeil 3.6.5 Hierarchische Strukturen über Pakete und die Spiegelung im Dateisystem
Pfeil 3.6.6 Die package-Deklaration
Pfeil 3.6.7 Unbenanntes Paket (default package)
Pfeil 3.6.8 Compilationseinheit (Compilation Unit)
Pfeil 3.6.9 Statischer Import *
Pfeil 3.7 Mit Referenzen arbeiten, Vielfalt, Identität, Gleichwertigkeit
Pfeil 3.7.1 null-Referenz und die Frage der Philosophie
Pfeil 3.7.2 Alles auf null? Referenzen testen
Pfeil 3.7.3 Zuweisungen bei Referenzen
Pfeil 3.7.4 Methoden mit Referenztypen als Parameter
Pfeil 3.7.5 Identität von Objekten
Pfeil 3.7.6 Gleichwertigkeit und die Methode equals(…)
Pfeil 3.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: Algorithmen in Java

Algorithmen in Java




Zum Rheinwerk-Shop: Spring Boot 3 und Spring Framework 6

Spring Boot 3 und Spring Framework 6




Zum Rheinwerk-Shop: Java SE 9 Standard-Bibliothek

Java SE 9 Standard-Bibliothek




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

InfoInfo



 

 


Copyright © Rheinwerk Verlag GmbH 2024

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