diff options
Diffstat (limited to 'Info/9')
| -rw-r--r-- | Info/9/3/Planet/Planet.json | 4 | ||||
| -rw-r--r-- | Info/9/3/Planet/Readme.md | 1 |
2 files changed, 2 insertions, 3 deletions
diff --git a/Info/9/3/Planet/Planet.json b/Info/9/3/Planet/Planet.json index 4dc59c8b..fd4cc3d6 100644 --- a/Info/9/3/Planet/Planet.json +++ b/Info/9/3/Planet/Planet.json @@ -4,11 +4,11 @@ "modules": [ { "name": "Planet", - "text": "class Planet extends World {\n Sprite boden;\n int breite = 16;\n int hoehe = 12;\n\n void erzeugeBoden() {\n boden = new Sprite(25, 25, SpriteLibrary.Planet, 0);\n boden.makeTiling(breite * 50, hoehe * 50);\n\n // Zentriere den erzeugten Boden im Koordinatensystem\n int volleBreite = breite * 50;\n int volleHoehe = hoehe * 50;\n int breitenUnterschied = (int)getWidth() - volleBreite;\n int hoehenUnterschied = (int)getHeight() - volleHoehe;\n setCoordinateSystem(-breitenUnterschied / 2, -hoehenUnterschied / 2, getWidth(), getHeight());\n }\n\n Planet() {\n erzeugeBoden();\n }\n\n Planet(int neueBreite, int neueHoehe) {\n breite = neueBreite;\n hoehe = neueHoehe;\n erzeugeBoden();\n }\n\n static Rover standardPlanet() {\n new Planet(10, 10);\n\n new Gestein(4, 3);\n new Gestein(5, 2);\n new Gestein(6, 3);\n \n new Huegel(3, 4);\n new Huegel(4, 4);\n new Huegel(5, 3);\n new Huegel(5, 4);\n\n new Marke(6, 4);\n return new Rover(2, 3);\n }\n\n static Rover starteMethodenTest() {\n Rover r = standardPlanet();\n return r;\n }\n\n static Rover starteSequenz1() {\n new Planet(6, 5);\n for (int i = 0; i < 6; i++) {\n new Huegel(i, 0);\n new Huegel(i, 4);\n }\n for (int i = 1; i < 6; i++) {\n new Huegel(i, 1);\n new Huegel(i, 3);\n }\n\n new Marke(5, 2);\n\n return new Rover(0, 2);\n }\n \n static void checkSequenz1() {\n report(Tile.getTileAt(5, 2, \"Rover\") != null, \"Rover Position\");\n }\n \n static Rover starteSequenz2() {\n new Planet(6, 5);\n for (int i = 0; i < 6; i++) {\n if (i != 2) {\n new Huegel(i, 0);\n new Huegel(i, 1);\n }\n if (i != 3) {\n new Huegel(i, 3);\n new Huegel(i, 4);\n }\n }\n\n new Marke(3, 4);\n\n return new Rover(0, 2);\n }\n\n static void checkSequenz2() {\n report(Tile.getTileAt(3, 4, \"Rover\") != null, \"Rover Position\");\n }\n\n static Rover starteSequenz3() {\n new Planet(7, 5);\n\n new Huegel(0, 0);\n new Huegel(0, 2);\n new Huegel(0, 3);\n new Huegel(0, 4);\n\n new Huegel(1, 0);\n new Huegel(1, 4);\n \n new Huegel(2, 0);\n new Huegel(2, 1);\n new Huegel(2, 2);\n new Huegel(2, 4);\n\n new Huegel(3, 0);\n new Huegel(3, 4);\n\n new Huegel(4, 2);\n new Huegel(4, 3);\n new Huegel(4, 4);\n\n new Huegel(5, 1);\n new Huegel(5, 2);\n\n new Huegel(6, 4);\n\n new Marke(5, 4);\n\n return new Rover(0, 1);\n }\n\n static void checkSequenz3() {\n report(Tile.getTileAt(5, 4, \"Rover\") != null, \"Rover Position\");\n }\n\n static Rover starteMethodenZusatzaufgabe1() {\n new Planet(8, 4);\n Gestein g = new Gestein(4, 1);\n g.setImageIndex(2); // rot\n g = new Gestein(4, 2);\n g.setImageIndex(1); // blau\n g = new Gestein(5, 1);\n g.setImageIndex(2); // rot\n g = new Gestein(5, 2);\n g.setImageIndex(2); // rot\n return new Rover(2, 1);\n }\n \n static Rover starteMethodenZusatzaufgabe2() {\n new Planet(8, 4);\n new Gestein(3, 1);\n new Gestein(6, 1);\n new Gestein(6, 2);\n return new Rover(1, 1);\n }\n\n static Rover starteSammleSteine() {\n int l = Random.randint(3, 6);\n Planet p = new Planet(4 + l, 3);\n \n for (int i = 2; i < p.breite - 1; i++) {\n new Gestein(i, 1);\n }\n \n return new Rover(1, 1);\n }\n\n static void checkSammleSteine() {\n for (int i = 2; i < ((Planet)World.getWorld()).breite - 1; i++) {\n report(Tile.getTileAt(i, 1, \"Gestein\") == null,\n \"Gestein aufgehoben (\" + i + \", 1)\");\n }\n }\n\n static Rover starteBergketteAbfahren() {\n int l = Random.randint(3, 6);\n \n Planet p = new Planet(4 + l, 4);\n for (int i = 2; i < p.breite - 2; i++) {\n new Huegel(i, 1);\n }\n for (int i = 1; i < p.breite - 1; i++) {\n new Huegel(i, 2);\n }\n \n return new Rover(2, 0);\n }\n \n static void checkBergketteAbfahren() {\n report(Tile.getTileAt(((Planet)World.getWorld()).breite - 2, 0, \"Rover\") != null,\n \"Rover Position\");\n }\n \n static Rover starteBedingteAnweisung() {\n new Planet(5, 3);\n new Huegel(2, 1);\n new Gestein(1, 1);\n return new Rover(1, 1);\n }\n \n static void checkBedingteAnweisung() {\n report(Tile.getTileAt(3, 1, \"Rover\") != null,\n \"Rover Position\");\n report(Tile.getTileAt(1, 1, \"Gestein\") == null,\n \"Gestein aufgehoben\");\n }\n\n static Rover starteNimmGesteinNebenZweiHuegel() {\n new Planet(12, 5);\n new Marke(10, 2);\n new Huegel(2, 1); new Huegel(2, 3);\n new Gestein(2, 2);\n new Huegel(4, 1); new Huegel(4, 3);\n new Gestein(4, 2);\n new Huegel(9, 1); new Huegel(9, 3);\n new Huegel(6, 1);\n new Huegel(7, 3);\n new Huegel(8, 1);\n new Gestein(9, 2);\n\n return new Rover(1, 2);\n }\n \n static void checkNimmGesteinNebenZweiHuegel() {\n report(Tile.getTileAt(2, 2, \"Gestein\") == null,\n \"Gestein aufgehoben\");\n report(Tile.getTileAt(4, 2, \"Gestein\") == null,\n \"Gestein aufgehoben\");\n report(Tile.getTileAt(9, 2, \"Gestein\") == null,\n \"Gestein aufgehoben\");\n }\n\n static Rover starteZaehleGestein() {\n new Planet(15, 3);\n new Marke(13, 1);\n new Gestein(2, 1);\n new Gestein(4, 1);\n new Gestein(6, 1);\n new Gestein(9, 1);\n\n return new Rover(1, 1);\n }\n \n static void checkZaehleGestein(int aufgehoben) {\n report(aufgehoben == 4, \"Zurueckgegebene Anzahl\");\n report(Tile.getTileAt(2, 1, \"Gestein\") == null && \n Tile.getTileAt(4, 1, \"Gestein\") == null && \n Tile.getTileAt(6, 1, \"Gestein\") == null && \n Tile.getTileAt(9, 1, \"Gestein\") == null,\n \"Gestein aufgehoben\");\n }\n \n static Rover starteRegelmaesigeTaeler() {\n new Planet(10, 5);\n\n for (int x = 0; x < 10; x++) {\n if (x > 0 && x % 2 == 0) {\n int depth = x / 2;\n for (int y = depth + 1; y < 5; y++) {\n new Huegel(x, y);\n }\n new Gestein(x, depth);\n } else {\n for (int y = 1; y < 5; y++) {\n new Huegel(x, y);\n }\n }\n }\n\n return new Rover(0, 0);\n }\n\n static void checkRegelmaesigeTaeler() {\n report(Tile.getTileAt(3, 1, \"Gestein\") == null && \n Tile.getTileAt(5, 2, \"Gestein\") == null && \n Tile.getTileAt(7, 3, \"Gestein\") == null && \n Tile.getTileAt(9, 4, \"Gestein\") == null,\n \"Gestein aufgehoben\");\n }\n\n static Rover starteGang() {\n new Planet(9, 9);\n {\n int x = 0;\n int y = 4;\n \n // Ziel-Koordinaten\n int zX = 8;\n int zY = Random.randint(1, 7);\n new Gestein(zX, zY);\n \n // Eingang zum Gestein\n new Marke(zX - 1, zY);\n \n int richtung = Random.randint(1, 3);\n \n // Oben\n if (richtung == 1)\n { \n int up = Random.randint(Math.max(y - zY, 1), y);\n for (int j = 0; j < up; j++) {\n new Marke(x, y - 1 - j);\n }\n // Rechts\n for (int j = x; j < zX - 2; j++) {\n new Marke(j, y - 1 - up);\n }\n // Runter\n for (int j = y - 1 - up; j <= zY; j++) {\n new Marke(zX - 2, j);\n }\n }\n // Unten\n else if (richtung == 3)\n { \n int down = Random.randint(Math.max(zY - y, 1), 7 - y);\n for (int j = 0; j < down; j++) {\n new Marke(x, y + 1 + j);\n }\n\n // Rechts\n for (int j = x; j < zX - 2; j++) {\n new Marke(j, y + 1 + down);\n }\n\n // Rauf\n for (int j = y + 1 + down; j >= zY; j--) {\n new Marke(zX - 2, j);\n }\n }\n \n // Nach hinten\n else {\n // Runter\n if (zY > y) {\n for (int j = y; j <= zY; j++) {\n new Marke(x + 1, j);\n }\n }\n // Rauf\n else {\n for (int j = zY; j <= y; j++) {\n new Marke(x + 1, j);\n }\n }\n \n // Hinter\n for (int j = x + 1; j < zX; j++) {\n new Marke(j, zY);\n }\n }\n }\n // Fuelle die Hoehle\n for (int x = 0; x < 9; x++) {\n for (int y = 0; y < 9; y++) {\n boolean found = (x == 0 && y == 4);\n for (Shape shape : getWorld().getAllShapes()) {\n try {\n Tile t = (Tile)shape;\n if (t.getX() == x && t.getY() == y) {\n found = true;\n // Entferne die gefundene Marke\n if (t instanceof Marke) {\n t.destroy();\n }\n //break;\n }\n }\n catch(ClassCastException e) { }\n }\n if (!found) {\n new Huegel(x, y);\n }\n }\n }\n \n return new Rover(0, 4);\n }\n\n static void checkGang() {\n Rover r = (Rover)Tile.getFirstTile(\"Rover\");\n int x = r.getX();\n int y = r.getY();\n Gestein g = (Gestein)Tile.getTileAt(x, y, \"Gestein\");\n report(g != null, \"Gestein gefunden\");\n }\n\n static Rover starteKreuzung() {\n new Planet(3, 3);\n new Gestein(1, 1);\n new Huegel(0, 0);\n new Huegel(0, 2);\n new Huegel(2, 0);\n new Huegel(2, 2);\n switch(Random.randint(1, 3)) {\n case 1 : // oben\n (new Gestein(1, 0)).wassergehalt = 1;\n (new Gestein(2, 1)).wassergehalt = 0;\n (new Gestein(1, 2)).wassergehalt = 0;\n break;\n case 2 : // dahinter\n (new Gestein(1, 0)).wassergehalt = 0;\n (new Gestein(2, 1)).wassergehalt = 1;\n (new Gestein(1, 2)).wassergehalt = 0;\n break;\n case 3 : // unten\n (new Gestein(1, 0)).wassergehalt = 0;\n (new Gestein(2, 1)).wassergehalt = 0;\n (new Gestein(1, 2)).wassergehalt = 1;\n break;\n }\n \n return new Rover(0, 1);\n }\n\n static void checkKreuzung() {\n Rover r = (Rover)Tile.getFirstTile(\"Rover\");\n int x = r.getX();\n int y = r.getY();\n Gestein g = (Gestein)Tile.getTileAt(x, y, \"Gestein\");\n report((x != 1 || y != 1) && g != null && g.wassergehalt > 0, \"Wasser gefunden\");\n }\n\n static Rover starteDieHoehle() {\n new Planet(16, 9);\n \n // Platziere Kreuzungen\n Gestein[] kreuzungen = new Gestein[3];\n for (int i = 0; i < 3; i++) {\n int pX = 2;\n if (i > 0) {\n pX = kreuzungen[i - 1].getX();\n }\n \n int x = pX + i * 4 + Random.randint(0, 1);\n\n // Die erste Kreuzung ist schon sehr weit rechts\n if (i == 1 && pX == 3) {\n x = pX + i * 4;\n }\n // Letzte Moeglichkeit fuer eine Kreuzung\n else if (x > 11) {\n x = 11;\n }\n\n\n kreuzungen[i] = new Gestein(\n x, // random x\n Random.randint(2, 6)); // random y\n }\n \n // Platziere Mineralkreuzung\n Gestein mineralKreuzung = new Gestein(15, Random.randint(2, 6));\n\n int mX = mineralKreuzung.getX();\n int mY = mineralKreuzung.getY();\n if (Random.randint(1, 2) == 1) {\n new Mineral(mX, mY - 2);\n (new Gestein(mX, mY - 1)).wassergehalt = 1;\n (new Gestein(mX, mY + 1)).wassergehalt = 0;\n } else {\n new Mineral(mX, mY + 2);\n (new Gestein(mX, mY - 1)).wassergehalt = 0;\n (new Gestein(mX, mY + 1)).wassergehalt = 1;\n }\n\n // Grabe Gaenge\n int[] ausgaenge = { 0, 0, 0 };\n for (int i = 0; i < 3; i ++) {\n int x = kreuzungen[i].getX();\n int y = kreuzungen[i].getY();\n \n // Ziel-Koordinaten\n int zX = 0;\n int zY = 0;\n if (i < 2) {\n zX = kreuzungen[i + 1].getX();\n zY = kreuzungen[i + 1].getY();\n } else {\n zX = mineralKreuzung.getX();\n zY = mineralKreuzung.getY();\n }\n \n // Eingang zur naechsten Kreuzung\n new Marke(zX - 1, zY);\n \n ausgaenge[i] = Random.randint(1, 3);\n \n // Oben, falls moeglich (genug Platz nach rechts oder Ziel weiter oben)\n if (ausgaenge[i] == 1 && \n (zX - x > 5 || zY < y))\n {\n (new Gestein(x, y - 1)).wassergehalt = 1;\n (new Gestein(x + 1, y)).wassergehalt = 0;\n (new Gestein(x, y + 1)).wassergehalt = 0;\n\n new Marke(x, y + 2);\n \n int up = Random.randint(Math.max(y - zY, 1), y - 1);\n for (int j = 0; j < up; j++) {\n new Marke(x, y - 2 - j);\n }\n // Rechts\n for (int j = x; j < zX - 2; j++) {\n new Marke(j, y - 1 - up);\n }\n // Runter\n for (int j = y - 1 - up; j <= zY; j++) {\n new Marke(zX - 2, j);\n }\n }\n \n // Unten, falls moeglich (genug Platz nach rechts oder Ziel weiter unten)\n else if (ausgaenge[i] == 3 && \n (zX - x > 5 || zY > y))\n {\n (new Gestein(x, y - 1)).wassergehalt = 0;\n (new Gestein(x + 1, y)).wassergehalt = 0;\n (new Gestein(x, y + 1)).wassergehalt = 1;\n\n new Marke(x, y - 2);\n \n int down = Random.randint(Math.max(zY - y, 1), 7 - y);\n for (int j = 0; j < down; j++) {\n new Marke(x, y + 2 + j);\n }\n\n // Rechts\n for (int j = x; j < zX - 2; j++) {\n new Marke(j, y + 1 + down);\n }\n\n // Rauf\n for (int j = y + 1 + down; j >= zY; j--) {\n new Marke(zX - 2, j);\n }\n }\n \n // Nach hinten\n else {\n (new Gestein(x, y - 1)).wassergehalt = 0;\n (new Gestein(x + 1, y)).wassergehalt = 1;\n (new Gestein(x, y + 1)).wassergehalt = 0;\n \n // Runter\n if (zY > y) {\n for (int j = y; j <= zY; j++) {\n new Marke(x + 2, j);\n }\n }\n // Rauf\n else {\n for (int j = zY; j <= y; j++) {\n new Marke(x + 2, j);\n }\n }\n \n // Hinter\n for (int j = x + 2; j < zX; j++) {\n new Marke(j, zY);\n }\n }\n }\n \n // Gang zur ersten Kreuzung\n int zX = kreuzungen[0].getX();\n int zY = kreuzungen[0].getY();\n \n new Marke(1, zY);\n \n // Runter\n if (zY > 4) {\n for (int j = 4; j <= zY; j++) {\n new Marke(0, j);\n }\n }\n // Rauf\n else {\n for (int j = zY; j <= 4; j++) {\n new Marke(0, j);\n }\n }\n \n // Hinter\n for (int j = 1; j < zX; j++) {\n new Marke(j, zY);\n }\n \n // Fuelle die Hoehle\n for (int x = 0; x < 16; x++) {\n for (int y = 0; y < 9; y++) {\n boolean found = (x == 0 && y == 4);\n for (Shape shape : getWorld().getAllShapes()) {\n try {\n Tile t = (Tile)shape;\n if (t.getX() == x && t.getY() == y) {\n found = true;\n // Entferne die gefundene Marke\n if (t instanceof Marke) {\n t.destroy();\n }\n // TODO: Verhindere doppelte Marken aus Effizienzgruenden\n //break;\n }\n }\n catch(ClassCastException e) { }\n \n }\n if (!found) {\n new Huegel(x, y);\n }\n }\n }\n \n return new Rover(0, 4);\n }\n \n static void report(boolean result, String msg) {\n if (result) {\n println(\"ok - \" + msg, Color.green);\n }\n else {\n println(\"not ok - \" + msg, Color.red);\n }\n }\n}", + "text": "class Planet extends World {\n Sprite boden;\n int breite = 16;\n int hoehe = 12;\n\n void erzeugeBoden() {\n boden = new Sprite(25, 25, SpriteLibrary.Planet, 0);\n boden.makeTiling(breite * 50, hoehe * 50);\n\n // Zentriere den erzeugten Boden im Koordinatensystem\n int volleBreite = breite * 50;\n int volleHoehe = hoehe * 50;\n int breitenUnterschied = (int)getWidth() - volleBreite;\n int hoehenUnterschied = (int)getHeight() - volleHoehe;\n setCoordinateSystem(-breitenUnterschied / 2, -hoehenUnterschied / 2, getWidth(), getHeight());\n }\n\n Planet() {\n erzeugeBoden();\n }\n\n Planet(int neueBreite, int neueHoehe) {\n breite = neueBreite;\n hoehe = neueHoehe;\n erzeugeBoden();\n }\n\n static Rover standardPlanet() {\n new Planet(10, 10);\n\n new Gestein(4, 3);\n new Gestein(5, 2);\n new Gestein(6, 3);\n \n new Huegel(3, 4);\n new Huegel(4, 4);\n new Huegel(5, 3);\n new Huegel(5, 4);\n\n new Marke(6, 4);\n return new Rover(2, 3);\n }\n\n static Rover starteMethodenTest() {\n Rover r = standardPlanet();\n return r;\n }\n\n static Rover starteSequenz1() {\n new Planet(6, 5);\n for (int i = 0; i < 6; i++) {\n new Huegel(i, 0);\n new Huegel(i, 4);\n }\n for (int i = 1; i < 6; i++) {\n new Huegel(i, 1);\n new Huegel(i, 3);\n }\n\n new Marke(5, 2);\n\n return new Rover(0, 2);\n }\n \n static void checkSequenz1() {\n report(Tile.getTileAt(5, 2, \"Rover\") != null, \"Rover Position\");\n }\n \n static Rover starteSequenz2() {\n new Planet(6, 5);\n for (int i = 0; i < 6; i++) {\n if (i != 2) {\n new Huegel(i, 0);\n new Huegel(i, 1);\n }\n if (i != 3) {\n new Huegel(i, 3);\n new Huegel(i, 4);\n }\n }\n\n new Marke(3, 4);\n\n return new Rover(0, 2);\n }\n\n static void checkSequenz2() {\n report(Tile.getTileAt(3, 4, \"Rover\") != null, \"Rover Position\");\n }\n\n static Rover starteSequenz3() {\n new Planet(7, 5);\n\n new Huegel(0, 0);\n new Huegel(0, 2);\n new Huegel(0, 3);\n new Huegel(0, 4);\n\n new Huegel(1, 0);\n new Huegel(1, 4);\n \n new Huegel(2, 0);\n new Huegel(2, 1);\n new Huegel(2, 2);\n new Huegel(2, 4);\n\n new Huegel(3, 0);\n new Huegel(3, 4);\n\n new Huegel(4, 2);\n new Huegel(4, 3);\n new Huegel(4, 4);\n\n new Huegel(5, 1);\n new Huegel(5, 2);\n\n new Huegel(6, 4);\n\n new Marke(5, 4);\n\n return new Rover(0, 1);\n }\n\n static void checkSequenz3() {\n report(Tile.getTileAt(5, 4, \"Rover\") != null, \"Rover Position\");\n }\n\n static Rover starteMethodenZusatzaufgabe1() {\n new Planet(8, 4);\n Gestein g = new Gestein(4, 1);\n g.setImageIndex(2); // rot\n g = new Gestein(4, 2);\n g.setImageIndex(1); // blau\n g = new Gestein(5, 1);\n g.setImageIndex(2); // rot\n g = new Gestein(5, 2);\n g.setImageIndex(2); // rot\n return new Rover(2, 1);\n }\n \n static Rover starteMethodenZusatzaufgabe2() {\n new Planet(8, 4);\n new Gestein(3, 1);\n new Gestein(6, 1);\n new Gestein(6, 2);\n return new Rover(1, 1);\n }\n\n static Rover starteSammleSteine() {\n int l = Random.randint(3, 6);\n Planet p = new Planet(4 + l, 3);\n \n for (int i = 2; i < p.breite - 1; i++) {\n new Gestein(i, 1);\n }\n \n return new Rover(1, 1);\n }\n\n static void checkSammleSteine() {\n for (int i = 2; i < ((Planet)World.getWorld()).breite - 1; i++) {\n report(Tile.getTileAt(i, 1, \"Gestein\") == null,\n \"Gestein aufgehoben (\" + i + \", 1)\");\n }\n }\n\n static Rover starteBergketteAbfahren() {\n int l = Random.randint(3, 6);\n \n Planet p = new Planet(4 + l, 4);\n for (int i = 2; i < p.breite - 2; i++) {\n new Huegel(i, 1);\n }\n for (int i = 1; i < p.breite - 1; i++) {\n new Huegel(i, 2);\n }\n \n return new Rover(2, 0);\n }\n \n static void checkBergketteAbfahren() {\n report(Tile.getTileAt(((Planet)World.getWorld()).breite - 2, 0, \"Rover\") != null,\n \"Rover Position\");\n }\n \n static Rover starteBedingteAnweisung() {\n new Planet(5, 3);\n new Huegel(2, 1);\n new Gestein(1, 1);\n return new Rover(1, 1);\n }\n \n static void checkBedingteAnweisung() {\n report(Tile.getTileAt(3, 1, \"Rover\") != null,\n \"Rover Position\");\n report(Tile.getTileAt(1, 1, \"Gestein\") == null,\n \"Gestein aufgehoben\");\n }\n\n static Rover starteNimmGesteinNebenZweiHuegel() {\n new Planet(12, 5);\n new Marke(10, 2);\n new Huegel(2, 1); new Huegel(2, 3);\n new Gestein(2, 2);\n new Huegel(4, 1); new Huegel(4, 3);\n new Gestein(4, 2);\n new Huegel(9, 1); new Huegel(9, 3);\n new Huegel(6, 1);\n new Huegel(7, 3);\n new Huegel(8, 1);\n new Gestein(9, 2);\n\n return new Rover(1, 2);\n }\n \n static void checkNimmGesteinNebenZweiHuegel() {\n report(Tile.getTileAt(2, 2, \"Gestein\") == null,\n \"Gestein aufgehoben\");\n report(Tile.getTileAt(4, 2, \"Gestein\") == null,\n \"Gestein aufgehoben\");\n report(Tile.getTileAt(9, 2, \"Gestein\") == null,\n \"Gestein aufgehoben\");\n }\n\n static Rover starteZaehleGestein() {\n new Planet(15, 3);\n new Marke(13, 1);\n new Gestein(2, 1);\n new Gestein(4, 1);\n new Gestein(6, 1);\n new Gestein(9, 1);\n\n return new Rover(1, 1);\n }\n \n static void checkZaehleGestein(int aufgehoben) {\n report(aufgehoben == 4, \"Zurueckgegebene Anzahl\");\n report(Tile.getTileAt(2, 1, \"Gestein\") == null && \n Tile.getTileAt(4, 1, \"Gestein\") == null && \n Tile.getTileAt(6, 1, \"Gestein\") == null && \n Tile.getTileAt(9, 1, \"Gestein\") == null,\n \"Gestein aufgehoben\");\n }\n \n static Rover starteRegelmaesigeTaeler() {\n new Planet(10, 5);\n\n for (int x = 0; x < 10; x++) {\n if (x > 0 && x % 2 == 0) {\n int depth = x / 2;\n for (int y = depth + 1; y < 5; y++) {\n new Huegel(x, y);\n }\n new Gestein(x, depth);\n } else {\n for (int y = 1; y < 5; y++) {\n new Huegel(x, y);\n }\n }\n }\n\n return new Rover(0, 0);\n }\n\n static void checkRegelmaesigeTaeler() {\n report(Tile.getTileAt(3, 1, \"Gestein\") == null && \n Tile.getTileAt(5, 2, \"Gestein\") == null && \n Tile.getTileAt(7, 3, \"Gestein\") == null && \n Tile.getTileAt(9, 4, \"Gestein\") == null,\n \"Gestein aufgehoben\");\n }\n\n static void fillPlanet(Planet p) {\n for (int x = 0; x < p.breite; x++) {\n for (int y = 0; y < p.hoehe; y++) {\n boolean found = false;\n for (Shape shape : getWorld().getAllShapes()) {\n try {\n Tile t = (Tile)shape;\n if (t.getX() == x && t.getY() == y) {\n found = true;\n // Entferne die gefundene Marke\n if (t instanceof Marke) {\n t.destroy();\n }\n // TODO: Verhindere doppelte Marken aus Effizienzgruenden\n //break;\n }\n }\n catch(ClassCastException e) { }\n }\n if (!found) {\n new Huegel(x, y);\n }\n }\n }\n }\n\n static Rover starteGang() {\n Planet p = new Planet(9, 9);\n \n // Start Koordinaten des Ganges\n int x = 1;\n int y = 4;\n \n // Ziel-Koordinaten\n int zX = 8;\n int zY = Random.randint(1, 7);\n new Gestein(zX, zY);\n \n // Eingang zum Gestein\n new Marke(zX - 1, zY);\n // Rover STart-Position\n new Marke(x - 1, y);\n // Erster Schritt, um einen nicht komplett umschlossenen Gang am Rand zu verhindern\n new Marke(x, y);\n \n int richtung = Random.randint(1, 3);\n \n // Oben\n if (richtung == 1)\n { \n int up = Random.randint(Math.max(y - zY, 1), y - 2);\n for (int j = 0; j < up; j++) {\n new Marke(x, y - 1 - j);\n }\n // Rechts\n for (int j = x; j < zX - 2; j++) {\n new Marke(j, y - 1 - up);\n }\n // Runter\n for (int j = y - 1 - up; j <= zY; j++) {\n new Marke(zX - 2, j);\n }\n }\n // Unten\n else if (richtung == 3)\n { \n int down = Random.randint(Math.max(zY - y, 1), 6 - y);\n for (int j = 0; j < down; j++) {\n new Marke(x, y + 1 + j);\n }\n\n // Rechts\n for (int j = x; j < zX - 2; j++) {\n new Marke(j, y + 1 + down);\n }\n\n // Rauf\n for (int j = y + 1 + down; j >= zY; j--) {\n new Marke(zX - 2, j);\n }\n }\n \n // Nach hinten\n else {\n // Runter\n if (zY > y) {\n for (int j = y; j <= zY; j++) {\n new Marke(x + 1, j);\n }\n }\n // Rauf\n else {\n for (int j = zY; j <= y; j++) {\n new Marke(x + 1, j);\n }\n }\n \n // Hinter\n for (int j = x + 1; j < zX; j++) {\n new Marke(j, zY);\n }\n }\n \n // Fuelle die Hoehle\n fillPlanet(p);\n \n return new Rover(0, 4);\n }\n\n static void checkGang() {\n Rover r = (Rover)Tile.getFirstTile(\"Rover\");\n int x = r.getX();\n int y = r.getY();\n Gestein g = (Gestein)Tile.getTileAt(x, y, \"Gestein\");\n report(g != null, \"Gestein gefunden\");\n }\n\n static Rover starteKreuzung() {\n new Planet(3, 3);\n new Gestein(1, 1);\n new Huegel(0, 0);\n new Huegel(0, 2);\n new Huegel(2, 0);\n new Huegel(2, 2);\n switch(Random.randint(1, 3)) {\n case 1 : // oben\n (new Gestein(1, 0)).wassergehalt = 1;\n (new Gestein(2, 1)).wassergehalt = 0;\n (new Gestein(1, 2)).wassergehalt = 0;\n break;\n case 2 : // dahinter\n (new Gestein(1, 0)).wassergehalt = 0;\n (new Gestein(2, 1)).wassergehalt = 1;\n (new Gestein(1, 2)).wassergehalt = 0;\n break;\n case 3 : // unten\n (new Gestein(1, 0)).wassergehalt = 0;\n (new Gestein(2, 1)).wassergehalt = 0;\n (new Gestein(1, 2)).wassergehalt = 1;\n break;\n }\n \n return new Rover(0, 1);\n }\n\n static void checkKreuzung() {\n Rover r = (Rover)Tile.getFirstTile(\"Rover\");\n int x = r.getX();\n int y = r.getY();\n Gestein g = (Gestein)Tile.getTileAt(x, y, \"Gestein\");\n report((x != 1 || y != 1) && g != null && g.wassergehalt > 0, \"Wasser gefunden\");\n }\n\n static Rover starteDieHoehle() {\n Planet p = new Planet(16, 9);\n \n // Rover Startposition\n new Marke(0, 4);\n // Platziere Kreuzungen\n Gestein[] kreuzungen = new Gestein[3];\n for (int i = 0; i < 3; i++) {\n int pX = 2;\n if (i > 0) {\n pX = kreuzungen[i - 1].getX();\n }\n \n int x = pX + i * 4 + Random.randint(0, 1);\n\n // Die erste Kreuzung ist schon sehr weit rechts\n if (i == 1 && pX == 3) {\n x = pX + i * 4;\n }\n // Letzte Moeglichkeit fuer eine Kreuzung\n else if (x > 11) {\n x = 11;\n }\n\n\n kreuzungen[i] = new Gestein(\n x, // random x\n Random.randint(2, 6)); // random y\n }\n \n // Platziere Mineralkreuzung\n Gestein mineralKreuzung = new Gestein(15, Random.randint(2, 6));\n\n int mX = mineralKreuzung.getX();\n int mY = mineralKreuzung.getY();\n if (Random.randint(1, 2) == 1) {\n new Mineral(mX, mY - 2);\n (new Gestein(mX, mY - 1)).wassergehalt = 1;\n (new Gestein(mX, mY + 1)).wassergehalt = 0;\n } else {\n new Mineral(mX, mY + 2);\n (new Gestein(mX, mY - 1)).wassergehalt = 0;\n (new Gestein(mX, mY + 1)).wassergehalt = 1;\n }\n\n // Grabe Gaenge\n int[] ausgaenge = { 0, 0, 0 };\n for (int i = 0; i < 3; i ++) {\n int x = kreuzungen[i].getX();\n int y = kreuzungen[i].getY();\n \n // Ziel-Koordinaten\n int zX = 0;\n int zY = 0;\n if (i < 2) {\n zX = kreuzungen[i + 1].getX();\n zY = kreuzungen[i + 1].getY();\n } else {\n zX = mineralKreuzung.getX();\n zY = mineralKreuzung.getY();\n }\n \n // Eingang zur naechsten Kreuzung\n new Marke(zX - 1, zY);\n \n ausgaenge[i] = Random.randint(1, 3);\n \n // Oben, falls moeglich (genug Platz nach rechts oder Ziel weiter oben)\n if (ausgaenge[i] == 1 && \n (zX - x > 5 || zY < y))\n {\n (new Gestein(x, y - 1)).wassergehalt = 1;\n (new Gestein(x + 1, y)).wassergehalt = 0;\n (new Gestein(x, y + 1)).wassergehalt = 0;\n\n new Marke(x, y + 2);\n \n int up = Random.randint(Math.max(y - zY, 1), y - 2);\n for (int j = 0; j < up; j++) {\n new Marke(x, y - 2 - j);\n }\n // Rechts\n for (int j = x; j < zX - 2; j++) {\n new Marke(j, y - 1 - up);\n }\n // Runter\n for (int j = y - 1 - up; j <= zY; j++) {\n new Marke(zX - 2, j);\n }\n }\n \n // Unten, falls moeglich (genug Platz nach rechts oder Ziel weiter unten)\n else if (ausgaenge[i] == 3 && \n (zX - x > 5 || zY > y))\n {\n (new Gestein(x, y - 1)).wassergehalt = 0;\n (new Gestein(x + 1, y)).wassergehalt = 0;\n (new Gestein(x, y + 1)).wassergehalt = 1;\n\n new Marke(x, y - 2);\n \n int down = Random.randint(Math.max(zY - y, 1), 6 - y);\n for (int j = 0; j < down; j++) {\n new Marke(x, y + 2 + j);\n }\n\n // Rechts\n for (int j = x; j < zX - 2; j++) {\n new Marke(j, y + 1 + down);\n }\n\n // Rauf\n for (int j = y + 1 + down; j >= zY; j--) {\n new Marke(zX - 2, j);\n }\n }\n \n // Nach hinten\n else {\n (new Gestein(x, y - 1)).wassergehalt = 0;\n (new Gestein(x + 1, y)).wassergehalt = 1;\n (new Gestein(x, y + 1)).wassergehalt = 0;\n \n // Runter\n if (zY > y) {\n for (int j = y; j <= zY; j++) {\n new Marke(x + 2, j);\n }\n }\n // Rauf\n else {\n for (int j = zY; j <= y; j++) {\n new Marke(x + 2, j);\n }\n }\n \n // Hinter\n for (int j = x + 2; j < zX; j++) {\n new Marke(j, zY);\n }\n }\n }\n \n // Gang zur ersten Kreuzung\n int zX = kreuzungen[0].getX();\n int zY = kreuzungen[0].getY();\n \n new Marke(1, zY);\n \n // Runter\n if (zY > 4) {\n for (int j = 4; j <= zY; j++) {\n new Marke(0, j);\n }\n }\n // Rauf\n else {\n for (int j = zY; j <= 4; j++) {\n new Marke(0, j);\n }\n }\n \n // Hinter\n for (int j = 1; j < zX; j++) {\n new Marke(j, zY);\n }\n \n // Fuelle die Hoehle\n fillPlanet(p);\n \n return new Rover(0, 4);\n }\n \n static void report(boolean result, String msg) {\n if (result) {\n println(\"ok - \" + msg, Color.green);\n }\n else {\n println(\"not ok - \" + msg, Color.red);\n }\n }\n}", "id": 2695383, "identical_to_repository_version": true, "is_copy_of_id": 2695383, - "repository_file_version": 9, + "repository_file_version": 10, "isFolder": false, "parent_folder_id": 3058715 }, diff --git a/Info/9/3/Planet/Readme.md b/Info/9/3/Planet/Readme.md index a448357e..512415e2 100644 --- a/Info/9/3/Planet/Readme.md +++ b/Info/9/3/Planet/Readme.md @@ -43,7 +43,6 @@ Einige werden automatisch mit dem Abschließen mancher TODO-Aktivitäten vergebe * Quellenangaben * Reduziere die Materialien mit unklaren Lizenzbestimmungen * Didaktische Reduktion des Codes im Online-IDE Projekt - * Gang sollte immer von Hügeln umschlossen sein. * Wiederholung vor den Kontroll-Strukturen * Erklärung warum graphische Repräsentation (Struktogramme) nützlich sind * Sich weiter aufbauendes Cheatsheet |
