Aktualisierung für HS 2019

This commit is contained in:
Patrick Feisthammel 2019-09-12 07:52:17 +02:00
parent 15bcc5d8e9
commit 79e83701f5
6 changed files with 111 additions and 117 deletions

View File

@ -1,14 +1,3 @@
------------------------------------------------------------------------ PROJEKTBEZEICHNUNG: 04_Praktikum-1_Snake
Dies ist die README-Datei des Projekts. Hier sollten Sie Ihr Projekt PROJEKTZWECK: Übung im Rahmen von PROG1
beschreiben. VERSION: Aufgabenstellung
Erzählen Sie dem Leser (jemand, der nichts über dieses Projekt weiss),
alles, was er/sie wissen muss. Üblicherweise sollte der Kommentar
zumindest die folgenden Angaben umfassen:
------------------------------------------------------------------------
PROJEKTBEZEICHNUNG:
PROJEKTZWECK:
VERSION oder DATUM:
WIE IST DAS PROJEKT ZU STARTEN:
AUTOR(EN):
BENUTZERHINWEISE:

View File

@ -1,28 +1,28 @@
import java.awt.Point; import java.awt.Point;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
/** /**
* Repraesentiert eine Schlange * Repraesentiert eine Schlange
*
*/ */
public class Schlange { public class Schlange {
private ArrayList<Point> schlange; private List<Point> schlange;
/** /**
* Konstruiert eine Schlangen mit Startposition * Konstruiert eine Schlangen mit Startposition
* bei den angegebenen Koordinaten. * bei den angegebenen Koordinaten.
* *
* @param x x-Koordinate der Schlangenposition * @param x x-Koordinate der Schlangenposition
* @param y y-Koordinate der Schlangenposition * @param y y-Koordinate der Schlangenposition
*/ */
public Schlange(int x, int y) { public Schlange(int x, int y) {
schlange = new ArrayList<Point>(); schlange = new ArrayList<>();
schlange.add(new Point(x, y)); schlange.add(new Point(x, y));
} }
/** /**
* Prueft, ob die Schlange am bezeichneten Standort ist * Prueft, ob die Schlange am bezeichneten Standort ist
* *
* @param standort * @param standort
* @return true, falls die Schlange am bezeichneten Standort ist * @return true, falls die Schlange am bezeichneten Standort ist
*/ */
@ -32,7 +32,7 @@ public class Schlange {
/** /**
* Prueft, ob der Schlangenkopf am bezeichneten Standort ist * Prueft, ob der Schlangenkopf am bezeichneten Standort ist
* *
* @param standort * @param standort
* @return wahr, falls der Schlangenkopf am bezeichneten Standort ist * @return wahr, falls der Schlangenkopf am bezeichneten Standort ist
*/ */
@ -43,45 +43,47 @@ public class Schlange {
/** /**
* Bewege die Schlange in die angegebene Richtung. * Bewege die Schlange in die angegebene Richtung.
* Gueltige Richtungen sind: * Gueltige Richtungen sind:
* * <p>
* w (oben) * w (oben)
* s (unten) * s (unten)
* a (links) * a (links)
* d (rechts) * d (rechts)
* *
* @param richtung Richtung, in die sich die Schlange bewegen soll * @param richtung Richtung, in die sich die Schlange bewegen soll
*/ */
public void bewege(char richtung) { public void bewege(char richtung) {
Point kopf = kopf(); Point kopf = kopf();
switch (richtung) { switch (richtung) {
case 'w': case 'w':
schlange.add( new Point(kopf.x, kopf.y - 1) ); schlange.add(new Point(kopf.x, kopf.y - 1));
schlange.remove(0); schlange.remove(0);
break; break;
case 's': case 's':
schlange.add( new Point(kopf.x, kopf.y + 1) ); schlange.add(new Point(kopf.x, kopf.y + 1));
schlange.remove(0); schlange.remove(0);
break; break;
case 'a': case 'a':
schlange.add( new Point(kopf.x - 1, kopf.y) ); schlange.add(new Point(kopf.x - 1, kopf.y));
schlange.remove(0); schlange.remove(0);
break; break;
case 'd': case 'd':
schlange.add( new Point(kopf.x + 1, kopf.y) ); schlange.add(new Point(kopf.x + 1, kopf.y));
schlange.remove(0); schlange.remove(0);
break; break;
default:
System.out.println("Ungültige Taste");
} }
} }
/** /**
* Testet, ob der Kopf der Schlange auf dem Koerper liegt. * Testet, ob der Kopf der Schlange auf dem Koerper liegt.
* *
* @return true, falls der Kopf auf dem Koerper liegt * @return true, falls der Kopf auf dem Koerper liegt
*/ */
public boolean istKopfAufKoerper() { public boolean istKopfAufKoerper() {
boolean istKopfAufKoerper = false; boolean istKopfAufKoerper = false;
for(int i=0; i<schlange.size()-2; i++) { for (int i = 0; i < schlange.size() - 2; i++) {
istKopfAufKoerper |= istKopfAufPunkt(schlange.get(i)); istKopfAufKoerper |= istKopfAufPunkt(schlange.get(i));
} }
return istKopfAufKoerper; return istKopfAufKoerper;
@ -97,7 +99,7 @@ public class Schlange {
/** /**
* Liefert die Position des Kopfs der Schlange zurueck. * Liefert die Position des Kopfs der Schlange zurueck.
* *
* @return die aktuelle Position (Kopf) der Schlange * @return die aktuelle Position (Kopf) der Schlange
*/ */
public Point gibPosition() { public Point gibPosition() {
@ -105,6 +107,6 @@ public class Schlange {
} }
private Point kopf() { private Point kopf() {
return schlange.get(schlange.size()-1); return schlange.get(schlange.size() - 1);
} }
} }

View File

@ -3,10 +3,10 @@ import java.util.Scanner;
/** /**
* Spielklasse des Spiels Snake. * Spielklasse des Spiels Snake.
* * <p>
* Ziel dieses Spiels ist es alle Goldstuecke einzusammeln und * Ziel dieses Spiels ist es alle Goldstuecke einzusammeln und
* die Tuer zu erreichen, ohne sich selber zu beissen oder in * die Tuer zu erreichen, ohne sich selber zu beissen oder in
* die Spielfeldbegrenzung reinzukriechen. * die Spielfeldbegrenzung reinzukriechen.
*/ */
public class SnakeSpiel { public class SnakeSpiel {
private Schlange schlange; private Schlange schlange;
@ -14,21 +14,24 @@ public class SnakeSpiel {
private Spielfeld spielfeld; private Spielfeld spielfeld;
private Point goldStueck; private Point goldStueck;
private boolean spielLaeuft = true; private boolean spielLaeuft = true;
private Scanner scanner;
public static void main(String[] args) {
new SnakeSpiel().spielen();
}
/** /**
* Startet das Spiel. * Startet das Spiel.
*/ */
public void spielen() { public void spielen() {
scanner = new Scanner(System.in);
spielInitialisieren(); spielInitialisieren();
while (spielLaeuft) { while (spielLaeuft) {
zeichneSpielfeld(); zeichneSpielfeld();
ueberpruefeSpielstatus(); ueberpruefeSpielstatus();
fuehreSpielzugAus(); fuehreSpielzugAus();
} }
} scanner.close();
public static void main(String[] args) {
new SnakeSpiel().spielen();
} }
private void spielInitialisieren() { private void spielInitialisieren() {
@ -50,53 +53,52 @@ public class SnakeSpiel {
ausgabeZeichen = '$'; ausgabeZeichen = '$';
} else if (tuer.istAufPunkt(punkt)) { } else if (tuer.istAufPunkt(punkt)) {
ausgabeZeichen = '#'; ausgabeZeichen = '#';
} }
if(schlange.istKopfAufPunkt(punkt)) { if (schlange.istKopfAufPunkt(punkt)) {
ausgabeZeichen = 'S'; ausgabeZeichen = 'S';
} }
System.out.print(ausgabeZeichen); System.out.print(ausgabeZeichen);
} }
System.out.println(); System.out.println();
} }
} }
private boolean istEinGoldstueckAufPunkt(Point punkt) { private boolean istEinGoldstueckAufPunkt(Point punkt) {
return goldStueck != null && goldStueck.equals(punkt); return goldStueck != null && goldStueck.equals(punkt);
} }
private void ueberpruefeSpielstatus() { private void ueberpruefeSpielstatus() {
if (istEinGoldstueckAufPunkt(schlange.gibPosition())) { if (istEinGoldstueckAufPunkt(schlange.gibPosition())) {
goldStueck = null; goldStueck = null;
schlange.wachsen(); schlange.wachsen();
System.out.println("Goldstueck eingesammelt."); System.out.println("Goldstueck eingesammelt.");
} }
if (istVerloren()){ if (istVerloren()) {
System.out.println("Verloren!"); System.out.println("Verloren!");
spielLaeuft = false; spielLaeuft = false;
} }
if (istGewonnen()){ if (istGewonnen()) {
System.out.println("Gewonnen!"); System.out.println("Gewonnen!");
spielLaeuft = false; spielLaeuft = false;
} }
} }
private boolean istGewonnen() { private boolean istGewonnen() {
return goldStueck == null && return goldStueck == null &&
tuer.istAufPunkt(schlange.gibPosition()); tuer.istAufPunkt(schlange.gibPosition());
} }
private boolean istVerloren() { private boolean istVerloren() {
return schlange.istKopfAufKoerper() || return schlange.istKopfAufKoerper() ||
!spielfeld.istPunktInSpielfeld(schlange.gibPosition()); !spielfeld.istPunktInSpielfeld(schlange.gibPosition());
} }
private void fuehreSpielzugAus() { private void fuehreSpielzugAus() {
char eingabe = liesZeichenVonTastatur(); char eingabe = liesZeichenVonTastatur();
schlange.bewege(eingabe); schlange.bewege(eingabe);
} }
private char liesZeichenVonTastatur() { private char liesZeichenVonTastatur() {
Scanner scanner = new Scanner(System.in);
char konsolenEingabe = scanner.next().charAt(0); char konsolenEingabe = scanner.next().charAt(0);
return konsolenEingabe; return konsolenEingabe;
} }

View File

@ -1,4 +1,5 @@
import java.awt.Point; import java.awt.Point;
import java.util.Random;
/** /**
* Enthaelt Angaben zum Spielfeld * Enthaelt Angaben zum Spielfeld
@ -6,56 +7,57 @@ import java.awt.Point;
public class Spielfeld { public class Spielfeld {
private int hoehe; private int hoehe;
private int breite; private int breite;
private Random random = new Random();
/** /**
* Konstruiert ein Spielfeld mit der gegebenen Breite * Konstruiert ein Spielfeld mit der gegebenen Breite
* und Hoehe. * und Hoehe.
* *
* @param breite Breite des Spielfelds * @param breite Breite des Spielfelds
* @param hoehe Hoehe des Spielfelds * @param hoehe Hoehe des Spielfelds
*/ */
public Spielfeld(int breite, int hoehe){ public Spielfeld(int breite, int hoehe) {
this.hoehe = hoehe; this.hoehe = hoehe;
this.breite = breite; this.breite = breite;
} }
/** /**
* Gibt die Spielfeldhoehe zurueck * Gibt die Spielfeldhoehe zurueck
* *
* @return die Hoehe des Spielfelds * @return die Hoehe des Spielfelds
*/ */
public int gibHoehe() { public int gibHoehe() {
return hoehe; return hoehe;
} }
/** /**
* Gibt die Spielfeldbreite zurueck * Gibt die Spielfeldbreite zurueck
* *
* @return die Breite des Spielfelds * @return die Breite des Spielfelds
*/ */
public int gibBreite() { public int gibBreite() {
return breite; return breite;
} }
/** /**
* Testet, ob ein gegebener Standort innerhalb des Spielfelds ist. * Testet, ob ein gegebener Standort innerhalb des Spielfelds ist.
* *
* @param p zu pruefender Standort * @param p zu pruefender Standort
* @return true, falls der Standort innerhalb des Spielfelds ist * @return true, falls der Standort innerhalb des Spielfelds ist
*/ */
public boolean istPunktInSpielfeld(Point p) { public boolean istPunktInSpielfeld(Point p) {
return p.x >=0 && p.x < breite && p.y >= 0 && p.y < hoehe; return p.x >= 0 && p.x < breite && p.y >= 0 && p.y < hoehe;
} }
/** /**
* Erzeugt ein Point-Objekt, welches einen zufaelligen * Erzeugt ein Point-Objekt, welches einen zufaelligen
* Standort innerhalb des Spielfelds repraesentiert. * Standort innerhalb des Spielfelds repraesentiert.
* *
* @return zufaelliger Standort innerhalb des Spielfelds * @return zufaelliger Standort innerhalb des Spielfelds
*/ */
public Point erzeugeZufallspunktInnerhalb(){ public Point erzeugeZufallspunktInnerhalb() {
int xKoordinate = (int)(Math.random() * this.breite); int xKoordinate = random.nextInt(this.breite);
int yKoordinate = (int)(Math.random() * this.hoehe); int yKoordinate = random.nextInt(this.hoehe);
return new Point(xKoordinate, yKoordinate); return new Point(xKoordinate, yKoordinate);
} }
} }

View File

@ -8,8 +8,8 @@ public class Tuer {
/** /**
* Konstruiert eine Tuer mit Standort * Konstruiert eine Tuer mit Standort
* bei den angegebenen Koordinaten. * bei den angegebenen Koordinaten.
* *
* @param x x-Koordinate der Tuer * @param x x-Koordinate der Tuer
* @param y y-Koordinate der Tuer * @param y y-Koordinate der Tuer
*/ */
@ -19,7 +19,7 @@ public class Tuer {
/** /**
* Prueft, ob die Tuer am bezeichneten Standort ist * Prueft, ob die Tuer am bezeichneten Standort ist
* *
* @param standort * @param standort
* @return wahr, falls die Tuer am bezeichneten Standort ist * @return wahr, falls die Tuer am bezeichneten Standort ist
*/ */

View File

@ -8,43 +8,46 @@ dependency2.type=UsesDependency
dependency3.from=SnakeSpiel dependency3.from=SnakeSpiel
dependency3.to=Spielfeld dependency3.to=Spielfeld
dependency3.type=UsesDependency dependency3.type=UsesDependency
package.editor.height=400 editor.fx.0.height=0
package.editor.width=560 editor.fx.0.width=0
package.editor.x=449 editor.fx.0.x=0
package.editor.y=246 editor.fx.0.y=0
objectbench.height=163
objectbench.width=451
package.divider.horizontal=0.599476439790576
package.divider.vertical=0.66
package.editor.height=323
package.editor.width=670
package.editor.x=451
package.editor.y=234
package.frame.height=600
package.frame.width=800
package.numDependencies=3 package.numDependencies=3
package.numTargets=4 package.numTargets=4
package.showExtends=true package.showExtends=true
package.showUses=true package.showUses=true
project.charset=UTF-8 project.charset=UTF-8
target1.editor.height=700 readme.height=58
target1.editor.width=900 readme.name=@README
target1.editor.x=314 readme.width=47
target1.editor.y=252 readme.x=10
readme.y=10
target1.height=50 target1.height=50
target1.name=Spielfeld target1.name=SnakeSpiel
target1.naviview.expanded=false target1.naviview.expanded=false
target1.showInterface=false target1.showInterface=false
target1.type=ClassTarget target1.type=ClassTarget
target1.width=80 target1.width=90
target1.x=280 target1.x=100
target1.y=30 target1.y=150
target2.editor.height=700
target2.editor.width=900
target2.editor.x=314
target2.editor.y=252
target2.height=50 target2.height=50
target2.name=Schlange target2.name=Spielfeld
target2.naviview.expanded=false target2.naviview.expanded=false
target2.showInterface=false target2.showInterface=false
target2.type=ClassTarget target2.type=ClassTarget
target2.width=80 target2.width=80
target2.x=330 target2.x=280
target2.y=120 target2.y=30
target3.editor.height=700
target3.editor.width=900
target3.editor.x=314
target3.editor.y=252
target3.height=50 target3.height=50
target3.name=Tuer target3.name=Tuer
target3.naviview.expanded=false target3.naviview.expanded=false
@ -53,15 +56,11 @@ target3.type=ClassTarget
target3.width=80 target3.width=80
target3.x=310 target3.x=310
target3.y=240 target3.y=240
target4.editor.height=700
target4.editor.width=900
target4.editor.x=314
target4.editor.y=252
target4.height=50 target4.height=50
target4.name=SnakeSpiel target4.name=Schlange
target4.naviview.expanded=false target4.naviview.expanded=false
target4.showInterface=false target4.showInterface=false
target4.type=ClassTarget target4.type=ClassTarget
target4.width=90 target4.width=80
target4.x=100 target4.x=330
target4.y=150 target4.y=120