diff --git a/README.TXT b/README.TXT index 0ad193f..e37ca4d 100644 --- a/README.TXT +++ b/README.TXT @@ -1,14 +1,3 @@ ------------------------------------------------------------------------- -Dies ist die README-Datei des Projekts. Hier sollten Sie Ihr Projekt -beschreiben. -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: +PROJEKTBEZEICHNUNG: 04_Praktikum-1_Snake +PROJEKTZWECK: Übung im Rahmen von PROG1 +VERSION: Aufgabenstellung \ No newline at end of file diff --git a/Schlange.java b/Schlange.java index fcbff32..a6febd4 100644 --- a/Schlange.java +++ b/Schlange.java @@ -1,28 +1,28 @@ import java.awt.Point; import java.util.ArrayList; +import java.util.List; /** * Repraesentiert eine Schlange - * */ public class Schlange { - private ArrayList schlange; + private List schlange; /** * Konstruiert eine Schlangen mit Startposition - * bei den angegebenen Koordinaten. - * + * bei den angegebenen Koordinaten. + * * @param x x-Koordinate der Schlangenposition * @param y y-Koordinate der Schlangenposition */ public Schlange(int x, int y) { - schlange = new ArrayList(); + schlange = new ArrayList<>(); schlange.add(new Point(x, y)); } /** * Prueft, ob die Schlange am bezeichneten Standort ist - * + * * @param standort * @return true, falls die Schlange am bezeichneten Standort ist */ @@ -32,7 +32,7 @@ public class Schlange { /** * Prueft, ob der Schlangenkopf am bezeichneten Standort ist - * + * * @param standort * @return wahr, falls der Schlangenkopf am bezeichneten Standort ist */ @@ -43,45 +43,47 @@ public class Schlange { /** * Bewege die Schlange in die angegebene Richtung. * Gueltige Richtungen sind: - * + *

* w (oben) * s (unten) * a (links) * d (rechts) - * + * * @param richtung Richtung, in die sich die Schlange bewegen soll */ public void bewege(char richtung) { Point kopf = kopf(); switch (richtung) { - case 'w': - schlange.add( new Point(kopf.x, kopf.y - 1) ); - schlange.remove(0); - break; - case 's': - schlange.add( new Point(kopf.x, kopf.y + 1) ); - schlange.remove(0); - break; - case 'a': - schlange.add( new Point(kopf.x - 1, kopf.y) ); - schlange.remove(0); - break; - case 'd': - schlange.add( new Point(kopf.x + 1, kopf.y) ); - schlange.remove(0); - break; + case 'w': + schlange.add(new Point(kopf.x, kopf.y - 1)); + schlange.remove(0); + break; + case 's': + schlange.add(new Point(kopf.x, kopf.y + 1)); + schlange.remove(0); + break; + case 'a': + schlange.add(new Point(kopf.x - 1, kopf.y)); + schlange.remove(0); + break; + case 'd': + schlange.add(new Point(kopf.x + 1, kopf.y)); + schlange.remove(0); + break; + default: + System.out.println("Ungültige Taste"); } } /** * Testet, ob der Kopf der Schlange auf dem Koerper liegt. - * + * * @return true, falls der Kopf auf dem Koerper liegt */ public boolean istKopfAufKoerper() { boolean istKopfAufKoerper = false; - for(int i=0; i + * Ziel dieses Spiels ist es alle Goldstuecke einzusammeln und + * die Tuer zu erreichen, ohne sich selber zu beissen oder in + * die Spielfeldbegrenzung reinzukriechen. */ public class SnakeSpiel { private Schlange schlange; @@ -14,21 +14,24 @@ public class SnakeSpiel { private Spielfeld spielfeld; private Point goldStueck; private boolean spielLaeuft = true; + private Scanner scanner; + + public static void main(String[] args) { + new SnakeSpiel().spielen(); + } /** * Startet das Spiel. */ public void spielen() { + scanner = new Scanner(System.in); spielInitialisieren(); while (spielLaeuft) { zeichneSpielfeld(); ueberpruefeSpielstatus(); fuehreSpielzugAus(); - } - } - - public static void main(String[] args) { - new SnakeSpiel().spielen(); + } + scanner.close(); } private void spielInitialisieren() { @@ -50,53 +53,52 @@ public class SnakeSpiel { ausgabeZeichen = '$'; } else if (tuer.istAufPunkt(punkt)) { ausgabeZeichen = '#'; - } - if(schlange.istKopfAufPunkt(punkt)) { - ausgabeZeichen = 'S'; + } + if (schlange.istKopfAufPunkt(punkt)) { + ausgabeZeichen = 'S'; } System.out.print(ausgabeZeichen); } System.out.println(); } } - + private boolean istEinGoldstueckAufPunkt(Point punkt) { return goldStueck != null && goldStueck.equals(punkt); } - + private void ueberpruefeSpielstatus() { if (istEinGoldstueckAufPunkt(schlange.gibPosition())) { goldStueck = null; schlange.wachsen(); System.out.println("Goldstueck eingesammelt."); } - if (istVerloren()){ + if (istVerloren()) { System.out.println("Verloren!"); spielLaeuft = false; } - if (istGewonnen()){ + if (istGewonnen()) { System.out.println("Gewonnen!"); spielLaeuft = false; } } - + private boolean istGewonnen() { - return goldStueck == null && + return goldStueck == null && tuer.istAufPunkt(schlange.gibPosition()); } private boolean istVerloren() { - return schlange.istKopfAufKoerper() || - !spielfeld.istPunktInSpielfeld(schlange.gibPosition()); + return schlange.istKopfAufKoerper() || + !spielfeld.istPunktInSpielfeld(schlange.gibPosition()); } - + private void fuehreSpielzugAus() { char eingabe = liesZeichenVonTastatur(); schlange.bewege(eingabe); } private char liesZeichenVonTastatur() { - Scanner scanner = new Scanner(System.in); char konsolenEingabe = scanner.next().charAt(0); return konsolenEingabe; } diff --git a/Spielfeld.java b/Spielfeld.java index 63449c9..f30bf44 100644 --- a/Spielfeld.java +++ b/Spielfeld.java @@ -1,4 +1,5 @@ import java.awt.Point; +import java.util.Random; /** * Enthaelt Angaben zum Spielfeld @@ -6,56 +7,57 @@ import java.awt.Point; public class Spielfeld { private int hoehe; private int breite; - + private Random random = new Random(); + /** * Konstruiert ein Spielfeld mit der gegebenen Breite * und Hoehe. - * + * * @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.breite = breite; } - + /** * Gibt die Spielfeldhoehe zurueck - * + * * @return die Hoehe des Spielfelds */ public int gibHoehe() { return hoehe; } - + /** * Gibt die Spielfeldbreite zurueck - * + * * @return die Breite des Spielfelds */ public int gibBreite() { return breite; } - + /** * Testet, ob ein gegebener Standort innerhalb des Spielfelds ist. - * + * * @param p zu pruefender Standort * @return true, falls der Standort innerhalb des Spielfelds ist */ 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 - * Standort innerhalb des Spielfelds repraesentiert. - * + * Erzeugt ein Point-Objekt, welches einen zufaelligen + * Standort innerhalb des Spielfelds repraesentiert. + * * @return zufaelliger Standort innerhalb des Spielfelds */ - public Point erzeugeZufallspunktInnerhalb(){ - int xKoordinate = (int)(Math.random() * this.breite); - int yKoordinate = (int)(Math.random() * this.hoehe); + public Point erzeugeZufallspunktInnerhalb() { + int xKoordinate = random.nextInt(this.breite); + int yKoordinate = random.nextInt(this.hoehe); return new Point(xKoordinate, yKoordinate); } } \ No newline at end of file diff --git a/Tuer.java b/Tuer.java index 9f1ba63..fbbbe9e 100644 --- a/Tuer.java +++ b/Tuer.java @@ -8,8 +8,8 @@ public class Tuer { /** * Konstruiert eine Tuer mit Standort - * bei den angegebenen Koordinaten. - * + * bei den angegebenen Koordinaten. + * * @param x x-Koordinate der Tuer * @param y y-Koordinate der Tuer */ @@ -19,7 +19,7 @@ public class Tuer { /** * Prueft, ob die Tuer am bezeichneten Standort ist - * + * * @param standort * @return wahr, falls die Tuer am bezeichneten Standort ist */ diff --git a/package.bluej b/package.bluej index 151c0eb..a5e1c59 100644 --- a/package.bluej +++ b/package.bluej @@ -8,43 +8,46 @@ dependency2.type=UsesDependency dependency3.from=SnakeSpiel dependency3.to=Spielfeld dependency3.type=UsesDependency -package.editor.height=400 -package.editor.width=560 -package.editor.x=449 -package.editor.y=246 +editor.fx.0.height=0 +editor.fx.0.width=0 +editor.fx.0.x=0 +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.numTargets=4 package.showExtends=true package.showUses=true project.charset=UTF-8 -target1.editor.height=700 -target1.editor.width=900 -target1.editor.x=314 -target1.editor.y=252 +readme.height=58 +readme.name=@README +readme.width=47 +readme.x=10 +readme.y=10 target1.height=50 -target1.name=Spielfeld +target1.name=SnakeSpiel target1.naviview.expanded=false target1.showInterface=false target1.type=ClassTarget -target1.width=80 -target1.x=280 -target1.y=30 -target2.editor.height=700 -target2.editor.width=900 -target2.editor.x=314 -target2.editor.y=252 +target1.width=90 +target1.x=100 +target1.y=150 target2.height=50 -target2.name=Schlange +target2.name=Spielfeld target2.naviview.expanded=false target2.showInterface=false target2.type=ClassTarget target2.width=80 -target2.x=330 -target2.y=120 -target3.editor.height=700 -target3.editor.width=900 -target3.editor.x=314 -target3.editor.y=252 +target2.x=280 +target2.y=30 target3.height=50 target3.name=Tuer target3.naviview.expanded=false @@ -53,15 +56,11 @@ target3.type=ClassTarget target3.width=80 target3.x=310 target3.y=240 -target4.editor.height=700 -target4.editor.width=900 -target4.editor.x=314 -target4.editor.y=252 target4.height=50 -target4.name=SnakeSpiel +target4.name=Schlange target4.naviview.expanded=false target4.showInterface=false target4.type=ClassTarget -target4.width=90 -target4.x=100 -target4.y=150 +target4.width=80 +target4.x=330 +target4.y=120