commit 5eacf5f0de1d1d27bd69d90b3ea78937da0e5008 Author: Dirk Zechnall Date: Sat Jan 4 08:36:31 2025 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5795603 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.class +*.ctxt +*.sh +repo.adoc +*.~lock +/alt +Gemfile +Gemfile.lock diff --git a/1_hintergrund/01_hintergrund.odt b/1_hintergrund/01_hintergrund.odt new file mode 100644 index 0000000..0be9d2a Binary files /dev/null and b/1_hintergrund/01_hintergrund.odt differ diff --git a/1_hintergrund/02_stundenverteilung.odt b/1_hintergrund/02_stundenverteilung.odt new file mode 100644 index 0000000..96d45fb Binary files /dev/null and b/1_hintergrund/02_stundenverteilung.odt differ diff --git a/2_kopiervorlagen/01_GFRobot_AB_01.odt b/2_kopiervorlagen/01_GFRobot_AB_01.odt new file mode 100644 index 0000000..bb8243e Binary files /dev/null and b/2_kopiervorlagen/01_GFRobot_AB_01.odt differ diff --git a/2_kopiervorlagen/01_GFRobot_AB_01.pdf b/2_kopiervorlagen/01_GFRobot_AB_01.pdf new file mode 100644 index 0000000..df6b80b Binary files /dev/null and b/2_kopiervorlagen/01_GFRobot_AB_01.pdf differ diff --git a/2_kopiervorlagen/01_GFRobot_Alles.pdf b/2_kopiervorlagen/01_GFRobot_Alles.pdf new file mode 100644 index 0000000..ac30137 Binary files /dev/null and b/2_kopiervorlagen/01_GFRobot_Alles.pdf differ diff --git a/2_kopiervorlagen/02_GFRobot_AB_02.odt b/2_kopiervorlagen/02_GFRobot_AB_02.odt new file mode 100644 index 0000000..6af6194 Binary files /dev/null and b/2_kopiervorlagen/02_GFRobot_AB_02.odt differ diff --git a/2_kopiervorlagen/02_GFRobot_AB_02.pdf b/2_kopiervorlagen/02_GFRobot_AB_02.pdf new file mode 100644 index 0000000..dd73d69 Binary files /dev/null and b/2_kopiervorlagen/02_GFRobot_AB_02.pdf differ diff --git a/2_kopiervorlagen/03_GFRobot_AB_03.odt b/2_kopiervorlagen/03_GFRobot_AB_03.odt new file mode 100644 index 0000000..d341d90 Binary files /dev/null and b/2_kopiervorlagen/03_GFRobot_AB_03.odt differ diff --git a/2_kopiervorlagen/03_GFRobot_AB_03.pdf b/2_kopiervorlagen/03_GFRobot_AB_03.pdf new file mode 100644 index 0000000..67b31a5 Binary files /dev/null and b/2_kopiervorlagen/03_GFRobot_AB_03.pdf differ diff --git a/2_kopiervorlagen/04_GFRobot_AB_04.odt b/2_kopiervorlagen/04_GFRobot_AB_04.odt new file mode 100644 index 0000000..0f4f54b Binary files /dev/null and b/2_kopiervorlagen/04_GFRobot_AB_04.odt differ diff --git a/2_kopiervorlagen/04_GFRobot_AB_04.pdf b/2_kopiervorlagen/04_GFRobot_AB_04.pdf new file mode 100644 index 0000000..5395fee Binary files /dev/null and b/2_kopiervorlagen/04_GFRobot_AB_04.pdf differ diff --git a/2_kopiervorlagen/05_GFRobot_AB_05.odt b/2_kopiervorlagen/05_GFRobot_AB_05.odt new file mode 100644 index 0000000..2aa49bc Binary files /dev/null and b/2_kopiervorlagen/05_GFRobot_AB_05.odt differ diff --git a/2_kopiervorlagen/05_GFRobot_AB_05.pdf b/2_kopiervorlagen/05_GFRobot_AB_05.pdf new file mode 100644 index 0000000..6c5b666 Binary files /dev/null and b/2_kopiervorlagen/05_GFRobot_AB_05.pdf differ diff --git a/2_kopiervorlagen/06_GFRobot_AB_06.odt b/2_kopiervorlagen/06_GFRobot_AB_06.odt new file mode 100644 index 0000000..af98d0f Binary files /dev/null and b/2_kopiervorlagen/06_GFRobot_AB_06.odt differ diff --git a/2_kopiervorlagen/06_GFRobot_AB_06.pdf b/2_kopiervorlagen/06_GFRobot_AB_06.pdf new file mode 100644 index 0000000..b9705fe Binary files /dev/null and b/2_kopiervorlagen/06_GFRobot_AB_06.pdf differ diff --git a/2_kopiervorlagen/07_GFRobot_AB_07.odt b/2_kopiervorlagen/07_GFRobot_AB_07.odt new file mode 100644 index 0000000..754528a Binary files /dev/null and b/2_kopiervorlagen/07_GFRobot_AB_07.odt differ diff --git a/2_kopiervorlagen/07_GFRobot_AB_07.pdf b/2_kopiervorlagen/07_GFRobot_AB_07.pdf new file mode 100644 index 0000000..3a3b764 Binary files /dev/null and b/2_kopiervorlagen/07_GFRobot_AB_07.pdf differ diff --git a/2_kopiervorlagen/08_GFRobot_AB_08.odt b/2_kopiervorlagen/08_GFRobot_AB_08.odt new file mode 100644 index 0000000..dc5ccb0 Binary files /dev/null and b/2_kopiervorlagen/08_GFRobot_AB_08.odt differ diff --git a/2_kopiervorlagen/08_GFRobot_AB_08.pdf b/2_kopiervorlagen/08_GFRobot_AB_08.pdf new file mode 100644 index 0000000..0fe0698 Binary files /dev/null and b/2_kopiervorlagen/08_GFRobot_AB_08.pdf differ diff --git a/2_kopiervorlagen/09_GFRobot_AB_09.odt b/2_kopiervorlagen/09_GFRobot_AB_09.odt new file mode 100644 index 0000000..d5c1b5c Binary files /dev/null and b/2_kopiervorlagen/09_GFRobot_AB_09.odt differ diff --git a/2_kopiervorlagen/09_GFRobot_AB_09.pdf b/2_kopiervorlagen/09_GFRobot_AB_09.pdf new file mode 100644 index 0000000..2f7e357 Binary files /dev/null and b/2_kopiervorlagen/09_GFRobot_AB_09.pdf differ diff --git a/2_kopiervorlagen/10_GFRobot_AB_10.odt b/2_kopiervorlagen/10_GFRobot_AB_10.odt new file mode 100644 index 0000000..a4bedda Binary files /dev/null and b/2_kopiervorlagen/10_GFRobot_AB_10.odt differ diff --git a/2_kopiervorlagen/10_GFRobot_AB_10.pdf b/2_kopiervorlagen/10_GFRobot_AB_10.pdf new file mode 100644 index 0000000..17835d0 Binary files /dev/null and b/2_kopiervorlagen/10_GFRobot_AB_10.pdf differ diff --git a/2_kopiervorlagen/Bildnachweise.html b/2_kopiervorlagen/Bildnachweise.html new file mode 100644 index 0000000..3c6cd5c --- /dev/null +++ b/2_kopiervorlagen/Bildnachweise.html @@ -0,0 +1,112 @@ + + +Bildnachweise + + + +

Akku

+ +Bild von Clker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/de/vectors/batterie-elektrische-strom-positiv-312747/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Fass+Atommuell

+ +Bild von OpenClipart-Vectors auf Pixabay +
URL: https://pixabay.com/vectors/oil-barrel-black-mineral-oil-146440/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig + +

Feuer

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Platten mit und ohne Knöpfe/Schalter usw

+ +
Bild auf Grundlage von Thanks for your Like • donations welcome auf Pixabay +
URL: https://pixabay.com/photos/mdf-platte-structure-fund-wood-186943/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Strom

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

+

Steine

+ +Bild von Clker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/de/vectors/felsen-felsbrocken-stein-48279/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Roboter

+ +
Bild auf Public Domain Vectors +
URL: https://publicdomainvectors.org/de/kostenlose-vektorgrafiken/Comic-Roboter/47643.html (Abrufdatum: 09.10.2019) +
Lizenz: Public Domain +

Feuerlöscher

+ +Bild von JJuni auf Pixabay +
URL: https://pixabay.com/illustrations/fire-extinguisher-fire-fire-truck-1139909/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Bombe

+ +Bild vonClker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/fr/vectors/bombe-engin-explosif-grenade-33424/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Diamant

+ +Bild von M. Maggs auf Pixabay +
URL: https://pixabay.com/de/vectors/gems-edelsteine-wertvolle-juwel-1221161/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Einsatzleiter

+ +Bild von kasiagrafik auf Pixabay +
URL: https://pixabay.com/de/illustrations/feuerwehrmann-feuer-löschen-3812661/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Schraube

+ +Bild von Clker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/de/vectors/schrauben-metall-eisen-verschluss-33597/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Portal

+ +Grundlage des Bildes auf Max Pixel +
URL: https://www.maxpixel.net/Picture-Frame-Ring-Round-Circle-Shape-Pair-2885023 +
Lizenz: CC0 - Public Domain +

Schlüssel

+ +Bild auf Public Domain Vectors +
URL: https://publicdomainvectors.org/en/free-clipart/Vector-clip-art-of-grey-shaded-metal-door-key/21166.html +
Lizenz: Public Domain +

Aufzug

+ + +
Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Bodenplatten

+ +
Selbst gezeichnet (Thomas Schaller, ZPG Informatik) mit Muster aus Gimp 2.0 +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Ölfleck

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Fragezeichen

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Brennstab

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Türen

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +
+
+

Sperrfläche

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

+

Steinwände

+ +Bild auf Grundlage von skeeze auf Pixabay +
URL: https://pixabay.com/de/photos/kiesel-steine-felsen-landschaftsbau-1429207/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Pfeile

+ +Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

+ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB1.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB1.java new file mode 100644 index 0000000..b059c1a --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB1.java @@ -0,0 +1,50 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + * Die Klasse AB1 ist eine Unterklasse von Roboter. + * Sie erbt damit alle Attribute und Methoden der Klasse Roboter. + */ + +public class AB1 extends Roboter +{ + public void einsVor() { + this.verbraucheEnergie(4); + super.einsVor(); + } + + public void dreheRechts() { + super.dreheRechts(); + } + + public void dreheLinks() { + super.dreheLinks(); + } + + public void schraubeAufnehmen() { + if (istAufSchraube()) super.aufnehmen(); + } + + public void schraubeAblegen() { + super.ablegen("Schraube"); + } + + public int getAnzahlSchrauben() { + return super.getAnzahl("Schraube"); + } + + public boolean istAufSchraube() { + return super.istAufGegenstand("Schraube"); + } + + public boolean istVorratLeer() { + return super.getAnzahl("Schraube")==0; + } + + public void akkuAufnehmen() { + if (istAufGegenstand("Akku")) super.aufnehmen(); + } + + public void benutzeAkku() { + if (this.getAnzahl("Akku")>0) benutze("Akku"); + } +} \ No newline at end of file diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB10.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB10.java new file mode 100644 index 0000000..6b7b415 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB10.java @@ -0,0 +1,82 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +public class AB10 extends AB3 +{ + /*# + * Aufgaben 1, 2 und 3: Patrouille + */ + public void rundeDrehen() { + int anzGemacht; + anzGemacht = 0; + while (anzGemacht < 3) { + laufeBisWand(); + dreheUm(); + anzGemacht++; + } + } + + /*# + * Aufgabe 4: Zu Befehl! + */ + public void dreheAnzahlRunden(int anz) { + // Hier kommt dein Quelltext hin + } + + /*# + * Aufgabe 5: Lauf x Schritte + */ + + /*# + * Aufgabe 6: Was tut es? + * Analysiere diese Methode + */ + public void wastutes(int anz) { + int i=0; + while(i0) { + einsVor(); + if(istAufGegenstand("Diamant")) {aufnehmen();} + return true; + } else { + return false; + } + } + + /*# + * Einsatz 10 bitte beim Einsatzleiter implementieren + */ +} diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB2.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB2.java new file mode 100644 index 0000000..a02a0b3 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB2.java @@ -0,0 +1,61 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +public class AB2 extends Roboter +{ + /*# + * Aufgabe 3: Diese Anweisungen stimmen noch nicht wirklich + * Verbessere und Ergaenze. + */ + public void dreheRunde() + { + einsVor(); + einsVor(); + einsVor(); + einsVor(); + dreheLinks(); + einsVor(); + einsVor(); + dreheLinks(); + einsVor(); + einsVor(); + dreheLinks(); + einsVor(); + einsVor(); + } + + /*# + * Aufgabe 4: Drehe um + */ + public void dreheUm() + { + // Hier kommen die Befehl für eine 180° Drehung hin + } + + /*# + * Aufgabe 5: Sammle Schrauben + */ + public void sammle3() + { + einsVor(); + aufnehmen(); + einsVor(); + // Hier ergänzen + } + /*# + * Aufgabe 6: Haken schlagen + * Hier ist Platz fuer deine erste eigens geschriebene Methode! + */ + // Schau dir die Methoden oben an und gehe analog vor: + + /*# + * Aufgabe 7: Vier Dinge sammeln + */ + + + /*# + * Einsatz 2: Bitte den Namen "einsatz2" nicht aendern! + */ + public void einsatz2() { + // Hier kommte der Code für den ersten echten Einsatz hin: + } +} diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB3.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB3.java new file mode 100644 index 0000000..c62140b --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB3.java @@ -0,0 +1,64 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +public class AB3 extends Roboter +{ + + /*# + * Aufgabe 1: Feuer loeschen + */ + public void loesche() { + einsVor(); + aufnehmen(); + // Hier fehlt noch was: + } + + /*# + * Aufgaben 3 & 4: Vor bis zum Feuer (wo auch immer das ist) + */ + public void vorBisFeuer() + { + while(!istVorne("Feuer")) { + einsVor(); + } + } + + /*# + * Aufgabe 5: Feuersbrunst loeschen + */ + // Hier kommt deine Methode loescheReihe() hin: + + /*# + * Aufgabe 6: Teste Reichweite eines Feuerloeschers + */ + // Hier kommt die Methode testeReichweite() hin: + + + /*# + * Aufgabe 7: Feuerloescher einsammeln + */ + public void sammleLoescher() + { + // Hier bitte deinen Quelltext einfügen + } + + /*# + * Hilfsmethode fuer Aufgabe 8 + */ + public void laufeBisWand() { + // Hier bitte deinen Quelltext einfügen + } + + /*# + * Aufgabe 8: Homerun + */ + public void laufeBisSackgasse() { + // Hier bitte deinen Quelltext einfügen + } + + /*# + * Einsatz 3: Bitte den Namen nicht aendern! + */ + public void einsatz3() { + // Hier bitte deinen Quelltext einfügen + } +} \ No newline at end of file diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB4.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB4.java new file mode 100644 index 0000000..b8eee0c --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB4.java @@ -0,0 +1,78 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +public class AB4 extends Roboter +{ + /*# + * Aufgabe 1: Spur invertieren + */ + /** + * Der Roboter tauscht aus. Wo eine Schraube liegt, hebt er sie auf. + * Wo keine liegt, legt er eine ab, wenn er noch Schrauben + * in seinem Vorrat hat. + */ + public void tausche() { + if (istAufGegenstand("Schraube")) { + aufnehmen(); + } + else { + ablegen("Schraube"); + } + } + + /** + * Der Roboter macht mehrere Dinge. Beschreibe in diesem Kommentar: + * + */ + public void tauscheUndVor() { + tausche(); + if (istVorneFrei()) { + einsVor(); + } + // else ist nicht noetig, weil in dem Fall nichts gemacht wird! + } + + /*# + * Aufgabe 2: Tausche die Schraubenreihe bis zur Wand + */ + public void tauscheBisWand() { + + } + + /*# + * Aufgabe 3: Fleckenfrei + */ + // Hier kommt die Methode umgeheOelfleck() hin: + + /*# + * Aufgabe 4: Schluessel aufheben + */ + // Hier kommt die Methode sammleSchluessel() hin: + + /*# + * Aufgabe 5: Sesam oeffne dich + */ + // Hier kommt die Methode oeffneTuer() hin: + + + /*# + * Hilfsmethode fuer Aufgabe 9 + */ + public void laufeBisWand() { + while(istVorneFrei()) { + einsVor(); + } + } + + /*# + * Aufgabe 9: Labyrinth + */ + // Hier kommt die Methode labyrinth() hin: + + /*# + * Einsatz 4: Bitte den Namen nicht aendern! + */ + public void einsatz4() { + // Füge hier deinen Quelltext ein + } + +} diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB5.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB5.java new file mode 100644 index 0000000..881c023 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB5.java @@ -0,0 +1,81 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +public class AB5 extends Roboter +{ + /*# + * Aufgabe 1, 2, 3 und 10: Upgrade 1 - ein neuer Sensor wird erstellt + */ + public boolean istFassVorne() { + // Aufgabe 3a + + if (istVorne("Fass")) { + // Aufgabe 3b + + return true; + } else { + // Aufgabe 3b + + return false; + } + // Aufgabe 3c + + } + + /*# + * Aufgabe 4: Rueckspiegel + */ + public boolean istFassHinten() { + + if (istVorne("Fass")) { + + return true; + }else { + + return false; + } + } + + /*# + * Aufgabe 5: Out of Power + */ + public boolean istEnergieSchwach() { + // Hier fehlt noch einiges! + return true; + } + + /*# + * Aufgabe 6: Heavy Duty + */ + // Hier ist Platz fuer die Methode istSchwerBeladen(): + + /*# + * Aufgabe 7 und 11: Look Ahead - Upgrade 2 + */ + // Hier ist Platz fuer die Methode istVorFassFrei(): + + /*# + * Aufgabe 8: Aufraeumen + */ + // Hier ist Platz fuer die Methode schiebeFassBisWand(): + + /*# + * Aufgabe 9: Fuehrerschein + */ + // Hier ist Platz fuer die Methode istKreuzung(): + + public void geheBisKreuzung() { + + } + + /*# + * Aufgabe 12: Wie koennte man diese Methode nennen? + */ + // Hier ist Platz fuer die Methode ???(): + + /*# + * Einsatz 5: Bitte den Namen nicht aendern! + */ + public void einsatz5() { + + } +} \ No newline at end of file diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB6_AB7.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB6_AB7.java new file mode 100644 index 0000000..e27c990 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB6_AB7.java @@ -0,0 +1,110 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +public class AB6_AB7 extends Roboter +{ + // Eigenschaften eines AB6 - Objektvariablen (Attribute) werden deklariert: + private int schritte; + // AB6 - Aufgabe 8: Hier wird das Attribut drehungen deklariert: + + /*# + * Konstruktor eines AB6: Der Startzustand wird definiert + */ + public AB6_AB7() { + // Startzustand eines AB6 - Objektvariablen werden initialiaiert: + this.schritte = 0; + + // AB6 - Aufgabe 8: Initialisiere das Attribut drehungen hier: + + } + + /*# + * AB6 - Beispiel Zählen, + * AB7 - Aufgabe 4: Super + */ + public void einsVorMitZaehlen() { + // Das Attribut Schritte muss um eins erhoeht werden und dann die alte einsVor-Methode des AB6-Roboters aufgerufen werden: + this.schritte++; + einsVor(); + } + + /*# + * AB6 - Aufgabe 7: Schrittezaehler + * AB7 - Aufgabe 5: Brennstaebe zaehlen + */ + public void bisWandMitZaehlen() { + + } + + /*# + * AB6 - Aufgabe 8: Drehzaehler + * AB7 - Aufgabe 6: Standardmethoden überschreiben + */ + public void dreheRechtsMitZaehlen() { + + } + + public void dreheLinksMitZaehlen() { + + } + + /*# + * AB6 - Aufgabe 9: Eine get-Methode + */ + public int getSchritte() { + return 0; + } + + /*# + * AB6 - Aufgabe 10: Deine get-Methode + */ + // Hier kommt deine get-Methode fuer die Anzahl der Drehungen hin. + // Benenne sie sinnvoll: + + /*# + * Liefert die Anzahl der gezählten Brennstäbe zurück + * AB7 - Aufgabe 5: Brennstaebe zaehlen + */ + public int getBrennstaebe() { + return 0; + } + + /*# + * AB6 - Einsatz 6: + */ + public void einsatz6() { + + } + + /*# + * Weitere Methoden zum AB7: + */ + + /*# + * AB7 - Aufgabe 1: Kreuzungen zaehlen (aus AB3) + */ + + /*# + * AB7 - Aufgabe 7: Fass links + */ + // Hier kommt die Methode istFassLinks() hin: + + /*# + * AB7 - Aufgabe 8: Standardmethoden überschreiben (istWandVorne(), istWandLinks()) + */ + + /*# + * AB7 - Hilfsmethode für Einsatz 7: + */ + + public boolean istWandLinks() { + // Diese Methode muss so erweitert werden, dass sie auch Fässer auf der linken Seite erkennt. + return super.istWandLinks(); + } + + /*# + * AB7 - Einsatz 7: + */ + public void einsatz7(){ + + } +} \ No newline at end of file diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB8.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB8.java new file mode 100644 index 0000000..2346073 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB8.java @@ -0,0 +1,110 @@ +import greenfoot.*; + +public class AB8 extends AB5 +{ + private int zaehler1; + private double wert; + + public AB8() { + this.zaehler1 = 0; + this.wert = 0.0; + } + + /*# + * Aufgabe 1: Zwei Methoden, die fast das gleiche machen ... + */ + public int zaehleSchritteBisWand1() { + while(!istWandVorne()) { + this.zaehler1++; + einsVor(); + } + dreheUm(); + return this.zaehler1; + } + + public int zaehleSchritteBisWand2() { + int zaehler2; + zaehler2 = 0; + while(!istWandVorne()){ + zaehler2++; + einsVor(); + } + dreheUm(); + return zaehler2; + } + + /*# + * Aufgabe 5: Summe der x- und y-Koordinate + */ + public int gibPositionssumme() { + int x; + int y; + int summe; + x = getX(); + y = getY(); + summe = x + y; + return summe; + } + + /*# + * Aufgabe 6: Abstabdsberechnungen + */ + public int gibLaenge() { + // Loesche die Return-Zeile und beginne mit Aufgabe 6 + return 0; + } + + /*# + * Aufgabe 7: Flaeche + */ + public int gibRaumgroesse() { + // Loesche die Return-Zeile und beginne mit Aufgabe 7 + return 0; + } + + /*# + * Aufgabe 8: + */ + public boolean istFassRechts() { + // Loesche die Return-Zeile und beginne mit Aufgabe 8 + return false; + } + + public int gibLaengeFassReihe() { + // Loesche die Return-Zeile und mache weiter mit Aufgabe 8 + return 0; + } + + public int gibAnzahlFaesser() { + // Loesche die Return-Zeile und vervollstaendige Aufgabe 8 + return 0; + } + + /*# + * Aufgabe 10: Sammler + */ + public void sammeln() { + + } + + // Hier muss noch eine get-Methode hin: + + /*# + * Aufgabe 11: Finanzamt + */ + public double getMehrwertSteuer() { + // Loesche die Return-Zeile und vervollstaendige Aufgabe 11 + return 0.0; + } + + /*# + * Einsatz 8: Den Namen bitte nicht aendern! + */ + public int einsatz8() { + int anzahlGelb; + anzahlGelb = 0; + // Hier kommen deine Anweisungen hin: + + return anzahlGelb; + } +} diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB9.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB9.java new file mode 100644 index 0000000..1b4e719 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/AB9.java @@ -0,0 +1,63 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +public class AB9 extends Roboter +{ + + /** + * Hilfesmethode zum Holen des Aufzugs. + */ + public void holeAufzug() { + if(!istVorne("Schalter")) { + dreheUm(); + } + benutze("Schalter"); + } + + /*# + * Aufgabe 3: Drehe Roboter + */ + + public void dreheRoboter(int richtung) { + // Hier kommt dein Quelltext hin + } + + /*# + * Aufgabe 4: Laufe zu X-Position + */ + public void laufeZuXPos(int x) { + //Hier kommt dein Quelltext hin + } + + /*# + * Aufgabe 5: Fahre Aufzug + */ + public void fahreAufzug(int stockwerke, boolean abwaerts) { + // Hier kommt dein Quelltext hin + } + + /*# + * Aufgabe 6: Fahre ins Stockwerk + */ + + + /*# + * Aufgabe 7: Bombe sichern + */ + + + /*# + * Aufgabe 8: Sprengen + */ + + + /*# + * Aufgabe 9: Legen + * Hier darfst du mal ganz alleine eine Methode mit Parametern implementieren ;-) + */ + + + /*# + * Platz fuer weitere Methode(n), die du eventuell fuer den Einsatz 9 benoetigst: + */ + +} \ No newline at end of file diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Aufzugknopf.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Aufzugknopf.java new file mode 100644 index 0000000..96986c9 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Aufzugknopf.java @@ -0,0 +1,58 @@ +import greenfoot.*; +import java.util.List; + +/** + * Spezieller Schalter zum Rufen eins Aufzugs. + * + * @author Thomas Schaller + * @version 28.06.2017 V1.0 + */ +public class Aufzugknopf extends Schalter +{ + Gegenstand aufzug; + int stockwerk; + + /** + * Konstruktor Aufzugknopf + */ + public Aufzugknopf(World w) + { + super(w); + aufzug = null; + } + + /** + * Setzt den dazugehörigen Aufzug + * + * @param aufzug Ein Gegenstand vom Typ Aufzug + */ + public void setAufzug(Gegenstand aufzug, int stockwerk) + { + this.aufzug = aufzug; + this.stockwerk = stockwerk; + } + + public void rufeAufzug() { + List beiAufzug = aufzug.getWorld().getObjectsAt(aufzug.getX(), aufzug.getY(), Actor.class); + while(aufzug.getY() != stockwerk) { + int neuy =aufzug.getY()-(aufzug.getY()-stockwerk)/Math.abs(aufzug.getY()-stockwerk); + for(Actor a : beiAufzug) { + if(a != aufzug) + a.setLocation(aufzug.getX(), neuy); + } + aufzug.setLocation(aufzug.getX(), neuy); + Greenfoot.delay(1); + } + } + + /** Schaltet den Schalter um, d.h. von on auf off oder umgekehrt + */ + public void umschalten() { + anschalten(); + Greenfoot.delay(1); + rufeAufzug(); + ausschalten(); + Greenfoot.delay(1); + } + +} diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/EinsatzLeiter.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/EinsatzLeiter.java new file mode 100644 index 0000000..fc3e4be --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/EinsatzLeiter.java @@ -0,0 +1,71 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.util.List; + +public class EinsatzLeiter extends Actor +{ + // Hier werden alle Roboter aufgelistet, denen der Einsatzleiter Befehle erteilen kann: + AB9 legeRoboter; //Legeroboter + AB9 sprengRoboter1; //Sprengroboter 1 + AB9 sprengRoboter2; //Sprengroboter 2 + AB9 aufzugRoboter; //Aufzugroboter + + // Roboter für Einsatz 10 + AB10 roboter1; + AB10 roboter2; + AB10 roboter3; + + /*# + * Aufgabe 10: Anweisung 1 + * Hier werden Methoden am sprengRoboter1 aufgerufen. + * Tipp: Schreibe sprengRoboter1. und druecke STRG+Leertaste --> Schau mal, welche Methoden du alle zur Verfuegung hast ... + */ + public void holeBombeUndSprenge (int xBombe, int yBombe, int xPos, int yPos){ + // Hinweis: + // Der sprengRoboter1 bekommt den Befehl holeBombeUndKehreZurueck(bx, by), wenn du vorher beim AB9-Roboter programmiert hast. + // (bx|by) sind die Koordinaten der Bombe --> das muss dann der Methodenaufrufer eingeben (also du spaeter, + // wenn du am EinsatzLeiter diese Methode aufrufst): sprengRoboter1.holeBombeUndKehreZurueck(bx, by); + // Gib dem sprengRoboter1 den Befehl zum Sprengen an der Position (sx,sy): + // Kombiniere nun die richtigen Methodenaufrufe beim Aufzug- und Sprengroboter. + } + + + + /*# + * Ab hier kannst du Hilfs-Methoden fuer den Einsatz 9+10 implementieren: + */ + + /*# + * Einsatz 9: + */ + public void einsatz9() { + // Hier kommt dein Quelltext hin + } + + /*# + * Einsatz 10: + */ + public void einsatz10() { + // Hier kommt dein Quelltext hin + } + + + /*# + * ------------------------------------------------------------------- + * Bitte so lassen - diese Methode wird nur von euren Lehrer verwendet + */ + public void nehmeKontaktAuf() { + List l9 = ((RoboterWelt)getWorld()).getObjects(AB9.class); + if (l9.size()>0) { + aufzugRoboter = l9.get(0); + sprengRoboter1 = l9.get(1); + sprengRoboter2 = l9.get(2); + legeRoboter = l9.get(3); + } + List l10 = ((RoboterWelt)getWorld()).getObjects(AB10.class); + if (l10.size()>0) { + roboter1 = l10.get(0); + roboter2 = l10.get(1); + roboter3 = l10.get(2); + } + } +} diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Gegenstand.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Gegenstand.java new file mode 100644 index 0000000..600fab0 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Gegenstand.java @@ -0,0 +1,145 @@ +import greenfoot.*; +import java.util.*; +import javax.swing.JOptionPane; + +/** Die Klasse Gegenstand fasst alle in der Welt liegenden Actors zusammen, + * die bewegt werden können. + */ +public class Gegenstand extends Actor +{ + private int typ; + private static String[] typen = {"Akku","Schraube","Brennstab","Schluessel","Oelfleck","Portal","Strom","Feuer","Feuerloescher","Fass","Atommuell","Bombe", "Kontaktplatte","Aufzug","Diamant"}; + private boolean[] moveable = {true, true, true, true, false, false, false, false, true, false, false, true, false, false, true}; + private int[] schaden = {0, 0, 0, 0, 20, 0, 50, 40, 0, 0, 0, 0, 0, 0, 0}; + private int[] lebensdauer = {1, 1, 1, 1, 0, 1000, 0, 0, 5, 1000, 1000,1, 1000, 1000,1000}; + private Schalter schalter = null; + + /** erzeugt einen neuen Gegenstand vom angegeben Typ + * @param name Typ des Gegenstands ("Akku","Schraube","Brennstab","Schluessel","Oelfleck","Portal","Strom","Feuer","Feuerloescher","Fass","Atommuell","Bombe", "Kontaktplatte", "Aufzug", "Diamant") + */ + public Gegenstand(String name) { + super(); + this.typ = -1; + + for(int i = 0; i < typen.length; i++) { + if (name.equals(typen[i])) { + this.typ = i; + } + } + if(this.typ == -1) { + JOptionPane.showMessageDialog(null, "Ich kenne kein(e) "+name+". Daher erzeuge ich einen Akku.", "Meldung!", + JOptionPane.INFORMATION_MESSAGE); + this.typ = 0; + } + this.setImage("images/"+typen[typ]+".png"); + } + + /** erzeugt einen Standardgegenstand (Akku) + */ + public Gegenstand() { + super(); + this.typ = 0; + this.setImage("images/Akku.png"); + } + + /** untersucht, ob name eine korrekte Bezeichnug für einen Gegenstand ist + * @return erg true, wenn name korrekt ist + */ + public static boolean istGegenstand(String name) { + boolean erg = false; + for(int i = 0; i < typen.length; i++) { + if (name.equals(typen[i])) { + erg = true; + } + } + return erg; + } + + /** liefert den Typ des Gegenstands + * @return Typ ("Akku","Schraube","Brennstab","Schluessel","Oelfleck","Portal","Strom","Feuer","Feuerloescher","Fass","Atommuell","Bombe", "Kontaktplatte", "Aufzug", "Diamant") + */ + public String getName() { + return this.typen[typ]; + } + + /** liefert, ob der Gegenstand vom Roboter aufgenommen werden kann + * @return true, wenn der Gegenstand weggetragen werden darf. + */ + public boolean istBeweglich() { + return this.moveable[typ]; + } + + /** liefert den Schaden an der Energieversorgung, wenn der Roboter mit dem Gegenstand + * auf einem Feld ist. + * @return abgezogen Energiepunkte + */ + public int getSchaden() { + return this.schaden[typ]; + } + + /** liefert die Anzahl der Einsätze bevor der Gegenstand verbraucht ist + * @return z.B. 1 für Akku, 5 für Feuerlöscher + */ + public int getLebensdauer() { + return this.lebensdauer[typ]; + } + + /** liefert einen Schalter, der mit diesem Gegenstand verbunden ist (z.B. bei Kontaktplatten) + * @return Schalterobjekt + */ + public Schalter getSchalter() { + return this.schalter; + } + + /** Verbindet diese Objekt mit einem Schalter (z.B. bei Kontaktplatten) + * @param s Schalterobjekt + */ + public void setSchalter(Schalter s) { + this.schalter = s; + } + + /** Benutzt das Objekt und setzt dadurch die Lebensdauer herunter + */ + public void benutze() { + this.lebensdauer[typ]--; + } + + // Systembedingte Routinen + /** + * Wird aufgerufen, wenn der Roboter in die Welt gesetzt wird; + * erweitert nach Vorschlag P.Henriksen 29.6.08 + */ + protected void addedToWorld(World world) { + // Roboter kann nicht auf eine Wand oder einen anderem Roboter gesetzt werden + Actor wand = getOneObjectAtOffset(0, 0, Wand.class); + if (wand != null) { + world.removeObject(this); + } + } + + /** + * setLocation(x,y) fuer Roboter wird ueberschrieben, um nicht auf Wand oder + * anderen Roboter ziehen zu koennen! + * -- setzt den Roboter auf eine Kachel, deren Spalte x sowie Reihe y du + * hier vorgibst. Die Nummerierung beginnt jeweils bei 0 !!) + */ + public void setLocation(int x, int y) { + List wand = getWorld().getObjectsAt(x, y, Wand.class); + List g = getWorld().getObjectsAt(x,y, Gegenstand.class); + + if (wand.isEmpty() && g.isEmpty()) { + super.setLocation(x, y); + } + } + /* setLocation(x,y) und setRotation(x) koennen nicht verborgen werden, + * weil sie schon in der Oberklasse Actor public sind. + */ + + /** + * setRotation(x) fuer Roboter wird verhindert! + * Es ist unnoetig, da Roboter sich nur in vier Richtungen drehen koennen! + */ + public void setRotation(int x) { + // nichts machen!! + } +} \ No newline at end of file diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Message.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Message.java new file mode 100644 index 0000000..631ca58 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Message.java @@ -0,0 +1,23 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo) + +/** + * Ergänzen Sie hier eine Beschreibung für die Klasse Message. + * + * @author (Ihr Name) + * @version (eine Versionsnummer oder ein Datum) + */ +public class Message extends Actor +{ + /** + * Act - tut, was auch immer Message tun will. Diese Methode wird aufgerufen, + * sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden. + */ + public Message (String text) { + GreenfootImage t = new GreenfootImage(text,30, new Color(255,255,255),new Color(200,100,100,0)); + GreenfootImage mitRand = new GreenfootImage(t.getWidth()+60, t.getHeight()+30); + mitRand.setColor(new Color(150,50,50,220)); + mitRand.fillRect(0,0, mitRand.getWidth(), mitRand.getHeight()); + mitRand.drawImage(t, 30, 15); + setImage(mitRand); + } +} \ No newline at end of file diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/ReadWrite.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/ReadWrite.java new file mode 100644 index 0000000..6711b04 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/ReadWrite.java @@ -0,0 +1,196 @@ +import java.io.*; +import java.util.*; + +/** + * Die Klasse ReadWrite erstellt geheimCodes und steuert damit den Ablauf + * und die Reihenfolge der Einsaetze + */ +class ReadWrite +{ + private String dateiName; + + /** Erzeugt neues Dateizugriffsobjekt + */ + public ReadWrite () { + dateiName = "secret"; + } + + /** Schreibt einen neuen Levelstand in die Datei, wenn dieser höher als der bisherige ist + * (dies verhindert ein Zurückfallen auf ein niedrigeres Level, wenn ein Einsatz erneut ausgeführt wird.) + * @param level neuer Level + */ + public void writeLevel(int level) { + writeLevel(level,false); + } + + /** Schreibt einen neuen Levelstand in die Datei. + * @param level neuer Level + * @param down darf der neue Level auch niedriger als der alte sein (true = gezieltes Zurücksetzen) + */ + public void writeLevel(int level, boolean down) { + if (level > getLevel() || down) { //Damit nicht wieder in einen kleineren Level zurückgefallen wird + Random r = new Random(); + Scanner s = new Scanner(this.read()); + long z1 = s.nextLong(); + long z2 = r.nextInt()+362734617; + z2 = z2 - (z2 % 131 - z1% 131); + while (z2 % 31 != level) { + z2 += 131; + } + this.append(""+z2); + } + } + + /** Erzeugt eine neue Secret-Datei mit Level 1 + */ + public void init() { + Random r = new Random(); + long z1 = r.nextInt()+212312312; + long z2 = r.nextInt()+362734617; + z2 = z2 - (z2 % 131 - z1% 131); + while (z2 % 31 != 1) { + z2 += 131; + } + write(""+z1); + append(""+z2); + } + + /** Liefert den zuletzt gespeicherten Level + * @return Level + */ + public int getLevel() { + int level = 1; + String z = read(); + if (z.equals("")) { + init(); + } + try { + Scanner s = new Scanner(read()); + long z1 = s.nextLong(); + s = new Scanner(readLastLine()); + long z2 = s.nextLong(); + + if (z1 % 131 != z2 %131) { + init(); + level = 1; + } else { + level = (int) (z2 % 31); + } + } catch(Exception e) { + level = -1; + } + return level; + } + + /** Liefert den höchsten bisher gespeicherten Level + * @return maximal erreichter Level + */ + public int getMaxLevel() { + int level = 1; + String z = read(); + if (z.equals("")) { + init(); + return 1; + } + + try { + FileReader fr = new FileReader(dateiName); + BufferedReader br = new BufferedReader(fr); + String zeile = br.readLine(); + Scanner s = new Scanner(zeile); + long z1 = s.nextLong(); + while(br.ready()) { + zeile = br.readLine(); + s = new Scanner(zeile); + long z2 = s.nextLong(); + + if (z1 % 131 != z2 %131) { + init(); + level = 1; + break; + } else { + if (level < (int) (z2 % 31)) { + level = (int) (z2 % 31); + } + } + } + br.close(); + return level; + } + catch (IOException e) { + return level; + } + + } + + /** Liest die erste Zeile aus der Secretdatei + * @return erste Zeile + */ + public String read() + { + try { + FileReader fr = new FileReader(dateiName); + BufferedReader br = new BufferedReader(fr); + String zeile = br.readLine(); + br.close(); + return zeile; + } + catch (IOException e) { + return ""; + } + } + + /** Liest die letzte Zeile aus der Secretdatei + * @return letzte Zeile + */ + public String readLastLine() + { + try { + FileReader fr = new FileReader(dateiName); + BufferedReader br = new BufferedReader(fr); + String zeile = br.readLine(); + while(br.ready()) zeile = br.readLine(); + br.close(); + return zeile; + } + catch (IOException e) { + return ""; + } + } + + /** Schreibt eine neue Datei mit einer Zeile + * @param text 1. Zeile der Datei + */ + public boolean write(String text) + { + try { + FileWriter fw = new FileWriter(dateiName); + BufferedWriter bw = new BufferedWriter(fw); + bw.write(text); + bw.newLine(); + bw.close(); + return true; + } + catch (IOException e) { + return false; + } + } + + /** Hängt eine Zeile an die Secret-Datei an + * @param text anzuhängende Zeile + */ + public boolean append(String text) + { + try { + FileWriter fw = new FileWriter(dateiName, true); + BufferedWriter bw = new BufferedWriter(fw); + bw.write(text); + bw.newLine(); + bw.close(); + return true; + } + catch (IOException e) { + return false; + } + } +} \ No newline at end of file diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Roboter.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Roboter.java new file mode 100644 index 0000000..1fb8503 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Roboter.java @@ -0,0 +1,801 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.util.*; +import javax.swing.JOptionPane; + +/** + * Diese Klasse ist die Oberklasse fuer die Roboter "Robita", "Robson" und "Robby". + * Programme sollen nur in den Unterklassen + * implementiert werden, da diese Klasse fuer Java-Beginner sehr komplex ist. + * Ein Roboter kann sich felderweise in die vier Himmelsrichtungen im Szenario bewegen. + * Ueber Sensoren kann er Informationen ueber seine Umwelt erhalten. + */ + +public class Roboter extends Actor +{ + private int energie; //Energie in Prozent + private ArrayList inventar; + private GreenfootImage originalImage; + + /** + * Ein Objekt der Klasse Roboter wird exempliert bzw. instanziert. + */ + public Roboter() + { + inventar = new ArrayList(); + energie=100; + originalImage = new GreenfootImage(this.getImage()); + zeichneRobotImage(); + } + + /** + * Gibt die Anzahl der Gegenstaende, die Roboter traegt, zurueck. + * @return Anzahl der Gegenstaende + */ + public int getAnzahl() { + return inventar.size(); + } + + /** + * Gibt die Anzahl der Gegenstaende einer bestimmten Art zurueck. + * @param name Art der Gegenstands (z.B. "Schluessel") + * @return Anzahl der Gegenstaende + */ + public int getAnzahl(String name) { + int anz = 0; + if (Gegenstand.istGegenstand(name)) { + for (Gegenstand g : inventar) { + if (g.getName().equals(name)) { + anz++; + } + } + } else + { + melde(""+name+" ist keine gültige Bezeichnung für einen Gegenstand", true); + } + return anz; + } + + /** + * Gibt die Restenergie des Roboters zurück + * @return Energiereserve (0-100) + */ + public int getEnergie() { + return energie; + } + + /** + * Reduziert die Restenergie des Roboters um den angegebenen Wert. + * @param verlust Anzahl der verbrauchten Energiepunkte + */ + public void verbraucheEnergie(int verlust) { + energie = energie-verlust; + if (energie < 0) energie=0; + zeichneRobotImage(); + } + + /** + * Gibt zurueck, ob die Energie des Roboters verbraucht ist. + * @return true, wenn Restenergie =0, sonst false + */ + public boolean istEnergieLeer() { + if (getEnergie()==0) return true; + else return false; + } + + /** + * Gibt die x-Koordinate zurück, wenn der Roboter einen Schritt nach vorne macht. + * @return x-Koordinate + */ + private int xVor() { + switch(this.getRotation()) + { + case 0 : return getX()+1; + case 180 : return getX()-1; + } + return getX(); + } + + /** + * Gibt die y-Koordinate zurück, wenn der Roboter einen Schritt nach vorne macht. + * @return y-Koordinate + */ + + private int yVor() { + switch(this.getRotation()) + { + case 90 : return getY()+1; + case 270 : return getY()-1; + } + return getY(); + } + + /** + * Der Roboter geht einen Schritt in die Pfeilrichtung. + * Das macht er nur, wenn sich keine Wand vor ihm befindet oder + * er nicht an der Grenze der Welt zur Wand blickt. + */ + public void einsVor() + { + int possible=0; + if (!this.istVorneFrei()) possible = 1; + if (energie < 1) possible = 2; + if (istVorne("Fass") || istVorne("Atommuell")) { + if(this.getWorld().getObjectsAt(getX()+(xVor()-getX())*2,getY()+(yVor()-getY())*2, null).size() > 0) { + possible = 1; + } else { + energie -= 5; + List actors = this.getWorld().getObjectsAt(xVor(), yVor(), null); + Gegenstand fass = (Gegenstand) (actors.get(0)); + fass.setLocation(getX()+(xVor()-getX())*2,getY()+(yVor()-getY())*2); + } + } + int[][] map = ((RoboterWelt) getWorld()).getMap(); + if ((map[getY()][getX()] == 30 || map[getY()][getX()] == 7) && yVor() != getY() && !istAufGegenstand("Aufzug")) // Aufzug + { + possible = 3; + } + + if (possible==0) + { + Schalter s=null; boolean on=false; + if (istAufGegenstand("Kontaktplatte")) { + s = gibGegenstandUnterRoboter().getSchalter(); + on = true; + } + energie--; + this.setLocation(xVor(), yVor()); + if (istAufGegenstand("Portal")) { + if (this instanceof AB1) { + if (this.getAnzahl("Schraube")>=2) { + ReadWrite secret = new ReadWrite(); + secret.writeLevel(2); + Greenfoot.delay(1); + melde("Sehr gut. Level 1 abgeschlossen. Gehe zu Level 2.",false); + Greenfoot.setWorld(new RoboterWelt()); + } + else { + melde("Du musst erst noch mind. 2 Schrauben einsammeln, um das AB 1 abzuschließen.",false); + } // end of if-else + + } + energie = 100; + } + if (istAufGegenstand("Kontaktplatte") ) { + s = gibGegenstandUnterRoboter().getSchalter(); + on = false; + } + if (s != null) { + if (on) s.anschalten(); else s.ausschalten(); + } + if (istAufGegenstand()) { + if (energie > gibGegenstandUnterRoboter().getSchaden()) energie -= gibGegenstandUnterRoboter().getSchaden(); + else energie = 0; + } + zeichneRobotImage(); + Greenfoot.delay(1); + ((RoboterWelt) getWorld()).schwerkraftAnwenden(); + } + else + { + switch(possible) { + case 1: + warne("Ich kann keinen Schritt machen!\nEin Hindernis ist im Weg!",this); break; + case 2: + warne("Ich kann keinen Schritt machen!\nIch habe keine Energie mehr!",this); break; + case 3: + warne("Ich kann keinen Schritt machen!\nIn einem Aufzug braucht man die Plattform,\n um hoch oder runter zu fahren.",this); break; + } + } + } + + /** + * Der Roboter dreht sich um 90 Grad nach rechts (aus der Sicht des Roboters). + */ + public void dreheRechts() + { + setRotation((getRotation()+90)%360); + zeichneRobotImage(); + Greenfoot.delay(1); + } + + /** + * Der Roboter dreht sich um 180 Grad nach rechts (aus der Sicht des Roboters). + */ + public void dreheUm() + { + dreheRechts(); + dreheRechts(); + } + + /** + * Der Roboter dreht sich um 90 Grad nach links (aus der Sicht des Roboters). + */ + public void dreheLinks() + { + setRotation((getRotation()+270)%360); + zeichneRobotImage(); + Greenfoot.delay(1); + } + + /** + * Gibt das erste Gegenstandsobjekt zurück, das der angegebenen Art entspricht. + * @param name Art des gesuchten Gegenstands + * @return Gegenstandsobjekt + */ + private Gegenstand getInventar(String name) { + if (Gegenstand.istGegenstand(name)) { + for(Gegenstand g: inventar) { + if (g.getName().equals(name)) { + return g; + } + } + } + else { + melde(""+name+" ist kein gültiger Gegenstand.",true); + } + return null; + } + + /** + * Gibt zurueck, ob der Roboter mindestens einen Gegenstand der angegeben Art besitzt. + * @param name Art des gesuchten Gegenstands + * @return true, wenn der Roboter einen derartigen Gegenstand hat, sonst false + */ + public boolean hatGegenstand(String name) { + if (Gegenstand.istGegenstand(name)) { + for(Gegenstand g: inventar) { + if (g.getName().equals(name)) { + return true; + } + } + } + else { + melde(""+name+" ist kein gültiger Gegenstand.",true); + } + return false; + } + + /** + * Gibt dem Roboter eine bestimmte Anzahl von Gegenstaenden einer Art + * @param name Art des Gegenstands + * @anzahl gewuenschte Anzahl + */ + public void setAnzahlVonGegenstand(String name, int anzahl) { + if (Gegenstand.istGegenstand(name)) { + for (int i=0; i0) { + Gegenstand g = this.getInventar(name); + g.benutze(); + if (g.getLebensdauer() == 0) inventar.remove(g); + if (name.equals("Akku")) { + energie += 40; + if (energie >100) energie = 100; + } + if (name.equals("Feuerloescher")) { + if (istVorne("Feuer")) { + List actors = this.getWorld().getObjectsAt(xVor(), yVor(), Gegenstand.class); + this.getWorld().removeObject((Actor) (actors.get(0))); + } + } + if (name.equals("Schluessel")) { + if (istVorne("Schloss")) { + // g.benutze(); // Dirk: ist doch schon vorher aufgerufen worden - oder? + if (g.getLebensdauer() == 0) inventar.remove(g); + List actors = this.getWorld().getObjectsAt(xVor(), yVor(), Wand.class); + Wand w = (Wand) (actors.get(0)); + if (w.getSchalter() != null) w.getSchalter().umschalten(); + } else { + inventar.add(new Gegenstand("Schluessel")); + } + } + if (name.equals("Bombe")) { + Schalter s1 = new Schalter(getWorld()); + int[][] level1 = {{ -1, -1, -1 , -1, -1},{ -1, -1, -1, -1, -1},{ -1, -1, 40, -1, -1},{ -1, -1, -1, -1, -1},{ -1, -1, -1 ,-1, -1}}; + int[][] level2 = {{ -1,-1, -1 ,-1, -1},{ -1, 6, 40 , 6, -1},{ -1, 6, 40 , 6, -1},{-1, 6, 40 , 6, -1},{ -1, -1, -1 ,-1, -1}}; + int[][] level3 = {{ -1, -1, -1 ,-1, -1},{ -1, 40, 40 , 40, -1},{ -1, 40, 6 , 40, -1},{ -1, 40, 40 , 40, -1},{ -1, -1, -1 ,-1, -1}}; + int[][] level4 = {{ -1, -1, -1 ,-1, -1},{ -1, 6, 6 , 6, -1},{ -1, 6, 6 , 6, -1},{ -1, 6, 6 , 6, -1},{ -1, -1, -1 ,-1, -1}}; + int platzFuerAkku = Greenfoot.getRandomNumber(9); + int myrotation = getRotation(); + /* switch (platzFuerAkku) { + case 0: level4[1][1]=38; break; + case 1: level4[1][2]=38; break; + case 2: level4[1][3]=38; break; + case 3: level4[2][1]=38; break; + case 4: level4[2][2]=38; break; + case 5: level4[2][3]=38; break; + case 6: level4[3][1]=38; break; + case 7: level4[3][2]=38; break; + case 8: level4[3][3]=38; break; + } + for (int i=0; i<2; i++){ + int platzFuerKontaktplatte=0; + do { + platzFuerKontaktplatte = Greenfoot.getRandomNumber(9); + } while(platzFuerKontaktplatte == platzFuerAkku); + switch (platzFuerKontaktplatte) { + case 0: level4[1][1]=31; break; + case 1: level4[1][2]=31; break; + case 2: level4[1][3]=31; break; + case 3: level4[2][1]=31; break; + case 4: level4[2][2]=31; break; + case 5: level4[2][3]=31; break; + case 6: level4[3][1]=31; break; + case 7: level4[3][2]=31; break; + case 8: level4[3][3]=31; break; + } + }*/ + int x = getX()-2; + int y = getY()-2; + s1.setPosition(x,y, level2, level1); + s1.ausschalten(); + energie = energie - 10; + if (energie < 0) energie = 0; + zeichneRobotImage(); + // getWorld().removeObject(this); + + Greenfoot.delay(2); + s1.anschalten(); + setRotation((getRotation()+180)%360); + if(istVorneFrei()) this.setLocation(xVor(), yVor()); + setRotation(myrotation); + energie = energie - 10; + if (energie < 0) energie = 0; + zeichneRobotImage(); + Greenfoot.delay(2); + + s1.setPosition(x,y, level4, level3); + s1.ausschalten(); + setRotation((getRotation()+180)%360); + if(istVorneFrei()) this.setLocation(xVor(), yVor()); + setRotation(myrotation); + Greenfoot.delay(2); + s1.anschalten(); + + } + zeichneRobotImage(); + Greenfoot.delay(1); + ((RoboterWelt) this.getWorld()).schwerkraftAnwenden(); + } else { + warne("Du hast gar kein(e) "+name+",\n den/die du benutzen könntest.", this); + } + } + } + + /** + * Liefert genau dann true, wenn auf der Kachel, auf der sich der + * aufgerufene Roboter gerade befindet, ein beliebiger Gegenstand befindet. + * @return true, wenn der Roboter auf einem Gegenstand steht, sonst false + */ + public boolean istAufGegenstand() { + List g = getWorld().getObjectsAt(getX(), getY(), Gegenstand.class); + if (g.size() > 0) { + return true; + } else { + return false; + } + } + + /** + * Liefert genau dann true, wenn auf der Kachel, auf der sich der + * aufgerufene Roboter gerade befindet, ein Gegenstand mit dem angegebnen Namen befindet. + * @param name Einer der Gegenstaende ("Schluessel", "Schalter", "Bombe", "Feuerloescher", "Brennstab", "Akku", "Schraube", "Kontaktplatte", "Oelfleck", "Portal", "Strom", "Feuer", "Aufzug") + * @return true, wenn der Roboter auf einem Gegenstand steht, sonst false + */ + public boolean istAufGegenstand(String name) { + if (!Gegenstand.istGegenstand(name)) { + melde(""+name+" ist kein gültiger Gegenstand.",true); + return false; + } + List g = getWorld().getObjectsAt(getX(), getY(), Gegenstand.class); + if (g.size() > 0) { + return ((Gegenstand) (g.get(0))).getName().equals(name); + } else { + return false; + } + } + + /** + * Gibt den Gegenstand zurueck, auf dem sich ein Roboter befindet + * @return Gegenstand (entweder "Schluessel", "Schalter", "Bombe", "Feuerloescher", "Akku", "Schraube", "Kontaktplatte", "Oelfleck", "Portal", "Strom", "Feuer", "Aufzug") + */ + private Gegenstand gibGegenstandUnterRoboter() { + List g = getWorld().getObjectsAt(getX(), getY(), Gegenstand.class); + if (g.size() > 0) { + return (Gegenstand) (g.get(0)); + } else { + return null; + } + } + + /** + * Liefert genau dann true, wenn der aufgerufene Roboter keinen Gegenstand bei sich hat. + * @return true, wenn der Roboter keinen Gegenstand mit sich traegt, sonst false + */ + public boolean istInventarLeer() { + return inventar.size() == 0; + } + + /** + * Der Roboter legt einen Gegenstand aus seinem Vorrat auf dem Feld ab. + * @param name Einer der Gegenstaende ("Schluessel", "Schalter", "Bombe", "Brennstab", "Feuerloescher", "Akku", "Schraube", "Kontaktplatte", "Oelfleck", "Portal", "Strom", "Feuer") + */ + public void ablegen(String name) + { + if (!Gegenstand.istGegenstand(name)) { + melde(""+name+" ist kein gültiger Gegenstand.",true); + return; + } + if (getAnzahl(name)>0) { + if (!istAufGegenstand() || istAufGegenstand("Oelfleck")|| istAufGegenstand("Kontaktplatte")) { // Dirk: Ablegen auf Kontaktplatte geaendert! + int aktuellesX = this.getX(); + int aktuellesY = this.getY(); + for(Gegenstand g: inventar) { + if (g.getName().equals(name)) { + inventar.remove(g); + this.getWorld().addObject(g, aktuellesX, aktuellesY); + zeichneRobotImage(); + break; + } + } + ((RoboterWelt) this.getWorld()).schwerkraftAnwenden(); + } + else warne("Hier liegt schon etwas oder\nman darf hier nichts ablegen!",this); + } + else warne("Ich habe kein(e) "+name+" zum Ablegen!",this); + } + + /** + * Der Roboter nimmt einen Gegenstand, der sich auf seinem Feld befindet in seinen Vorrat auf. + * Falls er nicht auf einem Gegenstand steht, gibt er eine Warnung aus. + * Roboter haben nur eine begrenzte Kapazitaet. Sie koennen maximal 99 Gegenstaende mit sich tragen. + * Falls er einen 100. Gegenstand aufnehmen moechte, wird auch eine entsprechende Warnung ausgegeben. + */ + public void aufnehmen () + { + if (getAnzahl()<=99) // von Dirk von < auf <= veraendert! + { + Gegenstand g = (Gegenstand)this.getOneObjectAtOffset(0, 0, Gegenstand.class); + if(g != null) + { + if (g.istBeweglich()) { + this.getWorld().removeObject(g); + inventar.add(g); + zeichneRobotImage(); + ((RoboterWelt) getWorld()).schwerkraftAnwenden(); + + } else { + warne("Ein(e) "+g.getName()+" kann man nicht aufheben", this); + } + } + else + { + warne("Hier ist nichts zum Aufheben!",this); + } + } + else warne("Hab keinen Platz für weitere Gegenstände!",this); + } + + /** + * Diese Methode setzt einen Roboter vor den Roboter, der diese Methode aufruft. + * Ist vor ihm kein Platz, wird eine Warnung ausgegeben. + * @param r der Hilfsroboter, der eingesetzt werden soll + */ + public void gehilfeEinsetzen(Roboter r) { + if (istVorneFrei() && getWorld().getObjectsAt(xVor(), yVor(), Roboter.class).isEmpty()) { + this.getWorld().addObject(r, xVor(), yVor()); + } else { + warne("Vor dir ist kein Platz für einen Gehilfen!",this); + } + } + + /** + * Der Sensor ueberprueft, ob vor dem Roboter Hindernisse stehen oder nicht + * @return true, wenn vor dem Roboter frei ist, sonst false + */ + public boolean istVorneFrei() + { + return !istWandVorne() && (this.getWorld().getObjectsAt(xVor(),yVor(), Roboter.class).size() == 0); + } + + /** + * Liefert genau dann true, wenn sich vor dem Roboter ein Gegenstand mit dem angegebnen Namen befindet. + * @param name Einer der Gegenstaende ("Schluessel", "Schalter", "Schloss", "Bombe", "Feuerloescher", "Akku", "Schraube", "Kontaktplatte", "Oelfleck", "Portal", "Strom", "Feuer", "Aufzug") + * @return true, wenn der Roboter vor dem Gegenstand mit dem Namen name steht, sonst false + */ + public boolean istVorne(String name) { + if (!Gegenstand.istGegenstand(name) && !Wand.istWandtyp(name)) { + melde(name+" ist keine gültige Bezeichnung", true); + return false; + } + List actors = this.getWorld().getObjectsAt(xVor(), yVor(), null); + boolean found = false; + for(int i = 0; i < actors.size(); i++) { + Object o = actors.get(i); + if (o instanceof Gegenstand) { + if (((Gegenstand) o).getName().equals(name)) { + found = true; + break; + } + } + if (o instanceof Wand) { + if (((Wand) o).getName().equals(name)) { + found = true; + break; + } + } + } + return found; + } + + /** + * Der Sensor ueberprueft, ob sich in Laufrichtung des Roboters eine Wand befindet. + * @return true, wenn der Roboter vor einer Wand steht, sonst false + */ + public boolean istWandVorne() + { + return (this.getWorld().getObjectsAt(xVor(),yVor(), Wand.class).size() > 0); + } + + /** + * Der Sensor ueberprueft, ob sich rechts der Laufrichtung eine Wand befindet. + * @return true, wenn sich rechts von dem Roboter eine Wand befindet, sonst false + */ + public boolean istWandRechts() + { + int lRichtung = getRotation(); + + if (lRichtung == 0 && this.getOneObjectAtOffset(0, 1, Wand.class)!= null) + { + return true; + } + + if (lRichtung == 90 && this.getOneObjectAtOffset(-1, 0, Wand.class)!= null) + { + return true; + } + + if (lRichtung == 180 && this.getOneObjectAtOffset(0, -1, Wand.class)!= null) + { + return true; + } + + if (lRichtung == 270 && this.getOneObjectAtOffset(1, 0, Wand.class)!= null) + { + return true; + } + + return false; + } + + /** + * Der Sensor ueberprueft, ob sich links der Laufrichtung eine Wand befindet. + * @return true, wenn sich links von dem Roboter eine Wand befindet, sonst false + */ + public boolean istWandLinks() + { + int lRichtung = getRotation(); + + if (lRichtung == 0 && this.getOneObjectAtOffset(0, -1, Wand.class)!= null) + { + return true; + } + + if (lRichtung == 90 && this.getOneObjectAtOffset(1, 0, Wand.class)!= null) + { + return true; + } + + if (lRichtung == 180 && this.getOneObjectAtOffset(0, 1, Wand.class)!= null) + { + return true; + } + + if (lRichtung == 270 && this.getOneObjectAtOffset(-1, 0, Wand.class)!= null) + { + return true; + } + + return false; + } + + /** + * Eine private Methode, die dafuer sorgt, dass der "Aufdruck" auf dem Roboter (Anzahl der Gegenstaende), der Akkustandsbalken und + * der Richtungspfeil aktualisiert werden + */ + private void zeichneRobotImage() + { + final int x=17; + final int y=18; + final int breite = 14; + final int hoehe = 12; + this.setImage(new GreenfootImage(originalImage)); + this.getImage().setColor(Color.WHITE); + this.getImage().fillRect(x, y, breite, hoehe); + this.getImage().setColor(Color.BLACK); + this.getImage().drawRect(x, y, breite, hoehe); + this.getImage().setFont(new Font("Arial",false,false,10)); + String ziffern; + int anz = inventar.size(); + if (anz>=0 && anz<10) ziffern="0"+anz; + else if (anz>=100) ziffern=">>"; + else ziffern=""+anz; + this.getImage().drawString(ziffern, x+2, y+hoehe-2); + zeichneEnergie(); + + this.getImage().drawImage(new GreenfootImage("images/pfeil"+getRotation()+".png"), 40, 2); + this.getImage().rotate(-getRotation()); + } + + /** + * Zeichne / Aktualisiere die Energie (Akkustandsbalken), die der Roboter hat + */ + private void zeichneEnergie() + { + final int x=2; + final int y=1; + final int breite = 4; + final int hoehe = 46; + this.getImage().setColor(Color.GREEN); + this.getImage().fillRect(x, y, breite, hoehe); + int hoeheNeu = hoehe-(int)(Math.floor(hoehe*(energie/100.0))); + this.getImage().setColor(Color.RED); + this.getImage().fillRect(x, y, breite, hoeheNeu); + this.getImage().setColor(Color.BLACK); + this.getImage().drawRect(x, y, breite, hoehe); + this.getImage().drawRect(x, y, breite, hoehe/2); + } + + // Meldungen und Warnungen + /** + * Gibt den uebergebenen String in einer Dialogbox auf dem Bildschirm aus + * @param text Der Text, der angezeit werden soll + * @param istWichtig bei true wird der Text "Achtung! Besonders wichtige Meldung:" in die Kopfzeile geschrieben, sonst nur der Text "Meldung!" + */ + public void melde(String text, boolean istWichtig) { + String meldeText; + if (istWichtig) meldeText = "Achtung!\n"; + else meldeText = "Meldung:\n"; + Message m = new Message(meldeText+text); + getWorld().addObject(m, 7,6); + long z = System.currentTimeMillis(); + while(System.currentTimeMillis()-z < 4000){ + Greenfoot.delay(1); + } + getWorld().removeObject(m); + } + + /** + * Gibt den uebergebenen String und eine Zahl in einer Dialogbox auf dem Bildschirm aus + * @param text Der Text, der angezeit werden soll + * @param z eine Zahl, die hinter dem Text text ausgegeben wird + */ + private void melde(String text, int z) { + Message m = new Message(text+": "+z); + getWorld().addObject(m, 7,6); + long zz = System.currentTimeMillis(); + while(System.currentTimeMillis()-zz < 4000){ + Greenfoot.delay(1); + } + getWorld().removeObject(m); + } + + /** + * Gibt den uebergebenen String in einer Dialogbox als Warnung auf dem Bildschirm aus. + * Dadurch wird der uebergebene Actor actor von der Roboterwelt entfernt und diese neu gezeichnet. + * @param text Der Text, der angezeit werden soll + * @param actor Der Actor, der ggf. entfernt werden soll + */ + public void warne(String text, Actor actor) { + + Message m = new Message(text); + actor.getWorld().addObject(m, 7,6); + long z = System.currentTimeMillis(); + while(System.currentTimeMillis()-z < 4000){ + Greenfoot.delay(1); + } + actor.getWorld().removeObject(m); + + + Greenfoot.stop(); // nur falls Animation laeuft + World w = actor.getWorld(); + if (actor != null) w.removeObject(actor); // Notbremse + Greenfoot.setWorld(new RoboterWelt()); + // System.err.print("\u000C"); + // System.err.flush(); + System.err.close(); + // System.out.close(); + // System.out.println("Ablauf wurde vom Benutzer unterbrochen!"); + // System.exit(0); //Das waere eigentlich sauber + } + + // Systembedingte Routinen + /** + * Wird aufgerufen, wenn der Roboter in die Welt gesetzt wird; + * erweitert nach Vorschlag P.Henriksen 29.6.08 + * @param world Die Welt in die ein Roboter gesetzt wurde + */ + protected void addedToWorld(World world) { + // Roboter kann nicht auf eine Wand oder einen anderem Roboter gesetzt werden + Actor wand = getOneObjectAtOffset(0, 0, Wand.class); + Actor roboter = getOneObjectAtOffset(0, 0, Roboter.class); + if (wand != null || roboter != null) { + world.removeObject(this); + } + } + + /* setLocation(x,y) und setRotation(x) koennen nicht verborgen werden, + * weil sie schon in der Oberklasse Actor public sind. + */ + + /** + * setLocation(x,y) fuer Roboter wird ueberschrieben, um nicht auf Wand oder + * anderen Roboter ziehen zu koennen! + * -- setzt den Roboter auf eine Kachel, deren Spalte x sowie Reihe y du + * hier vorgibst. Die Nummerierung beginnt jeweils bei 0 !!) + * @param x die x-Koordinate + * @param y die y-Koordinate + */ + public void setLocation(int x, int y) { + boolean schwerkraft = ((RoboterWelt) getWorld()).getSchwerkraft(); + if( (!((x==getX() && y==getY()) || (Math.abs(x-getX())+Math.abs(y-getY())<=1))) || (y0 && i<=secret.getMaxLevel()) { + secret.writeLevel(i,true); + Greenfoot.setWorld(new RoboterWelt()); + } else { + melde("Du hast erst Level "+secret.getMaxLevel()+ " erreicht. "); + } + } + + /** + * Secret-Datei laden, um ein höheres Level freizuschalten + * + */ + public void ladeSecretDatei() { + int oldLevel = secret.getLevel(); + try{ + JFileChooser fileChooser = new JFileChooser("."); + fileChooser.setDialogTitle("Secret-Datei laden"); + fileChooser.setApproveButtonText("Level-Datei laden"); + JFrame fcframe = new JFrame(); + fcframe.toFront(); + fcframe.setAlwaysOnTop(true); + + + if(fileChooser.showOpenDialog(fcframe)==JFileChooser.APPROVE_OPTION){ + File file = fileChooser.getSelectedFile(); + if (file != null) { + Path FROM = file.toPath(); + Path TO = Paths.get(".\\secret"); + //overwrite existing file, if exists + CopyOption[] options = new CopyOption[]{ + StandardCopyOption.REPLACE_EXISTING, + StandardCopyOption.COPY_ATTRIBUTES + }; + Files.copy(FROM, TO, options); + int max = secret.getMaxLevel(); + int level = secret.getLevel(); + if(max >= 1 && max <= 11 && level>=1 && level <=11) { + melde("Level 1-"+max+" sind nun freigeschaltet. Gehe zu Level "+level+"."); + } else { + throw new IllegalArgumentException( "Keine richtige Secret-Datei." ); + } + Greenfoot.setWorld(new RoboterWelt()); + } + } + } + catch(Exception e) { + melde("Fehlerhafte Secret-Datei. Bleibe in Level "+oldLevel+"."); + secret.init(); + secret.writeLevel(oldLevel,true); + Greenfoot.setWorld(new RoboterWelt()); + } + + } + + /** + * Die Welt wird geleert + */ + private void weltLeeren() + { + removeObjects(getObjects(null)); + } + + /** + * Liefert eine Referenz auf die Map + */ + public int[][] getMap() { + return map; + } + + /** + * Liefert die Information, ob es sich um eine Welt mit Schwerkraft handelt + */ + public boolean getSchwerkraft() { + return schwerkraft; + } + + /** + * Überschrift oben links ausgeben. + */ + private void zeichneUeberschrift(String text) { + this.getBackground().setColor(Color.LIGHT_GRAY); + this.getBackground().fillRect(0,0,300,20); + this.getBackground().setColor(Color.BLACK); + this.getBackground().setFont(new Font("Verdana",true,false,12)); + this.getBackground().drawString(text, 2, 14); + } + + public Actor generateActor(int nr) { + Actor a = null; + switch(nr) { + case 10: a = new Wand(); break; + case 11: a = new Wand("SchalterEin"); break; + case 12: a = new Wand("SchalterAus"); break; + + case 13: a = new Wand("Stromquelle1"); break; + case 14: a = new Wand("Stromquelle2"); break; + case 15: a = new Wand("Stromquelle3"); break; + case 16: a = new Wand("Stromquelle4"); break; + case 17: a = new Wand("Schloss"); break; + + case 18: a = new Wand("Tuer1"); break; + case 19: a = new Wand("Tuer2"); break; + case 20: a = new Wand("Stein"); break; + case 21: a = new Wand("Steine"); break; + + case 22: a = new Wand("Rufknopf"); break; + case 23: a = new Wand("RufknopfAus"); break; + + case 30: a = new Gegenstand("Aufzug"); break; + case 31: a = new Gegenstand("Kontaktplatte"); break; + case 32: a = new Gegenstand("Strom"); break; + case 33: a = new Gegenstand("Portal"); break; + case 34: a = new Gegenstand("Schraube"); break; + case 35: a = new Gegenstand("Brennstab"); break; + case 36: a = new Gegenstand("Schluessel"); break; + case 37: a = new Gegenstand("Oelfleck"); break; + case 38: a = new Gegenstand("Akku"); break; + case 40: a = new Gegenstand("Feuer"); break; + case 41: a = new Gegenstand("Feuerloescher"); break; + case 42: a = new Gegenstand("Atommuell"); break; + case 43: a = new Gegenstand("Fass"); break; + case 44: a = new Gegenstand("Bombe"); break; + case 45: a = new Gegenstand("Diamant"); break; + + } + return a; + } + + public GreenfootImage getBackgroundImage(int nr) { + GreenfootImage back = backgroundimages[0]; + switch(nr) { + case 1: back = backgroundimages[1]; break; + case 2: back = backgroundimages[2]; break; + case 3: back = backgroundimages[3]; break; + case 4: back = backgroundimages[4]; break; + case 5: back = backgroundimages[5]; break; + case 6: back = backgroundimages[6]; break; + case 7: back = backgroundimages[7]; break; + case 30: back = backgroundimages[7]; break; + } + return back; + } + + /** + * Generiert eine Welt aus dem angegeben 2-dim. Array + * Dabei werden sowohl die Hintergrundbilder gesetzt, als auch Objekte + * in die Welt eingefügt. + * @param backg 2-dim. Array, das die Welt beschreibt. + */ + private void generateWorld(int[][] backg) + { + weltLeeren(); + map = backg; + GreenfootImage back = new GreenfootImage(840,720); + for(int x=0; x<14; x++) { + for(int y=0; y<12; y++) { + back.drawImage(getBackgroundImage(backg[y][x]), x*zellenGroesse, y*zellenGroesse); + Actor a = generateActor(backg[y][x]); + if (a != null) addObject(a,x,y); + } + } + this.setBackground(back); + schwerkraft = false; + } + + /** + * Ändert den Hintergrund einer Zelle + */ + public void changeBackground(int typ, int x, int y) { + GreenfootImage back = this.getBackground(); + back.drawImage(getBackgroundImage(typ), x*zellenGroesse, y*zellenGroesse); + } + + /** + * Zeigt die Koordinaten aller Felder an + */ + public void zeigeKoordinaten(){ + int delta; + for (int x=0; x9 || y>9) { + delta = 4; + if (x>9 && y>9) delta = 8; + } + else delta = 0; + this.getBackground().drawString("("+x+"|"+y+")", x*60+14-delta, y*60+35); + } + } + } + + /** + * Erzeugt die Welt neu, damit die Koordinaten wieder verschwinden + */ + public void versteckeKoordinaten(){ + Greenfoot.setWorld(new RoboterWelt()); + } + + /** + * Für Welten mit Schwerkraft berechnet diese Methode, wie die Gegenstände fallen müssen. + * + */ + private void nurSchwerkraftObjekte(List l) { + Iterator it = l.iterator(); + while(it.hasNext()){ + Actor a = it.next(); + if(a instanceof Gegenstand) { + if((((Gegenstand) a).getName()).equals("Aufzug")) it.remove(); + } + if(a instanceof Wand) { + if(!(((Wand) a).getName()).equals("Steine")) it.remove(); + } + } + } + + public void schwerkraftAnwenden() { + if(schwerkraft) { + List ag = new ArrayList(); + ag.addAll(this.getObjects(Gegenstand.class)); + ag.addAll(this.getObjects(Wand.class)); + ag.addAll(this.getObjects(Roboter.class)); + + nurSchwerkraftObjekte(ag); + List gefallen = new ArrayList(); + gefallen.add(new Gegenstand()); + while(gefallen.size()>0) { + gefallen.clear(); + + for(Actor g : ag) { + // Wenn auf Aufzug nicht mehr fallen + List gg = getObjectsAt(g.getX(), g.getY(), Gegenstand.class); + boolean aufAufzug=false; + for(Gegenstand ggg : gg) { + if (ggg.getName().equals("Aufzug")) aufAufzug=true; + } + + if(!aufAufzug) { + boolean wandunten=false; + List u = this.getObjectsAt(g.getX(),g.getY()+1, Actor.class); + Iterator it = u.iterator(); + while(it.hasNext()) { + Actor uu = it.next(); + if ((uu instanceof Gegenstand) && ((Gegenstand) uu).getName().equals("Aufzug")) it.remove(); + if ((uu instanceof Wand) && !((Wand) uu).getName().equals("Steine")) wandunten=true; + } + if(u.size()==0 ) { + int rot = g.getRotation(); + g.setRotation(90); + g.setLocation(g.getX(),g.getY()+1); + gefallen.add(g); + g.setRotation(rot); + } + + if((g instanceof Roboter) && gefallen.contains(g)) { + ((Roboter) g).verbraucheEnergie(20); + } + if(!(g instanceof Roboter) && !wandunten) { + List r = this.getObjectsAt(g.getX()+1,g.getY(), Actor.class); + List ru = this.getObjectsAt(g.getX()+1,g.getY()+1, Actor.class); + if(!gefallen.contains(g) && r.size()==0 && ru.size()==0) { + g.setLocation(g.getX()+1,g.getY()+1); + gefallen.add(g); + } + List l = this.getObjectsAt(g.getX()-1,g.getY(), Actor.class); + List lu = this.getObjectsAt(g.getX()-1,g.getY()+1, Actor.class); + if(!gefallen.contains(g) && l.size()==0 && lu.size()==0) { + g.setLocation(g.getX()-1,g.getY()+1); + gefallen.add(g); + } + if ((g instanceof Wand) && gefallen.contains(g)) { + List ro = this.getObjectsAt(g.getX(), g.getY()+1, Roboter.class); + for(Roboter rob : ro) { + rob.verbraucheEnergie(80); + } + } + } + } + } + Greenfoot.delay(4); + } + } + } + + /* Es folgen nun die Definitionen der Level und Einsätze */ + /* ---------------------------------------------------------------------------*/ + + private void ab1_roboterSteuern() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10, 0, 0, 0, 0, 0,10, 0,34, 0, 0, 0, 0,10}, + {10, 0,34,34,34, 0,10,38, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,10,34, 0,10,10,10, 0,10}, + {10,10,10, 0,10,10,10, 0, 0,10, 0, 0, 0,10}, + {31, 3, 0, 0,10,10,10,31, 0,10,33, 0, 0,10}, + {10,10,10, 0,10,10,10, 0, 0,10, 0, 0, 0,10}, + {10, 0, 0,34, 0, 0,10, 0, 0,10,10,10, 0,10}, + {10,34,34,34, 0, 0,10, 0, 0,34, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,10, 0,38, 0,34, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + zeichneUeberschrift("AB1 - Roboter von Hand steuern"); + + AB1 starter = new AB1(); + addObject(starter, 0, 6); + AB1 starter1 = new AB1(); + addObject(starter1, 7, 6); + starter1.verbraucheEnergie(50); + Schalter s = new Schalter(this); + int[][] on={{19}}; + int[][] off={{31}}; + s.setPosition(1, 6, on, off); + s.ausschalten(); + Gegenstand g = (Gegenstand) (this.getObjectsAt(0, 6, Gegenstand.class).get(0)); + g.setSchalter(s); + } + + private void ab2_roboterProgrammieren() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10, 0, 0, 0, 0, 0,10, 0,34,38,38,34, 0,10}, + {10, 0,34,34,34, 0,10, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,10, 0, 0,10,10,10, 0,10}, + {10,10,10, 0,10,10,10, 0, 0,10, 0, 0, 0,10}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0,10, 0,10}, + {10,10,10, 0,10,10,10, 0, 0,10, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,10, 0, 0,10,10,10, 0,10}, + {10, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + zeichneUeberschrift("AB2 - Methoden erstellen"); + AB2 ab21 = new AB2(); + addObject(ab21, 1, 3); + AB2 ab22 = new AB2(); + addObject(ab22, 7, 2); + AB2 ab23 = new AB2(); + addObject(ab23, 10, 6); + AB2 ab24 = new AB2(); + addObject(ab24, 1, 10); + } + + public void einsatz_02() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0}, + {10, 0, 0, 0, 0,33,10, 0, 0, 0, 0, 0, 0, 0}, + {10, 0, 0,35, 0, 0,10, 0, 0, 0, 0, 0, 0, 0}, + {10, 0, 0,38, 0, 0,10, 0, 0, 0, 0, 0, 0, 0}, + {10, 0, 0,35, 0, 0,10, 0, 0, 0, 0, 0, 0, 0}, + {10, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0, 0}, + {10, 0, 0,10, 0, 0,10, 0, 0, 0, 0, 0, 0, 0}, + {10,10, 0,38, 0,10,10, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10, 1,10,10,10, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0}}; + + weltLeeren(); + generateWorld(backg); + zeichneUeberschrift("Einsatz 2: Brennstäbe sichern"); + AB2 ab2 = new AB2(); + addObject(ab2, 0, 10); + ab2.einsatz2(); + Greenfoot.delay(2); + if (ab2.istAufGegenstand("Portal") && ab2.getAnzahl("Brennstab")==2) { + secret.writeLevel(3); + melde("Super! Du hast die Brennstäbe gesichert"); + } else { + warne("Du hast die Aufgabe noch nicht erfüllt"); + } + Greenfoot.setWorld(new RoboterWelt()); + } + + private void ab3_wiederholer() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10, 0,41, 0, 0,40, 0,10, 0, 0, 0, 0, 0,10}, + {10, 0,41, 0, 0, 0,40,10, 0, 0, 0, 0, 0,10}, + {10, 0,41, 0, 0,40,40,10, 0,10,10,10, 0,10}, + {10, 0,41, 0,40,40,40,10, 0,10, 0,10, 0,10}, + {10, 0, 0, 0, 0, 0, 0,10, 0, 0, 0,10, 0,10}, + {10, 0,10,10,10,10,10,10,10,10,10,10, 0,10}, + {10, 0,10,41,10,41,10,41,10,41,10,10, 0,10}, + {10, 0,31, 0,31, 0,31, 0,31, 0,31,10, 0,10}, + {10, 0,10, 0,40,40,40,40,40,40,10, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + zeichneUeberschrift("AB3 - Wiederholungen mit while-Schleifen"); + AB3 ab; + ab= new AB3(); + addObject(ab, 1, 2); + ab= new AB3(); + addObject(ab, 1, 3); + ab= new AB3(); + addObject(ab, 1, 4); + ab= new AB3(); + addObject(ab, 1, 5); + ab= new AB3(); + addObject(ab, 2, 9); + ab= new AB3(); + addObject(ab, 11, 10); + } + + public void einsatz_03() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,41,10,41,10,41,10,41,10,41,10,10,10,10}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,31,10,10,10}, + {10,10,10,10,10,10,10,10,10,10, 3,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0,31,10,10,10}, + {10, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,10,10,10}, + {10, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0,10,10,10}, + {10, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0,10,10,10}, + {10, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0,31, 3,33,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + zeichneUeberschrift("Einsatz 3:Feuer löschen"); + AB3 ab3 = new AB3(); + addObject(ab3, 0, 3); + ab3.setAnzahlVonGegenstand("Akku",10); + Schalter s = new Schalter(this); + int[][] on={{19}}; + int[][] off={{31}}; + s.setPosition(11, 10, on, off); + s.anschalten(); + Gegenstand g = (Gegenstand) (this.getObjectsAt(10, 10, Gegenstand.class).get(0)); + g.setSchalter(s); + s = new Schalter(this); + int[][] on2={{18}}; + s.setPosition(10, 4, on2, off); + s.anschalten(); + g = (Gegenstand) (this.getObjectsAt(10, 3, Gegenstand.class).get(0)); + g.setSchalter(s); + g = (Gegenstand) (this.getObjectsAt(10, 5, Gegenstand.class).get(0)); + g.setSchalter(s); + int y = 10; + int maxx = Greenfoot.getRandomNumber(4)+3; + + while (y>4) { + for (int x=1; x<=maxx; x++) { + addObject(new Gegenstand("Feuer"), x,y); + } + int newx = 20; + while(newx > maxx || newx < 1) newx=Greenfoot.getRandomNumber(4)-7+y; + + maxx = newx; + y = y-1; + } + + ab3.einsatz3(); + Greenfoot.delay(2); + boolean feueraus = true; + List l = this.getObjects(Gegenstand.class); + for (Object o : l) { + if (((Gegenstand) o).getName().equals("Feuer")) { + feueraus = false; + } + } + if (ab3.istAufGegenstand("Portal") && feueraus) { + secret.writeLevel(4); + melde("Hurra! Das Feuer ist gelöscht.\n Die Katastrophe wurde verhindert."); + } else { + warne("Du hast die Aufgabe noch nicht erfüllt"); + } + Greenfoot.setWorld(new RoboterWelt()); + + } + + private void ab4_verzweiger() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,36,10,10, 0,10, 0, 0, 0, 0, 0,10,10,10}, + {10, 0,10,10, 0,10, 0,10,10,10, 0, 0, 0,10}, + {10, 0,10,10, 0,10, 0, 0, 0,10,10,10, 0,10}, + {10, 0,10,10, 0,10,10,10, 0,10, 0, 0, 0,10}, + {10, 0,10,10, 0,10, 0, 0, 0,10, 0,10,10,10}, + {10, 0,10,10, 0,10, 0,10,10,10,10,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10, 0,37, 0, 0,37, 0,37, 0, 0, 0,37, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + zeichneUeberschrift("AB4 - Verzweigungen nutzen"); + + // Schluesselloch und Tuere werden gekoppelt: + Schalter s = new Schalter(this); + int[][] on ={{-1,17},{18,-1}}; + int[][] off={{-1,17},{0,-1}}; + s.setPosition(1,5,on,off); + s.anschalten(); + + // Schalter und Stromquelle werden gekoppelt: + s = new Schalter(this); + int[][] on1 = {{-1,-1,12},{13,32,14}}; + int[][] off1 = {{-1,-1,11},{15,0,16}}; + s.setPosition(3,5,on1,off1); + s.anschalten(); + + AB4 ab41 = new AB4(); + addObject(ab41, 1, 2); + ab41.dreheRechts(); + AB4 ab42 = new AB4(); + addObject(ab42, 4, 2); + ab42.dreheRechts(); + AB4 ab43 = new AB4(); + addObject(ab43, 1, 9); + AB4 ab44 = new AB4(); + addObject(ab44, 1,10); + ab44.setAnzahlVonGegenstand("Schraube", 10); + AB4 ab45 = new AB4(); + addObject(ab45, 6, 7); + ab45.dreheLinks(); + + // Lege Schraubenreihe zufaellig + for (int i=0; i<12; i++) { + // muss sein, weil aus irgendwelchen Gründen "alte" Schrauben liegengeblieben sind + List g = getObjectsAt(i+1, 10, Gegenstand.class); + removeObjects(g); + if (Greenfoot.getRandomNumber(3)==0) + addObject(new Gegenstand("Schraube"), i+1, 10); + } + } + + public void einsatz_04() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + { 0, 0, 0, 0, 0, 0,10, 4, 4, 4, 4, 4, 4,10}, + {10,10,10,10,10, 0,10, 4, 4, 4, 4, 4, 4,10}, + {10,10,10,10,10, 0,10,10,10,10,10,10,18,10}, + {10,10,10,10,10,10,10,10,10,10,10,10, 0,10}, + {10,10,10,10,10,10, 0, 0, 0,10,10,10, 0,10}, + {10,10,10,10,10,10, 0,10, 0,10,10,10, 0,10}, + {10,10,10,10,10,10, 0,10, 0,10,10,10, 0,10}, + {10,10,10,10,10,10, 0,10, 0,10,10,10, 0,10}, + {10,10,10,10,10, 0, 0,10, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + zeichneUeberschrift("Einsatz 4: Reaktor abschalten"); + AB4 ab4 = new AB4(); + addObject(ab4, 0, 2); + + int x = Greenfoot.getRandomNumber(3)+1; + int y = Greenfoot.getRandomNumber(5)+6; + Wand w; + for (int xx=4; xx>= x; xx--) { + w = (Wand) (this.getObjectsAt(xx, 4, Wand.class).get(0)); + this.removeObject(w); + } + for (int yy=5; yy<= y; yy++) { + w = (Wand) (this.getObjectsAt(x, yy, Wand.class).get(0)); + this.removeObject(w); + } + + for (int xx=x+1; xx<=4; xx++) { + w = (Wand) (this.getObjectsAt(xx, y, Wand.class).get(0)); + this.removeObject(w); + } + for (int yy=y+1; yy<= 10; yy++) { + w = (Wand) (this.getObjectsAt(4, yy, Wand.class).get(0)); + this.removeObject(w); + } + boolean mindEinSchalter = false; + for(int xx=7;xx<=11;xx++) { + if ((Greenfoot.getRandomNumber(2)==0) || ((xx==11) && !mindEinSchalter)) { + Schalter s = new Schalter(this); + int[][] on ={{11}}; + int[][] off={{12}}; + s.setPosition(xx,4,on,off); + s.anschalten(); + mindEinSchalter = true; + } + } + Schalter s = new Schalter(this); + if (Greenfoot.getRandomNumber(2)==0) { + int[][] on ={{-1,18},{11,-1}}; + int[][] off={{-1,0},{12,-1}}; + s.setPosition(5,7,on,off); + } else { + int[][] on ={{-1,18},{17,-1}}; + int[][] off={{-1,0},{17,-1}}; + s.setPosition(5,7,on,off); + addObject(new Gegenstand("Schluessel"),0,2); + ab4.aufnehmen(); + } + s.anschalten(); + s = new Schalter(this); + if (Greenfoot.getRandomNumber(2)==0) { + int[][] on ={{-1,11},{18,-1}}; + int[][] off={{-1,12},{0,-1}}; + s.setPosition(8,8,on,off); + } else { + int[][] on ={{-1,17},{18,-1}}; + int[][] off={{-1,17},{0,-1}}; + s.setPosition(8,8,on,off); + addObject(new Gegenstand("Schluessel"),0,2); + ab4.aufnehmen(); + } + s.anschalten(); + s = new Schalter(this); + if (Greenfoot.getRandomNumber(2)==0) { + int[][] on ={{-1,18},{11,-1}}; + int[][] off={{-1,0},{12,-1}}; + s.setPosition(11,4,on,off); + } else { + int[][] on ={{-1,18},{17,-1}}; + int[][] off={{-1,0},{17,-1}}; + s.setPosition(11,4,on,off); + addObject(new Gegenstand("Schluessel"),0,2); + ab4.aufnehmen(); + } + s.anschalten(); + + ab4.einsatz4(); + Greenfoot.delay(2); + boolean geschafft = true; + + for(int xx=7;xx<=11;xx++) { + s = ((Wand) (this.getObjectsAt(xx, 4, Wand.class).get(0))).getSchalter(); + + if (s != null && s.getAn()) { + geschafft = false; + } + } + + if (geschafft) { + secret.writeLevel(5); + melde("In letzter Minute wurde das Kraftwerk abgeschaltet.\nDer Super-GAU wurde dadurch verhindert."); + } else { + warne("Du hast die Aufgabe noch nicht erfüllt"); + } + Greenfoot.setWorld(new RoboterWelt()); + } + + private void ab5_funktionen() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10, 0,10,10,10, 0,10,10,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10, 0,10, 0,10,10,10,10,10}, + {10, 0,43,10, 0, 0, 0,10, 0,43, 0, 0,43,10}, + {10, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0,10}, + {10,43, 0, 0,43, 0,10,10, 0,42, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,43,10, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 4,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + + zeichneUeberschrift("AB5 - Methoden mit Rückgabewert"); + AB5 ab5; + ab5 = new AB5(); + addObject(ab5, 1, 3); + for(int i=0; i<10; i++) { + addObject(new Gegenstand("Schraube"),1,3); + ab5.aufnehmen(); + } + + ab5 = new AB5(); + addObject(ab5, 1, 5); + for(int i=0; i<5; i++) { + addObject(new Gegenstand("Schraube"),1,5); + ab5.aufnehmen(); + } + ab5.verbraucheEnergie(40); + ab5 = new AB5(); + addObject(ab5, 2, 7); + for(int i=0; i<2; i++) { + addObject(new Gegenstand("Schraube"),2,7); + ab5.aufnehmen(); + } + ab5.verbraucheEnergie(80); + + ab5 = new AB5(); + addObject(ab5, 8, 5); + ab5 = new AB5(); + addObject(ab5, 8, 7); + ab5 = new AB5(); + addObject(ab5, 5, 9); + ab5.verbraucheEnergie(85); + + } + + public void einsatz_05() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10, 0,10,10,10,10,10,10}, + {10,10,10,10,10,10,10, 0,10,10,10,10,10,10}, + {10,10,10,10,10,10,10, 0,10,10,10,10,10,10}, + {10,10,10,10,10,10,10, 0,10,10,10,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,10, 0,10, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,10, 0,10, 0, 0, 0, 0,10}, + {10, 1, 1, 0, 0, 0,10, 0,10, 0, 0, 0, 0,10}, + {10, 4, 1, 0, 0, 0,10, 0,10, 1, 1, 1, 1,10}, + {10, 4, 1, 0,10, 0,10, 0,10, 4, 4, 4, 4,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + // Hoehe variabel + int z = Greenfoot.getRandomNumber(4); + for (int y = 0; y liste = getObjects(Gegenstand.class); + boolean geschafft = true; + for (Gegenstand g : liste) { + if(g.istGegenstand("Atommuell")){ + if(backg[g.getY()][g.getX()] != 4) geschafft = false; + } + } + + if (geschafft) { + secret.writeLevel(6); + melde("Es herrscht wieder Ordnung im Zwischenlager.\nSo ein Aufräumroboter wäre auch für zu Hause praktisch..."); + } else { + warne("Du hast die Aufgabe noch nicht erfüllt"); + } + + Greenfoot.setWorld(new RoboterWelt()); + } + + private void ab6_attribute() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,33,10,10,10,10,10,10,10,10}, + {10, 0, 0, 0,10, 0,10, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0,10,10,10, 0,10,10,10, 0,10,10,10}, + {10, 0, 0,10, 0, 0, 0,10, 0,10, 0,10, 0,10}, + {10, 0, 0,10, 0,10, 0,10, 0,10, 0,10, 0,10}, + {10, 0, 0,10, 0,10, 0, 0, 0,10, 0,10, 0,10}, + {10, 0, 0,10,10,10, 0,10,10,10, 0,10, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0,10}, + {10, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + + zeichneUeberschrift("AB6 - Eigene Attribute"); + AB6_AB7 ab6; + ab6 = new AB6_AB7(); + addObject(ab6, 4, 5); + ab6 = new AB6_AB7(); + addObject(ab6, 8, 5); + ab6.setRotation(90); + ab6 = new AB6_AB7(); + addObject(ab6, 3, 9); + ab6.setRotation(270); + } + + public void einsatz_06() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,33,10,10,10,10,10,10,10,10}, + {10, 0, 0, 0,10, 0,10, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0,10}, + {10, 0, 0,10,10,10,10,10, 0, 0, 0,10, 0,10}, + {10, 0, 0,10, 0, 0, 0,10,10,10, 0,10, 0,10}, + {10, 0, 0,10, 0,10,10,10, 0,10, 0,10, 0,10}, + {10,10, 0,10, 0, 0, 0, 0, 0,10, 0,10, 0,10}, + {10, 0, 0,10,10,10, 0,10,10,10, 0,10, 0,10}, + {10, 0,10, 0, 0, 0, 0, 0, 0, 0, 0,10, 0,10}, + {10, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + + zeichneUeberschrift("Einsatz 6: Notfallprogramm"); + AB6_AB7 ab6; + ab6 = new AB6_AB7(); + addObject(ab6, 6, 5); + ab6.setRotation(90); + ab6.einsatz6(); + Greenfoot.delay(2); + if (ab6.istAufGegenstand("Portal")) { + if(ab6.getSchritte()==65) { + secret.writeLevel(7); + melde("Notfallprogramm aktiviert!\nSuche Ausgang...\nSuche Ausgang...\nAusgang nach 65 Schritten erreicht!"); + } else { + warne("Du hast die Aufgabe noch nicht korrekt erfüllt.\nDer Pledge-Algorithmus sollte für dieses\nLabyrinth 65 Schritte benötigen."); + } + } else { + warne("Du hast die Aufgabe noch nicht erfüllt"); + } + Greenfoot.setWorld(new RoboterWelt()); + } + + private void ab7_vererbung() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,33,10,10,10,10,10,10,10}, + {10,10,10, 0,10,10, 0,10, 0,10, 0,10, 0,10}, + {10, 0,43, 0,35, 0, 0,35, 0, 0, 0, 0,35,10}, + {10,10,10, 0,10,10, 0,10,10,10, 0,10, 0,10}, + {10,10,10, 0,10,43,43,43, 0,10, 0,10, 0,10}, + {10,10,10, 0,10,43,43,43,35,10,43,10, 0,10}, + {10, 0, 0, 0,10, 0, 0, 0,35,10,43,10, 0,10}, + {10, 0,43, 0,10,10, 0,10,10,10, 0,10, 0,10}, + {10, 0,43, 0, 0,43, 0, 0, 0, 0, 0,10, 0,10}, + {10, 0, 0, 0,43,43, 0,43, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + + zeichneUeberschrift("AB7 - Vererbung"); + AB6_AB7 ab6; + ab6 = new AB6_AB7(); + addObject(ab6, 8, 5); + ab6.setRotation(90); + ab6 = new AB6_AB7(); + addObject(ab6, 4, 9); + ab6.setRotation(90); + + ab6 = new AB6_AB7(); + addObject(ab6, 1, 3); + ab6.setRotation(0); + + } + + public void einsatz_07() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10, 0,10,10,10,10,10,10,10,10,10,10, 0,10}, + {10, 0,10,10,10,10,10,10,10,10,10,10, 0,10}, + {10, 0,10,10,10,10,10,10,10,10,10,10, 0,10}, + {33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,31,38,10}, + {10, 0,10,10,10,10,10,10,10,10,10,10, 0,10}, + {10, 0,10,10,10,10,10,10,10,10,10,10, 0,10}, + {10, 0,10,10,10,10,10,10,10,10,10,10, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + int[][] on = { + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}}; + + weltLeeren(); + int x = 3; + int pos = 1; + int brennstaebe=0; + while (x< 11) { + for (int y = 3; y <=9 ; y++) { + backg[y][x] = 0; + } + if (Greenfoot.getRandomNumber(2)==0) { + backg[3][x] = 42; + if (Greenfoot.getRandomNumber(2)==0) { backg[4][x] = 35; brennstaebe++;} + if (Greenfoot.getRandomNumber(2)==0) { backg[5][x] = 35; brennstaebe++;} + } else { + if (pos ==1) { + pos = 2; + on[0][x-1] = 21; + on[8][x-1] = 21; + } else { + if (pos == 2) { + pos = 1; + on[4][x-1] = 21; + on[8][x-1] = 21; + } + } + } + + if (Greenfoot.getRandomNumber(2)==0) { + backg[9][x] = 42; + if (Greenfoot.getRandomNumber(2)==0) {backg[7][x] = 35;brennstaebe++;} + if (Greenfoot.getRandomNumber(2)==0) {backg[8][x] = 35;brennstaebe++;} + }else { + if (pos ==3) { + pos = 2; + on[8][x-1] = 21; + on[0][x-1] = 21; + on[4][x-1] = 0; + } else { + if (pos == 2) { + on[4][x-1] = 21; + on[0][x-1] = 21; + on[8][x-1] = 0; + pos = 3; + } + } + } + + x += Greenfoot.getRandomNumber(2)+2; + } + + generateWorld(backg); + + zeichneUeberschrift("Einsatz 7: Brennstäbe inventarisieren"); + AB6_AB7 ab7; + ab7 = new AB6_AB7(); + addObject(ab7, 1, 6); + Schalter s = new Schalter(this); + s.setPosition(2,2,on,on); + Gegenstand g = (Gegenstand) (this.getObjectsAt(11, 6, Gegenstand.class).get(0)); + g.setSchalter(s); + + ab7.einsatz7(); + Greenfoot.delay(2); + if (ab7.istAufGegenstand("Portal")) { + if(ab7.getBrennstaebe()==brennstaebe) { + secret.writeLevel(8); + melde("Jetzt sind auch noch die Stollen eingestürtzt.\nZum Glück hat das Notfallprogramm funktioniert.\nGut gemacht, Robi!"); + } else { + warne("Du hast die Aufgabe noch nicht korrekt erfüllt.\nEs hätten "+brennstaebe+" Brennstaebe sein müssen."); + } + } else { + warne("Du hast die Aufgabe noch nicht erfüllt"); + } + Greenfoot.setWorld(new RoboterWelt()); + } + + private void ab8_lokale_variablen() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10, 0, 0,34,34, 0,38,41,36, 0,36,41,34,10}, + {10, 0, 0, 0,38, 0, 0,38,41, 0,41, 0, 0,10}, + {10,10,10,10,10,18,10,10,10,10,18,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0,10}, + {10, 0,43,43,43,43,43, 0,10, 0, 0, 0, 0,10}, + {10, 0,43,43,43,43,43, 0,10,10,18,10,10,10}, + {10, 0,43,43,43,43,43, 0,10, 0, 0, 0, 0,10}, + {10, 0,43,43,43,43,43, 0,10, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + + zeichneUeberschrift("AB8 - Lokale Variablen"); + AB8 ab8; + ab8 = new AB8(); + addObject(ab8, 1, 2); + ab8 = new AB8(); + addObject(ab8, 1, 3); + ab8 = new AB8(); + addObject(ab8, 1, 5); + ab8 = new AB8(); + addObject(ab8, 9, 5); + ab8 = new AB8(); + addObject(ab8, 9, 8); + + } + + public void einsatz_08() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,33,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + int x = 1; + int pos = 1; + int qm=0; + while(x<11) { + int breite = Greenfoot.getRandomNumber(4)+2; + if ((breite+x)>13) { + breite = 13-x; + } + int hoehe = Greenfoot.getRandomNumber(5)+3; + for(int xx = 0; xx g = getObjectsAt(x,y,Gegenstand.class); + if(g.size() != 1 || !g.get(0).getName().equals("Brennstab")) ok = false; + } + } + for(int x=8; x <13; x++) { + for(int y=9; y<11; y++) { + List g = getObjectsAt(x,y,Gegenstand.class); + if(g.size() != 1 || !g.get(0).getName().equals("Brennstab")) ok = false; + } + } + for(int x=2; x <5; x++) { + for(int y=8; y<10; y++) { + List g = getObjectsAt(x,y,Gegenstand.class); + if(g.size() != 1 || !g.get(0).getName().equals("Brennstab")) ok = false; + } + } + + if (!ok) { + warne("Du hast die Aufgabe noch nicht erfüllt.\nDie Brennstäbe sind nicht\nin den alten Stollen positioniert."); + } + } + + if (ok) { + secret.writeLevel(10); + melde("Prima gemacht. Auftrag erfüllt!"); + } + Greenfoot.setWorld(new RoboterWelt()); + } + + private void ab10_zaehlschleifen() + { + int[][] backg = {{ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, + {20,20,20,20,20,20,20,20,20,20,20,20,20,20}, + {20,23, 5, 5, 5, 5, 7,20,43,43,43,20, 5,20}, + {20,20,20,20,20,20, 7,20,43,43,43,20, 5,20}, + {20, 5, 5, 5, 5,20, 7,20,20,43,20, 5, 5,20}, + {20, 5, 5, 5, 5,20,30,20,20,43,20, 5, 5,20}, + {20, 5, 5, 5, 5,20, 7,20,20,43,20,20,20,20}, + {20, 5,34,34, 5,20, 7, 5, 5,43, 5, 5, 5,20}, + {20,34,34,34,34,20,20, 5,20,20,20, 5,20,20}, + {20,34,34,34,34,20, 5, 5, 5, 5, 5, 5, 5,20}, + {20,34,34,34,34,20, 5, 5, 5, 5, 5, 5, 5,20}, + {20,20,20,20,20,20,20,20,20,20,20,20,20,20}}; + + weltLeeren(); + generateWorld(backg); + schwerkraft = true; + + Aufzugknopf s = new Aufzugknopf(this); + int[][] on = {{22}}; + int[][] off = {{23}}; + s.setPosition(1,2,on,off); + s.setAufzug((Gegenstand) this.getObjectsAt(6,5,Gegenstand.class).get(0),2); + Wand w = (Wand) (this.getObjectsAt(1, 2, Wand.class).get(0)); + w.setSchalter(s); + + zeichneUeberschrift("AB10 - Zählschleifen"); + Greenfoot.setSpeed(40); + + AB10 r1 = new AB10(); + addObject(r1,1,10); + r1.setAnzahlVonGegenstand("Akku", 3); + + AB10 r2 = new AB10(); + addObject(r2,8,7); + + AB10 r3 = new AB10(); + addObject(r3,2,2); + + schwerkraftAnwenden(); + } + + public void einsatz_10() + { + int[][] backg = {{ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}, + {20,20,20,20,20,20,20,20,20,20,20,20,20,20}, + {20,23, 6, 6, 6, 6, 7,20, 6, 6, 6, 6, 6,20}, + {20,20,20,20,20,20, 7,20, 6, 6, 6, 6, 6,20}, + {20, 6, 6, 6, 6,20, 7,20, 6, 6, 6, 6, 6,20}, + {20, 6, 6, 6, 6,20, 7,20,20,20,20,20,20,20}, + {20, 6, 6, 6, 6,20, 7, 6, 6, 6, 6, 6,20,20}, + {20, 6, 6, 6, 6,20,30,20,20,20,20, 6, 6,20}, + {20, 6, 6, 6, 6,20, 7,20, 6, 6, 6, 6, 6,20}, + {20,20,20,20,20,20, 7,20,20,20,20, 6,20,20}, + {20, 6, 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6,20}, + {20,20,20,20,20,20,20,20,20,20,20,20,20,20}}; + + weltLeeren(); + generateWorld(backg); + schwerkraft = true; + + Aufzugknopf s = new Aufzugknopf(this); + int[][] on = {{22}}; + int[][] off = {{23}}; + s.setPosition(1,2,on,off); + s.setAufzug((Gegenstand) this.getObjectsAt(6,7,Gegenstand.class).get(0),2); + Wand w = (Wand) (this.getObjectsAt(1, 2, Wand.class).get(0)); + w.setSchalter(s); + + zeichneUeberschrift("Einsatz 10: Sammle die Diamanten"); + Greenfoot.setSpeed(40); + + AB10 aufzugRoboter, sprengRoboter1, sprengRoboter2, legeRoboter; + aufzugRoboter = new AB10(); + addObject(aufzugRoboter, 2, 2); + + sprengRoboter1 = new AB10(); + addObject(sprengRoboter1, 3, 2); + sprengRoboter1.setAnzahlVonGegenstand("Bombe", 2); + + sprengRoboter2 = new AB10(); + addObject(sprengRoboter2, 4, 2); + sprengRoboter2.setAnzahlVonGegenstand("Bombe", 2); + + EinsatzLeiter el = new EinsatzLeiter(); + addObject(el, 13, 0); + el.nehmeKontaktAuf(); + + Random r = new Random(); + for(int x=1;x<5; x++) { + for(int y=4;y<9;y++) { + int z = r.nextInt(10); + Actor g=null; + if(z<7) { + g = new Gegenstand("Diamant"); + } else if(z<8) { + g = new Wand("Steine"); + } + if(g!=null) this.addObject(g,x,y); + } + } + for(int x=8;x<13; x++) { + for(int y=2;y<5;y++) { + int z = r.nextInt(10); + Actor g=null; + if(z<7) { + g = new Gegenstand("Diamant"); + } else if(z<8) { + g = new Wand("Steine"); + } + if(g!=null) this.addObject(g,x,y); + } + } + for(int x=8;x<13; x++) { + for(int y=8;y<9;y++) { + int z = r.nextInt(10); + Actor g=null; + if(z<7) { + g = new Gegenstand("Diamant"); + } else if(z<8) { + g = new Wand("Steine"); + } + if(g!=null) this.addObject(g,x,y); + } + } + this.schwerkraftAnwenden(); + + el.einsatz10(); + Greenfoot.delay(2); + + boolean ok = false; + int anz = (aufzugRoboter.getAnzahl("Diamant")+sprengRoboter1.getAnzahl("Diamant")+sprengRoboter2.getAnzahl("Diamant")); + if(anz >= 10){ + secret.writeLevel(11); + if (anz<15) { + melde("Mindestanforderung erfüllt.\n"+anz+" Diamanten gesammelt."); + } else { + if (anz <20) { + melde("Gut gemacht. "+anz+" Diamanten gesammelt.\nDie Roboter werden für die Minenarbeit trainiert!"); + } else { + melde("Grandios. "+anz+" Diamanten gesammelt.\nDiese Roboter kauft die Firma sofort!"); + } + } + } else { + warne("Du hast die Aufgabe noch nicht erfüllt!"); + } + Greenfoot.setWorld(new RoboterWelt()); + } + + private void ab11_finalBild() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10,45,45,45, 0,45, 0, 0,45, 0, 0,45, 0,10}, + {10, 0,45, 0,45, 0,45, 0,45, 0, 0,45, 0,10}, + {10, 0,45, 0,45, 0,45, 0,45, 0, 0,45, 0,10}, + {10, 0,45, 0,45, 0,45, 0,45, 0, 0,45, 0,10}, + {10, 0,45, 0, 0,45, 0, 0,45,45, 0,45,45,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + + generateWorld(backg); + zeichneUeberschrift("Bravo, jetzt kannst du programmieren!"); + + } + + private void melde(String text) { + + Message m = new Message(text); + addObject(m, 7,6); + long z = System.currentTimeMillis(); + while(System.currentTimeMillis()-z < 2000){ + Greenfoot.delay(1); + } + removeObject(m); + + } + + private void warne(String text) { + + melde(text); + + } +} \ No newline at end of file diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Schalter.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Schalter.java new file mode 100644 index 0000000..728f9d7 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Schalter.java @@ -0,0 +1,107 @@ +import greenfoot.*; +import java.util.*; + +/** + * Die Klasse Schalter ist eine Hilfsklasse für die Schlösser und Schalthebel + * Sie hat zwei zweidimensionale Arrays, die für den Schalterzustand on bzw. off + * festlegen, wie ein Bereich der Welt aussehen soll. startx und starty speichern + * die linke obere Ecke dieses Bereichs. + */ + +public class Schalter +{ + RoboterWelt world; + private boolean an; + private int startx; + private int starty; + private int[][] on; + private int[][] off; + + /** Der Konstruktor erstellt einen neuen Schalter + * @param w Die Welt, die manipuliert werden soll + */ + public Schalter(World w) { + super(); + an = true; + startx = 0; + starty = 0; + on = null; + off = null; + world = (RoboterWelt) w; + } + + /** Die Methode setze verändert die Welt entsprechend den Vorgaben + * von backg. Dabei werden alle Objekte in diesem Bereich entfernt + * (außer den Robotern) und gegen neue Objekte ausgetauscht. + * @param backg Zweidimensionales Array, das die neuen Actors für den Bereich festlegt. + */ + + private void setze(int[][] backg) { + + for(int x=0; x=0 && (startx+x>0) && (startx+x1) && (starty+y=0 && backg[y][x] <10) { + world.changeBackground(backg[y][x], x, y); + } + Actor a = ((RoboterWelt) world).generateActor(backg[y][x]); + if (backg[y][x] == 11 || backg[y][x]==12 || backg[y][x]==17 || backg[y][x]==22 || backg[y][x]==23) { + ((Wand) a).setSchalter(this); + } + if (backg[y][x] == 31) { + ((Gegenstand) a).setSchalter(this); + } + if (a!= null) world.addObject(a,x+startx,y+starty); + } + } + } + } + + /** Setzt den Schalterzustand auf on + */ + public void anschalten() { + an = true; + if (on != null) setze(on); + } + + /** Setzt den Schalterzustand auf off + */ + + public void ausschalten() { + an = false; + if (off != null) setze(off); + } + + /** Schaltet den Schalter um, d.h. von on auf off oder umgekehrt + */ + public void umschalten() { + if (an) ausschalten(); else anschalten(); + } + + /** Legt fest, wie der Schalter die Welt verändern soll. + * @param x Koordinate der linke oberen Ecke des zu verändernden Bereichs + * @param y Koordinate der linke oberen Ecke des zu verändernden Bereichs + * @param on Zweidimensionales Array zu Festlegung, wie der Bereich bei angeschaltetem Schalter ausssehen soll + * @param off Zweidimensionales Array zu Festlegung, wie der Bereich bei ausgeschaltetem Schalter ausssehen soll + */ + public void setPosition(int x, int y, int[][] on, int[][] off) { + startx = x; + starty = y; + this.on = on; + this.off = off; + } + + /** Liefert den Schalterzustand + * @return true, wenn der Schalter an ist, sonst false + */ + public boolean getAn() { + return an; + } +} diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Wand.java b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Wand.java new file mode 100644 index 0000000..e2c97b3 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/Wand.java @@ -0,0 +1,116 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.util.*; + +/** + * Die Klasse Wand fast alle Actors zusammen, durch die der Roboter nicht hindurchlaufen kann. + * Dazu gehören neben den normalen Wänden auch Steine, Türen (vertikal/horizontal) usw. + */ + +public class Wand extends Actor +{ + private int typ; + private static String[] typen = {"Wand","Tuer","Tuer","Schalter","Schalter","Stromquelle","Stromquelle","Stromquelle","Stromquelle","Schloss","Stein","Steine","Schalter","Schalter"}; + private String[] bilder = {"Wand","Tuer2","Tuer1","SchalterEin","SchalterAus","Stromquelle1","Stromquelle2","Stromquelle3","Stromquelle4","Schloss","Stein","Steine","Rufknopf","RufknopfAus"}; + private Schalter schalter; + + /** Erzeugt eine neue Wand vom angegeben Typ + * @param name Name des Typs ("Wand","Tuer2","Tuer1","SchalterEin","SchalterAus","Stromquelle1","Stromquelle2","Stromquelle3","Stromquelle4","Schloss","Stein","Steine","Rufknopf","RufknopfAus") + */ + + public Wand(String name) { + super(); + this.typ = 0; + + for(int i = 0; i < bilder.length; i++) { + if (name.equals(bilder[i])) { + this.typ = i; + } + } + this.setImage("images/"+bilder[typ]+".png"); + schalter = null; + } + + /** Erzeugt eine neue Standardwand + */ + + public Wand() { + super(); + this.typ = 0; + this.setImage("images/"+bilder[typ]+".png"); + schalter = null; + } + + /** untersucht, ob name eine korrekte Bezeichnug für einen Wandtyp ist + * @return erg true, wenn name korrekt ist + */ + public static boolean istWandtyp(String name) { + boolean erg = false; + for(int i = 0; i < typen.length; i++) { + if (name.equals(typen[i])) { + erg = true; + } + } + return erg; + } + + /** Liefert den Typ der Wand + * @return Typname (Wand, Tuer, Stromquelle, Schalter, Schloss, Stein, Steine) + */ + public String getName() { + return this.typen[typ]; + } + + /** Liefert einen mit diesem Objekt verbunden Schalter + * @return Schalter, wenn vorhanden, sonst null + */ + public Schalter getSchalter() { + return this.schalter; + } + + /** Verbindet dieses Objekt mit einem Schalter, der + * die Welt verändern kann. + * @param s Schalterobjekt + */ + public void setSchalter(Schalter s) { + this.schalter = s; + } + + // Systembedingte Routinen + /** + * Wird aufgerufen, wenn der Roboter in die Welt gesetzt wird; + * erweitert nach Vorschlag P.Henriksen 29.6.08 + */ + protected void addedToWorld(World world) { + // Roboter kann nicht auf eine Wand oder einen anderem Roboter gesetzt werden + Actor wand = getOneObjectAtOffset(0, 0, Wand.class); + Actor roboter = getOneObjectAtOffset(0, 0, Roboter.class); + if (wand != null || roboter != null) { + world.removeObject(this); + } + } + + /** + * setLocation(x,y) fuer Roboter wird ueberschrieben, um nicht auf Wand oder + * anderen Roboter ziehen zu koennen! + * -- setzt den Roboter auf eine Kachel, deren Spalte x sowie Reihe y du + * hier vorgibst. Die Nummerierung beginnt jeweils bei 0 !!) + */ + public void setLocation(int x, int y) { + List wand = getWorld().getObjectsAt(x, y, null); + if (wand.isEmpty()) { + super.setLocation(x, y); + } + } + + /* setLocation(x,y) und setRotation(x) koennen nicht verborgen werden, + * weil sie schon in der Oberklasse Actor public sind. + */ + + /** + * setRotation(x) fuer Roboter wird verhindert! + * Es ist unnoetig, da Roboter sich nur in vier Richtungen drehen koennen! + */ + public void setRotation(int x) { + // nichts machen!! + } +} \ No newline at end of file diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/AB1.html b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/AB1.html new file mode 100644 index 0000000..c0e6b00 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/AB1.html @@ -0,0 +1,338 @@ + + + + + +AB1 + + + + + + + + + +
+
+

Class AB1

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • greenfoot.Actor
    • +
    • +
        +
      • Roboter
      • +
      • +
          +
        • AB1
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    public class AB1
    +extends Roboter
    +
    Die Klasse AB1 ist eine Unterklasse von Roboter. + Sie erbt damit alle Attribute und Methoden der Klasse Roboter.
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      AB1() 
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      voidakkuAufnehmen() 
      voidbenutzeAkku() 
      voiddreheLinks() +
      Der Roboter dreht sich um 90 Grad nach links (aus der Sicht des Roboters).
      +
      voiddreheRechts() +
      Der Roboter dreht sich um 90 Grad nach rechts (aus der Sicht des Roboters).
      +
      voideinsVor() +
      Der Roboter geht einen Schritt in die Pfeilrichtung.
      +
      intgetAnzahlSchrauben() 
      booleanistAufSchraube() 
      booleanistVorratLeer() 
      voidschraubeAblegen() 
      voidschraubeAufnehmen() 
      +
        +
      • + + +

        Methods inherited from class Roboter

        +ablegen, addedToWorld, aufnehmen, benutze, dreheUm, gehilfeEinsetzen, getAnzahl, getAnzahl, getEnergie, hatGegenstand, istAufGegenstand, istAufGegenstand, istEnergieLeer, istInventarLeer, istVorne, istVorneFrei, istWandLinks, istWandRechts, istWandVorne, melde, setAnzahlVonGegenstand, setLocation, setRotation, verbraucheEnergie, warne
      • +
      +
        +
      • + + +

        Methods inherited from class greenfoot.Actor

        +act, getImage, getIntersectingObjects, getNeighbours, getObjectsAtOffset, getObjectsInRange, getOneIntersectingObject, getOneObjectAtOffset, getRotation, getWorld, getWorldOfType, getX, getY, intersects, isAtEdge, isTouching, move, removeTouching, setImage, setImage, turn, turnTowards
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AB1

        +
        public AB1()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        einsVor

        +
        public void einsVor()
        +
        Description copied from class: Roboter
        +
        Der Roboter geht einen Schritt in die Pfeilrichtung. + Das macht er nur, wenn sich keine Wand vor ihm befindet oder + er nicht an der Grenze der Welt zur Wand blickt.
        +
        +
        Overrides:
        +
        einsVor in class Roboter
        +
        +
      • +
      + + + +
        +
      • +

        dreheRechts

        +
        public void dreheRechts()
        +
        Description copied from class: Roboter
        +
        Der Roboter dreht sich um 90 Grad nach rechts (aus der Sicht des Roboters).
        +
        +
        Overrides:
        +
        dreheRechts in class Roboter
        +
        +
      • +
      + + + +
        +
      • +

        dreheLinks

        +
        public void dreheLinks()
        +
        Description copied from class: Roboter
        +
        Der Roboter dreht sich um 90 Grad nach links (aus der Sicht des Roboters).
        +
        +
        Overrides:
        +
        dreheLinks in class Roboter
        +
        +
      • +
      + + + +
        +
      • +

        schraubeAufnehmen

        +
        public void schraubeAufnehmen()
        +
      • +
      + + + +
        +
      • +

        schraubeAblegen

        +
        public void schraubeAblegen()
        +
      • +
      + + + +
        +
      • +

        getAnzahlSchrauben

        +
        public int getAnzahlSchrauben()
        +
      • +
      + + + +
        +
      • +

        istAufSchraube

        +
        public boolean istAufSchraube()
        +
      • +
      + + + +
        +
      • +

        istVorratLeer

        +
        public boolean istVorratLeer()
        +
      • +
      + + + +
        +
      • +

        akkuAufnehmen

        +
        public void akkuAufnehmen()
        +
      • +
      + + + +
        +
      • +

        benutzeAkku

        +
        public void benutzeAkku()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/allclasses.html b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/allclasses.html new file mode 100644 index 0000000..21a8bc0 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/allclasses.html @@ -0,0 +1,20 @@ + + + + + +All Classes + + + + + + +

All Classes

+
+ +
+ + diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/constant-values.html b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/constant-values.html new file mode 100644 index 0000000..dadcb46 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/constant-values.html @@ -0,0 +1,35 @@ + + + + + +Constant Field Values + + + + + + + + +
+
+

Constant Field Values

+
+

Contents

+
+
+
+ + diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/element-list b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/element-list new file mode 100644 index 0000000..0e722c7 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/element-list @@ -0,0 +1 @@ +unnamed package diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/index.html b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/index.html new file mode 100644 index 0000000..c88b34c --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/index.html @@ -0,0 +1,23 @@ + + + + + +Generated Documentation (Untitled) + + + + + + + +
+ +

AB1.html

+
+ + diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/logfile.txt b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/logfile.txt new file mode 100644 index 0000000..b65be82 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/logfile.txt @@ -0,0 +1,42 @@ +Class documentation +<---- javadoc command: ----> +E:\Programme\Informatik\Greenfoot361\jdk\bin\javadoc.exe +-author +-version +-nodeprecated +-protected +-Xdoclint:none +-noindex +-notree +-nohelp +-nonavbar +-source +11 +-classpath +E:\Programme\Informatik\Greenfoot361\lib\extensions\greenfoot.jar;E:\Programme\Informatik\Greenfoot361\lib\bluejcore.jar;E:\Programme\Informatik\Greenfoot361\lib\bluejeditor.jar;E:\Programme\Informatik\Greenfoot361\lib\bluejext.jar;E:\Programme\Informatik\Greenfoot361\lib\junit-4.11.jar;E:\Programme\Informatik\Greenfoot361\lib\hamcrest-core-1.3.jar;E:\Programme\Informatik\Greenfoot361\lib\bluej.jar;E:\Programme\Informatik\Greenfoot361\lib\classgraph-4.2.6.jar;E:\Programme\Informatik\Greenfoot361\lib\diffutils-1.2.1.jar;E:\Programme\Informatik\Greenfoot361\lib\commons-logging-api-1.1.2.jar;E:\Programme\Informatik\Greenfoot361\lib\jl1.0.1.jar;E:\Programme\Informatik\Greenfoot361\lib\opencsv-2.3.jar;E:\Programme\Informatik\Greenfoot361\lib\xom-1.2.9.jar;E:\Programme\Informatik\Greenfoot361\lib\lang-stride.jar;E:\Programme\Informatik\Greenfoot361\lib\nsmenufx-2.1.4.jar;E:\Programme\Informatik\Greenfoot361\lib\richtextfx-fat-0.9.0.jar;E:\Programme\Informatik\Greenfoot361\lib\guava-17.0.jar;E:\Programme\Informatik\Greenfoot361\lib\httpclient-4.1.1.jar;E:\Programme\Informatik\Greenfoot361\lib\httpcore-4.1.jar;E:\Programme\Informatik\Greenfoot361\lib\httpmime-4.1.1.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.base.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.controls.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.fxml.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.graphics.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.media.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.properties.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.swing.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.web.jar;F:\Informatik\Fortbildung ZPG IMP9\Greenfoot\OptischeTaeuschungUnterklasse V3 - Animation\jdom-1.1.3.jar;F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20191229\3_vorlagen_tauschordner\01_ReaktorRobot_GF361_Szenario_Roh +-d +F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20191229\3_vorlagen_tauschordner\01_ReaktorRobot_GF361_Szenario_Roh\doc +-encoding +windows-1252 +-charset +windows-1252 +F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20191229\3_vorlagen_tauschordner\01_ReaktorRobot_GF361_Szenario_Roh\AB1.java +<---- end of javadoc command ----> +Loading source file F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20191229\3_vorlagen_tauschordner\01_ReaktorRobot_GF361_Szenario_Roh\AB1.java... +Constructing Javadoc information... +warning: unknown enum constant Tag.Any + reason: class file for threadchecker.Tag not found +warning: unknown enum constant Tag.Any +warning: unknown enum constant Tag.Any +warning: unknown enum constant Tag.Any +Standard Doclet version 11.0.2 +Building tree for all the packages and classes... +Generating F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20191229\3_vorlagen_tauschordner\01_ReaktorRobot_GF361_Szenario_Roh\doc\AB1.html... +Generating F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20191229\3_vorlagen_tauschordner\01_ReaktorRobot_GF361_Szenario_Roh\doc\package-summary.html... +Generating F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20191229\3_vorlagen_tauschordner\01_ReaktorRobot_GF361_Szenario_Roh\doc\constant-values.html... +Building index for all the packages and classes... +Building index for all classes... +Generating F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20191229\3_vorlagen_tauschordner\01_ReaktorRobot_GF361_Szenario_Roh\doc\allclasses.html... +Generating F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20191229\3_vorlagen_tauschordner\01_ReaktorRobot_GF361_Szenario_Roh\doc\allclasses.html... +Generating F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20191229\3_vorlagen_tauschordner\01_ReaktorRobot_GF361_Szenario_Roh\doc\index.html... +4 warnings diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/package-summary.html b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/package-summary.html new file mode 100644 index 0000000..6023a09 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/package-summary.html @@ -0,0 +1,53 @@ + + + + + +<Unnamed> + + + + + + + + +
+
+

Package <Unnamed>

+
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    AB1 +
    Die Klasse AB1 ist eine Unterklasse von Roboter.
    +
    +
  • +
+
+
+ + diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/script.js b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/script.js new file mode 100644 index 0000000..d33d3ab --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/script.js @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; +function loadScripts(doc, tag) { + createElem(doc, tag, 'jquery/jszip/dist/jszip.js'); + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils.js'); + if (window.navigator.userAgent.indexOf('MSIE ') > 0 || window.navigator.userAgent.indexOf('Trident/') > 0 || + window.navigator.userAgent.indexOf('Edge/') > 0) { + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils-ie.js'); + } + createElem(doc, tag, 'search.js'); + + $.get(pathtoroot + "module-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "module-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + moduleSearchIndex = JSON.parse(zip.file("module-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "package-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "package-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + packageSearchIndex = JSON.parse(zip.file("package-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "type-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "type-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + typeSearchIndex = JSON.parse(zip.file("type-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "member-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "member-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + memberSearchIndex = JSON.parse(zip.file("member-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "tag-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "tag-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + tagSearchIndex = JSON.parse(zip.file("tag-search-index.json").asText()); + }); + }); + if (!moduleSearchIndex) { + createElem(doc, tag, 'module-search-index.js'); + } + if (!packageSearchIndex) { + createElem(doc, tag, 'package-search-index.js'); + } + if (!typeSearchIndex) { + createElem(doc, tag, 'type-search-index.js'); + } + if (!memberSearchIndex) { + createElem(doc, tag, 'member-search-index.js'); + } + if (!tagSearchIndex) { + createElem(doc, tag, 'tag-search-index.js'); + } + $(window).resize(function() { + $('.navPadding').css('padding-top', $('.fixedNav').css("height")); + }); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +function show(type) { + count = 0; + for (var key in data) { + var row = document.getElementById(key); + if ((data[key] & type) !== 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) { + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} + +function updateModuleFrame(pFrame, cFrame) { + top.packageFrame.location = pFrame; + top.classFrame.location = cFrame; +} diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/stylesheet.css b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/stylesheet.css new file mode 100644 index 0000000..c027275 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/doc/stylesheet.css @@ -0,0 +1,906 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:#bb7a2a; +} +a[name] { + color:#353833; +} +a[name]:before, a[name]:target, a[id]:before, a[id]:target { + content:""; + display:inline-block; + position:relative; + padding-top:129px; + margin-top:-129px; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} + +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* + * Styles for navigation bar. + */ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.navPadding { + padding-top: 107px; +} +.fixedNav { + position:fixed; + width:100%; + z-index:999; + background-color:#ffffff; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch { + float:right; + margin:0 0 0 0; + padding:0; +} +ul.navListSearch li { + list-style:none; + float:right; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch li label { + position:relative; + right:-16px; +} +ul.subNavList li { + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Styles for page header and footer. + */ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexNav { + position:relative; + font-size:12px; + background-color:#dee3e9; +} +.indexNav ul { + margin-top:0; + padding:5px; +} +.indexNav ul li { + display:inline; + list-style-type:none; + padding-right:10px; + text-transform:uppercase; +} +.indexNav h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* + * Styles for headings. + */ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* + * Styles for page layout containers. + */ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer, +.allClassesContainer, .allPackagesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* + * Styles for tables. + */ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary, +.requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + width:100%; + border-spacing:0; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary, .requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption, +.requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.constantsSummary caption a:link, .deprecatedSummary caption a:link, +.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link, +.usesSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover, +.usesSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.constantsSummary caption a:active, .deprecatedSummary caption a:active, +.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active, +.usesSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.constantsSummary caption a:visited, .deprecatedSummary caption a:visited, +.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited, +.usesSummary caption a:visited { + color:#FFFFFF; +} +.useSummary caption a:link, .useSummary caption a:hover, .useSummary caption a:active, +.useSummary caption a:visited { + color:#1f389c; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span, +.requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span, +.usesSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span, +.overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span, +.overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab, +.packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab, +.overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab, +.typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd, +.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd, .packagesSummary .activeTableTab .tabEnd, +.overviewSummary .activeTableTab .tabEnd, .typeSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd, .packagesSummary .tableTab .tabEnd, +.overviewSummary .tableTab .tabEnd, .typeSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; +} +.rowColor th, .altColor th { + font-weight:normal; +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td, +.requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .useSummary th, +.constantsSummary th, .packagesSummary th, td.colFirst, td.colSecond, td.colLast, .useSummary td, +.constantsSummary td { + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .constantsSummary th, +.packagesSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + font-size:13px; +} +td.colSecond, th.colSecond, td.colLast, th.colConstructorName, th.colDeprecatedItemName, th.colLast { + font-size:13px; +} +.constantsSummary th, .packagesSummary th { + font-size:13px; +} +.providesSummary th.colFirst, .providesSummary th.colLast, .providesSummary td.colFirst, +.providesSummary td.colLast { + white-space:normal; + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.requiresSummary td.colFirst, .requiresSummary th.colFirst, +.packagesSummary td.colFirst, .packagesSummary td.colSecond, .packagesSummary th.colFirst, .packagesSummary th, +.usesSummary td.colFirst, .usesSummary th.colFirst, +.providesSummary td.colFirst, .providesSummary th.colFirst, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colSecond, .memberSummary th.colSecond, .memberSummary th.colConstructorName, +.typeSummary td.colFirst, .typeSummary th.colFirst { + vertical-align:top; +} +.packagesSummary th.colLast, .packagesSummary td.colLast { + white-space:normal; +} +td.colFirst a:link, td.colFirst a:visited, +td.colSecond a:link, td.colSecond a:visited, +th.colFirst a:link, th.colFirst a:visited, +th.colSecond a:link, th.colSecond a:visited, +th.colConstructorName a:link, th.colConstructorName a:visited, +th.colDeprecatedItemName a:link, th.colDeprecatedItemName a:visited, +.constantValuesContainer td a:link, .constantValuesContainer td a:visited, +.allClassesContainer td a:link, .allClassesContainer td a:visited, +.allPackagesContainer td a:link, .allPackagesContainer td a:visited { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor, .altColor th { + background-color:#FFFFFF; +} +.rowColor, .rowColor th { + background-color:#EEEEEF; +} +/* + * Styles for contents. + */ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +td.colLast div { + padding-top:0px; +} +td.colLast a { + padding-bottom:3px; +} +/* + * Styles for formatting effect. + */ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .implementationLabel, .memberNameLabel, .memberNameLink, +.moduleLabelInPackage, .moduleLabelInType, .overrideSpecifyLabel, .packageLabelInType, +.packageHierarchyLabel, .paramLabel, .returnLabel, .seeLabel, .simpleTagLabel, +.throwsLabel, .typeNameLabel, .typeNameLink, .searchTagLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} +.deprecationBlock { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} +div.contentContainer ul.blockList li.blockList h2 { + padding-bottom:0px; +} +/* + * Styles for IFRAME. + */ +.mainContainer { + margin:0 auto; + padding:0; + height:100%; + width:100%; + position:fixed; + top:0; + left:0; +} +.leftContainer { + height:100%; + position:fixed; + width:320px; +} +.leftTop { + position:relative; + float:left; + width:315px; + top:0; + left:0; + height:30%; + border-right:6px solid #ccc; + border-bottom:6px solid #ccc; +} +.leftBottom { + position:relative; + float:left; + width:315px; + bottom:0; + left:0; + height:70%; + border-right:6px solid #ccc; + border-top:1px solid #000; +} +.rightContainer { + position:absolute; + left:320px; + top:0; + bottom:0; + height:100%; + right:0; + border-left:1px solid #000; +} +.rightIframe { + margin:0; + padding:0; + height:100%; + right:30px; + width:100%; + overflow:visible; + margin-bottom:30px; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:#4D7A97; + color:#FFFFFF; +} +.resultItem { + font-size:13px; +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:scroll; + overflow-x:scroll; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:999999; +} +ul.ui-autocomplete li { + float:left; + clear:both; + width:100%; +} +.resultHighlight { + font-weight:bold; +} +#search { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + padding-left:20px; + position:relative; + right:-18px; +} +#reset { + background-color: rgb(255,255,255); + background-image:url('resources/x.png'); + background-position:center; + background-repeat:no-repeat; + background-size:12px; + border:0 none; + width:16px; + height:17px; + position:relative; + left:-4px; + top:-4px; + font-size:0px; +} +.watermark { + color:#545454; +} +.searchTagDescResult { + font-style:italic; + font-size:11px; +} +.searchTagHolderResult { + font-style:italic; + font-size:12px; +} +.searchTagResult:before, .searchTagResult:target { + color:red; +} +.moduleGraph span { + display:none; + position:absolute; +} +.moduleGraph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.methodSignature { + white-space:normal; +} + +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid black; +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid black; +} +table.striped { + border-collapse: collapse; + border: 1px solid black; +} +table.striped > thead { + background-color: #E3E3E3; +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid black; +} +table.striped > tbody > tr:nth-child(even) { + background-color: #EEE +} +table.striped > tbody > tr:nth-child(odd) { + background-color: #FFF +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid black; + border-right: 1px solid black; +} +table.striped > tbody > tr > th { + font-weight: normal; +} diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Akku.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Akku.png new file mode 100644 index 0000000..9dd752a Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Akku.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Atommuell.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Atommuell.png new file mode 100644 index 0000000..4c7dda4 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Atommuell.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Aufzug.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Aufzug.png new file mode 100644 index 0000000..bbb5fe1 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Aufzug.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Aufzugschacht.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Aufzugschacht.png new file mode 100644 index 0000000..0611079 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Aufzugschacht.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Aufzugschacht2.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Aufzugschacht2.png new file mode 100644 index 0000000..7eee31d Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Aufzugschacht2.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Bildnachweise.html b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Bildnachweise.html new file mode 100644 index 0000000..a48df08 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Bildnachweise.html @@ -0,0 +1,112 @@ + + +Bildnachweise + + + +

Akku

+ +Bild von Clker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/de/vectors/batterie-elektrische-strom-positiv-312747/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Fass+Atommuell

+ +Bild von OpenClipart-Vectors auf Pixabay +
URL: https://pixabay.com/vectors/oil-barrel-black-mineral-oil-146440/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig + +

Feuer

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Platten mit und ohne Knöpfe/Schalter usw

+ +
Bild auf Grundlage von Thanks for your Like • donations welcome auf Pixabay +
URL: https://pixabay.com/photos/mdf-platte-structure-fund-wood-186943/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Strom

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

+

Steine

+ +Bild von Clker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/de/vectors/felsen-felsbrocken-stein-48279/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Roboter

+ +
Bild auf Public Domain Vectors +
URL: https://publicdomainvectors.org/de/kostenlose-vektorgrafiken/Comic-Roboter/47643.html (Abrufdatum: 09.10.2019) +
Lizenz: Public Domain +

Feuerlöscher

+ +Bild von JJuni auf Pixabay +
URL: https://pixabay.com/illustrations/fire-extinguisher-fire-fire-truck-1139909/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Bombe

+ +Bild vonClker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/fr/vectors/bombe-engin-explosif-grenade-33424/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Diamant

+ +Bild von M. Maggs auf Pixabay +
URL: https://pixabay.com/de/vectors/gems-edelsteine-wertvolle-juwel-1221161/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Einsatzleiter

+ +Bild von kasiagrafik auf Pixabay +
URL: https://pixabay.com/de/illustrations/feuerwehrmann-feuer-löschen-3812661/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Schraube

+ +Bild von Clker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/de/vectors/schrauben-metall-eisen-verschluss-33597/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Portal

+ +Grundlage des Bildes auf Max Pixel +
URL: https://www.maxpixel.net/Picture-Frame-Ring-Round-Circle-Shape-Pair-2885023 +
Lizenz: CC0 - Public Domain +

Schlüssel

+ +Bild auf Public Domain Vectors +
URL: https://publicdomainvectors.org/en/free-clipart/Vector-clip-art-of-grey-shaded-metal-door-key/21166.html +
Lizenz: Public Domain +

Aufzug

+ + +
Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Bodenplatten

+ +
Selbst gezeichnet (Thomas Schaller, ZPG Informatik) mit Muster aus Gimp 2.0 +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Ölfleck

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Fragezeichen

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Brennstab

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Türen

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +
+
+

Sperrfläche

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

+

Steinwände

+ +Bild auf Grundlage von skeeze auf Pixabay +
URL: https://pixabay.com/de/photos/kiesel-steine-felsen-landschaftsbau-1429207/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Pfeile

+ +Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

+ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Bodenplatte.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Bodenplatte.png new file mode 100644 index 0000000..3fc246e Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Bodenplatte.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Bodenplatte1.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Bodenplatte1.png new file mode 100644 index 0000000..faec2ae Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Bodenplatte1.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Bombe.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Bombe.png new file mode 100644 index 0000000..22fa137 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Bombe.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Brennstab.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Brennstab.png new file mode 100644 index 0000000..96474d3 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Brennstab.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Diamant.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Diamant.png new file mode 100644 index 0000000..6a72319 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Diamant.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Fass.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Fass.png new file mode 100644 index 0000000..cb20765 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Fass.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Feuer.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Feuer.png new file mode 100644 index 0000000..f10488f Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Feuer.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Feuerloescher.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Feuerloescher.png new file mode 100644 index 0000000..d621e5b Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Feuerloescher.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Gegenstand.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Gegenstand.png new file mode 100644 index 0000000..85d86c7 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Gegenstand.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Kontaktplatte.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Kontaktplatte.png new file mode 100644 index 0000000..a31c524 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Kontaktplatte.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Oelfleck.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Oelfleck.png new file mode 100644 index 0000000..ba8d175 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Oelfleck.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Portal.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Portal.png new file mode 100644 index 0000000..957516e Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Portal.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Robby.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Robby.png new file mode 100644 index 0000000..11a1fa4 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Robby.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Robita.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Robita.png new file mode 100644 index 0000000..1ca5e68 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Robita.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Robocount.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Robocount.png new file mode 100644 index 0000000..f53fc43 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Robocount.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Roboter.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Roboter.png new file mode 100644 index 0000000..344804e Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Roboter.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Robson.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Robson.png new file mode 100644 index 0000000..c5aaab5 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Robson.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Rufknopf.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Rufknopf.png new file mode 100644 index 0000000..93c2df7 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Rufknopf.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/RufknopfAus.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/RufknopfAus.png new file mode 100644 index 0000000..47f8273 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/RufknopfAus.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/SchalterAus.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/SchalterAus.png new file mode 100644 index 0000000..94cff09 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/SchalterAus.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/SchalterEin.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/SchalterEin.png new file mode 100644 index 0000000..4902bb1 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/SchalterEin.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Schloss.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Schloss.png new file mode 100644 index 0000000..8940da8 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Schloss.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Schluessel.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Schluessel.png new file mode 100644 index 0000000..a6a444b Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Schluessel.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Schraube.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Schraube.png new file mode 100644 index 0000000..856f1f4 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Schraube.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stein.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stein.png new file mode 100644 index 0000000..0a6d958 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stein.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Steine.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Steine.png new file mode 100644 index 0000000..31f7071 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Steine.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Strom.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Strom.png new file mode 100644 index 0000000..ae3e9fc Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Strom.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stromquelle1.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stromquelle1.png new file mode 100644 index 0000000..f798f0a Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stromquelle1.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stromquelle2.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stromquelle2.png new file mode 100644 index 0000000..3b4ecdb Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stromquelle2.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stromquelle3.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stromquelle3.png new file mode 100644 index 0000000..20ed1d2 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stromquelle3.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stromquelle4.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stromquelle4.png new file mode 100644 index 0000000..124112f Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Stromquelle4.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Tuer1.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Tuer1.png new file mode 100644 index 0000000..3976aba Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Tuer1.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Tuer2.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Tuer2.png new file mode 100644 index 0000000..36b9fb3 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Tuer2.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Wand.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Wand.png new file mode 100644 index 0000000..fd0fdef Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/Wand.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/bluerock.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/bluerock.png new file mode 100644 index 0000000..e6b1175 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/bluerock.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/bluerock1.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/bluerock1.png new file mode 100644 index 0000000..a22ea66 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/bluerock1.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/bluerock2.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/bluerock2.png new file mode 100644 index 0000000..e6b1175 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/bluerock2.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/bluerock3.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/bluerock3.png new file mode 100644 index 0000000..e0974e7 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/bluerock3.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/person.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/person.png new file mode 100644 index 0000000..ededc9e Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/person.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/pfeil0.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/pfeil0.png new file mode 100644 index 0000000..cf54a11 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/pfeil0.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/pfeil180.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/pfeil180.png new file mode 100644 index 0000000..1779e8d Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/pfeil180.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/pfeil270.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/pfeil270.png new file mode 100644 index 0000000..cc5e51d Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/pfeil270.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/pfeil90.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/pfeil90.png new file mode 100644 index 0000000..268af54 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/pfeil90.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/warnung1.png b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/warnung1.png new file mode 100644 index 0000000..e146d62 Binary files /dev/null and b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/images/warnung1.png differ diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/project.greenfoot b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/project.greenfoot new file mode 100644 index 0000000..31c95a1 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/project.greenfoot @@ -0,0 +1,292 @@ +#Greenfoot project file +class.AB1.image=Robita.png +class.AB10.image=Roboter.png +class.AB3.image=Robby.png +class.AB4.image=Robby.png +class.AB5.image=Robita.png +class.AB6_AB7.image=Robocount.png +class.AB8.image=Robson.png +class.AB9.image=Robson.png +class.EinsatzLeiter.image=person.png +class.Gegenstand.image=Gegenstand.png +class.Roboter.image=Roboter.png +class.RoboterWelt.image=Bodenplatte.png +class.Schalter.image=SchalterAus.png +class.Wand.image=Wand.png +dependency1.from=RoboterWelt +dependency1.to=ReadWrite +dependency1.type=UsesDependency +dependency10.from=RoboterWelt +dependency10.to=AB5 +dependency10.type=UsesDependency +dependency11.from=RoboterWelt +dependency11.to=AB6_AB7 +dependency11.type=UsesDependency +dependency12.from=RoboterWelt +dependency12.to=AB8 +dependency12.type=UsesDependency +dependency13.from=RoboterWelt +dependency13.to=Aufzugknopf +dependency13.type=UsesDependency +dependency14.from=RoboterWelt +dependency14.to=AB9 +dependency14.type=UsesDependency +dependency15.from=RoboterWelt +dependency15.to=EinsatzLeiter +dependency15.type=UsesDependency +dependency16.from=RoboterWelt +dependency16.to=AB10 +dependency16.type=UsesDependency +dependency17.from=RoboterWelt +dependency17.to=Message +dependency17.type=UsesDependency +dependency18.from=EinsatzLeiter +dependency18.to=AB9 +dependency18.type=UsesDependency +dependency19.from=EinsatzLeiter +dependency19.to=AB10 +dependency19.type=UsesDependency +dependency2.from=RoboterWelt +dependency2.to=Wand +dependency2.type=UsesDependency +dependency20.from=EinsatzLeiter +dependency20.to=RoboterWelt +dependency20.type=UsesDependency +dependency21.from=Gegenstand +dependency21.to=Schalter +dependency21.type=UsesDependency +dependency22.from=Gegenstand +dependency22.to=Wand +dependency22.type=UsesDependency +dependency23.from=Wand +dependency23.to=Schalter +dependency23.type=UsesDependency +dependency24.from=Wand +dependency24.to=Roboter +dependency24.type=UsesDependency +dependency25.from=Roboter +dependency25.to=Gegenstand +dependency25.type=UsesDependency +dependency26.from=Roboter +dependency26.to=RoboterWelt +dependency26.type=UsesDependency +dependency27.from=Roboter +dependency27.to=Schalter +dependency27.type=UsesDependency +dependency28.from=Roboter +dependency28.to=AB1 +dependency28.type=UsesDependency +dependency29.from=Roboter +dependency29.to=ReadWrite +dependency29.type=UsesDependency +dependency3.from=RoboterWelt +dependency3.to=Gegenstand +dependency3.type=UsesDependency +dependency30.from=Roboter +dependency30.to=Wand +dependency30.type=UsesDependency +dependency31.from=Roboter +dependency31.to=Message +dependency31.type=UsesDependency +dependency32.from=Schalter +dependency32.to=RoboterWelt +dependency32.type=UsesDependency +dependency33.from=Schalter +dependency33.to=Roboter +dependency33.type=UsesDependency +dependency34.from=Schalter +dependency34.to=Wand +dependency34.type=UsesDependency +dependency35.from=Schalter +dependency35.to=Gegenstand +dependency35.type=UsesDependency +dependency36.from=Aufzugknopf +dependency36.to=Gegenstand +dependency36.type=UsesDependency +dependency4.from=RoboterWelt +dependency4.to=Roboter +dependency4.type=UsesDependency +dependency5.from=RoboterWelt +dependency5.to=AB1 +dependency5.type=UsesDependency +dependency6.from=RoboterWelt +dependency6.to=Schalter +dependency6.type=UsesDependency +dependency7.from=RoboterWelt +dependency7.to=AB2 +dependency7.type=UsesDependency +dependency8.from=RoboterWelt +dependency8.to=AB3 +dependency8.type=UsesDependency +dependency9.from=RoboterWelt +dependency9.to=AB4 +dependency9.type=UsesDependency +editor.fx.0.height=739 +editor.fx.0.width=816 +editor.fx.0.x=552 +editor.fx.0.y=100 +height=874 +package.numDependencies=36 +package.numTargets=18 +project.charset=windows-1252 +publish.hasSource=true +publish.locked=false +publish.longDesc= +publish.shortDesc= +publish.tags=demo\ school\ with-source +publish.title=GFRobot_Szenario +publish.url= +readme.height=58 +readme.name=@README +readme.width=47 +readme.x=10 +readme.y=10 +simulation.speed=97 +target1.height=50 +target1.name=EinsatzLeiter +target1.naviview.expanded=true +target1.showInterface=false +target1.type=ClassTarget +target1.width=100 +target1.x=100 +target1.y=190 +target10.height=50 +target10.name=AB3 +target10.naviview.expanded=false +target10.showInterface=false +target10.type=ClassTarget +target10.width=80 +target10.x=190 +target10.y=310 +target11.height=50 +target11.name=Schalter +target11.naviview.expanded=true +target11.showInterface=false +target11.type=ClassTarget +target11.width=80 +target11.x=190 +target11.y=490 +target12.height=50 +target12.name=AB4 +target12.naviview.expanded=false +target12.showInterface=false +target12.type=ClassTarget +target12.width=80 +target12.x=10 +target12.y=370 +target13.height=50 +target13.name=AB5 +target13.naviview.expanded=false +target13.showInterface=false +target13.type=ClassTarget +target13.width=80 +target13.x=100 +target13.y=370 +target14.height=50 +target14.name=Roboter +target14.naviview.expanded=true +target14.showInterface=false +target14.type=ClassTarget +target14.width=80 +target14.x=160 +target14.y=70 +target15.height=50 +target15.name=AB6_AB7 +target15.naviview.expanded=true +target15.showInterface=false +target15.type=ClassTarget +target15.width=80 +target15.x=190 +target15.y=130 +target16.height=50 +target16.name=AB8 +target16.naviview.expanded=false +target16.showInterface=false +target16.type=ClassTarget +target16.width=80 +target16.x=160 +target16.y=10 +target17.height=50 +target17.name=AB9 +target17.naviview.expanded=false +target17.showInterface=false +target17.type=ClassTarget +target17.width=80 +target17.x=120 +target17.y=250 +target18.height=50 +target18.name=AB10 +target18.naviview.expanded=false +target18.showInterface=false +target18.type=ClassTarget +target18.width=80 +target18.x=10 +target18.y=310 +target2.height=50 +target2.name=Aufzugknopf +target2.naviview.expanded=true +target2.showInterface=false +target2.type=ClassTarget +target2.width=100 +target2.x=10 +target2.y=80 +target3.height=50 +target3.name=Message +target3.showInterface=false +target3.type=ClassTarget +target3.width=80 +target3.x=0 +target3.y=0 +target4.height=50 +target4.name=RoboterWelt +target4.naviview.expanded=true +target4.showInterface=false +target4.type=ClassTarget +target4.width=100 +target4.x=10 +target4.y=250 +target5.height=50 +target5.name=Gegenstand +target5.naviview.expanded=true +target5.showInterface=false +target5.type=ClassTarget +target5.width=90 +target5.x=100 +target5.y=550 +target6.height=50 +target6.name=Wand +target6.naviview.expanded=true +target6.showInterface=false +target6.type=ClassTarget +target6.width=80 +target6.x=70 +target6.y=10 +target7.height=50 +target7.name=ReadWrite +target7.naviview.expanded=false +target7.showInterface=false +target7.type=ClassTarget +target7.width=80 +target7.x=10 +target7.y=490 +target8.height=50 +target8.name=AB1 +target8.naviview.expanded=true +target8.showInterface=false +target8.type=ClassTarget +target8.width=80 +target8.x=10 +target8.y=150 +target9.height=50 +target9.name=AB2 +target9.naviview.expanded=false +target9.showInterface=false +target9.type=ClassTarget +target9.width=80 +target9.x=100 +target9.y=310 +version=3.0.0 +width=1134 +world.lastInstantiated=RoboterWelt +xPosition=452 +yPosition=22 diff --git a/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/secret b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/secret new file mode 100644 index 0000000..dc20c76 --- /dev/null +++ b/3_vorlagen_tauschordner/01_ReaktorRobot_GF361_Szenario_Roh/secret @@ -0,0 +1,2 @@ +-618185463 +1084345033 diff --git a/4_loesungen/01_GFRobot_AB_Loesungen.odt b/4_loesungen/01_GFRobot_AB_Loesungen.odt new file mode 100644 index 0000000..fdb92ff Binary files /dev/null and b/4_loesungen/01_GFRobot_AB_Loesungen.odt differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB1.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB1.java new file mode 100644 index 0000000..deb1710 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB1.java @@ -0,0 +1,102 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + * Die Klasse Robita ist eine Unterklasse von Roboter. + * Sie erbt damit alle Attribute und Methoden der Klasse Roboter. + */ + +public class AB1 extends Roboter +{ + + public void einsVor() { + this.verbraucheEnergie(4); + super.einsVor(); + } + + public void dreheRechts() { + super.dreheRechts(); + } + + public void dreheLinks() { + super.dreheLinks(); + } + + public void schraubeAufnehmen() { + if (istAufSchraube()) super.aufnehmen(); + } + + public void schraubeAblegen() { + super.ablegen("Schraube"); + } + + public int getAnzahlSchrauben() { + return super.getAnzahl("Schraube"); + } + + public boolean istAufSchraube() { + return super.istAufGegenstand("Schraube"); + } + + public boolean istVorratLeer() { + return super.getAnzahl("Schraube")==0; + } + + public void akkuAufnehmen() { + if (istAufGegenstand("Akku")) super.aufnehmen(); + } + + public void benutzeAkku() { + if (this.getAnzahl("Akku")>0) benutze("Akku"); + } + + public void leveltest() { + einsVor(); + einsVor(); + einsVor(); + einsVor(); + einsVor(); + dreheLinks(); + einsVor(); + einsVor(); + aufnehmen(); + einsVor(); + aufnehmen(); + benutzeAkku(); + einsVor(); + dreheRechts(); + einsVor(); + aufnehmen(); + dreheRechts(); + einsVor(); + einsVor(); + einsVor(); + einsVor(); + einsVor(); + einsVor(); + einsVor(); + einsVor(); + aufnehmen(); + benutzeAkku(); + dreheLinks(); + einsVor(); + dreheLinks(); + einsVor(); + aufnehmen(); + dreheRechts(); + einsVor(); + dreheRechts(); + einsVor(); + aufnehmen(); + dreheLinks(); + einsVor(); + einsVor(); + dreheLinks(); + einsVor(); + einsVor(); + einsVor(); + einsVor(); + dreheLinks(); + einsVor(); + einsVor(); + } +} \ No newline at end of file diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB10.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB10.java new file mode 100644 index 0000000..6fa3811 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB10.java @@ -0,0 +1,126 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + * Write a description of class AB10 here. + * + * @author (your name) + * @version (a version number or a date) + */ +public class AB10 extends AB3 +{ + /*# + * Aufgaben 1, 2 und 3: Patrouille + */ + public void rundeDrehen() { + int anzGemacht; + anzGemacht = 0; + while (anzGemacht < 20) { + laufeBisWand(); + dreheUm(); + anzGemacht++; + } + + /* Mit for-Schleife: + for (int anzGemacht=0; anzGemacht<10; anzGemacht++ ) { + laufeBisWand(); + dreheUm(); + } // end of for + */ + } + + /*# + * Aufgabe 4: Zu Befehl! + */ + public void dreheAnzahlRunden(int anz) { + for (int i=0; i5) { + einsVor(); + if(this.istAufGegenstand("Diamant")) + { aufnehmen(); } + return true; + } else { + return false; + } + } + + + /*# + * Aufgabe 7: Aufräumen + */ + public void aufraeumen() { + for(int i=0; i<8;i++) { + einsVor(); + einsVor(); + dreheUm(); + } + } + + /* + * Hilfsmethode, die den Aufzug holt. + */ + public void holeAufzug() { + if(!istVorne("Schalter")) { + dreheUm(); + } + benutze("Schalter"); + } + + /*# + * Aufgabe 8: Aufzug + */ + public void fahreAufzug(int etagen, boolean abwaerts) { + if(abwaerts) { + while(getRotation()!=90) dreheRechts(); + } else { + while(getRotation()!=270) dreheRechts(); + } + for(int i=0; i< etagen; i++) einsVor(); + } + + public void fahreInsStockwerk(int etage) { + if(etage > getY()) { + while(getRotation()!=90) dreheRechts(); + } else { + while(getRotation()!=270) dreheRechts(); + } + int etagen = Math.abs(getY()-etage); + for(int i=0; i< etagen; i++) einsVor(); + } + + +} diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB2.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB2.java new file mode 100644 index 0000000..110cf4e --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB2.java @@ -0,0 +1,94 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +public class AB2 extends Roboter +{ + /*# + * Aufgabe 3: Diese Anweisungen stimmen noch nicht wirklich + * Verbessere und Ergaenze. + */ + public void dreheRunde() + { + einsVor(); + einsVor(); + einsVor(); + einsVor(); + dreheLinks(); + einsVor(); + einsVor(); + dreheLinks(); + einsVor(); + einsVor(); + einsVor(); + einsVor(); + dreheLinks(); + einsVor(); + einsVor(); + } + + /*# + * Aufgabe 4: Drehe um + */ + public void dreheUm() + { + // Hier kommen die Befehl für eine 180° Drehung hin + dreheRechts(); + dreheRechts(); + } + + /*# + * Aufgabe 5: Sammle Schrauben + */ + public void sammle3() + { + einsVor(); + aufnehmen(); + einsVor(); + aufnehmen(); + einsVor(); + aufnehmen(); + } + + /*# + * Aufgabe 6: Haken schlagen + * Hier ist Platz fuer deine erste eigens geschriebene Methode! + */ + public void hakenSchlagen() { + dreheLinks(); + einsVor(); + dreheRechts(); + einsVor(); + einsVor(); + dreheRechts(); + einsVor(); + dreheLinks(); + } + + /*# + * Aufgabe 7: Vier Dinge sammeln + */ + public void vierSammeln() { + sammle3(); + einsVor(); + aufnehmen(); + } + + /*# + * Einsatz 2: Bitte den Namen nicht aendern! + */ + public void einsatz2() { + // Hier kommte der Code für den ersten echten Einsatz hin + einsVor(); + einsVor(); + einsVor(); + dreheLinks(); + einsVor(); + einsVor(); + aufnehmen(); + hakenSchlagen(); + sammle3(); + einsVor(); + dreheRechts(); + einsVor(); + einsVor(); + } +} diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB3.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB3.java new file mode 100644 index 0000000..da177f6 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB3.java @@ -0,0 +1,130 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +public class AB3 extends Roboter +{ + + /*# + * Aufgabe 1: Feuer loeschen + */ + public void loesche() { + einsVor(); + aufnehmen(); + vorBisFeuer(); + loescheReihe(); + + } + + /*# + * Aufgaben 3 & 4: Vor bis zum Feuer (wo auch immer das ist) + */ + public void vorBisFeuer() + { + while(!istVorne("Feuer")) { + einsVor(); + } + } + + /*# + * Aufgabe 5: Feuersbrunst loeschen + */ + public void loescheReihe() { + while(istVorne("Feuer")) { + benutze("Feuerloescher"); + einsVor(); + } + } + + /*# + * Aufgabe 6: Teste Reichweite eines Feuerloeschers + */ + public void testReichweite() { + einsVor(); + dreheLinks(); + einsVor(); + aufnehmen(); + dreheUm(); + einsVor(); + einsVor(); + dreheLinks(); + while(getAnzahl("Feuerloescher")>=1) { + benutze("Feuerloescher"); + einsVor(); + } + } + + /*# + * Aufgabe 7: Feuerloescher einsammeln + */ + public void sammleLoescher() + { + while(istVorneFrei()) { + einsVor(); + dreheLinks(); + einsVor(); + aufnehmen(); + dreheUm(); + einsVor(); + dreheLinks(); + einsVor(); + } + } + + /*# + * Hilfsmethode fuer Aufgabe 8 + */ + public void laufeBisWand() { + while(istVorneFrei()) { + einsVor(); + } + } + + /*# + * Aufgabe 8: Homerun + */ + public void laufeBisSackgasse() { + laufeBisWand(); + while(!istWandLinks()) { + dreheLinks(); + laufeBisWand(); + } + } + + /*# + * Einsatz 3: Bitte den Namen nicht aendern! + */ + public void einsatz3() { + sammleLoescher(); + dreheRechts(); + einsVor(); + + while(!istAufGegenstand("Portal")) { + benutze("Akku"); + einsVor(); + dreheRechts(); + vorBisFeuer(); + loescheReihe(); + dreheUm(); + laufeBisWand(); + dreheRechts(); + } + + + /* Alternativ: ohne unnötige Wege + * ------------------------------ + while(!istAufGegenstand("Portal")) { + benutze("Akku"); + einsVor(); + dreheRechts(); + vorBisFeuer(); + loescheReihe(); + dreheLinks(); + benutze("Feuerloescher"); + einsVor(); + dreheLinks(); + loescheReihe(); + laufeBisWand(); + dreheRechts(); + } + */ + } +} \ No newline at end of file diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB4.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB4.java new file mode 100644 index 0000000..3c32705 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB4.java @@ -0,0 +1,133 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + * Write a description of class AB4 here. + * + * @author (your name) + * @version (a version number or a date) + */ +public class AB4 extends Roboter +{ + /*# + * Aufgabe 1: Spur invertieren + */ + /** + * Der Roboter tauscht aus. Wo eine Scharube liegt, hebt er sie auf. + * Wo keine liegt, legt er eine ab, wenn er noch Schrauben + * in seinem Vorrat hat. + */ + public void tausche() { + if (istAufGegenstand("Schraube")) { + aufnehmen(); + } + else { + ablegen("Schraube"); + } + } + + /** + * Der Roboter macht mehrere Dinge. Beschreibe in diesem Kommentar: + * + */ + public void tauscheUndVor() { + tausche(); + if (istVorneFrei()) { + einsVor(); + } + // else ist nicht noetig, weil in dem Fall nichts gemacht wird! + } + + /*# + * Aufgabe 2: Tausche die Schraubenreihe bis zur Wand + */ + public void tauscheBisWand() { + while (!istWandVorne()){ + tauscheUndVor(); + } + tausche(); + } + + /*# + * Aufgabe 3: Fleckenfrei + */ + public void umgeheOelfleck() { + while (!istWandVorne()){ + if(istVorne("Oelfleck")) { + dreheLinks(); + einsVor(); + dreheRechts(); + einsVor(); + einsVor(); + dreheRechts(); + einsVor(); + dreheLinks(); + } + else { + einsVor(); + } + } + } + + /*# + * Aufgabe 4: Schluessel aufheben + */ + public void sammleSchluessel() { + if (istAufGegenstand("Schluessel")) aufnehmen(); + } + + /*# + * Aufgabe 5: Sesam oeffne dich + */ + public void oeffneTuer(){ + dreheLinks(); + if (istVorne("Schloss")) benutze("Schluessel"); + if (istVorne("Schalter")) benutze("Schalter"); + dreheRechts(); + } + + /*# + * Hilfsmethode fuer Aufgabe 9 + */ + public void laufeBisWand() { + while(istVorneFrei()) { + einsVor(); + } + } + + /*# + * Aufgabe 9: Labyrinth + */ + public void labyrinth() { + while(!(istWandVorne() && istWandLinks() && istWandRechts())) { + laufeBisWand(); + if(!istWandLinks()) { + dreheLinks(); + } else { + if(!istWandRechts()) { + dreheRechts(); + } + } + } + } + + /*# + * Einsatz 4: Bitte den Namen nicht aendern! + */ + public void einsatz4() { + labyrinth(); + oeffneTuer(); + labyrinth(); + oeffneTuer(); + labyrinth(); + oeffneTuer(); + einsVor(); + einsVor(); + dreheLinks(); + while(istVorneFrei()) { + einsVor(); + dreheLinks(); + if (istVorne("Schalter")) benutze("Schalter"); + dreheRechts(); + } + } +} diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB5.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB5.java new file mode 100644 index 0000000..6afe726 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB5.java @@ -0,0 +1,206 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + * Write a description of class AB5 here. + * + * @author (your name) + * @version (a version number or a date) + */ +public class AB5 extends Roboter +{ + /*# + * Aufgabe 1, 2, 3 und 10: Upgrade 1 - ein neuer Sensor wird erstellt + */ + public boolean istFassVorne() { + // Aufgabe 3a + + if (istVorne("Fass") || istVorne("Atommuell")) { + // Aufgabe 3b + + return true; + } else { + // Aufgabe 3b + + return false; + } + // Aufgabe 3c + + } + + /*# + * Aufgabe 4: Rueckspiegel + */ + private boolean istFassHinten() { + dreheUm(); + if (istVorne("Fass")) { + dreheUm(); + return true; + }else { + dreheUm(); + einsVor(); + return false; + } + + } + + /*# + * Aufgabe 5: Out of Power + */ + public boolean istEnergieSchwach() { + if (getEnergie()<40) { + return true; + } else { + return false; + } + } + + /*# + * Aufgabe 6: Heavy Duty + */ + public boolean istSchwerBeladen() { + if (getAnzahl() >= 5) { + return true; + }else { + return false; + } + } + + /*# + * Aufgabe 7 und 11: Look Ahead - Upgrade 2 + */ + public boolean istVorFassFrei() { + if (istEnergieSchwach() && getAnzahl("Akku")>0) { + benutze("Akku"); + } + + dreheRechts(); + einsVor(); + dreheLinks(); + einsVor(); + if (istWandVorne()) { + dreheUm(); + einsVor(); + dreheRechts(); + einsVor(); + dreheRechts(); + return false; + } else { + einsVor(); + dreheLinks(); + if (istWandVorne() || istFassVorne()) { + dreheLinks(); + einsVor(); + einsVor(); + dreheRechts(); + einsVor(); + dreheRechts(); + return false; + } else { + dreheLinks(); + einsVor(); + einsVor(); + dreheRechts(); + einsVor(); + dreheRechts(); + return true; + } + } + } + + /*# + * Aufgabe 8: Aufraeumen + */ + public void schiebeFassBisWand() { + while (istVorFassFrei()) { + einsVor(); + } + } + + /*# + * Aufgabe 9: Fuehrerschein + */ + public boolean istKreuzung() { + if (!(istWandVorne()) && !(istWandLinks()) && !(istWandRechts())) { + return true; + }else { + return false; + } + } + + public void geheBisKreuzung() { + while(!istKreuzung()) { + einsVor(); + } + } + + /*# + * Aufgabe 12: Wie koennte man diese Methode nennen? + */ + public void schiebeEcke() { + schiebeFassBisWand(); + dreheLinks(); + einsVor(); + dreheRechts(); + einsVor(); + dreheRechts(); + schiebeFassBisWand(); + } + + /*# + * Einsatz 5: Bitte den Namen nicht aendern! + */ + public void einsatz5() { + geheBisKreuzung(); + einsVor(); + while (!istWandVorne()) { + aufnehmen(); + einsVor(); + } + aufnehmen(); + dreheUm(); + geheBisKreuzung(); + dreheRechts(); + while(!istWandVorne()) { + einsVor(); + dreheRechts(); + if (istFassVorne()) { + schiebeFassBisWand(); + dreheUm(); + laufeBisWand(); + dreheRechts(); + } else { + dreheLinks(); + } + } + dreheLinks(); + dreheLinks(); + geheBisKreuzung(); + einsVor(); + einsVor(); + einsVor(); + einsVor(); + einsVor(); + dreheLinks(); + while (!istFassVorne()) { + einsVor(); + } + schiebeEcke(); + dreheUm(); + laufeBisWand(); + dreheLinks(); + laufeBisWand(); + dreheRechts(); + einsVor(); + dreheRechts(); + while (!istFassVorne()) { + einsVor(); + } + schiebeEcke(); + } + + public void laufeBisWand() { + while(!istWandVorne()) { + einsVor(); + } + } +} \ No newline at end of file diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB6.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB6.java new file mode 100644 index 0000000..13681f7 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB6.java @@ -0,0 +1,246 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + * Write a description of class AB6 here. + * + * @author (your name) + * @version (a version number or a date) + */ +public class AB6 extends Roboter +{ + // Eigenschaften eines AB6 - Objektvariablen (Attribute) werden deklariert: + private int schritte; + // Aufgabe 8: Hier wird das Attribut drehungen deklariert: + + private int brennstaebe; + + /*# + * Konstruktor eines AB6: Der Startzustand wird definiert + */ + public AB6() { + // Startzustand eines AB6 - Objektvariablen werden initialiaiert: + this.schritte = 0; + // Aufgabe 8: Initialisiere das Attribut drehungen hier: + + this.brennstaebe = 0; + } + + /*# + * AB7 - Aufgabe 4: Super + */ + public void einsVorMitZaehlen() { + // Das Attribut Schritte wird um eins erhoeht: + this.schritte++; + super.einsVor(); + } + + /*# + * Aufgabe 7: Schrittezaehler + * AB7 - Aufgabe 5: Brennstaebe zaehlen + */ + public void bisWandMitZaehlen() { + + } + + /*# + * Aufgabe 8: Drehzaehler + * AB7 - Aufgabe 6: + */ + public void dreheRechtsMitZaehlen() { + + } + + public void dreheLinksMitZaehlen() { + + } + + /*# + * Aufgabe 9: Eine get-Methode + */ + public int getSchritte() { + return 0; + } + + /*# + * Aufgabe 10: Deine get-Methode + */ + // Hier kommt deine get-Methode fuer die Anzahl der Drehungen hin. + // Benenne sie sinnvoll: + + /*# + * Methoden fuer den Einsatz 6 + */ + public boolean istFassLinks() { + // Kopiere dir den Methodeninhalt aus AB5 und entferne das return true; + return true; + } + + public boolean istWandLinks() { + // Kopiere dir den Methodeninhalt aus AB5 und entferne das return true; + return true; + } + + /*# + * Einsatz 6: + */ + public void einsatz6() { + + } + + /*# + * Weitere Methoden zum Arbeitsblatt 7: + */ + + /*# + * AB7 - Aufgabe 1: Kreuzungen zaehlen + */ + + /*# + * AB7 - Aufgabe 6: Standardmethoden ueberschreiten + */ + + /*# + * AB7 - Aufgabe 7: Fass links + */ + // Hier kommt die Methode istFassLinks() hin: + + /*# + * AB7 - Aufgabe 8: Ueberschreiben + */ + public boolean wandVorne() { + // Entferne das return true; + return true; + } + + public boolean fassLinks() { + // Entferne das return true; + return true; + } + + public boolean wandLinks() { + // Entferne das return true; + return true; + } + + /*# + * Einsatz 7: + */ + public void einsatz7(){ + + } + + /*# + * Methoden fuer deinen Lehrer: + */ + public int getBrennstaebe() { + return brennstaebe; + } + + /*# + * Loesungen: + */ + // private int schritte; + // private int drehungen; + // private int brennstaebe; + + // public AB6() { + // this.schritte = 0; + // this.drehungen = 0; + // this.brennstaebe = 0; + // } + + // public void einsVor() { + // this.schritte++; + // super.einsVor(); + // } + + // public void dreheRechtsMitZaehlen() { + // this.drehungen++; + // dreheRechts(); + // } + + // public void dreheLinksMitZaehlen() { + // this.drehungen--; + // dreheLinks(); + // } + + // public void bisWandMitZaehlen() { + // while(!this.istWandVorne()) { + // einsVor(); + // if(istAufGegenstand("Brennstab")) { + // this.brennstaebe++; + // } + // } + + // } + + // public int getSchritte() { + // return this.schritte; + // } + + // public boolean istWandVorne() { + // if (super.istWandVorne() || this.istFassVorne()) { + // return true; + // } else { + // return false; + // } + // } + + // public boolean istFassLinks() { + // dreheLinks(); + // if (istFassVorne()) { + // dreheRechts(); + // return true; + // } else { + // dreheRechts(); + // return false; + // } + // } + + // public boolean istWandLinks() { + // if (super.istWandLinks() || istFassLinks()) { + // return true; + // } else { + // return false; + // } + // } + + // public void einsatz6() { + // bisWandMitZaehlen(); + // dreheRechtsMitZaehlen(); + // while(!this.istAufGegenstand("Portal")) { + // if (!this.istWandLinks() && drehungen!=0) { + // dreheLinksMitZaehlen(); + // } else { + // while(this.istWandVorne()) { + // dreheRechtsMitZaehlen(); + // } + // } + // einsVor(); + // } + // } + + // public void einsatz7(){ + // einsVor(); + // this.brennstaebe = 0; + // while(!istWandVorne()) { + // if(istKreuzung()) { + // dreheRechts(); + // bisWandMitZaehlen(); + // dreheUm(); + // einsVor(); + // geheBisKreuzung(); + // bisWandMitZaehlen(); + // dreheUm(); + // einsVor(); + // geheBisKreuzung(); + // dreheLinks(); + // } + // einsVor(); + // } + // aufnehmen(); + // benutze("Akku"); + // einsatz5(); + + // } +} \ No newline at end of file diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB6_AB7.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB6_AB7.java new file mode 100644 index 0000000..97c8976 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB6_AB7.java @@ -0,0 +1,178 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + * Write a description of class AB6 here. + * + * @author (your name) + * @version (a version number or a date) + */ +public class AB6_AB7 extends AB5 +{ + // Eigenschaften eines AB6 und AB7 - Objektvariablen (Attribute) werden deklariert: + private int schritte; + // Aufgabe 8: Hier wird das Attribut drehungen deklariert: + private int drehungen; + + private int brennstaebe; + + /*# + * Konstruktor eines AB6 und AB7: Der Startzustand wird definiert + */ + public AB6_AB7() { + // Startzustand eines AB6 - Objektvariablen werden initialiaiert: + this.schritte = 0; + // Aufgabe 8: Initialisiere das Attribut drehungen hier: + this.drehungen = 0; + this.brennstaebe = 0; + } + + /*# + * AB7 - Aufgabe 4: Super + */ + public void einsVor() { + // Das Attribut Schritte wird um eins erhoeht: + this.schritte++; + super.einsVor(); + } + + /*# + * AB6 - Aufgabe 7: Schrittezaehler + * AB7 - Aufgabe 5: Brennstaebe zaehlen + */ + public void bisWandMitZaehlen() { + while(!this.istWandVorne()) { + einsVor(); + if(istAufGegenstand("Brennstab")) { + this.brennstaebe++; + } + } + } + + /*# + * AB6 - Aufgabe 8: Drehzaehler + * AB7 - Aufgabe 6: + */ + public void dreheRechtsMitZaehlen() { + this.drehungen++; + dreheRechts(); + } + + public void dreheLinksMitZaehlen() { + this.drehungen--; + dreheLinks(); + } + + /*# + * AB6 - Aufgabe 9: Eine get-Methode + */ + public int getSchritte() { + return this.schritte; + } + + /*# + * AB6 - Aufgabe 10: Deine get-Methode + */ + // Hier kommt deine get-Methode fuer die Anzahl der Drehungen hin. + // Benenne sie sinnvoll: + + /*# + * AB6 - Methoden fuer den Einsatz 6 + */ + public boolean istFassLinks() { + dreheLinks(); + if (istFassVorne()) { + dreheRechts(); + return true; + } else { + dreheRechts(); + return false; + } + } + + public boolean istWandLinks() { + if (super.istWandLinks() || istFassLinks()) { + return true; + } else { + return false; + } + } + + /*# + * Einsatz 6: + */ + public void einsatz6() { + bisWandMitZaehlen(); + dreheRechtsMitZaehlen(); + while(!this.istAufGegenstand("Portal")) { + if (!this.istWandLinks() && drehungen!=0) { + dreheLinksMitZaehlen(); + } else { + while(this.istWandVorne()) { + dreheRechtsMitZaehlen(); + } + } + einsVor(); + } + } + + /*# + * Weitere Methoden zum AB 7: + */ + + /*# + * AB7 - Aufgabe 1: Kreuzungen zaehlen + */ + + /*# + * AB7 - Aufgabe 6: Standardmethoden ueberschreiten + */ + + /*# + * AB7 - Aufgabe 7: Fass links + */ + // Hier kommt die Methode istFassLinks() hin: + + /*# + * AB7 - Aufgabe 8: Ueberschreiben + */ + public boolean istWandVorne() { + if (super.istWandVorne() || this.istFassVorne()) { + return true; + } else { + return false; + } + } + + /*# + * AB7 - Einsatz 7: + */ + public void einsatz7(){ + einsVor(); + this.brennstaebe = 0; + while(!istWandVorne()) { + if(istKreuzung()) { + dreheRechts(); + bisWandMitZaehlen(); + dreheUm(); + einsVor(); + geheBisKreuzung(); + bisWandMitZaehlen(); + dreheUm(); + einsVor(); + geheBisKreuzung(); + dreheLinks(); + } + einsVor(); + } + aufnehmen(); + benutze("Akku"); + einsatz6(); + } + + /*# + * Methoden fuer deinen Lehrer: + */ + public int getBrennstaebe() { + return brennstaebe; + } +} \ No newline at end of file diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB8.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB8.java new file mode 100644 index 0000000..9929f5a --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB8.java @@ -0,0 +1,203 @@ +import greenfoot.*; + +/** + * Write a description of class AB8 here. + * + * @author (your name) + * @version (a version number or a date) + */ +public class AB8 extends AB5 +{ + private int zaehler1; + private double wert; + + public AB8() { + this.zaehler1 = 0; + this.wert = 0.0; + } + + /*# + * Aufgabe 1: Zwei Methoden, die fast das gleiche machen ... + */ + public int zaehleSchritteBisWand1() { + while(!istWandVorne()) { + this.zaehler1++; + einsVor(); + } + return this.zaehler1; + } + + public int zaehleSchritteBisWand2() { + int zaehler2; + zaehler2 = 0; + while(!istWandVorne()){ + zaehler2++; + einsVor(); + } + return zaehler2; + } + + /*# + * Aufgabe 4: Summe der x- und y-Koordinate + */ + public int gibPositionssumme() { + int x; + int y; + int summe; + x = getX(); + y = getY(); + summe = x + y; + return summe; + } + + /*# + * Aufgabe 5: Abstabdsberechnungen + */ + public int gibLaenge() { + int x1; + int x2; + int x_diff; + int y1; + int y2; + int y_diff; + int laenge; + x1 = getX(); + y1 = getY(); + laufeBisWand(); + x2 = getX(); + y2 = getY(); + x_diff = x2-x1; + if (x_diff<0) { + x_diff = -x_diff; + } + y_diff = y2-y1; + if (y_diff<0) { + y_diff=-y_diff; + } + if (x_diff==0) { + laenge = y_diff+1; + } + else { + laenge = x_diff+1; + } + return laenge; + } + + /*# + * Aufgabe 6: Flaeche + */ + public int gibRaumgroesse() { + int breite; + int hoehe; + int groesse; + breite = gibLaenge(); + dreheRechts(); + hoehe = gibLaenge(); + groesse = breite * hoehe; + return groesse; + } + + /*# + * Aufgabe 7: + */ + public boolean istFassRechts() { + dreheRechts(); + if (istVorne("Fass")) { + dreheLinks(); + return true; + }else { + dreheLinks(); + return false; + } + } + + public int gibLaengeFassReihe() { + int laenge; + laenge = 0; + while(istFassRechts()) { + laenge++; + einsVor(); + } + return laenge; + } + + public int gibAnzahlFaesser() { + int breite; + int hoehe; + int groesse; + einsVor(); + breite = gibLaengeFassReihe(); + dreheRechts(); + einsVor(); + hoehe = gibLaengeFassReihe(); + groesse = breite*hoehe; + return groesse; + } + + /*# + * Aufgabe 9: Sammler + */ + public void sammeln() { + while(!istWandVorne()) { + einsVor(); + if (istAufGegenstand("Schraube")) { + this.wert = this.wert+0.20; + aufnehmen(); + } + if (istAufGegenstand("Akku")) { + this.wert = this.wert+2.40; + aufnehmen(); + } + if (istAufGegenstand("Schluessel")) { + this.wert = this.wert+5.00; + aufnehmen(); + } + if (istAufGegenstand("Feuerloescher")) { + this.wert = this.wert+40.00; + aufnehmen(); + } + } + } + + // Hier muss noch eine get-Methode hin: + public double getWert() { + return this.wert; + } + + /*# + * Aufgabe 10: Finanzamt + */ + public double gibMehrwertSteuer() { + double steuer; + steuer = this.wert * 0.19; + return steuer; + } + + /*# + * Einsatz 8: Den Namen bitte nicht aendern! + */ + public int einsatz8() { + int g; + g = 0; + while(!istWandVorne()) { + if (!istWandRechts()) { + dreheRechts(); + + einsVor(); + einsVor(); + einsVor(); + einsVor(); + dreheLinks(); + g = g + gibRaumgroesse(); + dreheRechts(); + laufeBisWand(); + dreheRechts(); + laufeBisWand(); + dreheRechts(); + } + einsVor(); + } + + return g-1; + } +} diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB9.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB9.java new file mode 100644 index 0000000..e8dbd61 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/AB9.java @@ -0,0 +1,112 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +public class AB9 extends Roboter +{ + + /** + * Hilfesmethode zum Holen des Aufzugs. + */ + public void holeAufzug() { + if(!istVorne("Schalter")) { + dreheUm(); + } + benutze("Schalter"); + } + + /*# + * Aufgabe 3: Drehe Roboter + */ + + public void dreheRoboter(int richtung) { + while(getRotation() != richtung) { // Solange die die Richtung des Roboters nicht die geforderte Richtung ist + dreheRechts(); // drehe nach rechts + } + } + + /*# + * Aufgabe 4: Laufe zu X-Position + */ + public void laufeZuXPos(int x) { + if(x < getX()) { // Drehe in richtige Richtung + dreheRoboter(180); + } else { + dreheRoboter(0); + } + while(x != getX()) { // Laufe solange die x-Koordinate noch nicht stimmt + einsVor(); + } + } + + /*# + * Aufgabe 5: Fahre Aufzug + */ + public void fahreAufzug(int etagen, boolean abwaerts) { + if (istAufGegenstand("Aufzug")) { + if(abwaerts) { + dreheRoboter(90); + } else { + dreheRoboter(270); + } + + while(etagen>0 && istVorneFrei()) { + einsVor(); + etagen--; + } + } + } + + /*# + * Aufgabe 6: Fahre ins Stockwerk + */ + public void fahreInsStockwerk(int etage) { + if(getY() < etage) { // Nach unten fahren? + dreheRoboter(90); + }else { + dreheRoboter(270); + } + while(getY() != etage && istVorneFrei()) { // Fahre bis zur richtigen Etage + einsVor(); + } + } + + /*# + * Bombe sichern: + */ + public void holeBombeUndKehreZurueck (int xBombe, int yBombe){ + while (!istAufGegenstand("Aufzug")) { + einsVor(); + } + fahreInsStockwerk(yBombe); + int x = getX(); + laufeZuXPos(xBombe); + aufnehmen(); + laufeZuXPos(x); + } + + /*# + * Aufgabe 8: Sprengen + */ + public void sprenge(int x, int y) { + fahreInsStockwerk(y); + laufeZuXPos(x); + benutze("Bombe"); + } + + /*# + * Aufgabe 9: Stollen fuellen ... + * Hier darfst du mal ganz alleine eine Methode mit Parametern implementieren ;-) + */ + + public void legeZweierreihe(int breite) { + while(breite>0){ + ablegen("Brennstab"); + einsVor(); + ablegen("Brennstab"); + breite--; + } + } + /*# + * Platz fuer weitere Methode(n), die du eventuell fuer den Einsatz 9 benoetigst: + */ + +} \ No newline at end of file diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Aufzugknopf.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Aufzugknopf.java new file mode 100644 index 0000000..d2af2bd --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Aufzugknopf.java @@ -0,0 +1,58 @@ +import greenfoot.*; +import java.util.List; + +/** + * Spezieller Schalter zum Rufen eins Aufzugs. + * + * @author Thomas Schaller + * @version 28.06.2017 V1.0 + */ +public class Aufzugknopf extends Schalter +{ + Gegenstand aufzug; + int stockwerk; + + /** + * Konstruktor Aufzugknopf + */ + public Aufzugknopf(World w) + { + super(w); + aufzug = null; + } + + /** + * Setzt den dazugehörigen Aufzug + * + * @param aufzug Ein Gegenstand vom Typ Aufzug + */ + public void setAufzug(Gegenstand aufzug, int stockwerk) + { + this.aufzug = aufzug; + this.stockwerk = stockwerk; + } + + public void rufeAufzug() { + List beiAufzug = aufzug.getWorld().getObjectsAt(aufzug.getX(), aufzug.getY(), Actor.class); + while(aufzug.getY() != stockwerk) { + int neuy =aufzug.getY()-(aufzug.getY()-stockwerk)/Math.abs(aufzug.getY()-stockwerk); + for(Actor a : beiAufzug) { + if(a != aufzug) + a.setLocation(aufzug.getX(), neuy); + } + aufzug.setLocation(aufzug.getX(), neuy); + Greenfoot.delay(1); + } + } + + /** Schaltet den Schalter um, d.h. von on auf off oder umgekehrt + */ + public void umschalten() { + anschalten(); + Greenfoot.delay(1); + rufeAufzug(); + ausschalten(); + Greenfoot.delay(1); + } + +} diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/EinsatzLeiter.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/EinsatzLeiter.java new file mode 100644 index 0000000..2a72709 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/EinsatzLeiter.java @@ -0,0 +1,207 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.util.List; + +public class EinsatzLeiter extends Actor +{ + // Hier werden alle Roboter aufgelistet, denen der Einsatzleiter Befehle erteilen kann: + AB9 legeRoboter; //Legeroboter + AB9 sprengRoboter1; //Sprengroboter 1 + AB9 sprengRoboter2; //Sprengroboter 2 + AB9 aufzugRoboter; //Aufzugroboter + + // Roboter für Einsatz 10 + AB10 roboter1; + AB10 roboter2; + AB10 roboter3; + + /*# + * Aufgabe 10: Anweisung 1 + * Hier werden Methoden am sprengRoboter1 aufgerufen. + * Tipp: Schreibe sprengRoboter1. und druecke STRG+Leertaste --> Schau mal, welche Methoden du alle zur Verfuegung hast ... + */ + public void holeBombeUndSprenge (int bx, int by, int sx, int sy){ + // Hinweis: + // Der sprengRoboter1 bekommt den Befehl holeBombeUndKehreZurueck(bx, by), wenn du vorher beim AB9-Roboter programmiert hast. + // (bx|by) sind die Koordinaten der Bombe --> das muss dann der Methodenaufrufer eingeben (also du spaeter, + // wenn du am EinsatzLeiter diese Methode aufrufst): sprengRoboter1.holeBombeUndKehreZurueck(bx, by); + // Gib dem sprengRoboter1 den Befehl zum Sprengen an der Position (sx,sy): + // Kombiniere nun die richtigen Methodenaufrufe beim Aufzug- und Sprengroboter. + aufzugRoboter.holeAufzug(); + sprengRoboter1.holeBombeUndKehreZurueck(bx,by); + sprengRoboter1.sprenge(sx,sy); + } + + + + /*# + * Ab hier kannst du Hilfs-Methoden fuer den Einsatz 9+10 implementieren: + */ + + /*# + * Einsatz 9: + */ + public void einsatz9() { + aufzugRoboter.holeAufzug(); + sprengRoboter1.holeBombeUndKehreZurueck(2,4); + sprengRoboter1.sprenge(9,5); + sprengRoboter1.dreheUm(); + sprengRoboter1.holeBombeUndKehreZurueck(3,4); + sprengRoboter1.sprenge(3,8); + sprengRoboter1.dreheUm(); + sprengRoboter1.einsVor(); + sprengRoboter1.fahreInsStockwerk(4); + sprengRoboter1.dreheLinks(); + sprengRoboter1.einsVor(); + sprengRoboter1.einsVor(); + sprengRoboter1.einsVor(); + sprengRoboter1.einsVor(); + sprengRoboter1.dreheUm(); + aufzugRoboter.holeAufzug(); + sprengRoboter2.holeBombeUndKehreZurueck(4,4); + sprengRoboter2.dreheUm(); + sprengRoboter2.einsVor(); + sprengRoboter2.aufnehmen(); + sprengRoboter2.dreheUm(); + sprengRoboter2.einsVor(); + sprengRoboter2.sprenge(11,9); + sprengRoboter2.benutze("Bombe"); + sprengRoboter2.dreheUm(); + sprengRoboter2.einsVor(); + sprengRoboter2.fahreInsStockwerk(4); + sprengRoboter2.dreheLinks(); + sprengRoboter2.einsVor(); + aufzugRoboter.holeAufzug(); + while(!legeRoboter.istAufGegenstand("Aufzug"))legeRoboter.einsVor(); + legeRoboter.fahreInsStockwerk(5); + legeRoboter.dreheLinks(); + + legeRoboter.einsVor(); + legeRoboter.legeZweierreihe(3); + legeRoboter.dreheUm(); + while(!legeRoboter.istAufGegenstand("Aufzug"))legeRoboter.einsVor(); + legeRoboter.fahreInsStockwerk(8); + legeRoboter.dreheRechts(); + legeRoboter.einsVor(); + legeRoboter.benutze("Akku"); + legeRoboter.benutze("Akku"); + + legeRoboter.legeZweierreihe(3); + + legeRoboter.dreheUm(); + while(!legeRoboter.istAufGegenstand("Aufzug"))legeRoboter.einsVor(); + legeRoboter.fahreInsStockwerk(9); + legeRoboter.dreheLinks(); + legeRoboter.einsVor(); + legeRoboter.benutze("Akku"); + legeRoboter.benutze("Akku"); + legeRoboter.legeZweierreihe(5); + legeRoboter.dreheUm(); + while(!legeRoboter.istAufGegenstand("Aufzug"))legeRoboter.einsVor(); + legeRoboter.benutze("Akku"); + legeRoboter.fahreInsStockwerk(2); + legeRoboter.dreheRechts(); + legeRoboter.einsVor(); + legeRoboter.einsVor(); + + sprengRoboter1.holeAufzug(); + sprengRoboter2.dreheUm(); + sprengRoboter2.einsVor(); + aufzugRoboter.holeAufzug(); + sprengRoboter2.einsVor(); + sprengRoboter1.holeAufzug(); + sprengRoboter1.dreheUm(); + while(!sprengRoboter1.istAufGegenstand("Aufzug"))sprengRoboter1.einsVor(); + aufzugRoboter.holeAufzug(); + + + } + /*# + * Einsatz 10: + */ + + public void einsatz10() { + roboter1.holeAufzug(); + AB10 r = roboter3; + r.laufeBisWand(); + r.fahreAufzug(4,true); + r.dreheLinks(); + r.geheSchritte(3); + r.benutze("Bombe"); + + for(int i=0; i<3; i++) { + while(r.einsVorSammle()); + r.dreheUm(); + } + r.dreheLinks(); + if(r.einsVorSammle()) { + r.dreheRechts(); + for(int i=0; i<4; i++) { + while(r.einsVorSammle()); + r.dreheUm(); + } + } else { + r.dreheRechts(); + } + r.benutze("Bombe"); + for(int i=0; i<2; i++) { + while(r.einsVorSammle()); + r.dreheUm(); + } + r.dreheLinks(); + if(r.einsVorSammle()) { + r.dreheRechts(); + for(int i=0; i<2; i++) { + while(r.einsVorSammle()); + r.dreheUm(); + } + } + + roboter1.holeAufzug(); + r = roboter2; + r.ablegen("Bombe"); + r.laufeBisWand(); + r.fahreAufzug(8,true); + r.dreheRechts(); + r.geheSchritte(3); + roboter1.dreheUm(); + roboter1.einsVor(); + roboter1.aufnehmen(); + roboter1.benutze("Bombe"); + for(int j=0; j<4; j++) { + for(int i=0; i<2; i++) { + while(roboter1.einsVorSammle()); + roboter1.dreheUm(); + } + roboter1.dreheRechts(); + roboter1.einsVorSammle(); + roboter1.dreheLinks(); + } + + r.benutze("Bombe"); + for(int i=0; i<6; i++) { + while(r.einsVorSammle()); + r.dreheUm(); + } + + } + + /*# + * ------------------------------------------------------------------- + * Bitte so lassen - diese Methode wird nur von euren Lehrer verwendet + */ + public void nehmeKontaktAuf() { + List l9 = ((RoboterWelt)getWorld()).getObjects(AB9.class); + if (l9.size()>0) { + aufzugRoboter = l9.get(0); + sprengRoboter1 = l9.get(1); + sprengRoboter2 = l9.get(2); + legeRoboter = l9.get(3); + } + List l10 = ((RoboterWelt)getWorld()).getObjects(AB10.class); + if (l10.size()>0) { + roboter1 = l10.get(0); + roboter2 = l10.get(1); + roboter3 = l10.get(2); + } + } +} diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Gegenstand.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Gegenstand.java new file mode 100644 index 0000000..600fab0 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Gegenstand.java @@ -0,0 +1,145 @@ +import greenfoot.*; +import java.util.*; +import javax.swing.JOptionPane; + +/** Die Klasse Gegenstand fasst alle in der Welt liegenden Actors zusammen, + * die bewegt werden können. + */ +public class Gegenstand extends Actor +{ + private int typ; + private static String[] typen = {"Akku","Schraube","Brennstab","Schluessel","Oelfleck","Portal","Strom","Feuer","Feuerloescher","Fass","Atommuell","Bombe", "Kontaktplatte","Aufzug","Diamant"}; + private boolean[] moveable = {true, true, true, true, false, false, false, false, true, false, false, true, false, false, true}; + private int[] schaden = {0, 0, 0, 0, 20, 0, 50, 40, 0, 0, 0, 0, 0, 0, 0}; + private int[] lebensdauer = {1, 1, 1, 1, 0, 1000, 0, 0, 5, 1000, 1000,1, 1000, 1000,1000}; + private Schalter schalter = null; + + /** erzeugt einen neuen Gegenstand vom angegeben Typ + * @param name Typ des Gegenstands ("Akku","Schraube","Brennstab","Schluessel","Oelfleck","Portal","Strom","Feuer","Feuerloescher","Fass","Atommuell","Bombe", "Kontaktplatte", "Aufzug", "Diamant") + */ + public Gegenstand(String name) { + super(); + this.typ = -1; + + for(int i = 0; i < typen.length; i++) { + if (name.equals(typen[i])) { + this.typ = i; + } + } + if(this.typ == -1) { + JOptionPane.showMessageDialog(null, "Ich kenne kein(e) "+name+". Daher erzeuge ich einen Akku.", "Meldung!", + JOptionPane.INFORMATION_MESSAGE); + this.typ = 0; + } + this.setImage("images/"+typen[typ]+".png"); + } + + /** erzeugt einen Standardgegenstand (Akku) + */ + public Gegenstand() { + super(); + this.typ = 0; + this.setImage("images/Akku.png"); + } + + /** untersucht, ob name eine korrekte Bezeichnug für einen Gegenstand ist + * @return erg true, wenn name korrekt ist + */ + public static boolean istGegenstand(String name) { + boolean erg = false; + for(int i = 0; i < typen.length; i++) { + if (name.equals(typen[i])) { + erg = true; + } + } + return erg; + } + + /** liefert den Typ des Gegenstands + * @return Typ ("Akku","Schraube","Brennstab","Schluessel","Oelfleck","Portal","Strom","Feuer","Feuerloescher","Fass","Atommuell","Bombe", "Kontaktplatte", "Aufzug", "Diamant") + */ + public String getName() { + return this.typen[typ]; + } + + /** liefert, ob der Gegenstand vom Roboter aufgenommen werden kann + * @return true, wenn der Gegenstand weggetragen werden darf. + */ + public boolean istBeweglich() { + return this.moveable[typ]; + } + + /** liefert den Schaden an der Energieversorgung, wenn der Roboter mit dem Gegenstand + * auf einem Feld ist. + * @return abgezogen Energiepunkte + */ + public int getSchaden() { + return this.schaden[typ]; + } + + /** liefert die Anzahl der Einsätze bevor der Gegenstand verbraucht ist + * @return z.B. 1 für Akku, 5 für Feuerlöscher + */ + public int getLebensdauer() { + return this.lebensdauer[typ]; + } + + /** liefert einen Schalter, der mit diesem Gegenstand verbunden ist (z.B. bei Kontaktplatten) + * @return Schalterobjekt + */ + public Schalter getSchalter() { + return this.schalter; + } + + /** Verbindet diese Objekt mit einem Schalter (z.B. bei Kontaktplatten) + * @param s Schalterobjekt + */ + public void setSchalter(Schalter s) { + this.schalter = s; + } + + /** Benutzt das Objekt und setzt dadurch die Lebensdauer herunter + */ + public void benutze() { + this.lebensdauer[typ]--; + } + + // Systembedingte Routinen + /** + * Wird aufgerufen, wenn der Roboter in die Welt gesetzt wird; + * erweitert nach Vorschlag P.Henriksen 29.6.08 + */ + protected void addedToWorld(World world) { + // Roboter kann nicht auf eine Wand oder einen anderem Roboter gesetzt werden + Actor wand = getOneObjectAtOffset(0, 0, Wand.class); + if (wand != null) { + world.removeObject(this); + } + } + + /** + * setLocation(x,y) fuer Roboter wird ueberschrieben, um nicht auf Wand oder + * anderen Roboter ziehen zu koennen! + * -- setzt den Roboter auf eine Kachel, deren Spalte x sowie Reihe y du + * hier vorgibst. Die Nummerierung beginnt jeweils bei 0 !!) + */ + public void setLocation(int x, int y) { + List wand = getWorld().getObjectsAt(x, y, Wand.class); + List g = getWorld().getObjectsAt(x,y, Gegenstand.class); + + if (wand.isEmpty() && g.isEmpty()) { + super.setLocation(x, y); + } + } + /* setLocation(x,y) und setRotation(x) koennen nicht verborgen werden, + * weil sie schon in der Oberklasse Actor public sind. + */ + + /** + * setRotation(x) fuer Roboter wird verhindert! + * Es ist unnoetig, da Roboter sich nur in vier Richtungen drehen koennen! + */ + public void setRotation(int x) { + // nichts machen!! + } +} \ No newline at end of file diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Message.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Message.java new file mode 100644 index 0000000..631ca58 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Message.java @@ -0,0 +1,23 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo) + +/** + * Ergänzen Sie hier eine Beschreibung für die Klasse Message. + * + * @author (Ihr Name) + * @version (eine Versionsnummer oder ein Datum) + */ +public class Message extends Actor +{ + /** + * Act - tut, was auch immer Message tun will. Diese Methode wird aufgerufen, + * sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden. + */ + public Message (String text) { + GreenfootImage t = new GreenfootImage(text,30, new Color(255,255,255),new Color(200,100,100,0)); + GreenfootImage mitRand = new GreenfootImage(t.getWidth()+60, t.getHeight()+30); + mitRand.setColor(new Color(150,50,50,220)); + mitRand.fillRect(0,0, mitRand.getWidth(), mitRand.getHeight()); + mitRand.drawImage(t, 30, 15); + setImage(mitRand); + } +} \ No newline at end of file diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/ReadWrite.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/ReadWrite.java new file mode 100644 index 0000000..6711b04 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/ReadWrite.java @@ -0,0 +1,196 @@ +import java.io.*; +import java.util.*; + +/** + * Die Klasse ReadWrite erstellt geheimCodes und steuert damit den Ablauf + * und die Reihenfolge der Einsaetze + */ +class ReadWrite +{ + private String dateiName; + + /** Erzeugt neues Dateizugriffsobjekt + */ + public ReadWrite () { + dateiName = "secret"; + } + + /** Schreibt einen neuen Levelstand in die Datei, wenn dieser höher als der bisherige ist + * (dies verhindert ein Zurückfallen auf ein niedrigeres Level, wenn ein Einsatz erneut ausgeführt wird.) + * @param level neuer Level + */ + public void writeLevel(int level) { + writeLevel(level,false); + } + + /** Schreibt einen neuen Levelstand in die Datei. + * @param level neuer Level + * @param down darf der neue Level auch niedriger als der alte sein (true = gezieltes Zurücksetzen) + */ + public void writeLevel(int level, boolean down) { + if (level > getLevel() || down) { //Damit nicht wieder in einen kleineren Level zurückgefallen wird + Random r = new Random(); + Scanner s = new Scanner(this.read()); + long z1 = s.nextLong(); + long z2 = r.nextInt()+362734617; + z2 = z2 - (z2 % 131 - z1% 131); + while (z2 % 31 != level) { + z2 += 131; + } + this.append(""+z2); + } + } + + /** Erzeugt eine neue Secret-Datei mit Level 1 + */ + public void init() { + Random r = new Random(); + long z1 = r.nextInt()+212312312; + long z2 = r.nextInt()+362734617; + z2 = z2 - (z2 % 131 - z1% 131); + while (z2 % 31 != 1) { + z2 += 131; + } + write(""+z1); + append(""+z2); + } + + /** Liefert den zuletzt gespeicherten Level + * @return Level + */ + public int getLevel() { + int level = 1; + String z = read(); + if (z.equals("")) { + init(); + } + try { + Scanner s = new Scanner(read()); + long z1 = s.nextLong(); + s = new Scanner(readLastLine()); + long z2 = s.nextLong(); + + if (z1 % 131 != z2 %131) { + init(); + level = 1; + } else { + level = (int) (z2 % 31); + } + } catch(Exception e) { + level = -1; + } + return level; + } + + /** Liefert den höchsten bisher gespeicherten Level + * @return maximal erreichter Level + */ + public int getMaxLevel() { + int level = 1; + String z = read(); + if (z.equals("")) { + init(); + return 1; + } + + try { + FileReader fr = new FileReader(dateiName); + BufferedReader br = new BufferedReader(fr); + String zeile = br.readLine(); + Scanner s = new Scanner(zeile); + long z1 = s.nextLong(); + while(br.ready()) { + zeile = br.readLine(); + s = new Scanner(zeile); + long z2 = s.nextLong(); + + if (z1 % 131 != z2 %131) { + init(); + level = 1; + break; + } else { + if (level < (int) (z2 % 31)) { + level = (int) (z2 % 31); + } + } + } + br.close(); + return level; + } + catch (IOException e) { + return level; + } + + } + + /** Liest die erste Zeile aus der Secretdatei + * @return erste Zeile + */ + public String read() + { + try { + FileReader fr = new FileReader(dateiName); + BufferedReader br = new BufferedReader(fr); + String zeile = br.readLine(); + br.close(); + return zeile; + } + catch (IOException e) { + return ""; + } + } + + /** Liest die letzte Zeile aus der Secretdatei + * @return letzte Zeile + */ + public String readLastLine() + { + try { + FileReader fr = new FileReader(dateiName); + BufferedReader br = new BufferedReader(fr); + String zeile = br.readLine(); + while(br.ready()) zeile = br.readLine(); + br.close(); + return zeile; + } + catch (IOException e) { + return ""; + } + } + + /** Schreibt eine neue Datei mit einer Zeile + * @param text 1. Zeile der Datei + */ + public boolean write(String text) + { + try { + FileWriter fw = new FileWriter(dateiName); + BufferedWriter bw = new BufferedWriter(fw); + bw.write(text); + bw.newLine(); + bw.close(); + return true; + } + catch (IOException e) { + return false; + } + } + + /** Hängt eine Zeile an die Secret-Datei an + * @param text anzuhängende Zeile + */ + public boolean append(String text) + { + try { + FileWriter fw = new FileWriter(dateiName, true); + BufferedWriter bw = new BufferedWriter(fw); + bw.write(text); + bw.newLine(); + bw.close(); + return true; + } + catch (IOException e) { + return false; + } + } +} \ No newline at end of file diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Roboter.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Roboter.java new file mode 100644 index 0000000..1fb8503 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Roboter.java @@ -0,0 +1,801 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.util.*; +import javax.swing.JOptionPane; + +/** + * Diese Klasse ist die Oberklasse fuer die Roboter "Robita", "Robson" und "Robby". + * Programme sollen nur in den Unterklassen + * implementiert werden, da diese Klasse fuer Java-Beginner sehr komplex ist. + * Ein Roboter kann sich felderweise in die vier Himmelsrichtungen im Szenario bewegen. + * Ueber Sensoren kann er Informationen ueber seine Umwelt erhalten. + */ + +public class Roboter extends Actor +{ + private int energie; //Energie in Prozent + private ArrayList inventar; + private GreenfootImage originalImage; + + /** + * Ein Objekt der Klasse Roboter wird exempliert bzw. instanziert. + */ + public Roboter() + { + inventar = new ArrayList(); + energie=100; + originalImage = new GreenfootImage(this.getImage()); + zeichneRobotImage(); + } + + /** + * Gibt die Anzahl der Gegenstaende, die Roboter traegt, zurueck. + * @return Anzahl der Gegenstaende + */ + public int getAnzahl() { + return inventar.size(); + } + + /** + * Gibt die Anzahl der Gegenstaende einer bestimmten Art zurueck. + * @param name Art der Gegenstands (z.B. "Schluessel") + * @return Anzahl der Gegenstaende + */ + public int getAnzahl(String name) { + int anz = 0; + if (Gegenstand.istGegenstand(name)) { + for (Gegenstand g : inventar) { + if (g.getName().equals(name)) { + anz++; + } + } + } else + { + melde(""+name+" ist keine gültige Bezeichnung für einen Gegenstand", true); + } + return anz; + } + + /** + * Gibt die Restenergie des Roboters zurück + * @return Energiereserve (0-100) + */ + public int getEnergie() { + return energie; + } + + /** + * Reduziert die Restenergie des Roboters um den angegebenen Wert. + * @param verlust Anzahl der verbrauchten Energiepunkte + */ + public void verbraucheEnergie(int verlust) { + energie = energie-verlust; + if (energie < 0) energie=0; + zeichneRobotImage(); + } + + /** + * Gibt zurueck, ob die Energie des Roboters verbraucht ist. + * @return true, wenn Restenergie =0, sonst false + */ + public boolean istEnergieLeer() { + if (getEnergie()==0) return true; + else return false; + } + + /** + * Gibt die x-Koordinate zurück, wenn der Roboter einen Schritt nach vorne macht. + * @return x-Koordinate + */ + private int xVor() { + switch(this.getRotation()) + { + case 0 : return getX()+1; + case 180 : return getX()-1; + } + return getX(); + } + + /** + * Gibt die y-Koordinate zurück, wenn der Roboter einen Schritt nach vorne macht. + * @return y-Koordinate + */ + + private int yVor() { + switch(this.getRotation()) + { + case 90 : return getY()+1; + case 270 : return getY()-1; + } + return getY(); + } + + /** + * Der Roboter geht einen Schritt in die Pfeilrichtung. + * Das macht er nur, wenn sich keine Wand vor ihm befindet oder + * er nicht an der Grenze der Welt zur Wand blickt. + */ + public void einsVor() + { + int possible=0; + if (!this.istVorneFrei()) possible = 1; + if (energie < 1) possible = 2; + if (istVorne("Fass") || istVorne("Atommuell")) { + if(this.getWorld().getObjectsAt(getX()+(xVor()-getX())*2,getY()+(yVor()-getY())*2, null).size() > 0) { + possible = 1; + } else { + energie -= 5; + List actors = this.getWorld().getObjectsAt(xVor(), yVor(), null); + Gegenstand fass = (Gegenstand) (actors.get(0)); + fass.setLocation(getX()+(xVor()-getX())*2,getY()+(yVor()-getY())*2); + } + } + int[][] map = ((RoboterWelt) getWorld()).getMap(); + if ((map[getY()][getX()] == 30 || map[getY()][getX()] == 7) && yVor() != getY() && !istAufGegenstand("Aufzug")) // Aufzug + { + possible = 3; + } + + if (possible==0) + { + Schalter s=null; boolean on=false; + if (istAufGegenstand("Kontaktplatte")) { + s = gibGegenstandUnterRoboter().getSchalter(); + on = true; + } + energie--; + this.setLocation(xVor(), yVor()); + if (istAufGegenstand("Portal")) { + if (this instanceof AB1) { + if (this.getAnzahl("Schraube")>=2) { + ReadWrite secret = new ReadWrite(); + secret.writeLevel(2); + Greenfoot.delay(1); + melde("Sehr gut. Level 1 abgeschlossen. Gehe zu Level 2.",false); + Greenfoot.setWorld(new RoboterWelt()); + } + else { + melde("Du musst erst noch mind. 2 Schrauben einsammeln, um das AB 1 abzuschließen.",false); + } // end of if-else + + } + energie = 100; + } + if (istAufGegenstand("Kontaktplatte") ) { + s = gibGegenstandUnterRoboter().getSchalter(); + on = false; + } + if (s != null) { + if (on) s.anschalten(); else s.ausschalten(); + } + if (istAufGegenstand()) { + if (energie > gibGegenstandUnterRoboter().getSchaden()) energie -= gibGegenstandUnterRoboter().getSchaden(); + else energie = 0; + } + zeichneRobotImage(); + Greenfoot.delay(1); + ((RoboterWelt) getWorld()).schwerkraftAnwenden(); + } + else + { + switch(possible) { + case 1: + warne("Ich kann keinen Schritt machen!\nEin Hindernis ist im Weg!",this); break; + case 2: + warne("Ich kann keinen Schritt machen!\nIch habe keine Energie mehr!",this); break; + case 3: + warne("Ich kann keinen Schritt machen!\nIn einem Aufzug braucht man die Plattform,\n um hoch oder runter zu fahren.",this); break; + } + } + } + + /** + * Der Roboter dreht sich um 90 Grad nach rechts (aus der Sicht des Roboters). + */ + public void dreheRechts() + { + setRotation((getRotation()+90)%360); + zeichneRobotImage(); + Greenfoot.delay(1); + } + + /** + * Der Roboter dreht sich um 180 Grad nach rechts (aus der Sicht des Roboters). + */ + public void dreheUm() + { + dreheRechts(); + dreheRechts(); + } + + /** + * Der Roboter dreht sich um 90 Grad nach links (aus der Sicht des Roboters). + */ + public void dreheLinks() + { + setRotation((getRotation()+270)%360); + zeichneRobotImage(); + Greenfoot.delay(1); + } + + /** + * Gibt das erste Gegenstandsobjekt zurück, das der angegebenen Art entspricht. + * @param name Art des gesuchten Gegenstands + * @return Gegenstandsobjekt + */ + private Gegenstand getInventar(String name) { + if (Gegenstand.istGegenstand(name)) { + for(Gegenstand g: inventar) { + if (g.getName().equals(name)) { + return g; + } + } + } + else { + melde(""+name+" ist kein gültiger Gegenstand.",true); + } + return null; + } + + /** + * Gibt zurueck, ob der Roboter mindestens einen Gegenstand der angegeben Art besitzt. + * @param name Art des gesuchten Gegenstands + * @return true, wenn der Roboter einen derartigen Gegenstand hat, sonst false + */ + public boolean hatGegenstand(String name) { + if (Gegenstand.istGegenstand(name)) { + for(Gegenstand g: inventar) { + if (g.getName().equals(name)) { + return true; + } + } + } + else { + melde(""+name+" ist kein gültiger Gegenstand.",true); + } + return false; + } + + /** + * Gibt dem Roboter eine bestimmte Anzahl von Gegenstaenden einer Art + * @param name Art des Gegenstands + * @anzahl gewuenschte Anzahl + */ + public void setAnzahlVonGegenstand(String name, int anzahl) { + if (Gegenstand.istGegenstand(name)) { + for (int i=0; i0) { + Gegenstand g = this.getInventar(name); + g.benutze(); + if (g.getLebensdauer() == 0) inventar.remove(g); + if (name.equals("Akku")) { + energie += 40; + if (energie >100) energie = 100; + } + if (name.equals("Feuerloescher")) { + if (istVorne("Feuer")) { + List actors = this.getWorld().getObjectsAt(xVor(), yVor(), Gegenstand.class); + this.getWorld().removeObject((Actor) (actors.get(0))); + } + } + if (name.equals("Schluessel")) { + if (istVorne("Schloss")) { + // g.benutze(); // Dirk: ist doch schon vorher aufgerufen worden - oder? + if (g.getLebensdauer() == 0) inventar.remove(g); + List actors = this.getWorld().getObjectsAt(xVor(), yVor(), Wand.class); + Wand w = (Wand) (actors.get(0)); + if (w.getSchalter() != null) w.getSchalter().umschalten(); + } else { + inventar.add(new Gegenstand("Schluessel")); + } + } + if (name.equals("Bombe")) { + Schalter s1 = new Schalter(getWorld()); + int[][] level1 = {{ -1, -1, -1 , -1, -1},{ -1, -1, -1, -1, -1},{ -1, -1, 40, -1, -1},{ -1, -1, -1, -1, -1},{ -1, -1, -1 ,-1, -1}}; + int[][] level2 = {{ -1,-1, -1 ,-1, -1},{ -1, 6, 40 , 6, -1},{ -1, 6, 40 , 6, -1},{-1, 6, 40 , 6, -1},{ -1, -1, -1 ,-1, -1}}; + int[][] level3 = {{ -1, -1, -1 ,-1, -1},{ -1, 40, 40 , 40, -1},{ -1, 40, 6 , 40, -1},{ -1, 40, 40 , 40, -1},{ -1, -1, -1 ,-1, -1}}; + int[][] level4 = {{ -1, -1, -1 ,-1, -1},{ -1, 6, 6 , 6, -1},{ -1, 6, 6 , 6, -1},{ -1, 6, 6 , 6, -1},{ -1, -1, -1 ,-1, -1}}; + int platzFuerAkku = Greenfoot.getRandomNumber(9); + int myrotation = getRotation(); + /* switch (platzFuerAkku) { + case 0: level4[1][1]=38; break; + case 1: level4[1][2]=38; break; + case 2: level4[1][3]=38; break; + case 3: level4[2][1]=38; break; + case 4: level4[2][2]=38; break; + case 5: level4[2][3]=38; break; + case 6: level4[3][1]=38; break; + case 7: level4[3][2]=38; break; + case 8: level4[3][3]=38; break; + } + for (int i=0; i<2; i++){ + int platzFuerKontaktplatte=0; + do { + platzFuerKontaktplatte = Greenfoot.getRandomNumber(9); + } while(platzFuerKontaktplatte == platzFuerAkku); + switch (platzFuerKontaktplatte) { + case 0: level4[1][1]=31; break; + case 1: level4[1][2]=31; break; + case 2: level4[1][3]=31; break; + case 3: level4[2][1]=31; break; + case 4: level4[2][2]=31; break; + case 5: level4[2][3]=31; break; + case 6: level4[3][1]=31; break; + case 7: level4[3][2]=31; break; + case 8: level4[3][3]=31; break; + } + }*/ + int x = getX()-2; + int y = getY()-2; + s1.setPosition(x,y, level2, level1); + s1.ausschalten(); + energie = energie - 10; + if (energie < 0) energie = 0; + zeichneRobotImage(); + // getWorld().removeObject(this); + + Greenfoot.delay(2); + s1.anschalten(); + setRotation((getRotation()+180)%360); + if(istVorneFrei()) this.setLocation(xVor(), yVor()); + setRotation(myrotation); + energie = energie - 10; + if (energie < 0) energie = 0; + zeichneRobotImage(); + Greenfoot.delay(2); + + s1.setPosition(x,y, level4, level3); + s1.ausschalten(); + setRotation((getRotation()+180)%360); + if(istVorneFrei()) this.setLocation(xVor(), yVor()); + setRotation(myrotation); + Greenfoot.delay(2); + s1.anschalten(); + + } + zeichneRobotImage(); + Greenfoot.delay(1); + ((RoboterWelt) this.getWorld()).schwerkraftAnwenden(); + } else { + warne("Du hast gar kein(e) "+name+",\n den/die du benutzen könntest.", this); + } + } + } + + /** + * Liefert genau dann true, wenn auf der Kachel, auf der sich der + * aufgerufene Roboter gerade befindet, ein beliebiger Gegenstand befindet. + * @return true, wenn der Roboter auf einem Gegenstand steht, sonst false + */ + public boolean istAufGegenstand() { + List g = getWorld().getObjectsAt(getX(), getY(), Gegenstand.class); + if (g.size() > 0) { + return true; + } else { + return false; + } + } + + /** + * Liefert genau dann true, wenn auf der Kachel, auf der sich der + * aufgerufene Roboter gerade befindet, ein Gegenstand mit dem angegebnen Namen befindet. + * @param name Einer der Gegenstaende ("Schluessel", "Schalter", "Bombe", "Feuerloescher", "Brennstab", "Akku", "Schraube", "Kontaktplatte", "Oelfleck", "Portal", "Strom", "Feuer", "Aufzug") + * @return true, wenn der Roboter auf einem Gegenstand steht, sonst false + */ + public boolean istAufGegenstand(String name) { + if (!Gegenstand.istGegenstand(name)) { + melde(""+name+" ist kein gültiger Gegenstand.",true); + return false; + } + List g = getWorld().getObjectsAt(getX(), getY(), Gegenstand.class); + if (g.size() > 0) { + return ((Gegenstand) (g.get(0))).getName().equals(name); + } else { + return false; + } + } + + /** + * Gibt den Gegenstand zurueck, auf dem sich ein Roboter befindet + * @return Gegenstand (entweder "Schluessel", "Schalter", "Bombe", "Feuerloescher", "Akku", "Schraube", "Kontaktplatte", "Oelfleck", "Portal", "Strom", "Feuer", "Aufzug") + */ + private Gegenstand gibGegenstandUnterRoboter() { + List g = getWorld().getObjectsAt(getX(), getY(), Gegenstand.class); + if (g.size() > 0) { + return (Gegenstand) (g.get(0)); + } else { + return null; + } + } + + /** + * Liefert genau dann true, wenn der aufgerufene Roboter keinen Gegenstand bei sich hat. + * @return true, wenn der Roboter keinen Gegenstand mit sich traegt, sonst false + */ + public boolean istInventarLeer() { + return inventar.size() == 0; + } + + /** + * Der Roboter legt einen Gegenstand aus seinem Vorrat auf dem Feld ab. + * @param name Einer der Gegenstaende ("Schluessel", "Schalter", "Bombe", "Brennstab", "Feuerloescher", "Akku", "Schraube", "Kontaktplatte", "Oelfleck", "Portal", "Strom", "Feuer") + */ + public void ablegen(String name) + { + if (!Gegenstand.istGegenstand(name)) { + melde(""+name+" ist kein gültiger Gegenstand.",true); + return; + } + if (getAnzahl(name)>0) { + if (!istAufGegenstand() || istAufGegenstand("Oelfleck")|| istAufGegenstand("Kontaktplatte")) { // Dirk: Ablegen auf Kontaktplatte geaendert! + int aktuellesX = this.getX(); + int aktuellesY = this.getY(); + for(Gegenstand g: inventar) { + if (g.getName().equals(name)) { + inventar.remove(g); + this.getWorld().addObject(g, aktuellesX, aktuellesY); + zeichneRobotImage(); + break; + } + } + ((RoboterWelt) this.getWorld()).schwerkraftAnwenden(); + } + else warne("Hier liegt schon etwas oder\nman darf hier nichts ablegen!",this); + } + else warne("Ich habe kein(e) "+name+" zum Ablegen!",this); + } + + /** + * Der Roboter nimmt einen Gegenstand, der sich auf seinem Feld befindet in seinen Vorrat auf. + * Falls er nicht auf einem Gegenstand steht, gibt er eine Warnung aus. + * Roboter haben nur eine begrenzte Kapazitaet. Sie koennen maximal 99 Gegenstaende mit sich tragen. + * Falls er einen 100. Gegenstand aufnehmen moechte, wird auch eine entsprechende Warnung ausgegeben. + */ + public void aufnehmen () + { + if (getAnzahl()<=99) // von Dirk von < auf <= veraendert! + { + Gegenstand g = (Gegenstand)this.getOneObjectAtOffset(0, 0, Gegenstand.class); + if(g != null) + { + if (g.istBeweglich()) { + this.getWorld().removeObject(g); + inventar.add(g); + zeichneRobotImage(); + ((RoboterWelt) getWorld()).schwerkraftAnwenden(); + + } else { + warne("Ein(e) "+g.getName()+" kann man nicht aufheben", this); + } + } + else + { + warne("Hier ist nichts zum Aufheben!",this); + } + } + else warne("Hab keinen Platz für weitere Gegenstände!",this); + } + + /** + * Diese Methode setzt einen Roboter vor den Roboter, der diese Methode aufruft. + * Ist vor ihm kein Platz, wird eine Warnung ausgegeben. + * @param r der Hilfsroboter, der eingesetzt werden soll + */ + public void gehilfeEinsetzen(Roboter r) { + if (istVorneFrei() && getWorld().getObjectsAt(xVor(), yVor(), Roboter.class).isEmpty()) { + this.getWorld().addObject(r, xVor(), yVor()); + } else { + warne("Vor dir ist kein Platz für einen Gehilfen!",this); + } + } + + /** + * Der Sensor ueberprueft, ob vor dem Roboter Hindernisse stehen oder nicht + * @return true, wenn vor dem Roboter frei ist, sonst false + */ + public boolean istVorneFrei() + { + return !istWandVorne() && (this.getWorld().getObjectsAt(xVor(),yVor(), Roboter.class).size() == 0); + } + + /** + * Liefert genau dann true, wenn sich vor dem Roboter ein Gegenstand mit dem angegebnen Namen befindet. + * @param name Einer der Gegenstaende ("Schluessel", "Schalter", "Schloss", "Bombe", "Feuerloescher", "Akku", "Schraube", "Kontaktplatte", "Oelfleck", "Portal", "Strom", "Feuer", "Aufzug") + * @return true, wenn der Roboter vor dem Gegenstand mit dem Namen name steht, sonst false + */ + public boolean istVorne(String name) { + if (!Gegenstand.istGegenstand(name) && !Wand.istWandtyp(name)) { + melde(name+" ist keine gültige Bezeichnung", true); + return false; + } + List actors = this.getWorld().getObjectsAt(xVor(), yVor(), null); + boolean found = false; + for(int i = 0; i < actors.size(); i++) { + Object o = actors.get(i); + if (o instanceof Gegenstand) { + if (((Gegenstand) o).getName().equals(name)) { + found = true; + break; + } + } + if (o instanceof Wand) { + if (((Wand) o).getName().equals(name)) { + found = true; + break; + } + } + } + return found; + } + + /** + * Der Sensor ueberprueft, ob sich in Laufrichtung des Roboters eine Wand befindet. + * @return true, wenn der Roboter vor einer Wand steht, sonst false + */ + public boolean istWandVorne() + { + return (this.getWorld().getObjectsAt(xVor(),yVor(), Wand.class).size() > 0); + } + + /** + * Der Sensor ueberprueft, ob sich rechts der Laufrichtung eine Wand befindet. + * @return true, wenn sich rechts von dem Roboter eine Wand befindet, sonst false + */ + public boolean istWandRechts() + { + int lRichtung = getRotation(); + + if (lRichtung == 0 && this.getOneObjectAtOffset(0, 1, Wand.class)!= null) + { + return true; + } + + if (lRichtung == 90 && this.getOneObjectAtOffset(-1, 0, Wand.class)!= null) + { + return true; + } + + if (lRichtung == 180 && this.getOneObjectAtOffset(0, -1, Wand.class)!= null) + { + return true; + } + + if (lRichtung == 270 && this.getOneObjectAtOffset(1, 0, Wand.class)!= null) + { + return true; + } + + return false; + } + + /** + * Der Sensor ueberprueft, ob sich links der Laufrichtung eine Wand befindet. + * @return true, wenn sich links von dem Roboter eine Wand befindet, sonst false + */ + public boolean istWandLinks() + { + int lRichtung = getRotation(); + + if (lRichtung == 0 && this.getOneObjectAtOffset(0, -1, Wand.class)!= null) + { + return true; + } + + if (lRichtung == 90 && this.getOneObjectAtOffset(1, 0, Wand.class)!= null) + { + return true; + } + + if (lRichtung == 180 && this.getOneObjectAtOffset(0, 1, Wand.class)!= null) + { + return true; + } + + if (lRichtung == 270 && this.getOneObjectAtOffset(-1, 0, Wand.class)!= null) + { + return true; + } + + return false; + } + + /** + * Eine private Methode, die dafuer sorgt, dass der "Aufdruck" auf dem Roboter (Anzahl der Gegenstaende), der Akkustandsbalken und + * der Richtungspfeil aktualisiert werden + */ + private void zeichneRobotImage() + { + final int x=17; + final int y=18; + final int breite = 14; + final int hoehe = 12; + this.setImage(new GreenfootImage(originalImage)); + this.getImage().setColor(Color.WHITE); + this.getImage().fillRect(x, y, breite, hoehe); + this.getImage().setColor(Color.BLACK); + this.getImage().drawRect(x, y, breite, hoehe); + this.getImage().setFont(new Font("Arial",false,false,10)); + String ziffern; + int anz = inventar.size(); + if (anz>=0 && anz<10) ziffern="0"+anz; + else if (anz>=100) ziffern=">>"; + else ziffern=""+anz; + this.getImage().drawString(ziffern, x+2, y+hoehe-2); + zeichneEnergie(); + + this.getImage().drawImage(new GreenfootImage("images/pfeil"+getRotation()+".png"), 40, 2); + this.getImage().rotate(-getRotation()); + } + + /** + * Zeichne / Aktualisiere die Energie (Akkustandsbalken), die der Roboter hat + */ + private void zeichneEnergie() + { + final int x=2; + final int y=1; + final int breite = 4; + final int hoehe = 46; + this.getImage().setColor(Color.GREEN); + this.getImage().fillRect(x, y, breite, hoehe); + int hoeheNeu = hoehe-(int)(Math.floor(hoehe*(energie/100.0))); + this.getImage().setColor(Color.RED); + this.getImage().fillRect(x, y, breite, hoeheNeu); + this.getImage().setColor(Color.BLACK); + this.getImage().drawRect(x, y, breite, hoehe); + this.getImage().drawRect(x, y, breite, hoehe/2); + } + + // Meldungen und Warnungen + /** + * Gibt den uebergebenen String in einer Dialogbox auf dem Bildschirm aus + * @param text Der Text, der angezeit werden soll + * @param istWichtig bei true wird der Text "Achtung! Besonders wichtige Meldung:" in die Kopfzeile geschrieben, sonst nur der Text "Meldung!" + */ + public void melde(String text, boolean istWichtig) { + String meldeText; + if (istWichtig) meldeText = "Achtung!\n"; + else meldeText = "Meldung:\n"; + Message m = new Message(meldeText+text); + getWorld().addObject(m, 7,6); + long z = System.currentTimeMillis(); + while(System.currentTimeMillis()-z < 4000){ + Greenfoot.delay(1); + } + getWorld().removeObject(m); + } + + /** + * Gibt den uebergebenen String und eine Zahl in einer Dialogbox auf dem Bildschirm aus + * @param text Der Text, der angezeit werden soll + * @param z eine Zahl, die hinter dem Text text ausgegeben wird + */ + private void melde(String text, int z) { + Message m = new Message(text+": "+z); + getWorld().addObject(m, 7,6); + long zz = System.currentTimeMillis(); + while(System.currentTimeMillis()-zz < 4000){ + Greenfoot.delay(1); + } + getWorld().removeObject(m); + } + + /** + * Gibt den uebergebenen String in einer Dialogbox als Warnung auf dem Bildschirm aus. + * Dadurch wird der uebergebene Actor actor von der Roboterwelt entfernt und diese neu gezeichnet. + * @param text Der Text, der angezeit werden soll + * @param actor Der Actor, der ggf. entfernt werden soll + */ + public void warne(String text, Actor actor) { + + Message m = new Message(text); + actor.getWorld().addObject(m, 7,6); + long z = System.currentTimeMillis(); + while(System.currentTimeMillis()-z < 4000){ + Greenfoot.delay(1); + } + actor.getWorld().removeObject(m); + + + Greenfoot.stop(); // nur falls Animation laeuft + World w = actor.getWorld(); + if (actor != null) w.removeObject(actor); // Notbremse + Greenfoot.setWorld(new RoboterWelt()); + // System.err.print("\u000C"); + // System.err.flush(); + System.err.close(); + // System.out.close(); + // System.out.println("Ablauf wurde vom Benutzer unterbrochen!"); + // System.exit(0); //Das waere eigentlich sauber + } + + // Systembedingte Routinen + /** + * Wird aufgerufen, wenn der Roboter in die Welt gesetzt wird; + * erweitert nach Vorschlag P.Henriksen 29.6.08 + * @param world Die Welt in die ein Roboter gesetzt wurde + */ + protected void addedToWorld(World world) { + // Roboter kann nicht auf eine Wand oder einen anderem Roboter gesetzt werden + Actor wand = getOneObjectAtOffset(0, 0, Wand.class); + Actor roboter = getOneObjectAtOffset(0, 0, Roboter.class); + if (wand != null || roboter != null) { + world.removeObject(this); + } + } + + /* setLocation(x,y) und setRotation(x) koennen nicht verborgen werden, + * weil sie schon in der Oberklasse Actor public sind. + */ + + /** + * setLocation(x,y) fuer Roboter wird ueberschrieben, um nicht auf Wand oder + * anderen Roboter ziehen zu koennen! + * -- setzt den Roboter auf eine Kachel, deren Spalte x sowie Reihe y du + * hier vorgibst. Die Nummerierung beginnt jeweils bei 0 !!) + * @param x die x-Koordinate + * @param y die y-Koordinate + */ + public void setLocation(int x, int y) { + boolean schwerkraft = ((RoboterWelt) getWorld()).getSchwerkraft(); + if( (!((x==getX() && y==getY()) || (Math.abs(x-getX())+Math.abs(y-getY())<=1))) || (y0 && i<=secret.getMaxLevel()) { + secret.writeLevel(i,true); + Greenfoot.setWorld(new RoboterWelt()); + } else { + melde("Du hast erst Level "+secret.getMaxLevel()+ " erreicht. "); + } + } + + /** + * Secret-Datei laden, um ein höheres Level freizuschalten + * + */ + public void ladeSecretDatei() { + int oldLevel = secret.getLevel(); + try{ + JFileChooser fileChooser = new JFileChooser("."); + fileChooser.setDialogTitle("Secret-Datei laden"); + fileChooser.setApproveButtonText("Level-Datei laden"); + JFrame fcframe = new JFrame(); + fcframe.toFront(); + fcframe.setAlwaysOnTop(true); + + + if(fileChooser.showOpenDialog(fcframe)==JFileChooser.APPROVE_OPTION){ + File file = fileChooser.getSelectedFile(); + if (file != null) { + Path FROM = file.toPath(); + Path TO = Paths.get(".\\secret"); + //overwrite existing file, if exists + CopyOption[] options = new CopyOption[]{ + StandardCopyOption.REPLACE_EXISTING, + StandardCopyOption.COPY_ATTRIBUTES + }; + Files.copy(FROM, TO, options); + int max = secret.getMaxLevel(); + int level = secret.getLevel(); + if(max >= 1 && max <= 11 && level>=1 && level <=11) { + melde("Level 1-"+max+" sind nun freigeschaltet. Gehe zu Level "+level+"."); + } else { + throw new IllegalArgumentException( "Keine richtige Secret-Datei." ); + } + Greenfoot.setWorld(new RoboterWelt()); + } + } + } + catch(Exception e) { + melde("Fehlerhafte Secret-Datei. Bleibe in Level "+oldLevel+"."); + secret.init(); + secret.writeLevel(oldLevel,true); + Greenfoot.setWorld(new RoboterWelt()); + } + + } + + /** + * Die Welt wird geleert + */ + private void weltLeeren() + { + removeObjects(getObjects(null)); + } + + /** + * Liefert eine Referenz auf die Map + */ + public int[][] getMap() { + return map; + } + + /** + * Liefert die Information, ob es sich um eine Welt mit Schwerkraft handelt + */ + public boolean getSchwerkraft() { + return schwerkraft; + } + + /** + * Überschrift oben links ausgeben. + */ + private void zeichneUeberschrift(String text) { + this.getBackground().setColor(Color.LIGHT_GRAY); + this.getBackground().fillRect(0,0,300,20); + this.getBackground().setColor(Color.BLACK); + this.getBackground().setFont(new Font("Verdana",true,false,12)); + this.getBackground().drawString(text, 2, 14); + } + + public Actor generateActor(int nr) { + Actor a = null; + switch(nr) { + case 10: a = new Wand(); break; + case 11: a = new Wand("SchalterEin"); break; + case 12: a = new Wand("SchalterAus"); break; + + case 13: a = new Wand("Stromquelle1"); break; + case 14: a = new Wand("Stromquelle2"); break; + case 15: a = new Wand("Stromquelle3"); break; + case 16: a = new Wand("Stromquelle4"); break; + case 17: a = new Wand("Schloss"); break; + + case 18: a = new Wand("Tuer1"); break; + case 19: a = new Wand("Tuer2"); break; + case 20: a = new Wand("Stein"); break; + case 21: a = new Wand("Steine"); break; + + case 22: a = new Wand("Rufknopf"); break; + case 23: a = new Wand("RufknopfAus"); break; + + case 30: a = new Gegenstand("Aufzug"); break; + case 31: a = new Gegenstand("Kontaktplatte"); break; + case 32: a = new Gegenstand("Strom"); break; + case 33: a = new Gegenstand("Portal"); break; + case 34: a = new Gegenstand("Schraube"); break; + case 35: a = new Gegenstand("Brennstab"); break; + case 36: a = new Gegenstand("Schluessel"); break; + case 37: a = new Gegenstand("Oelfleck"); break; + case 38: a = new Gegenstand("Akku"); break; + case 40: a = new Gegenstand("Feuer"); break; + case 41: a = new Gegenstand("Feuerloescher"); break; + case 42: a = new Gegenstand("Atommuell"); break; + case 43: a = new Gegenstand("Fass"); break; + case 44: a = new Gegenstand("Bombe"); break; + case 45: a = new Gegenstand("Diamant"); break; + + } + return a; + } + + public GreenfootImage getBackgroundImage(int nr) { + GreenfootImage back = backgroundimages[0]; + switch(nr) { + case 1: back = backgroundimages[1]; break; + case 2: back = backgroundimages[2]; break; + case 3: back = backgroundimages[3]; break; + case 4: back = backgroundimages[4]; break; + case 5: back = backgroundimages[5]; break; + case 6: back = backgroundimages[6]; break; + case 7: back = backgroundimages[7]; break; + case 30: back = backgroundimages[7]; break; + } + return back; + } + + /** + * Generiert eine Welt aus dem angegeben 2-dim. Array + * Dabei werden sowohl die Hintergrundbilder gesetzt, als auch Objekte + * in die Welt eingefügt. + * @param backg 2-dim. Array, das die Welt beschreibt. + */ + private void generateWorld(int[][] backg) + { + weltLeeren(); + map = backg; + GreenfootImage back = new GreenfootImage(840,720); + for(int x=0; x<14; x++) { + for(int y=0; y<12; y++) { + back.drawImage(getBackgroundImage(backg[y][x]), x*zellenGroesse, y*zellenGroesse); + Actor a = generateActor(backg[y][x]); + if (a != null) addObject(a,x,y); + } + } + this.setBackground(back); + schwerkraft = false; + } + + /** + * Ändert den Hintergrund einer Zelle + */ + public void changeBackground(int typ, int x, int y) { + GreenfootImage back = this.getBackground(); + back.drawImage(getBackgroundImage(typ), x*zellenGroesse, y*zellenGroesse); + } + + /** + * Zeigt die Koordinaten aller Felder an + */ + public void zeigeKoordinaten(){ + int delta; + for (int x=0; x9 || y>9) { + delta = 4; + if (x>9 && y>9) delta = 8; + } + else delta = 0; + this.getBackground().drawString("("+x+"|"+y+")", x*60+14-delta, y*60+35); + } + } + } + + /** + * Erzeugt die Welt neu, damit die Koordinaten wieder verschwinden + */ + public void versteckeKoordinaten(){ + Greenfoot.setWorld(new RoboterWelt()); + } + + /** + * Für Welten mit Schwerkraft berechnet diese Methode, wie die Gegenstände fallen müssen. + * + */ + private void nurSchwerkraftObjekte(List l) { + Iterator it = l.iterator(); + while(it.hasNext()){ + Actor a = it.next(); + if(a instanceof Gegenstand) { + if((((Gegenstand) a).getName()).equals("Aufzug")) it.remove(); + } + if(a instanceof Wand) { + if(!(((Wand) a).getName()).equals("Steine")) it.remove(); + } + } + } + + public void schwerkraftAnwenden() { + if(schwerkraft) { + List ag = new ArrayList(); + ag.addAll(this.getObjects(Gegenstand.class)); + ag.addAll(this.getObjects(Wand.class)); + ag.addAll(this.getObjects(Roboter.class)); + + nurSchwerkraftObjekte(ag); + List gefallen = new ArrayList(); + gefallen.add(new Gegenstand()); + while(gefallen.size()>0) { + gefallen.clear(); + + for(Actor g : ag) { + // Wenn auf Aufzug nicht mehr fallen + List gg = getObjectsAt(g.getX(), g.getY(), Gegenstand.class); + boolean aufAufzug=false; + for(Gegenstand ggg : gg) { + if (ggg.getName().equals("Aufzug")) aufAufzug=true; + } + + if(!aufAufzug) { + boolean wandunten=false; + List u = this.getObjectsAt(g.getX(),g.getY()+1, Actor.class); + Iterator it = u.iterator(); + while(it.hasNext()) { + Actor uu = it.next(); + if ((uu instanceof Gegenstand) && ((Gegenstand) uu).getName().equals("Aufzug")) it.remove(); + if ((uu instanceof Wand) && !((Wand) uu).getName().equals("Steine")) wandunten=true; + } + if(u.size()==0 ) { + int rot = g.getRotation(); + g.setRotation(90); + g.setLocation(g.getX(),g.getY()+1); + gefallen.add(g); + g.setRotation(rot); + } + + if((g instanceof Roboter) && gefallen.contains(g)) { + ((Roboter) g).verbraucheEnergie(20); + } + if(!(g instanceof Roboter) && !wandunten) { + List r = this.getObjectsAt(g.getX()+1,g.getY(), Actor.class); + List ru = this.getObjectsAt(g.getX()+1,g.getY()+1, Actor.class); + if(!gefallen.contains(g) && r.size()==0 && ru.size()==0) { + g.setLocation(g.getX()+1,g.getY()+1); + gefallen.add(g); + } + List l = this.getObjectsAt(g.getX()-1,g.getY(), Actor.class); + List lu = this.getObjectsAt(g.getX()-1,g.getY()+1, Actor.class); + if(!gefallen.contains(g) && l.size()==0 && lu.size()==0) { + g.setLocation(g.getX()-1,g.getY()+1); + gefallen.add(g); + } + if ((g instanceof Wand) && gefallen.contains(g)) { + List ro = this.getObjectsAt(g.getX(), g.getY()+1, Roboter.class); + for(Roboter rob : ro) { + rob.verbraucheEnergie(80); + } + } + } + } + } + Greenfoot.delay(4); + } + } + } + + /* Es folgen nun die Definitionen der Level und Einsätze */ + /* ---------------------------------------------------------------------------*/ + + private void ab1_roboterSteuern() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10, 0, 0, 0, 0, 0,10, 0,34, 0, 0, 0, 0,10}, + {10, 0,34,34,34, 0,10,38, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,10,34, 0,10,10,10, 0,10}, + {10,10,10, 0,10,10,10, 0, 0,10, 0, 0, 0,10}, + {31, 3, 0, 0,10,10,10,31, 0,10,33, 0, 0,10}, + {10,10,10, 0,10,10,10, 0, 0,10, 0, 0, 0,10}, + {10, 0, 0,34, 0, 0,10, 0, 0,10,10,10, 0,10}, + {10,34,34,34, 0, 0,10, 0, 0,34, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,10, 0,38, 0,34, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + zeichneUeberschrift("AB1 - Roboter von Hand steuern"); + + AB1 starter = new AB1(); + addObject(starter, 0, 6); + AB1 starter1 = new AB1(); + addObject(starter1, 7, 6); + starter1.verbraucheEnergie(50); + Schalter s = new Schalter(this); + int[][] on={{19}}; + int[][] off={{31}}; + s.setPosition(1, 6, on, off); + s.ausschalten(); + Gegenstand g = (Gegenstand) (this.getObjectsAt(0, 6, Gegenstand.class).get(0)); + g.setSchalter(s); + } + + private void ab2_roboterProgrammieren() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10, 0, 0, 0, 0, 0,10, 0,34,38,38,34, 0,10}, + {10, 0,34,34,34, 0,10, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,10, 0, 0,10,10,10, 0,10}, + {10,10,10, 0,10,10,10, 0, 0,10, 0, 0, 0,10}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0,10, 0,10}, + {10,10,10, 0,10,10,10, 0, 0,10, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,10, 0, 0,10,10,10, 0,10}, + {10, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + zeichneUeberschrift("AB2 - Methoden erstellen"); + AB2 ab21 = new AB2(); + addObject(ab21, 1, 3); + AB2 ab22 = new AB2(); + addObject(ab22, 7, 2); + AB2 ab23 = new AB2(); + addObject(ab23, 10, 6); + AB2 ab24 = new AB2(); + addObject(ab24, 1, 10); + } + + public void einsatz_02() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0}, + {10, 0, 0, 0, 0,33,10, 0, 0, 0, 0, 0, 0, 0}, + {10, 0, 0,35, 0, 0,10, 0, 0, 0, 0, 0, 0, 0}, + {10, 0, 0,38, 0, 0,10, 0, 0, 0, 0, 0, 0, 0}, + {10, 0, 0,35, 0, 0,10, 0, 0, 0, 0, 0, 0, 0}, + {10, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0, 0}, + {10, 0, 0,10, 0, 0,10, 0, 0, 0, 0, 0, 0, 0}, + {10,10, 0,38, 0,10,10, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10, 1,10,10,10, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0}}; + + weltLeeren(); + generateWorld(backg); + zeichneUeberschrift("Einsatz 2: Brennstäbe sichern"); + AB2 ab2 = new AB2(); + addObject(ab2, 0, 10); + ab2.einsatz2(); + Greenfoot.delay(2); + if (ab2.istAufGegenstand("Portal") && ab2.getAnzahl("Brennstab")==2) { + secret.writeLevel(3); + melde("Super! Du hast die Brennstäbe gesichert"); + } else { + warne("Du hast die Aufgabe noch nicht erfüllt"); + } + Greenfoot.setWorld(new RoboterWelt()); + } + + private void ab3_wiederholer() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10, 0,41, 0, 0,40, 0,10, 0, 0, 0, 0, 0,10}, + {10, 0,41, 0, 0, 0,40,10, 0, 0, 0, 0, 0,10}, + {10, 0,41, 0, 0,40,40,10, 0,10,10,10, 0,10}, + {10, 0,41, 0,40,40,40,10, 0,10, 0,10, 0,10}, + {10, 0, 0, 0, 0, 0, 0,10, 0, 0, 0,10, 0,10}, + {10, 0,10,10,10,10,10,10,10,10,10,10, 0,10}, + {10, 0,10,41,10,41,10,41,10,41,10,10, 0,10}, + {10, 0,31, 0,31, 0,31, 0,31, 0,31,10, 0,10}, + {10, 0,10, 0,40,40,40,40,40,40,10, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + zeichneUeberschrift("AB3 - Wiederholungen mit while-Schleifen"); + AB3 ab; + ab= new AB3(); + addObject(ab, 1, 2); + ab= new AB3(); + addObject(ab, 1, 3); + ab= new AB3(); + addObject(ab, 1, 4); + ab= new AB3(); + addObject(ab, 1, 5); + ab= new AB3(); + addObject(ab, 2, 9); + ab= new AB3(); + addObject(ab, 11, 10); + } + + public void einsatz_03() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,41,10,41,10,41,10,41,10,41,10,10,10,10}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,31,10,10,10}, + {10,10,10,10,10,10,10,10,10,10, 3,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0,31,10,10,10}, + {10, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,10,10,10}, + {10, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0,10,10,10}, + {10, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0,10,10,10}, + {10, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0,31, 3,33,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + zeichneUeberschrift("Einsatz 3:Feuer löschen"); + AB3 ab3 = new AB3(); + addObject(ab3, 0, 3); + ab3.setAnzahlVonGegenstand("Akku",10); + Schalter s = new Schalter(this); + int[][] on={{19}}; + int[][] off={{31}}; + s.setPosition(11, 10, on, off); + s.anschalten(); + Gegenstand g = (Gegenstand) (this.getObjectsAt(10, 10, Gegenstand.class).get(0)); + g.setSchalter(s); + s = new Schalter(this); + int[][] on2={{18}}; + s.setPosition(10, 4, on2, off); + s.anschalten(); + g = (Gegenstand) (this.getObjectsAt(10, 3, Gegenstand.class).get(0)); + g.setSchalter(s); + g = (Gegenstand) (this.getObjectsAt(10, 5, Gegenstand.class).get(0)); + g.setSchalter(s); + int y = 10; + int maxx = Greenfoot.getRandomNumber(4)+3; + + while (y>4) { + for (int x=1; x<=maxx; x++) { + addObject(new Gegenstand("Feuer"), x,y); + } + int newx = 20; + while(newx > maxx || newx < 1) newx=Greenfoot.getRandomNumber(4)-7+y; + + maxx = newx; + y = y-1; + } + + ab3.einsatz3(); + Greenfoot.delay(2); + boolean feueraus = true; + List l = this.getObjects(Gegenstand.class); + for (Object o : l) { + if (((Gegenstand) o).getName().equals("Feuer")) { + feueraus = false; + } + } + if (ab3.istAufGegenstand("Portal") && feueraus) { + secret.writeLevel(4); + melde("Hurra! Das Feuer ist gelöscht.\n Die Katastrophe wurde verhindert."); + } else { + warne("Du hast die Aufgabe noch nicht erfüllt"); + } + Greenfoot.setWorld(new RoboterWelt()); + + } + + private void ab4_verzweiger() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,36,10,10, 0,10, 0, 0, 0, 0, 0,10,10,10}, + {10, 0,10,10, 0,10, 0,10,10,10, 0, 0, 0,10}, + {10, 0,10,10, 0,10, 0, 0, 0,10,10,10, 0,10}, + {10, 0,10,10, 0,10,10,10, 0,10, 0, 0, 0,10}, + {10, 0,10,10, 0,10, 0, 0, 0,10, 0,10,10,10}, + {10, 0,10,10, 0,10, 0,10,10,10,10,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10, 0,37, 0, 0,37, 0,37, 0, 0, 0,37, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + zeichneUeberschrift("AB4 - Verzweigungen nutzen"); + + // Schluesselloch und Tuere werden gekoppelt: + Schalter s = new Schalter(this); + int[][] on ={{-1,17},{18,-1}}; + int[][] off={{-1,17},{0,-1}}; + s.setPosition(1,5,on,off); + s.anschalten(); + + // Schalter und Stromquelle werden gekoppelt: + s = new Schalter(this); + int[][] on1 = {{-1,-1,12},{13,32,14}}; + int[][] off1 = {{-1,-1,11},{15,0,16}}; + s.setPosition(3,5,on1,off1); + s.anschalten(); + + AB4 ab41 = new AB4(); + addObject(ab41, 1, 2); + ab41.dreheRechts(); + AB4 ab42 = new AB4(); + addObject(ab42, 4, 2); + ab42.dreheRechts(); + AB4 ab43 = new AB4(); + addObject(ab43, 1, 9); + AB4 ab44 = new AB4(); + addObject(ab44, 1,10); + ab44.setAnzahlVonGegenstand("Schraube", 10); + AB4 ab45 = new AB4(); + addObject(ab45, 6, 7); + ab45.dreheLinks(); + + // Lege Schraubenreihe zufaellig + for (int i=0; i<12; i++) { + // muss sein, weil aus irgendwelchen Gründen "alte" Schrauben liegengeblieben sind + List g = getObjectsAt(i+1, 10, Gegenstand.class); + removeObjects(g); + if (Greenfoot.getRandomNumber(3)==0) + addObject(new Gegenstand("Schraube"), i+1, 10); + } + } + + public void einsatz_04() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + { 0, 0, 0, 0, 0, 0,10, 4, 4, 4, 4, 4, 4,10}, + {10,10,10,10,10, 0,10, 4, 4, 4, 4, 4, 4,10}, + {10,10,10,10,10, 0,10,10,10,10,10,10,18,10}, + {10,10,10,10,10,10,10,10,10,10,10,10, 0,10}, + {10,10,10,10,10,10, 0, 0, 0,10,10,10, 0,10}, + {10,10,10,10,10,10, 0,10, 0,10,10,10, 0,10}, + {10,10,10,10,10,10, 0,10, 0,10,10,10, 0,10}, + {10,10,10,10,10,10, 0,10, 0,10,10,10, 0,10}, + {10,10,10,10,10, 0, 0,10, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + zeichneUeberschrift("Einsatz 4: Reaktor abschalten"); + AB4 ab4 = new AB4(); + addObject(ab4, 0, 2); + + int x = Greenfoot.getRandomNumber(3)+1; + int y = Greenfoot.getRandomNumber(5)+6; + Wand w; + for (int xx=4; xx>= x; xx--) { + w = (Wand) (this.getObjectsAt(xx, 4, Wand.class).get(0)); + this.removeObject(w); + } + for (int yy=5; yy<= y; yy++) { + w = (Wand) (this.getObjectsAt(x, yy, Wand.class).get(0)); + this.removeObject(w); + } + + for (int xx=x+1; xx<=4; xx++) { + w = (Wand) (this.getObjectsAt(xx, y, Wand.class).get(0)); + this.removeObject(w); + } + for (int yy=y+1; yy<= 10; yy++) { + w = (Wand) (this.getObjectsAt(4, yy, Wand.class).get(0)); + this.removeObject(w); + } + boolean mindEinSchalter = false; + for(int xx=7;xx<=11;xx++) { + if ((Greenfoot.getRandomNumber(2)==0) || ((xx==11) && !mindEinSchalter)) { + Schalter s = new Schalter(this); + int[][] on ={{11}}; + int[][] off={{12}}; + s.setPosition(xx,4,on,off); + s.anschalten(); + mindEinSchalter = true; + } + } + Schalter s = new Schalter(this); + if (Greenfoot.getRandomNumber(2)==0) { + int[][] on ={{-1,18},{11,-1}}; + int[][] off={{-1,0},{12,-1}}; + s.setPosition(5,7,on,off); + } else { + int[][] on ={{-1,18},{17,-1}}; + int[][] off={{-1,0},{17,-1}}; + s.setPosition(5,7,on,off); + addObject(new Gegenstand("Schluessel"),0,2); + ab4.aufnehmen(); + } + s.anschalten(); + s = new Schalter(this); + if (Greenfoot.getRandomNumber(2)==0) { + int[][] on ={{-1,11},{18,-1}}; + int[][] off={{-1,12},{0,-1}}; + s.setPosition(8,8,on,off); + } else { + int[][] on ={{-1,17},{18,-1}}; + int[][] off={{-1,17},{0,-1}}; + s.setPosition(8,8,on,off); + addObject(new Gegenstand("Schluessel"),0,2); + ab4.aufnehmen(); + } + s.anschalten(); + s = new Schalter(this); + if (Greenfoot.getRandomNumber(2)==0) { + int[][] on ={{-1,18},{11,-1}}; + int[][] off={{-1,0},{12,-1}}; + s.setPosition(11,4,on,off); + } else { + int[][] on ={{-1,18},{17,-1}}; + int[][] off={{-1,0},{17,-1}}; + s.setPosition(11,4,on,off); + addObject(new Gegenstand("Schluessel"),0,2); + ab4.aufnehmen(); + } + s.anschalten(); + + ab4.einsatz4(); + Greenfoot.delay(2); + boolean geschafft = true; + + for(int xx=7;xx<=11;xx++) { + s = ((Wand) (this.getObjectsAt(xx, 4, Wand.class).get(0))).getSchalter(); + + if (s != null && s.getAn()) { + geschafft = false; + } + } + + if (geschafft) { + secret.writeLevel(5); + melde("In letzter Minute wurde das Kraftwerk abgeschaltet.\nDer Super-GAU wurde dadurch verhindert."); + } else { + warne("Du hast die Aufgabe noch nicht erfüllt"); + } + Greenfoot.setWorld(new RoboterWelt()); + } + + private void ab5_funktionen() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10, 0,10,10,10, 0,10,10,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10, 0,10, 0,10,10,10,10,10}, + {10, 0,43,10, 0, 0, 0,10, 0,43, 0, 0,43,10}, + {10, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0,10}, + {10,43, 0, 0,43, 0,10,10, 0,42, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,43,10, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 4,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + + zeichneUeberschrift("AB5 - Methoden mit Rückgabewert"); + AB5 ab5; + ab5 = new AB5(); + addObject(ab5, 1, 3); + for(int i=0; i<10; i++) { + addObject(new Gegenstand("Schraube"),1,3); + ab5.aufnehmen(); + } + + ab5 = new AB5(); + addObject(ab5, 1, 5); + for(int i=0; i<5; i++) { + addObject(new Gegenstand("Schraube"),1,5); + ab5.aufnehmen(); + } + ab5.verbraucheEnergie(40); + ab5 = new AB5(); + addObject(ab5, 2, 7); + for(int i=0; i<2; i++) { + addObject(new Gegenstand("Schraube"),2,7); + ab5.aufnehmen(); + } + ab5.verbraucheEnergie(80); + + ab5 = new AB5(); + addObject(ab5, 8, 5); + ab5 = new AB5(); + addObject(ab5, 8, 7); + ab5 = new AB5(); + addObject(ab5, 5, 9); + ab5.verbraucheEnergie(85); + + } + + public void einsatz_05() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10, 0,10,10,10,10,10,10}, + {10,10,10,10,10,10,10, 0,10,10,10,10,10,10}, + {10,10,10,10,10,10,10, 0,10,10,10,10,10,10}, + {10,10,10,10,10,10,10, 0,10,10,10,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,10, 0,10, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0,10, 0,10, 0, 0, 0, 0,10}, + {10, 1, 1, 0, 0, 0,10, 0,10, 0, 0, 0, 0,10}, + {10, 4, 1, 0, 0, 0,10, 0,10, 1, 1, 1, 1,10}, + {10, 4, 1, 0,10, 0,10, 0,10, 4, 4, 4, 4,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + // Hoehe variabel + int z = Greenfoot.getRandomNumber(4); + for (int y = 0; y liste = getObjects(Gegenstand.class); + boolean geschafft = true; + for (Gegenstand g : liste) { + if(g.istGegenstand("Atommuell")){ + if(backg[g.getY()][g.getX()] != 4) geschafft = false; + } + } + + if (geschafft) { + secret.writeLevel(6); + melde("Es herrscht wieder Ordnung im Zwischenlager.\nSo ein Aufräumroboter wäre auch für zu Hause praktisch..."); + } else { + warne("Du hast die Aufgabe noch nicht erfüllt"); + } + + Greenfoot.setWorld(new RoboterWelt()); + } + + private void ab6_attribute() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,33,10,10,10,10,10,10,10,10}, + {10, 0, 0, 0,10, 0,10, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0,10,10,10, 0,10,10,10, 0,10,10,10}, + {10, 0, 0,10, 0, 0, 0,10, 0,10, 0,10, 0,10}, + {10, 0, 0,10, 0,10, 0,10, 0,10, 0,10, 0,10}, + {10, 0, 0,10, 0,10, 0, 0, 0,10, 0,10, 0,10}, + {10, 0, 0,10,10,10, 0,10,10,10, 0,10, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0,10}, + {10, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + + zeichneUeberschrift("AB6 - Eigene Attribute"); + AB6_AB7 ab6; + ab6 = new AB6_AB7(); + addObject(ab6, 4, 5); + ab6 = new AB6_AB7(); + addObject(ab6, 8, 5); + ab6.setRotation(90); + ab6 = new AB6_AB7(); + addObject(ab6, 3, 9); + ab6.setRotation(270); + } + + public void einsatz_06() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,33,10,10,10,10,10,10,10,10}, + {10, 0, 0, 0,10, 0,10, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0,10}, + {10, 0, 0,10,10,10,10,10, 0, 0, 0,10, 0,10}, + {10, 0, 0,10, 0, 0, 0,10,10,10, 0,10, 0,10}, + {10, 0, 0,10, 0,10,10,10, 0,10, 0,10, 0,10}, + {10,10, 0,10, 0, 0, 0, 0, 0,10, 0,10, 0,10}, + {10, 0, 0,10,10,10, 0,10,10,10, 0,10, 0,10}, + {10, 0,10, 0, 0, 0, 0, 0, 0, 0, 0,10, 0,10}, + {10, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + + zeichneUeberschrift("Einsatz 6: Notfallprogramm"); + AB6_AB7 ab6; + ab6 = new AB6_AB7(); + addObject(ab6, 6, 5); + ab6.setRotation(90); + ab6.einsatz6(); + Greenfoot.delay(2); + if (ab6.istAufGegenstand("Portal")) { + if(ab6.getSchritte()==65) { + secret.writeLevel(7); + melde("Notfallprogramm aktiviert!\nSuche Ausgang...\nSuche Ausgang...\nAusgang nach 65 Schritten erreicht!"); + } else { + warne("Du hast die Aufgabe noch nicht korrekt erfüllt.\nDer Pledge-Algorithmus sollte für dieses\nLabyrinth 65 Schritte benötigen."); + } + } else { + warne("Du hast die Aufgabe noch nicht erfüllt"); + } + Greenfoot.setWorld(new RoboterWelt()); + } + + private void ab7_vererbung() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,33,10,10,10,10,10,10,10}, + {10,10,10, 0,10,10, 0,10, 0,10, 0,10, 0,10}, + {10, 0,43, 0,35, 0, 0,35, 0, 0, 0, 0,35,10}, + {10,10,10, 0,10,10, 0,10,10,10, 0,10, 0,10}, + {10,10,10, 0,10,43,43,43, 0,10, 0,10, 0,10}, + {10,10,10, 0,10,43,43,43,35,10,43,10, 0,10}, + {10, 0, 0, 0,10, 0, 0, 0,35,10,43,10, 0,10}, + {10, 0,43, 0,10,10, 0,10,10,10, 0,10, 0,10}, + {10, 0,43, 0, 0,43, 0, 0, 0, 0, 0,10, 0,10}, + {10, 0, 0, 0,43,43, 0,43, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + + zeichneUeberschrift("AB7 - Vererbung"); + AB6_AB7 ab6; + ab6 = new AB6_AB7(); + addObject(ab6, 8, 5); + ab6.setRotation(90); + ab6 = new AB6_AB7(); + addObject(ab6, 4, 9); + ab6.setRotation(90); + + ab6 = new AB6_AB7(); + addObject(ab6, 1, 3); + ab6.setRotation(0); + + } + + public void einsatz_07() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10, 0,10,10,10,10,10,10,10,10,10,10, 0,10}, + {10, 0,10,10,10,10,10,10,10,10,10,10, 0,10}, + {10, 0,10,10,10,10,10,10,10,10,10,10, 0,10}, + {33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,31,38,10}, + {10, 0,10,10,10,10,10,10,10,10,10,10, 0,10}, + {10, 0,10,10,10,10,10,10,10,10,10,10, 0,10}, + {10, 0,10,10,10,10,10,10,10,10,10,10, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + int[][] on = { + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}, + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,}}; + + weltLeeren(); + int x = 3; + int pos = 1; + int brennstaebe=0; + while (x< 11) { + for (int y = 3; y <=9 ; y++) { + backg[y][x] = 0; + } + if (Greenfoot.getRandomNumber(2)==0) { + backg[3][x] = 42; + if (Greenfoot.getRandomNumber(2)==0) { backg[4][x] = 35; brennstaebe++;} + if (Greenfoot.getRandomNumber(2)==0) { backg[5][x] = 35; brennstaebe++;} + } else { + if (pos ==1) { + pos = 2; + on[0][x-1] = 21; + on[8][x-1] = 21; + } else { + if (pos == 2) { + pos = 1; + on[4][x-1] = 21; + on[8][x-1] = 21; + } + } + } + + if (Greenfoot.getRandomNumber(2)==0) { + backg[9][x] = 42; + if (Greenfoot.getRandomNumber(2)==0) {backg[7][x] = 35;brennstaebe++;} + if (Greenfoot.getRandomNumber(2)==0) {backg[8][x] = 35;brennstaebe++;} + }else { + if (pos ==3) { + pos = 2; + on[8][x-1] = 21; + on[0][x-1] = 21; + on[4][x-1] = 0; + } else { + if (pos == 2) { + on[4][x-1] = 21; + on[0][x-1] = 21; + on[8][x-1] = 0; + pos = 3; + } + } + } + + x += Greenfoot.getRandomNumber(2)+2; + } + + generateWorld(backg); + + zeichneUeberschrift("Einsatz 7: Brennstäbe inventarisieren"); + AB6_AB7 ab7; + ab7 = new AB6_AB7(); + addObject(ab7, 1, 6); + Schalter s = new Schalter(this); + s.setPosition(2,2,on,on); + Gegenstand g = (Gegenstand) (this.getObjectsAt(11, 6, Gegenstand.class).get(0)); + g.setSchalter(s); + + ab7.einsatz7(); + Greenfoot.delay(2); + if (ab7.istAufGegenstand("Portal")) { + if(ab7.getBrennstaebe()==brennstaebe) { + secret.writeLevel(8); + melde("Jetzt sind auch noch die Stollen eingestürtzt.\nZum Glück hat das Notfallprogramm funktioniert.\nGut gemacht, Robi!"); + } else { + warne("Du hast die Aufgabe noch nicht korrekt erfüllt.\nEs hätten "+brennstaebe+" Brennstaebe sein müssen."); + } + } else { + warne("Du hast die Aufgabe noch nicht erfüllt"); + } + Greenfoot.setWorld(new RoboterWelt()); + } + + private void ab8_lokale_variablen() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10, 0, 0,34,34, 0,38,41,36, 0,36,41,34,10}, + {10, 0, 0, 0,38, 0, 0,38,41, 0,41, 0, 0,10}, + {10,10,10,10,10,18,10,10,10,10,18,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0,10}, + {10, 0,43,43,43,43,43, 0,10, 0, 0, 0, 0,10}, + {10, 0,43,43,43,43,43, 0,10,10,18,10,10,10}, + {10, 0,43,43,43,43,43, 0,10, 0, 0, 0, 0,10}, + {10, 0,43,43,43,43,43, 0,10, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + generateWorld(backg); + + zeichneUeberschrift("AB8 - Lokale Variablen"); + AB8 ab8; + ab8 = new AB8(); + addObject(ab8, 1, 2); + ab8 = new AB8(); + addObject(ab8, 1, 3); + ab8 = new AB8(); + addObject(ab8, 1, 5); + ab8 = new AB8(); + addObject(ab8, 9, 5); + ab8 = new AB8(); + addObject(ab8, 9, 8); + + } + + public void einsatz_08() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,33,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + int x = 1; + int pos = 1; + int qm=0; + while(x<11) { + int breite = Greenfoot.getRandomNumber(4)+2; + if ((breite+x)>13) { + breite = 13-x; + } + int hoehe = Greenfoot.getRandomNumber(5)+3; + for(int xx = 0; xx g = getObjectsAt(x,y,Gegenstand.class); + if(g.size() != 1 || !g.get(0).getName().equals("Brennstab")) ok = false; + } + } + for(int x=8; x <13; x++) { + for(int y=9; y<11; y++) { + List g = getObjectsAt(x,y,Gegenstand.class); + if(g.size() != 1 || !g.get(0).getName().equals("Brennstab")) ok = false; + } + } + for(int x=2; x <5; x++) { + for(int y=8; y<10; y++) { + List g = getObjectsAt(x,y,Gegenstand.class); + if(g.size() != 1 || !g.get(0).getName().equals("Brennstab")) ok = false; + } + } + + if (!ok) { + warne("Du hast die Aufgabe noch nicht erfüllt.\nDie Brennstäbe sind nicht\nin den alten Stollen positioniert."); + } + } + + if (ok) { + secret.writeLevel(10); + melde("Prima gemacht. Auftrag erfüllt!"); + } + Greenfoot.setWorld(new RoboterWelt()); + } + + private void ab10_zaehlschleifen() + { + int[][] backg = {{ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, + {20,20,20,20,20,20,20,20,20,20,20,20,20,20}, + {20,23, 5, 5, 5, 5, 7,20,43,43,43,20, 5,20}, + {20,20,20,20,20,20, 7,20,43,43,43,20, 5,20}, + {20, 5, 5, 5, 5,20, 7,20,20,43,20, 5, 5,20}, + {20, 5, 5, 5, 5,20,30,20,20,43,20, 5, 5,20}, + {20, 5, 5, 5, 5,20, 7,20,20,43,20,20,20,20}, + {20, 5,34,34, 5,20, 7, 5, 5,43, 5, 5, 5,20}, + {20,34,34,34,34,20,20, 5,20,20,20, 5,20,20}, + {20,34,34,34,34,20, 5, 5, 5, 5, 5, 5, 5,20}, + {20,34,34,34,34,20, 5, 5, 5, 5, 5, 5, 5,20}, + {20,20,20,20,20,20,20,20,20,20,20,20,20,20}}; + + weltLeeren(); + generateWorld(backg); + schwerkraft = true; + + Aufzugknopf s = new Aufzugknopf(this); + int[][] on = {{22}}; + int[][] off = {{23}}; + s.setPosition(1,2,on,off); + s.setAufzug((Gegenstand) this.getObjectsAt(6,5,Gegenstand.class).get(0),2); + Wand w = (Wand) (this.getObjectsAt(1, 2, Wand.class).get(0)); + w.setSchalter(s); + + zeichneUeberschrift("AB10 - Zählschleifen"); + Greenfoot.setSpeed(40); + + AB10 r1 = new AB10(); + addObject(r1,1,10); + r1.setAnzahlVonGegenstand("Akku", 3); + + AB10 r2 = new AB10(); + addObject(r2,8,7); + + AB10 r3 = new AB10(); + addObject(r3,2,2); + + schwerkraftAnwenden(); + } + + public void einsatz_10() + { + int[][] backg = {{ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}, + {20,20,20,20,20,20,20,20,20,20,20,20,20,20}, + {20,23, 6, 6, 6, 6, 7,20, 6, 6, 6, 6, 6,20}, + {20,20,20,20,20,20, 7,20, 6, 6, 6, 6, 6,20}, + {20, 6, 6, 6, 6,20, 7,20, 6, 6, 6, 6, 6,20}, + {20, 6, 6, 6, 6,20, 7,20,20,20,20,20,20,20}, + {20, 6, 6, 6, 6,20, 7, 6, 6, 6, 6, 6,20,20}, + {20, 6, 6, 6, 6,20,30,20,20,20,20, 6, 6,20}, + {20, 6, 6, 6, 6,20, 7,20, 6, 6, 6, 6, 6,20}, + {20,20,20,20,20,20, 7,20,20,20,20, 6,20,20}, + {20, 6, 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6,20}, + {20,20,20,20,20,20,20,20,20,20,20,20,20,20}}; + + weltLeeren(); + generateWorld(backg); + schwerkraft = true; + + Aufzugknopf s = new Aufzugknopf(this); + int[][] on = {{22}}; + int[][] off = {{23}}; + s.setPosition(1,2,on,off); + s.setAufzug((Gegenstand) this.getObjectsAt(6,7,Gegenstand.class).get(0),2); + Wand w = (Wand) (this.getObjectsAt(1, 2, Wand.class).get(0)); + w.setSchalter(s); + + zeichneUeberschrift("Einsatz 10: Sammle die Diamanten"); + Greenfoot.setSpeed(40); + + AB10 aufzugRoboter, sprengRoboter1, sprengRoboter2, legeRoboter; + aufzugRoboter = new AB10(); + addObject(aufzugRoboter, 2, 2); + + sprengRoboter1 = new AB10(); + addObject(sprengRoboter1, 3, 2); + sprengRoboter1.setAnzahlVonGegenstand("Bombe", 2); + + sprengRoboter2 = new AB10(); + addObject(sprengRoboter2, 4, 2); + sprengRoboter2.setAnzahlVonGegenstand("Bombe", 2); + + EinsatzLeiter el = new EinsatzLeiter(); + addObject(el, 13, 0); + el.nehmeKontaktAuf(); + + Random r = new Random(); + for(int x=1;x<5; x++) { + for(int y=4;y<9;y++) { + int z = r.nextInt(10); + Actor g=null; + if(z<7) { + g = new Gegenstand("Diamant"); + } else if(z<8) { + g = new Wand("Steine"); + } + if(g!=null) this.addObject(g,x,y); + } + } + for(int x=8;x<13; x++) { + for(int y=2;y<5;y++) { + int z = r.nextInt(10); + Actor g=null; + if(z<7) { + g = new Gegenstand("Diamant"); + } else if(z<8) { + g = new Wand("Steine"); + } + if(g!=null) this.addObject(g,x,y); + } + } + for(int x=8;x<13; x++) { + for(int y=8;y<9;y++) { + int z = r.nextInt(10); + Actor g=null; + if(z<7) { + g = new Gegenstand("Diamant"); + } else if(z<8) { + g = new Wand("Steine"); + } + if(g!=null) this.addObject(g,x,y); + } + } + this.schwerkraftAnwenden(); + + el.einsatz10(); + Greenfoot.delay(2); + + boolean ok = false; + int anz = (aufzugRoboter.getAnzahl("Diamant")+sprengRoboter1.getAnzahl("Diamant")+sprengRoboter2.getAnzahl("Diamant")); + if(anz >= 10){ + secret.writeLevel(11); + if (anz<15) { + melde("Mindestanforderung erfüllt.\n"+anz+" Diamanten gesammelt."); + } else { + if (anz <20) { + melde("Gut gemacht. "+anz+" Diamanten gesammelt.\nDie Roboter werden für die Minenarbeit trainiert!"); + } else { + melde("Grandios. "+anz+" Diamanten gesammelt.\nDiese Roboter kauft die Firma sofort!"); + } + } + } else { + warne("Du hast die Aufgabe noch nicht erfüllt!"); + } + Greenfoot.setWorld(new RoboterWelt()); + } + + private void ab11_finalBild() + { + int[][] backg = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10,45,45,45, 0,45, 0, 0,45, 0, 0,45, 0,10}, + {10, 0,45, 0,45, 0,45, 0,45, 0, 0,45, 0,10}, + {10, 0,45, 0,45, 0,45, 0,45, 0, 0,45, 0,10}, + {10, 0,45, 0,45, 0,45, 0,45, 0, 0,45, 0,10}, + {10, 0,45, 0, 0,45, 0, 0,45,45, 0,45,45,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10}, + {10,10,10,10,10,10,10,10,10,10,10,10,10,10}}; + + weltLeeren(); + + generateWorld(backg); + zeichneUeberschrift("Bravo, jetzt kannst du programmieren!"); + + } + + private void melde(String text) { + + Message m = new Message(text); + addObject(m, 7,6); + long z = System.currentTimeMillis(); + while(System.currentTimeMillis()-z < 2000){ + Greenfoot.delay(1); + } + removeObject(m); + + } + + private void warne(String text) { + + melde(text); + + } +} \ No newline at end of file diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Schalter.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Schalter.java new file mode 100644 index 0000000..395994e --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Schalter.java @@ -0,0 +1,107 @@ +import greenfoot.*; +import java.util.*; + +/** + * Die Klasse Schalter ist eine Hilfsklasse für die Schlösser und Schalthebel + * Sie hat zwei zweidimensionale Arrays, die für den Schalterzustand on bzw. off + * festlegen, wie ein Bereich der Welt aussehen soll. startx und starty speichern + * die linke obere Ecke dieses Bereichs. + */ + +public class Schalter +{ + RoboterWelt world; + private boolean an; + private int startx; + private int starty; + private int[][] on; + private int[][] off; + + /** Der Konstruktor erstellt einen neuen Schalter + * @param w Die Welt, die manipuliert werden soll + */ + public Schalter(World w) { + super(); + an = true; + startx = 0; + starty = 0; + on = null; + off = null; + world = (RoboterWelt) w; + } + + /** Die Methode setze verändert die Welt entsprechend den Vorgaben + * von backg. Dabei werden alle Objekte in diesem Bereich entfernt + * (außer den Robotern) und gegen neue Objekte ausgetauscht. + * @param backg Zweidimensionales Array, das die neuen Actors für den Bereich festlegt. + */ + + private void setze(int[][] backg) { + + for(int x=0; x=0 && (startx+x>0) && (startx+x1) && (starty+y=0 && backg[y][x] <10) { + world.changeBackground(backg[y][x], x, y); + } + Actor a = ((RoboterWelt) world).generateActor(backg[y][x]); + if (backg[y][x] == 11 || backg[y][x]==12 || backg[y][x]==17 || backg[y][x]==22 || backg[y][x]==23) { + ((Wand) a).setSchalter(this); + } + if (backg[y][x] == 31) { + ((Gegenstand) a).setSchalter(this); + } + if (a!= null) world.addObject(a,x+startx,y+starty); + } + } + } + } + + /** Setzt den Schalterzustand auf on + */ + public void anschalten() { + an = true; + if (on != null) setze(on); + } + + /** Setzt den Schalterzustand auf off + */ + + public void ausschalten() { + an = false; + if (off != null) setze(off); + } + + /** Schaltet den Schalter um, d.h. von on auf off oder umgekehrt + */ + public void umschalten() { + if (an) ausschalten(); else anschalten(); + } + + /** Legt fest, wie der Schalter die Welt verändern soll. + * @param x Koordinate der linke oberen Ecke des zu verändernden Bereichs + * @param y Koordinate der linke oberen Ecke des zu verändernden Bereichs + * @param on Zweidimensionales Array zu Festlegung, wie der Bereich bei angeschaltetem Schalter ausssehen soll + * @param off Zweidimensionales Array zu Festlegung, wie der Bereich bei ausgeschaltetem Schalter ausssehen soll + */ + public void setPosition(int x, int y, int[][] on, int[][] off) { + startx = x; + starty = y; + this.on = on; + this.off = off; + } + + /** Liefert den Schalterzustand + * @return true, wenn der Schalter an ist, sonst false + */ + public boolean getAn() { + return an; + } +} diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Wand.java b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Wand.java new file mode 100644 index 0000000..e43f708 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/Wand.java @@ -0,0 +1,116 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.util.*; + +/** + * Die Klasse Wand fast alle Actors zusammen, durch die der Roboter nicht hindurchlaufen kann. + * Dazu gehören neben den normalen Wänden auch Steine, Türen (vertikal/horizontal) usw. + */ + +public class Wand extends Actor +{ + private int typ; + private static String[] typen = {"Wand","Tuer","Tuer","Schalter","Schalter","Stromquelle","Stromquelle","Stromquelle","Stromquelle","Schloss","Stein","Steine","Schalter","Schalter"}; + private String[] bilder = {"Wand","Tuer2","Tuer1","SchalterEin","SchalterAus","Stromquelle1","Stromquelle2","Stromquelle3","Stromquelle4","Schloss","Stein","Steine","Rufknopf","RufknopfAus"}; + private Schalter schalter; + + /** Erzeugt eine neue Wand vom angegeben Typ + * @param name Name des Typs ("Wand","Tuer2","Tuer1","SchalterEin","SchalterAus","Stromquelle1","Stromquelle2","Stromquelle3","Stromquelle4","Schloss","Stein","Steine","Rufknopf","RufknopfAus") + */ + + public Wand(String name) { + super(); + this.typ = 0; + + for(int i = 0; i < bilder.length; i++) { + if (name.equals(bilder[i])) { + this.typ = i; + } + } + this.setImage("images/"+bilder[typ]+".png"); + schalter = null; + } + + /** Erzeugt eine neue Standardwand + */ + + public Wand() { + super(); + this.typ = 0; + this.setImage("images/"+bilder[typ]+".png"); + schalter = null; + } + + /** untersucht, ob name eine korrekte Bezeichnug für einen Wandtyp ist + * @return erg true, wenn name korrekt ist + */ + public static boolean istWandtyp(String name) { + boolean erg = false; + for(int i = 0; i < typen.length; i++) { + if (name.equals(typen[i])) { + erg = true; + } + } + return erg; + } + + /** Liefert den Typ der Wand + * @return Typname (Wand, Tuer, Stromquelle, Schalter, Schloss, Stein, Steine) + */ + public String getName() { + return this.typen[typ]; + } + + /** Liefert einen mit diesem Objekt verbunden Schalter + * @return Schalter, wenn vorhanden, sonst null + */ + public Schalter getSchalter() { + return this.schalter; + } + + /** Verbindet dieses Objekt mit einem Schalter, der + * die Welt verändern kann. + * @param s Schalterobjekt + */ + public void setSchalter(Schalter s) { + this.schalter = s; + } + + // Systembedingte Routinen + /** + * Wird aufgerufen, wenn der Roboter in die Welt gesetzt wird; + * erweitert nach Vorschlag P.Henriksen 29.6.08 + */ + protected void addedToWorld(World world) { + // Roboter kann nicht auf eine Wand oder einen anderem Roboter gesetzt werden + Actor wand = getOneObjectAtOffset(0, 0, Wand.class); + Actor roboter = getOneObjectAtOffset(0, 0, Roboter.class); + if (wand != null || roboter != null) { + world.removeObject(this); + } + } + + /** + * setLocation(x,y) fuer Roboter wird ueberschrieben, um nicht auf Wand oder + * anderen Roboter ziehen zu koennen! + * -- setzt den Roboter auf eine Kachel, deren Spalte x sowie Reihe y du + * hier vorgibst. Die Nummerierung beginnt jeweils bei 0 !!) + */ + public void setLocation(int x, int y) { + List wand = getWorld().getObjectsAt(x, y, null); + if (wand.isEmpty()) { + super.setLocation(x, y); + } + } + + /* setLocation(x,y) und setRotation(x) koennen nicht verborgen werden, + * weil sie schon in der Oberklasse Actor public sind. + */ + + /** + * setRotation(x) fuer Roboter wird verhindert! + * Es ist unnoetig, da Roboter sich nur in vier Richtungen drehen koennen! + */ + public void setRotation(int x) { + // nichts machen!! + } +} \ No newline at end of file diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/Roboter.html b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/Roboter.html new file mode 100644 index 0000000..76f5c2e --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/Roboter.html @@ -0,0 +1,778 @@ + + + + + +Roboter + + + + + + + + + +
+
+

Class Roboter

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • greenfoot.Actor
    • +
    • +
        +
      • Roboter
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    public class Roboter
    +extends greenfoot.Actor
    +
    Diese Klasse ist die Oberklasse fuer die Roboter "Robita", "Robson" und "Robby". + Programme sollen nur in den Unterklassen + implementiert werden, da diese Klasse fuer Java-Beginner sehr komplex ist. + Ein Roboter kann sich felderweise in die vier Himmelsrichtungen im Szenario bewegen. + Ueber Sensoren kann er Informationen ueber seine Umwelt erhalten.
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      Roboter() +
      Ein Objekt der Klasse Roboter wird exempliert bzw. instanziert.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      voidablegen​(java.lang.String name) +
      Der Roboter legt einen Gegenstand aus seinem Vorrat auf dem Feld ab.
      +
      protected voidaddedToWorld​(greenfoot.World world) +
      Wird aufgerufen, wenn der Roboter in die Welt gesetzt wird; + erweitert nach Vorschlag P.Henriksen 29.6.08
      +
      voidaufnehmen() +
      Der Roboter nimmt einen Gegenstand, der sich auf seinem Feld befindet in seinen Vorrat auf.
      +
      voidbenutze​(java.lang.String name) +
      Benutzt den angegebenen Gegenstand.
      +
      voiddreheLinks() +
      Der Roboter dreht sich um 90 Grad nach links (aus der Sicht des Roboters).
      +
      voiddreheRechts() +
      Der Roboter dreht sich um 90 Grad nach rechts (aus der Sicht des Roboters).
      +
      voiddreheUm() +
      Der Roboter dreht sich um 180 Grad nach rechts (aus der Sicht des Roboters).
      +
      voideinsVor() +
      Der Roboter geht einen Schritt in die Pfeilrichtung.
      +
      voidgehilfeEinsetzen​(Roboter r) +
      Diese Methode setzt einen Roboter vor den Roboter, der diese Methode aufruft.
      +
      intgetAnzahl() +
      Gibt die Anzahl der Gegenstaende, die Roboter traegt, zurueck.
      +
      intgetAnzahl​(java.lang.String name) +
      Gibt die Anzahl der Gegenstaende einer bestimmten Art zurueck.
      +
      intgetEnergie() +
      Gibt die Restenergie des Roboters zurück
      +
      booleanhatGegenstand​(java.lang.String name) +
      Gibt zurueck, ob der Roboter mindestens einen Gegenstand der angegeben Art besitzt.
      +
      booleanistAufGegenstand() +
      Liefert genau dann true, wenn auf der Kachel, auf der sich der + aufgerufene Roboter gerade befindet, ein beliebiger Gegenstand befindet.
      +
      booleanistAufGegenstand​(java.lang.String name) +
      Liefert genau dann true, wenn auf der Kachel, auf der sich der + aufgerufene Roboter gerade befindet, ein Gegenstand mit dem angegebnen Namen befindet.
      +
      booleanistEnergieLeer() +
      Gibt zurueck, ob die Energie des Roboters verbraucht ist.
      +
      booleanistInventarLeer() +
      Liefert genau dann true, wenn der aufgerufene Roboter keinen Gegenstand bei sich hat.
      +
      booleanistVorne​(java.lang.String name) +
      Liefert genau dann true, wenn sich vor dem Roboter ein Gegenstand mit dem angegebnen Namen befindet.
      +
      booleanistVorneFrei() +
      Der Sensor ueberprueft, ob vor dem Roboter Hindernisse stehen oder nicht
      +
      booleanistWandLinks() +
      Der Sensor ueberprueft, ob sich links der Laufrichtung eine Wand befindet.
      +
      booleanistWandRechts() +
      Der Sensor ueberprueft, ob sich rechts der Laufrichtung eine Wand befindet.
      +
      booleanistWandVorne() +
      Der Sensor ueberprueft, ob sich in Laufrichtung des Roboters eine Wand befindet.
      +
      voidmelde​(java.lang.String text, + boolean istWichtig) +
      Gibt den uebergebenen String in einer Dialogbox auf dem Bildschirm aus
      +
      voidsetAnzahlVonGegenstand​(java.lang.String name, + int anzahl) +
      Gibt dem Roboter eine bestimmte Anzahl von Gegenstaenden einer Art
      +
      voidsetLocation​(int x, + int y) +
      setLocation(x,y) fuer Roboter wird ueberschrieben, um nicht auf Wand oder + anderen Roboter ziehen zu koennen!
      +
      voidsetRotation​(int x) +
      setRotation(x) fuer Roboter wird ueberschrieben, damit nur vier Rotationsrichtungen moeglich sind!
      +
      voidverbraucheEnergie​(int verlust) +
      Reduziert die Restenergie des Roboters um den angegebenen Wert.
      +
      voidwarne​(java.lang.String text, + greenfoot.Actor actor) +
      Gibt den uebergebenen String in einer Dialogbox als Warnung auf dem Bildschirm aus.
      +
      +
        +
      • + + +

        Methods inherited from class greenfoot.Actor

        +act, getImage, getIntersectingObjects, getNeighbours, getObjectsAtOffset, getObjectsInRange, getOneIntersectingObject, getOneObjectAtOffset, getRotation, getWorld, getWorldOfType, getX, getY, intersects, isAtEdge, isTouching, move, removeTouching, setImage, setImage, turn, turnTowards
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Roboter

        +
        public Roboter()
        +
        Ein Objekt der Klasse Roboter wird exempliert bzw. instanziert.
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getAnzahl

        +
        public int getAnzahl()
        +
        Gibt die Anzahl der Gegenstaende, die Roboter traegt, zurueck.
        +
        +
        Returns:
        +
        Anzahl der Gegenstaende
        +
        +
      • +
      + + + +
        +
      • +

        getAnzahl

        +
        public int getAnzahl​(java.lang.String name)
        +
        Gibt die Anzahl der Gegenstaende einer bestimmten Art zurueck.
        +
        +
        Parameters:
        +
        name - Art der Gegenstands (z.B. "Schluessel")
        +
        Returns:
        +
        Anzahl der Gegenstaende
        +
        +
      • +
      + + + +
        +
      • +

        getEnergie

        +
        public int getEnergie()
        +
        Gibt die Restenergie des Roboters zurück
        +
        +
        Returns:
        +
        Energiereserve (0-100)
        +
        +
      • +
      + + + +
        +
      • +

        verbraucheEnergie

        +
        public void verbraucheEnergie​(int verlust)
        +
        Reduziert die Restenergie des Roboters um den angegebenen Wert.
        +
        +
        Parameters:
        +
        verlust - Anzahl der verbrauchten Energiepunkte
        +
        +
      • +
      + + + +
        +
      • +

        istEnergieLeer

        +
        public boolean istEnergieLeer()
        +
        Gibt zurueck, ob die Energie des Roboters verbraucht ist.
        +
        +
        Returns:
        +
        true, wenn Restenergie =0, sonst false
        +
        +
      • +
      + + + +
        +
      • +

        einsVor

        +
        public void einsVor()
        +
        Der Roboter geht einen Schritt in die Pfeilrichtung. + Das macht er nur, wenn sich keine Wand vor ihm befindet oder + er nicht an der Grenze der Welt zur Wand blickt.
        +
      • +
      + + + +
        +
      • +

        dreheRechts

        +
        public void dreheRechts()
        +
        Der Roboter dreht sich um 90 Grad nach rechts (aus der Sicht des Roboters).
        +
      • +
      + + + +
        +
      • +

        dreheUm

        +
        public void dreheUm()
        +
        Der Roboter dreht sich um 180 Grad nach rechts (aus der Sicht des Roboters).
        +
      • +
      + + + +
        +
      • +

        dreheLinks

        +
        public void dreheLinks()
        +
        Der Roboter dreht sich um 90 Grad nach links (aus der Sicht des Roboters).
        +
      • +
      + + + +
        +
      • +

        hatGegenstand

        +
        public boolean hatGegenstand​(java.lang.String name)
        +
        Gibt zurueck, ob der Roboter mindestens einen Gegenstand der angegeben Art besitzt.
        +
        +
        Parameters:
        +
        name - Art des gesuchten Gegenstands
        +
        Returns:
        +
        true, wenn der Roboter einen derartigen Gegenstand hat, sonst false
        +
        +
      • +
      + + + +
        +
      • +

        setAnzahlVonGegenstand

        +
        public void setAnzahlVonGegenstand​(java.lang.String name,
        +                                   int anzahl)
        +
        Gibt dem Roboter eine bestimmte Anzahl von Gegenstaenden einer Art
        +
        +
        Parameters:
        +
        name - Art des Gegenstands
        +
        +
      • +
      + + + +
        +
      • +

        benutze

        +
        public void benutze​(java.lang.String name)
        +
        Benutzt den angegebenen Gegenstand. Es koennen nur Schluessel, Schalter, Bombe, Feuerloescher und Akku benutzt werden. + Dabei kann ein Schluessel nur direkt vor einem Schloss benutzt werden. Eine Bombe sprengt einen Bereich frei. Der Feuerloescher + kann ein direkt vor dem Roboter befindliches Feuer loeschen. Der Akku erhoeht die Restenergie des Roboters.
        +
        +
        Parameters:
        +
        name - Art des zu benutzenden Gegenstands ("Schluessel", "Schalter", "Bombe", "Feuerloescher", "Akku")
        +
        +
      • +
      + + + +
        +
      • +

        istAufGegenstand

        +
        public boolean istAufGegenstand()
        +
        Liefert genau dann true, wenn auf der Kachel, auf der sich der + aufgerufene Roboter gerade befindet, ein beliebiger Gegenstand befindet.
        +
        +
        Returns:
        +
        true, wenn der Roboter auf einem Gegenstand steht, sonst false
        +
        +
      • +
      + + + +
        +
      • +

        istAufGegenstand

        +
        public boolean istAufGegenstand​(java.lang.String name)
        +
        Liefert genau dann true, wenn auf der Kachel, auf der sich der + aufgerufene Roboter gerade befindet, ein Gegenstand mit dem angegebnen Namen befindet.
        +
        +
        Parameters:
        +
        name - Einer der Gegenstaende ("Schluessel", "Schalter", "Bombe", "Feuerloescher", "Brennstab", "Akku", "Schraube", "Kontaktplatte", "Oelfleck", "Portal", "Strom", "Feuer", "Aufzug")
        +
        Returns:
        +
        true, wenn der Roboter auf einem Gegenstand steht, sonst false
        +
        +
      • +
      + + + +
        +
      • +

        istInventarLeer

        +
        public boolean istInventarLeer()
        +
        Liefert genau dann true, wenn der aufgerufene Roboter keinen Gegenstand bei sich hat.
        +
        +
        Returns:
        +
        true, wenn der Roboter keinen Gegenstand mit sich traegt, sonst false
        +
        +
      • +
      + + + +
        +
      • +

        ablegen

        +
        public void ablegen​(java.lang.String name)
        +
        Der Roboter legt einen Gegenstand aus seinem Vorrat auf dem Feld ab.
        +
        +
        Parameters:
        +
        name - Einer der Gegenstaende ("Schluessel", "Schalter", "Bombe", "Brennstab", "Feuerloescher", "Akku", "Schraube", "Kontaktplatte", "Oelfleck", "Portal", "Strom", "Feuer")
        +
        +
      • +
      + + + +
        +
      • +

        aufnehmen

        +
        public void aufnehmen()
        +
        Der Roboter nimmt einen Gegenstand, der sich auf seinem Feld befindet in seinen Vorrat auf. + Falls er nicht auf einem Gegenstand steht, gibt er eine Warnung aus. + Roboter haben nur eine begrenzte Kapazitaet. Sie koennen maximal 99 Gegenstaende mit sich tragen. + Falls er einen 100. Gegenstand aufnehmen moechte, wird auch eine entsprechende Warnung ausgegeben.
        +
      • +
      + + + +
        +
      • +

        gehilfeEinsetzen

        +
        public void gehilfeEinsetzen​(Roboter r)
        +
        Diese Methode setzt einen Roboter vor den Roboter, der diese Methode aufruft. + Ist vor ihm kein Platz, wird eine Warnung ausgegeben.
        +
        +
        Parameters:
        +
        r - der Hilfsroboter, der eingesetzt werden soll
        +
        +
      • +
      + + + +
        +
      • +

        istVorneFrei

        +
        public boolean istVorneFrei()
        +
        Der Sensor ueberprueft, ob vor dem Roboter Hindernisse stehen oder nicht
        +
        +
        Returns:
        +
        true, wenn vor dem Roboter frei ist, sonst false
        +
        +
      • +
      + + + +
        +
      • +

        istVorne

        +
        public boolean istVorne​(java.lang.String name)
        +
        Liefert genau dann true, wenn sich vor dem Roboter ein Gegenstand mit dem angegebnen Namen befindet.
        +
        +
        Parameters:
        +
        name - Einer der Gegenstaende ("Schluessel", "Schalter", "Schloss", "Bombe", "Feuerloescher", "Akku", "Schraube", "Kontaktplatte", "Oelfleck", "Portal", "Strom", "Feuer", "Aufzug")
        +
        Returns:
        +
        true, wenn der Roboter vor dem Gegenstand mit dem Namen name steht, sonst false
        +
        +
      • +
      + + + +
        +
      • +

        istWandVorne

        +
        public boolean istWandVorne()
        +
        Der Sensor ueberprueft, ob sich in Laufrichtung des Roboters eine Wand befindet.
        +
        +
        Returns:
        +
        true, wenn der Roboter vor einer Wand steht, sonst false
        +
        +
      • +
      + + + +
        +
      • +

        istWandRechts

        +
        public boolean istWandRechts()
        +
        Der Sensor ueberprueft, ob sich rechts der Laufrichtung eine Wand befindet.
        +
        +
        Returns:
        +
        true, wenn sich rechts von dem Roboter eine Wand befindet, sonst false
        +
        +
      • +
      + + + +
        +
      • +

        istWandLinks

        +
        public boolean istWandLinks()
        +
        Der Sensor ueberprueft, ob sich links der Laufrichtung eine Wand befindet.
        +
        +
        Returns:
        +
        true, wenn sich links von dem Roboter eine Wand befindet, sonst false
        +
        +
      • +
      + + + +
        +
      • +

        melde

        +
        public void melde​(java.lang.String text,
        +                  boolean istWichtig)
        +
        Gibt den uebergebenen String in einer Dialogbox auf dem Bildschirm aus
        +
        +
        Parameters:
        +
        text - Der Text, der angezeit werden soll
        +
        istWichtig - bei true wird der Text "Achtung! Besonders wichtige Meldung:" in die Kopfzeile geschrieben, sonst nur der Text "Meldung!"
        +
        +
      • +
      + + + +
        +
      • +

        warne

        +
        public void warne​(java.lang.String text,
        +                  greenfoot.Actor actor)
        +
        Gibt den uebergebenen String in einer Dialogbox als Warnung auf dem Bildschirm aus. + Dadurch wird der uebergebene Actor actor von der Roboterwelt entfernt und diese neu gezeichnet.
        +
        +
        Parameters:
        +
        text - Der Text, der angezeit werden soll
        +
        actor - Der Actor, der ggf. entfernt werden soll
        +
        +
      • +
      + + + +
        +
      • +

        addedToWorld

        +
        protected void addedToWorld​(greenfoot.World world)
        +
        Wird aufgerufen, wenn der Roboter in die Welt gesetzt wird; + erweitert nach Vorschlag P.Henriksen 29.6.08
        +
        +
        Overrides:
        +
        addedToWorld in class greenfoot.Actor
        +
        Parameters:
        +
        world - Die Welt in die ein Roboter gesetzt wurde
        +
        +
      • +
      + + + +
        +
      • +

        setLocation

        +
        public void setLocation​(int x,
        +                        int y)
        +
        setLocation(x,y) fuer Roboter wird ueberschrieben, um nicht auf Wand oder + anderen Roboter ziehen zu koennen! + -- setzt den Roboter auf eine Kachel, deren Spalte x sowie Reihe y du + hier vorgibst. Die Nummerierung beginnt jeweils bei 0 !!)
        +
        +
        Overrides:
        +
        setLocation in class greenfoot.Actor
        +
        Parameters:
        +
        x - die x-Koordinate
        +
        y - die y-Koordinate
        +
        +
      • +
      + + + +
        +
      • +

        setRotation

        +
        public void setRotation​(int x)
        +
        setRotation(x) fuer Roboter wird ueberschrieben, damit nur vier Rotationsrichtungen moeglich sind!
        +
        +
        Overrides:
        +
        setRotation in class greenfoot.Actor
        +
        Parameters:
        +
        x - die Richtung (0=Osten, 90=Sueden, 180=Westen, 270=Norden)
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/allclasses.html b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/allclasses.html new file mode 100644 index 0000000..9717fea --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/allclasses.html @@ -0,0 +1,20 @@ + + + + + +All Classes + + + + + + +

All Classes

+
+ +
+ + diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/constant-values.html b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/constant-values.html new file mode 100644 index 0000000..fd2f59b --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/constant-values.html @@ -0,0 +1,35 @@ + + + + + +Constant Field Values + + + + + + + + +
+
+

Constant Field Values

+
+

Contents

+
+
+
+ + diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/element-list b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/element-list new file mode 100644 index 0000000..0e722c7 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/element-list @@ -0,0 +1 @@ +unnamed package diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/index.html b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/index.html new file mode 100644 index 0000000..25de069 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/index.html @@ -0,0 +1,23 @@ + + + + + +Generated Documentation (Untitled) + + + + + + + +
+ +

Roboter.html

+
+ + diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/logfile.txt b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/logfile.txt new file mode 100644 index 0000000..1d95621 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/logfile.txt @@ -0,0 +1,42 @@ +Class documentation +<---- javadoc command: ----> +E:\Programme\Informatik\Greenfoot361\jdk\bin\javadoc.exe +-author +-version +-nodeprecated +-protected +-Xdoclint:none +-noindex +-notree +-nohelp +-nonavbar +-source +11 +-classpath +E:\Programme\Informatik\Greenfoot361\lib\extensions\greenfoot.jar;E:\Programme\Informatik\Greenfoot361\lib\bluejcore.jar;E:\Programme\Informatik\Greenfoot361\lib\bluejeditor.jar;E:\Programme\Informatik\Greenfoot361\lib\bluejext.jar;E:\Programme\Informatik\Greenfoot361\lib\junit-4.11.jar;E:\Programme\Informatik\Greenfoot361\lib\hamcrest-core-1.3.jar;E:\Programme\Informatik\Greenfoot361\lib\bluej.jar;E:\Programme\Informatik\Greenfoot361\lib\classgraph-4.2.6.jar;E:\Programme\Informatik\Greenfoot361\lib\diffutils-1.2.1.jar;E:\Programme\Informatik\Greenfoot361\lib\commons-logging-api-1.1.2.jar;E:\Programme\Informatik\Greenfoot361\lib\jl1.0.1.jar;E:\Programme\Informatik\Greenfoot361\lib\opencsv-2.3.jar;E:\Programme\Informatik\Greenfoot361\lib\xom-1.2.9.jar;E:\Programme\Informatik\Greenfoot361\lib\lang-stride.jar;E:\Programme\Informatik\Greenfoot361\lib\nsmenufx-2.1.4.jar;E:\Programme\Informatik\Greenfoot361\lib\richtextfx-fat-0.9.0.jar;E:\Programme\Informatik\Greenfoot361\lib\guava-17.0.jar;E:\Programme\Informatik\Greenfoot361\lib\httpclient-4.1.1.jar;E:\Programme\Informatik\Greenfoot361\lib\httpcore-4.1.jar;E:\Programme\Informatik\Greenfoot361\lib\httpmime-4.1.1.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.base.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.controls.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.fxml.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.graphics.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.media.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.properties.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.swing.jar;E:\Programme\Informatik\Greenfoot361\lib\javafx\lib\javafx.web.jar;F:\Informatik\Fortbildung ZPG IMP9\Greenfoot\OptischeTaeuschungUnterklasse V3 - Animation\jdom-1.1.3.jar;F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20211111\4_loesungen\01_ReaktorRobot_GF361_Szenario_Loesung +-d +F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20211111\4_loesungen\01_ReaktorRobot_GF361_Szenario_Loesung\doc +-encoding +windows-1252 +-charset +windows-1252 +F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20211111\4_loesungen\01_ReaktorRobot_GF361_Szenario_Loesung\Roboter.java +<---- end of javadoc command ----> +Loading source file F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20211111\4_loesungen\01_ReaktorRobot_GF361_Szenario_Loesung\Roboter.java... +Constructing Javadoc information... +warning: unknown enum constant Tag.Any + reason: class file for threadchecker.Tag not found +warning: unknown enum constant Tag.Any +warning: unknown enum constant Tag.Any +warning: unknown enum constant Tag.Any +Standard Doclet version 11.0.2 +Building tree for all the packages and classes... +Generating F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20211111\4_loesungen\01_ReaktorRobot_GF361_Szenario_Loesung\doc\Roboter.html... +Generating F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20211111\4_loesungen\01_ReaktorRobot_GF361_Szenario_Loesung\doc\package-summary.html... +Generating F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20211111\4_loesungen\01_ReaktorRobot_GF361_Szenario_Loesung\doc\constant-values.html... +Building index for all the packages and classes... +Building index for all classes... +Generating F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20211111\4_loesungen\01_ReaktorRobot_GF361_Szenario_Loesung\doc\allclasses.html... +Generating F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20211111\4_loesungen\01_ReaktorRobot_GF361_Szenario_Loesung\doc\allclasses.html... +Generating F:\Informatik\Fortbildung Jahreskurs\jahreskurs_einfuehrung_programmierung\01_ReaktorRobot_GF361_20211111\4_loesungen\01_ReaktorRobot_GF361_Szenario_Loesung\doc\index.html... +4 warnings diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/package-summary.html b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/package-summary.html new file mode 100644 index 0000000..991a96c --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/package-summary.html @@ -0,0 +1,53 @@ + + + + + +<Unnamed> + + + + + + + + +
+
+

Package <Unnamed>

+
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    Roboter +
    Diese Klasse ist die Oberklasse fuer die Roboter "Robita", "Robson" und "Robby".
    +
    +
  • +
+
+
+ + diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/script.js b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/script.js new file mode 100644 index 0000000..d33d3ab --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/script.js @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; +function loadScripts(doc, tag) { + createElem(doc, tag, 'jquery/jszip/dist/jszip.js'); + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils.js'); + if (window.navigator.userAgent.indexOf('MSIE ') > 0 || window.navigator.userAgent.indexOf('Trident/') > 0 || + window.navigator.userAgent.indexOf('Edge/') > 0) { + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils-ie.js'); + } + createElem(doc, tag, 'search.js'); + + $.get(pathtoroot + "module-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "module-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + moduleSearchIndex = JSON.parse(zip.file("module-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "package-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "package-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + packageSearchIndex = JSON.parse(zip.file("package-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "type-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "type-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + typeSearchIndex = JSON.parse(zip.file("type-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "member-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "member-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + memberSearchIndex = JSON.parse(zip.file("member-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "tag-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "tag-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + tagSearchIndex = JSON.parse(zip.file("tag-search-index.json").asText()); + }); + }); + if (!moduleSearchIndex) { + createElem(doc, tag, 'module-search-index.js'); + } + if (!packageSearchIndex) { + createElem(doc, tag, 'package-search-index.js'); + } + if (!typeSearchIndex) { + createElem(doc, tag, 'type-search-index.js'); + } + if (!memberSearchIndex) { + createElem(doc, tag, 'member-search-index.js'); + } + if (!tagSearchIndex) { + createElem(doc, tag, 'tag-search-index.js'); + } + $(window).resize(function() { + $('.navPadding').css('padding-top', $('.fixedNav').css("height")); + }); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +function show(type) { + count = 0; + for (var key in data) { + var row = document.getElementById(key); + if ((data[key] & type) !== 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) { + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} + +function updateModuleFrame(pFrame, cFrame) { + top.packageFrame.location = pFrame; + top.classFrame.location = cFrame; +} diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/stylesheet.css b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/stylesheet.css new file mode 100644 index 0000000..c027275 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/doc/stylesheet.css @@ -0,0 +1,906 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:#bb7a2a; +} +a[name] { + color:#353833; +} +a[name]:before, a[name]:target, a[id]:before, a[id]:target { + content:""; + display:inline-block; + position:relative; + padding-top:129px; + margin-top:-129px; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} + +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* + * Styles for navigation bar. + */ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.navPadding { + padding-top: 107px; +} +.fixedNav { + position:fixed; + width:100%; + z-index:999; + background-color:#ffffff; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch { + float:right; + margin:0 0 0 0; + padding:0; +} +ul.navListSearch li { + list-style:none; + float:right; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch li label { + position:relative; + right:-16px; +} +ul.subNavList li { + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Styles for page header and footer. + */ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexNav { + position:relative; + font-size:12px; + background-color:#dee3e9; +} +.indexNav ul { + margin-top:0; + padding:5px; +} +.indexNav ul li { + display:inline; + list-style-type:none; + padding-right:10px; + text-transform:uppercase; +} +.indexNav h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* + * Styles for headings. + */ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* + * Styles for page layout containers. + */ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer, +.allClassesContainer, .allPackagesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* + * Styles for tables. + */ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary, +.requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + width:100%; + border-spacing:0; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary, .requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption, +.requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.constantsSummary caption a:link, .deprecatedSummary caption a:link, +.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link, +.usesSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover, +.usesSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.constantsSummary caption a:active, .deprecatedSummary caption a:active, +.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active, +.usesSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.constantsSummary caption a:visited, .deprecatedSummary caption a:visited, +.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited, +.usesSummary caption a:visited { + color:#FFFFFF; +} +.useSummary caption a:link, .useSummary caption a:hover, .useSummary caption a:active, +.useSummary caption a:visited { + color:#1f389c; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span, +.requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span, +.usesSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span, +.overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span, +.overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab, +.packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab, +.overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab, +.typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd, +.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd, .packagesSummary .activeTableTab .tabEnd, +.overviewSummary .activeTableTab .tabEnd, .typeSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd, .packagesSummary .tableTab .tabEnd, +.overviewSummary .tableTab .tabEnd, .typeSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; +} +.rowColor th, .altColor th { + font-weight:normal; +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td, +.requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .useSummary th, +.constantsSummary th, .packagesSummary th, td.colFirst, td.colSecond, td.colLast, .useSummary td, +.constantsSummary td { + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .constantsSummary th, +.packagesSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + font-size:13px; +} +td.colSecond, th.colSecond, td.colLast, th.colConstructorName, th.colDeprecatedItemName, th.colLast { + font-size:13px; +} +.constantsSummary th, .packagesSummary th { + font-size:13px; +} +.providesSummary th.colFirst, .providesSummary th.colLast, .providesSummary td.colFirst, +.providesSummary td.colLast { + white-space:normal; + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.requiresSummary td.colFirst, .requiresSummary th.colFirst, +.packagesSummary td.colFirst, .packagesSummary td.colSecond, .packagesSummary th.colFirst, .packagesSummary th, +.usesSummary td.colFirst, .usesSummary th.colFirst, +.providesSummary td.colFirst, .providesSummary th.colFirst, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colSecond, .memberSummary th.colSecond, .memberSummary th.colConstructorName, +.typeSummary td.colFirst, .typeSummary th.colFirst { + vertical-align:top; +} +.packagesSummary th.colLast, .packagesSummary td.colLast { + white-space:normal; +} +td.colFirst a:link, td.colFirst a:visited, +td.colSecond a:link, td.colSecond a:visited, +th.colFirst a:link, th.colFirst a:visited, +th.colSecond a:link, th.colSecond a:visited, +th.colConstructorName a:link, th.colConstructorName a:visited, +th.colDeprecatedItemName a:link, th.colDeprecatedItemName a:visited, +.constantValuesContainer td a:link, .constantValuesContainer td a:visited, +.allClassesContainer td a:link, .allClassesContainer td a:visited, +.allPackagesContainer td a:link, .allPackagesContainer td a:visited { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor, .altColor th { + background-color:#FFFFFF; +} +.rowColor, .rowColor th { + background-color:#EEEEEF; +} +/* + * Styles for contents. + */ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +td.colLast div { + padding-top:0px; +} +td.colLast a { + padding-bottom:3px; +} +/* + * Styles for formatting effect. + */ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .implementationLabel, .memberNameLabel, .memberNameLink, +.moduleLabelInPackage, .moduleLabelInType, .overrideSpecifyLabel, .packageLabelInType, +.packageHierarchyLabel, .paramLabel, .returnLabel, .seeLabel, .simpleTagLabel, +.throwsLabel, .typeNameLabel, .typeNameLink, .searchTagLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} +.deprecationBlock { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} +div.contentContainer ul.blockList li.blockList h2 { + padding-bottom:0px; +} +/* + * Styles for IFRAME. + */ +.mainContainer { + margin:0 auto; + padding:0; + height:100%; + width:100%; + position:fixed; + top:0; + left:0; +} +.leftContainer { + height:100%; + position:fixed; + width:320px; +} +.leftTop { + position:relative; + float:left; + width:315px; + top:0; + left:0; + height:30%; + border-right:6px solid #ccc; + border-bottom:6px solid #ccc; +} +.leftBottom { + position:relative; + float:left; + width:315px; + bottom:0; + left:0; + height:70%; + border-right:6px solid #ccc; + border-top:1px solid #000; +} +.rightContainer { + position:absolute; + left:320px; + top:0; + bottom:0; + height:100%; + right:0; + border-left:1px solid #000; +} +.rightIframe { + margin:0; + padding:0; + height:100%; + right:30px; + width:100%; + overflow:visible; + margin-bottom:30px; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:#4D7A97; + color:#FFFFFF; +} +.resultItem { + font-size:13px; +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:scroll; + overflow-x:scroll; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:999999; +} +ul.ui-autocomplete li { + float:left; + clear:both; + width:100%; +} +.resultHighlight { + font-weight:bold; +} +#search { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + padding-left:20px; + position:relative; + right:-18px; +} +#reset { + background-color: rgb(255,255,255); + background-image:url('resources/x.png'); + background-position:center; + background-repeat:no-repeat; + background-size:12px; + border:0 none; + width:16px; + height:17px; + position:relative; + left:-4px; + top:-4px; + font-size:0px; +} +.watermark { + color:#545454; +} +.searchTagDescResult { + font-style:italic; + font-size:11px; +} +.searchTagHolderResult { + font-style:italic; + font-size:12px; +} +.searchTagResult:before, .searchTagResult:target { + color:red; +} +.moduleGraph span { + display:none; + position:absolute; +} +.moduleGraph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.methodSignature { + white-space:normal; +} + +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid black; +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid black; +} +table.striped { + border-collapse: collapse; + border: 1px solid black; +} +table.striped > thead { + background-color: #E3E3E3; +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid black; +} +table.striped > tbody > tr:nth-child(even) { + background-color: #EEE +} +table.striped > tbody > tr:nth-child(odd) { + background-color: #FFF +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid black; + border-right: 1px solid black; +} +table.striped > tbody > tr > th { + font-weight: normal; +} diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Akku.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Akku.png new file mode 100644 index 0000000..9dd752a Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Akku.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Atommuell.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Atommuell.png new file mode 100644 index 0000000..4c7dda4 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Atommuell.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Aufzug.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Aufzug.png new file mode 100644 index 0000000..bbb5fe1 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Aufzug.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Aufzugschacht.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Aufzugschacht.png new file mode 100644 index 0000000..0611079 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Aufzugschacht.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Aufzugschacht2.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Aufzugschacht2.png new file mode 100644 index 0000000..7eee31d Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Aufzugschacht2.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Bildnachweise.html b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Bildnachweise.html new file mode 100644 index 0000000..a48df08 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Bildnachweise.html @@ -0,0 +1,112 @@ + + +Bildnachweise + + + +

Akku

+ +Bild von Clker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/de/vectors/batterie-elektrische-strom-positiv-312747/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Fass+Atommuell

+ +Bild von OpenClipart-Vectors auf Pixabay +
URL: https://pixabay.com/vectors/oil-barrel-black-mineral-oil-146440/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig + +

Feuer

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Platten mit und ohne Knöpfe/Schalter usw

+ +
Bild auf Grundlage von Thanks for your Like • donations welcome auf Pixabay +
URL: https://pixabay.com/photos/mdf-platte-structure-fund-wood-186943/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Strom

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

+

Steine

+ +Bild von Clker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/de/vectors/felsen-felsbrocken-stein-48279/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Roboter

+ +
Bild auf Public Domain Vectors +
URL: https://publicdomainvectors.org/de/kostenlose-vektorgrafiken/Comic-Roboter/47643.html (Abrufdatum: 09.10.2019) +
Lizenz: Public Domain +

Feuerlöscher

+ +Bild von JJuni auf Pixabay +
URL: https://pixabay.com/illustrations/fire-extinguisher-fire-fire-truck-1139909/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Bombe

+ +Bild vonClker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/fr/vectors/bombe-engin-explosif-grenade-33424/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Diamant

+ +Bild von M. Maggs auf Pixabay +
URL: https://pixabay.com/de/vectors/gems-edelsteine-wertvolle-juwel-1221161/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Einsatzleiter

+ +Bild von kasiagrafik auf Pixabay +
URL: https://pixabay.com/de/illustrations/feuerwehrmann-feuer-löschen-3812661/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Schraube

+ +Bild von Clker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/de/vectors/schrauben-metall-eisen-verschluss-33597/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Portal

+ +Grundlage des Bildes auf Max Pixel +
URL: https://www.maxpixel.net/Picture-Frame-Ring-Round-Circle-Shape-Pair-2885023 +
Lizenz: CC0 - Public Domain +

Schlüssel

+ +Bild auf Public Domain Vectors +
URL: https://publicdomainvectors.org/en/free-clipart/Vector-clip-art-of-grey-shaded-metal-door-key/21166.html +
Lizenz: Public Domain +

Aufzug

+ + +
Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Bodenplatten

+ +
Selbst gezeichnet (Thomas Schaller, ZPG Informatik) mit Muster aus Gimp 2.0 +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Ölfleck

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Fragezeichen

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Brennstab

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Türen

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +
+
+

Sperrfläche

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

+

Steinwände

+ +Bild auf Grundlage von skeeze auf Pixabay +
URL: https://pixabay.com/de/photos/kiesel-steine-felsen-landschaftsbau-1429207/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Pfeile

+ +Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

+ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Bodenplatte.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Bodenplatte.png new file mode 100644 index 0000000..3fc246e Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Bodenplatte.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Bodenplatte1.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Bodenplatte1.png new file mode 100644 index 0000000..faec2ae Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Bodenplatte1.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Bombe.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Bombe.png new file mode 100644 index 0000000..22fa137 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Bombe.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Brennstab.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Brennstab.png new file mode 100644 index 0000000..96474d3 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Brennstab.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Diamant.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Diamant.png new file mode 100644 index 0000000..6a72319 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Diamant.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Fass.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Fass.png new file mode 100644 index 0000000..cb20765 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Fass.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Feuer.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Feuer.png new file mode 100644 index 0000000..f10488f Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Feuer.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Feuerloescher.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Feuerloescher.png new file mode 100644 index 0000000..d621e5b Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Feuerloescher.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Gegenstand.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Gegenstand.png new file mode 100644 index 0000000..85d86c7 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Gegenstand.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Kontaktplatte.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Kontaktplatte.png new file mode 100644 index 0000000..a31c524 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Kontaktplatte.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Oelfleck.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Oelfleck.png new file mode 100644 index 0000000..ba8d175 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Oelfleck.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Portal.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Portal.png new file mode 100644 index 0000000..957516e Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Portal.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Robby.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Robby.png new file mode 100644 index 0000000..11a1fa4 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Robby.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Robita.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Robita.png new file mode 100644 index 0000000..1ca5e68 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Robita.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Robocount.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Robocount.png new file mode 100644 index 0000000..f53fc43 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Robocount.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Roboter.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Roboter.png new file mode 100644 index 0000000..344804e Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Roboter.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Robson.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Robson.png new file mode 100644 index 0000000..c5aaab5 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Robson.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Rufknopf.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Rufknopf.png new file mode 100644 index 0000000..93c2df7 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Rufknopf.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/RufknopfAus.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/RufknopfAus.png new file mode 100644 index 0000000..47f8273 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/RufknopfAus.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/SchalterAus.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/SchalterAus.png new file mode 100644 index 0000000..94cff09 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/SchalterAus.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/SchalterEin.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/SchalterEin.png new file mode 100644 index 0000000..4902bb1 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/SchalterEin.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Schloss.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Schloss.png new file mode 100644 index 0000000..8940da8 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Schloss.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Schluessel.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Schluessel.png new file mode 100644 index 0000000..a6a444b Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Schluessel.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Schraube.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Schraube.png new file mode 100644 index 0000000..856f1f4 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Schraube.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stein.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stein.png new file mode 100644 index 0000000..0a6d958 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stein.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Steine.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Steine.png new file mode 100644 index 0000000..31f7071 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Steine.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Strom.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Strom.png new file mode 100644 index 0000000..ae3e9fc Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Strom.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stromquelle1.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stromquelle1.png new file mode 100644 index 0000000..f798f0a Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stromquelle1.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stromquelle2.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stromquelle2.png new file mode 100644 index 0000000..3b4ecdb Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stromquelle2.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stromquelle3.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stromquelle3.png new file mode 100644 index 0000000..20ed1d2 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stromquelle3.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stromquelle4.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stromquelle4.png new file mode 100644 index 0000000..124112f Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Stromquelle4.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Tuer1.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Tuer1.png new file mode 100644 index 0000000..3976aba Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Tuer1.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Tuer2.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Tuer2.png new file mode 100644 index 0000000..36b9fb3 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Tuer2.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Wand.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Wand.png new file mode 100644 index 0000000..fd0fdef Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/Wand.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/bluerock.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/bluerock.png new file mode 100644 index 0000000..e6b1175 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/bluerock.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/bluerock1.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/bluerock1.png new file mode 100644 index 0000000..a22ea66 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/bluerock1.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/bluerock2.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/bluerock2.png new file mode 100644 index 0000000..e6b1175 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/bluerock2.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/bluerock3.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/bluerock3.png new file mode 100644 index 0000000..e0974e7 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/bluerock3.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/person.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/person.png new file mode 100644 index 0000000..ededc9e Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/person.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/pfeil0.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/pfeil0.png new file mode 100644 index 0000000..cf54a11 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/pfeil0.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/pfeil180.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/pfeil180.png new file mode 100644 index 0000000..1779e8d Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/pfeil180.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/pfeil270.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/pfeil270.png new file mode 100644 index 0000000..cc5e51d Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/pfeil270.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/pfeil90.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/pfeil90.png new file mode 100644 index 0000000..268af54 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/pfeil90.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/warnung1.png b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/warnung1.png new file mode 100644 index 0000000..e146d62 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/images/warnung1.png differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/project.greenfoot b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/project.greenfoot new file mode 100644 index 0000000..d66d264 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/project.greenfoot @@ -0,0 +1,299 @@ +#Greenfoot project file +class.AB1.image=Robita.png +class.AB10.image=Roboter.png +class.AB3.image=Robby.png +class.AB4.image=Robby.png +class.AB5.image=Robita.png +class.AB6_AB7.image=Robocount.png +class.AB8.image=Robson.png +class.AB9.image=Robson.png +class.EinsatzLeiter.image=person.png +class.Gegenstand.image=Gegenstand.png +class.Roboter.image=Roboter.png +class.RoboterWelt.image=Bodenplatte.png +class.Schalter.image=SchalterAus.png +class.Wand.image=Wand.png +dependency1.from=RoboterWelt +dependency1.to=ReadWrite +dependency1.type=UsesDependency +dependency10.from=RoboterWelt +dependency10.to=AB5 +dependency10.type=UsesDependency +dependency11.from=RoboterWelt +dependency11.to=AB6_AB7 +dependency11.type=UsesDependency +dependency12.from=RoboterWelt +dependency12.to=AB8 +dependency12.type=UsesDependency +dependency13.from=RoboterWelt +dependency13.to=Aufzugknopf +dependency13.type=UsesDependency +dependency14.from=RoboterWelt +dependency14.to=AB9 +dependency14.type=UsesDependency +dependency15.from=RoboterWelt +dependency15.to=EinsatzLeiter +dependency15.type=UsesDependency +dependency16.from=RoboterWelt +dependency16.to=AB10 +dependency16.type=UsesDependency +dependency17.from=RoboterWelt +dependency17.to=Message +dependency17.type=UsesDependency +dependency18.from=EinsatzLeiter +dependency18.to=AB9 +dependency18.type=UsesDependency +dependency19.from=EinsatzLeiter +dependency19.to=AB10 +dependency19.type=UsesDependency +dependency2.from=RoboterWelt +dependency2.to=Wand +dependency2.type=UsesDependency +dependency20.from=EinsatzLeiter +dependency20.to=RoboterWelt +dependency20.type=UsesDependency +dependency21.from=Gegenstand +dependency21.to=Schalter +dependency21.type=UsesDependency +dependency22.from=Gegenstand +dependency22.to=Wand +dependency22.type=UsesDependency +dependency23.from=Wand +dependency23.to=Schalter +dependency23.type=UsesDependency +dependency24.from=Wand +dependency24.to=Roboter +dependency24.type=UsesDependency +dependency25.from=Roboter +dependency25.to=Gegenstand +dependency25.type=UsesDependency +dependency26.from=Roboter +dependency26.to=RoboterWelt +dependency26.type=UsesDependency +dependency27.from=Roboter +dependency27.to=Schalter +dependency27.type=UsesDependency +dependency28.from=Roboter +dependency28.to=AB1 +dependency28.type=UsesDependency +dependency29.from=Roboter +dependency29.to=ReadWrite +dependency29.type=UsesDependency +dependency3.from=RoboterWelt +dependency3.to=Gegenstand +dependency3.type=UsesDependency +dependency30.from=Roboter +dependency30.to=Wand +dependency30.type=UsesDependency +dependency31.from=Roboter +dependency31.to=Message +dependency31.type=UsesDependency +dependency32.from=Schalter +dependency32.to=RoboterWelt +dependency32.type=UsesDependency +dependency33.from=Schalter +dependency33.to=Roboter +dependency33.type=UsesDependency +dependency34.from=Schalter +dependency34.to=Wand +dependency34.type=UsesDependency +dependency35.from=Schalter +dependency35.to=Gegenstand +dependency35.type=UsesDependency +dependency36.from=Aufzugknopf +dependency36.to=Gegenstand +dependency36.type=UsesDependency +dependency4.from=RoboterWelt +dependency4.to=Roboter +dependency4.type=UsesDependency +dependency5.from=RoboterWelt +dependency5.to=AB1 +dependency5.type=UsesDependency +dependency6.from=RoboterWelt +dependency6.to=Schalter +dependency6.type=UsesDependency +dependency7.from=RoboterWelt +dependency7.to=AB2 +dependency7.type=UsesDependency +dependency8.from=RoboterWelt +dependency8.to=AB3 +dependency8.type=UsesDependency +dependency9.from=RoboterWelt +dependency9.to=AB4 +dependency9.type=UsesDependency +editor.fx.0.height=739 +editor.fx.0.width=816 +editor.fx.0.x=128 +editor.fx.0.y=143 +height=905 +package.numDependencies=36 +package.numTargets=19 +project.charset=windows-1252 +publish.hasSource=true +publish.locked=false +publish.longDesc= +publish.shortDesc= +publish.tags=demo\ school\ with-source +publish.title=GFRobot_Szenario +publish.url= +readme.height=58 +readme.name=@README +readme.width=47 +readme.x=10 +readme.y=10 +simulation.speed=78 +target1.height=50 +target1.name=EinsatzLeiter +target1.naviview.expanded=true +target1.showInterface=false +target1.type=ClassTarget +target1.width=100 +target1.x=100 +target1.y=190 +target10.height=50 +target10.name=AB3 +target10.naviview.expanded=false +target10.showInterface=false +target10.type=ClassTarget +target10.width=80 +target10.x=190 +target10.y=310 +target11.height=50 +target11.name=Schalter +target11.naviview.expanded=true +target11.showInterface=false +target11.type=ClassTarget +target11.width=80 +target11.x=190 +target11.y=490 +target12.height=50 +target12.name=AB4 +target12.naviview.expanded=false +target12.showInterface=false +target12.type=ClassTarget +target12.width=80 +target12.x=10 +target12.y=370 +target13.height=50 +target13.name=AB5 +target13.naviview.expanded=false +target13.showInterface=false +target13.type=ClassTarget +target13.width=80 +target13.x=100 +target13.y=370 +target14.height=50 +target14.name=AB6 +target14.showInterface=false +target14.type=ClassTarget +target14.width=80 +target14.x=0 +target14.y=0 +target15.height=50 +target15.name=Roboter +target15.naviview.expanded=true +target15.showInterface=false +target15.type=ClassTarget +target15.width=80 +target15.x=160 +target15.y=70 +target16.height=50 +target16.name=AB6_AB7 +target16.naviview.expanded=true +target16.showInterface=false +target16.type=ClassTarget +target16.width=80 +target16.x=190 +target16.y=130 +target17.height=50 +target17.name=AB8 +target17.naviview.expanded=false +target17.showInterface=false +target17.type=ClassTarget +target17.width=80 +target17.x=160 +target17.y=10 +target18.height=50 +target18.name=AB9 +target18.naviview.expanded=false +target18.showInterface=false +target18.type=ClassTarget +target18.width=80 +target18.x=120 +target18.y=250 +target19.height=50 +target19.name=AB10 +target19.naviview.expanded=false +target19.showInterface=false +target19.type=ClassTarget +target19.width=80 +target19.x=10 +target19.y=310 +target2.height=50 +target2.name=Aufzugknopf +target2.naviview.expanded=true +target2.showInterface=false +target2.type=ClassTarget +target2.width=100 +target2.x=10 +target2.y=80 +target3.height=50 +target3.name=Message +target3.showInterface=false +target3.type=ClassTarget +target3.width=80 +target3.x=0 +target3.y=0 +target4.height=50 +target4.name=RoboterWelt +target4.naviview.expanded=true +target4.showInterface=false +target4.type=ClassTarget +target4.width=100 +target4.x=10 +target4.y=250 +target5.height=50 +target5.name=Gegenstand +target5.naviview.expanded=true +target5.showInterface=false +target5.type=ClassTarget +target5.width=90 +target5.x=100 +target5.y=550 +target6.height=50 +target6.name=Wand +target6.naviview.expanded=true +target6.showInterface=false +target6.type=ClassTarget +target6.width=80 +target6.x=70 +target6.y=10 +target7.height=50 +target7.name=ReadWrite +target7.naviview.expanded=false +target7.showInterface=false +target7.type=ClassTarget +target7.width=80 +target7.x=10 +target7.y=490 +target8.height=50 +target8.name=AB1 +target8.naviview.expanded=true +target8.showInterface=false +target8.type=ClassTarget +target8.width=80 +target8.x=10 +target8.y=150 +target9.height=50 +target9.name=AB2 +target9.naviview.expanded=false +target9.showInterface=false +target9.type=ClassTarget +target9.width=80 +target9.x=100 +target9.y=310 +version=3.0.0 +width=1124 +world.lastInstantiated=RoboterWelt +xPosition=472 +yPosition=71 diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/secret b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/secret new file mode 100644 index 0000000..c13eb13 --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/secret @@ -0,0 +1,17 @@ +998536474 +1641901578 +1571042368 +786474591 +2205 +3384 +946928238 +1368404363 +1627578562 +2098724778 +1157 +2336 +168090008 +2336 +1425899477 +4039 +2729 diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/userhome/greenfoot/editor.keys b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/userhome/greenfoot/editor.keys new file mode 100644 index 0000000..80a4150 Binary files /dev/null and b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/userhome/greenfoot/editor.keys differ diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/userhome/greenfoot/greenfoot-debuglog.txt b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/userhome/greenfoot/greenfoot-debuglog.txt new file mode 100644 index 0000000..72d57ff --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/userhome/greenfoot/greenfoot-debuglog.txt @@ -0,0 +1,11 @@ +Greenfoot run started: Wed Sep 28 07:49:11 CEST 2016 +Greenfoot version: 2.4.1 +Java version 1.8.0_05 +Virtual machine: Java HotSpot(TM) 64-Bit Server VM 25.5-b02 (Oracle Corporation) +Running on: Windows 8.1 6.3 (amd64) +Java Home: C:\Program Files\Java\jdk1.8.0_05\jre +---- +Opening project: F:\Informatik\Fortbildung Jahreskurs\Owncloud\JahresKurs Informatik\Head\01_Einfuehrung_in_die_Programmierung\01_ReaktorRobot\4_Loesungen\01_ReaktorRobot_Szenario_Loesung +1475041753390: Listening for JDWP connection on address: javadebug +Connected to debug VM via dt_shmem transport... +Communication with debug VM fully established. diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/userhome/greenfoot/greenfoot.properties b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/userhome/greenfoot/greenfoot.properties new file mode 100644 index 0000000..785fa0f --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/userhome/greenfoot/greenfoot.properties @@ -0,0 +1,26 @@ +#Greenfoot properties. Settings in this file override "bluej.defs" and "greenfoot.defs" +#Wed Sep 28 08:01:49 CEST 2016 +bluej.language=english +bluej.editor.fontsize=12 +bluej.editor.displayLineNumbers=true +bluej.accessibility.support=false +greenfoot.uid=efba18f3-5026-46ce-b480-5f66a7263445 +extensions.org.bluej.extensions.submitter.Submitter.settings.saslrealm= +bluej.startWithTextEval=false +bluej.terminal.y=16 +bluej.terminal.x=16 +bluej.openPackage1=F\:\\Informatik\\Fortbildung Jahreskurs\\Owncloud\\JahresKurs Informatik\\Head\\01_Einfuehrung_in_die_Programmierung\\01_ReaktorRobot\\4_Loesungen\\01_ReaktorRobot_Szenario_Loesung +bluej.editor.scopeHilightingStrength=20 +bluej.debugger.y=194 +bluej.recentProject5=F\:\\Informatik\\Fortbildung Jahreskurs\\Greenfoot\\01_GreenfootRobot_Programmier_Lehrgang\\01_GreenfootRobot_Programmier_Lehrgang\\02_GFRobot_Szenario_20151006 +bluej.debugger.x=956 +bluej.recentProject4=F\:\\Informatik\\Fortbildung Jahreskurs\\Greenfoot\\01_GreenfootRobot_Programmier_Lehrgang\\01_GreenfootRobot_Programmier_Lehrgang\\02_GFRobot_Szenario_Kernkraft +bluej.recentProject3=F\:\\Informatik\\Fortbildung Jahreskurs\\Greenfoot\\02_GFRobot_Szenario_Kernkraft +bluej.recentProject2=F\:\\Informatik\\Fortbildung Jahreskurs\\Owncloud\\JahresKurs Informatik\\MaterialSammlung\\Tom_Dirk_ReaktorRobot\\4_Loesungen\\01_ReaktorRobot_Szenario_Loesung +extensions.rmiextension.RMIExtension.settings.bluej.editor.fontsize=12 +bluej.recentProject1=F\:\\Informatik\\Fortbildung Jahreskurs\\Greenfoot\\01_ReaktorRobot_korrigiert\\4_Loesungen\\01_ReaktorRobot_Szenario_Loesung +bluej.recentProject0=F\:\\Informatik\\Fortbildung Jahreskurs\\Owncloud\\JahresKurs Informatik\\Head\\01_Einfuehrung_in_die_Programmierung\\01_ReaktorRobot\\4_Loesungen\\01_ReaktorRobot_Szenario_Loesung +bluej.preferences.y=16 +bluej.preferences.x=16 +greenfoot.url.javaStdLib=http\://download.oracle.com/javase/6/docs/api/ +extensions.rmiextension.RMIExtension.settings.greenfoot.player.name=Player diff --git a/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/userhome/greenfoot/moe.properties b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/userhome/greenfoot/moe.properties new file mode 100644 index 0000000..f5c747b --- /dev/null +++ b/4_loesungen/01_ReaktorRobot_GF361_Szenario_Loesung/userhome/greenfoot/moe.properties @@ -0,0 +1,2 @@ +#Moe Editor properties. Settings in this file override "moe.defs" +#Wed Sep 28 08:01:49 CEST 2016 diff --git a/4_loesungen/02_Secret_Dateien_fuer_Lehrer/Hinweis zur Nutzung der Secret-Dateien.txt b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/Hinweis zur Nutzung der Secret-Dateien.txt new file mode 100644 index 0000000..fce86ae --- /dev/null +++ b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/Hinweis zur Nutzung der Secret-Dateien.txt @@ -0,0 +1,15 @@ +Hinweis zur Nutzung der Secret-Dateien: + +Im ReaktorRobot-Szenario lernen Schülerinnen und Schüler (im Folgenden Schüler genannt) programmieren, indem unterschiedliche Level mit differenziertem Schwierigkeitsgrad durchlaufen werden. +Ein neues Level wird erreicht, wenn der Leveltest (AB1) bzw. die Einsätze (ab AB2) erfolgreich bestanden wurden. Für diesen Fall wird in der Datei "secret" im "ReaktorRobot_Szenario_Roh"-Ordner ein Eintrag gemacht, der dafür sorgt, dass ein neues Level beginnt. + +Man kann daher höhere Level nur erreichen, wenn man erfolgreich einen Einsatz erledigt. Zu jeder Zeit kann der Schüler oder Lehrer mit Rechtsklick auf die Welt (blauer Hintergrund) die Methode "geheZuLevel(int i)" aufrufen und so zu einem niedrigeren Level gehen bzw. zum aktuellen Level zurückkehren. Dies kann zu Diagnosezwecken ("Zeig doch mal, wie du im letzten Level die Aufgabe xy gelöst hast!") hilfreich sein. + +Mit Hilfe der Secret-Dateien kann ein Lehrer jedoch auch zu einem, bisher noch nicht erreichten, höheren Level wechseln. Dies kann beispielsweise nötig werden, falls das Szenario (und damit der erreichte Lernstand in Form des erreichten Levels) nicht gespeichert wurde oder das Szenario beim Synchronisieren des Schulrechners gelöscht wurde. + +Daher hier eine kurze Anleitung, wie der aktuelle Stand wieder hergestellt werden kann. Nehmen wir an, ein Schüler war vor einem Systemcrash bei AB7 und möchte in das entsprechende 7. Level zurück: +1) Kopieren Sie die benötigte "secret_07"-Datei aus diesem Ordner in den "ReaktorRobot_Szenario_Roh"-Ordner im "3_Vorlagen_Tauschordner"-Verzeichnis +2) Löschen Sie im "ReaktorRobot_Szenario_Roh"-Ordner die Datei "secret" +3) Benennen Sie die "secret_07"-Datei in "secret" um + +Jetzt können Sie in Greenfoot das ReaktorRobot-Szenario starten - das 7.Level sollte nun erscheinen \ No newline at end of file diff --git a/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_02 b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_02 new file mode 100644 index 0000000..6e1a8eb --- /dev/null +++ b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_02 @@ -0,0 +1,3 @@ +998536474 +1641901578 +1571042368 diff --git a/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_03 b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_03 new file mode 100644 index 0000000..9cafef1 --- /dev/null +++ b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_03 @@ -0,0 +1,4 @@ +998536474 +1641901578 +1571042368 +786474591 diff --git a/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_04 b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_04 new file mode 100644 index 0000000..4ddf30d --- /dev/null +++ b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_04 @@ -0,0 +1,5 @@ +998536474 +1641901578 +1571042368 +786474591 +2205 diff --git a/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_05 b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_05 new file mode 100644 index 0000000..daefb21 --- /dev/null +++ b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_05 @@ -0,0 +1,6 @@ +998536474 +1641901578 +1571042368 +786474591 +2205 +3384 diff --git a/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_06 b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_06 new file mode 100644 index 0000000..73aae8a --- /dev/null +++ b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_06 @@ -0,0 +1,7 @@ +998536474 +1641901578 +1571042368 +786474591 +2205 +3384 +946928238 diff --git a/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_07 b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_07 new file mode 100644 index 0000000..84ee794 --- /dev/null +++ b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_07 @@ -0,0 +1,8 @@ +998536474 +1641901578 +1571042368 +786474591 +2205 +3384 +946928238 +1368404363 diff --git a/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_08 b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_08 new file mode 100644 index 0000000..25bd496 --- /dev/null +++ b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_08 @@ -0,0 +1,9 @@ +998536474 +1641901578 +1571042368 +786474591 +2205 +3384 +946928238 +1368404363 +1627578562 diff --git a/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_09 b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_09 new file mode 100644 index 0000000..3dcb25e --- /dev/null +++ b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_09 @@ -0,0 +1,10 @@ +998536474 +1641901578 +1571042368 +786474591 +2205 +3384 +946928238 +1368404363 +1627578562 +2098724778 diff --git a/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_10 b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_10 new file mode 100644 index 0000000..2833042 --- /dev/null +++ b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_10 @@ -0,0 +1,11 @@ +998536474 +1641901578 +1571042368 +786474591 +2205 +3384 +946928238 +1368404363 +1627578562 +2098724778 +1157 diff --git a/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_alle b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_alle new file mode 100644 index 0000000..d55c53a --- /dev/null +++ b/4_loesungen/02_Secret_Dateien_fuer_Lehrer/secret_alle @@ -0,0 +1,15 @@ +998536474 +1641901578 +1571042368 +786474591 +2205 +3384 +946928238 +1368404363 +1627578562 +2098724778 +1157 +2336 +168090008 +2336 +1425899477 diff --git a/5_praesentationen/01_Einfuehrung_Objekte_Klassen.odp b/5_praesentationen/01_Einfuehrung_Objekte_Klassen.odp new file mode 100644 index 0000000..8351bdf Binary files /dev/null and b/5_praesentationen/01_Einfuehrung_Objekte_Klassen.odp differ diff --git a/5_praesentationen/02_Ablauf_von_Schleifen.odp b/5_praesentationen/02_Ablauf_von_Schleifen.odp new file mode 100644 index 0000000..a9622b2 Binary files /dev/null and b/5_praesentationen/02_Ablauf_von_Schleifen.odp differ diff --git a/5_praesentationen/03_Methoden_Unterklassen.odp b/5_praesentationen/03_Methoden_Unterklassen.odp new file mode 100644 index 0000000..d10ea14 Binary files /dev/null and b/5_praesentationen/03_Methoden_Unterklassen.odp differ diff --git a/5_praesentationen/04_Variablen.odp b/5_praesentationen/04_Variablen.odp new file mode 100644 index 0000000..472b7e4 Binary files /dev/null and b/5_praesentationen/04_Variablen.odp differ diff --git a/5_praesentationen/Bildnachweise.html b/5_praesentationen/Bildnachweise.html new file mode 100644 index 0000000..3c6cd5c --- /dev/null +++ b/5_praesentationen/Bildnachweise.html @@ -0,0 +1,112 @@ + + +Bildnachweise + + + +

Akku

+ +Bild von Clker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/de/vectors/batterie-elektrische-strom-positiv-312747/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Fass+Atommuell

+ +Bild von OpenClipart-Vectors auf Pixabay +
URL: https://pixabay.com/vectors/oil-barrel-black-mineral-oil-146440/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig + +

Feuer

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Platten mit und ohne Knöpfe/Schalter usw

+ +
Bild auf Grundlage von Thanks for your Like • donations welcome auf Pixabay +
URL: https://pixabay.com/photos/mdf-platte-structure-fund-wood-186943/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Strom

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

+

Steine

+ +Bild von Clker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/de/vectors/felsen-felsbrocken-stein-48279/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Roboter

+ +
Bild auf Public Domain Vectors +
URL: https://publicdomainvectors.org/de/kostenlose-vektorgrafiken/Comic-Roboter/47643.html (Abrufdatum: 09.10.2019) +
Lizenz: Public Domain +

Feuerlöscher

+ +Bild von JJuni auf Pixabay +
URL: https://pixabay.com/illustrations/fire-extinguisher-fire-fire-truck-1139909/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Bombe

+ +Bild vonClker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/fr/vectors/bombe-engin-explosif-grenade-33424/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Diamant

+ +Bild von M. Maggs auf Pixabay +
URL: https://pixabay.com/de/vectors/gems-edelsteine-wertvolle-juwel-1221161/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Einsatzleiter

+ +Bild von kasiagrafik auf Pixabay +
URL: https://pixabay.com/de/illustrations/feuerwehrmann-feuer-löschen-3812661/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Schraube

+ +Bild von Clker-Free-Vector-Images auf Pixabay +
URL: https://pixabay.com/de/vectors/schrauben-metall-eisen-verschluss-33597/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Portal

+ +Grundlage des Bildes auf Max Pixel +
URL: https://www.maxpixel.net/Picture-Frame-Ring-Round-Circle-Shape-Pair-2885023 +
Lizenz: CC0 - Public Domain +

Schlüssel

+ +Bild auf Public Domain Vectors +
URL: https://publicdomainvectors.org/en/free-clipart/Vector-clip-art-of-grey-shaded-metal-door-key/21166.html +
Lizenz: Public Domain +

Aufzug

+ + +
Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Bodenplatten

+ +
Selbst gezeichnet (Thomas Schaller, ZPG Informatik) mit Muster aus Gimp 2.0 +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Ölfleck

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Fragezeichen

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Brennstab

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

Türen

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +
+
+

Sperrfläche

+ Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

+

Steinwände

+ +Bild auf Grundlage von skeeze auf Pixabay +
URL: https://pixabay.com/de/photos/kiesel-steine-felsen-landschaftsbau-1429207/ (Abrufdatum: 09.10.2019) +
Lizenz: Pixabay License, Freie kommerzielle Nutzung, Kein Bildnachweis nötig +

Pfeile

+ +Selbst gezeichnet (Thomas Schaller, ZPG Informatik) +
Lizenz: CC CC BY-NC-SA 3.0 DE +

+ diff --git a/6_software/Struktogramm.exe b/6_software/Struktogramm.exe new file mode 100644 index 0000000..1f12903 Binary files /dev/null and b/6_software/Struktogramm.exe differ diff --git a/7_Schreibtischtests/java-syntax.odt b/7_Schreibtischtests/java-syntax.odt new file mode 100644 index 0000000..5e2bc14 Binary files /dev/null and b/7_Schreibtischtests/java-syntax.odt differ diff --git a/7_Schreibtischtests/schreibtischtest-uebung.odt b/7_Schreibtischtests/schreibtischtest-uebung.odt new file mode 100644 index 0000000..b51ccbd Binary files /dev/null and b/7_Schreibtischtests/schreibtischtest-uebung.odt differ diff --git a/Aenderungen.txt b/Aenderungen.txt new file mode 100644 index 0000000..8af0856 --- /dev/null +++ b/Aenderungen.txt @@ -0,0 +1,349 @@ +**** BEGINN ÄNDERUNGEN SCHALLER (Version 11.11.2021) +Titel: Hintergrund - neue Email-Adresse von Tom + +alle Flussdiagramme durch Struktogramme ersetzen ? (Flussdiagramme stehen nicht im Bildungsplan) Hintergrund S. 7, 9, 10, AB3, AB4, usw. + +AB1 +Steuere den Roboter AB1 mit passenden Befehlen aus dem Kontextmenü (Rechtsmausklick auf den Roboter im Szenario) + +Musterlösungen / JavaCode +AB5 +Einsatz 5 Lösung korrigiert. + +AB8 +Präzessierung der Aufgabe für das Zählen der Fässer. + +AB9 +fahreAufzug erkennt, wenn eine Wand vor ihm ist +**** ENDE ÄNDERUNGEN SCHALLER (Version 11.11.2021) + + +**** BEGINN ÄNDERUNGEN SCHALLER (Version 02.02.2020) +- Hinweis auf Urheberschaft vom Schönigh-Verlag entfernt +**** ENDE ÄNDERUNGEN SCHALLER (Version 02.02.2020) + + + +**** BEGINN ÄNDERUNGEN SCHALLER (Version 29.12.2019) +- "Roboter hat keine kraft mehr" in "Roboter hat keine Energie mehr" geändert. +- Neue Methode "ladeSecretDatei" in der Welt, mit der Secret Dateien geladen werden können. +- Im Hintergrund erläutert, dass Einsätze auch nur als Bonusaufgaben verwendet werden können. +**** ENDE ÄNDERUNGEN SCHALLER (Version 29.12.2019) + + +**** BEGINN ÄNDERUNGEN SCHALLER (Version 11.12.2019) **** +Bad Wildbad Gruppe Ka: + +- Im Lösungsdokument für AB4 Aufgabe 8 fehlen Lösungen. In b) ist alter nur dann koorekt, wenn boolean +- Einsatz 8: Rückmeldung zu Einsatz nicht geschafft muss mehr Infos geben: "du hast xx gezählt, es waren aber yy Felder" +- AB7 Aufgabe 9: Fett markieren "Einsatz 6 am Roboter aufrufen" nicht an der +- API für Gegenstnad ablegen "Brennstab" hinzufügen +- AB9 Aufgabe 9: 2er Reihe Brennstäbe -> Bild einfügen + +Bad Wildbad Gruppe Fr: + +Generell: +Zu allen "EinsŠtze" gibt es ein Bild, in dem man sich einen Eindruck von dem zu lšsenden Level (Ÿber 2 Sekunden hinaus) machen kann. + +AB3 Einsatz 3: +Tipp eingefügt, dass das Feuer zusammenhŠngend ist. +Eventuell zusŠtzlicher Tipp, dass man geschickter zeilen- statt spaltenweise durchgehen sollte + +AB4 Einsatz 4: +Die Schalter sind nur auf der SŸdseite des Zielraumes: "An der Wand links der Tür" + +AB7 Aufgabe 4: +"...innerhalb dieser Methode die gleiche Methode..." -> "gleichnamige Methode" + +AB9 Aufgabe 3 +Tipp 2 entfernt, weil sonst die Methode eigentlich ŸberflŸssig ist. + +AB9 Einsatz 9 +Im Bild Sprengpositionen markiert. + + +**** ENDE ÄNDERUNGEN SCHALLER (Version 11.12.2019) **** + + +**** BEGINN ÄNDERUNGEN NOPPER (Version 3.12.2019) **** + +AB1 +Zunächst lernst du im Robo-Trainingsgebäude den Roboter zu steuern +Zunächst lernst du, im Robo-Trainingsgebäude den Roboter zu steuern + +Erzeuge nun einen zweiten Roboter vom Typ AB1 (rechte Maustaste auf AB1, dann new AB1()), s +Erzeuge nun einen zweiten Roboter vom Typ AB1 (siehe Bild rechts: Rechte Maustaste auf AB1, dann new AB1()) + +Was geschieht, wenn du einen Roboter aufforderst eine Schraube abzulegen +Was geschieht, wenn du einen Roboter aufforderst, eine Schraube abzulegen + + +AB2 +Daher muss der Roboter schnell lernen sich alleine zu bewegen. +Daher muss der Roboter schnell lernen, sich alleine zu bewegen. + +Welche Befehle bietet dir ein AB2-Roboter in seinem Kontextmenü direkt an? Öffne nun den Quelltext. Diesen kannst du dir mit „Editor öffnen“ (oder alternativ Doppelklick auf die Klasse AB2) anzeigen lassen. +Welche Befehle bietet dir ein AB2-Roboter in seinem Kontextmenü direkt an? Öffne nun den Quelltext; diesen kannst du dir mit einem Rechtsklick auf die AB2-Klasse im rechten Fenster mit „Editor öffnen“ (oder alternativ Doppelklick auf die Klasse AB2) anzeigen lassen. + +Steuere ihn noch ein letztes Mal von Hand durch einzelne Befehle so, dass er eine Runde dreht wie im Bild (siehe rechts). +Steuere den Roboter noch ein letztes Mal von Hand durch einzelne Befehle so, dass er eine Runde dreht wie im Bild (siehe rechts). + +Wir üben wieder im Testgelände mit Schrauben, aber im Kernkraftwerk werden es, herumliegende Brennstäbe sein. +Wir üben wieder im Testgelände mit Schrauben, aber im Kernkraftwerk werden es herumliegende Brennstäbe sein. + +Teste die neue Methode indem du beim Roboter vor den drei Schrauben die Methode aufrufst. +Teste die neue Methode, indem du beim Roboter vor den drei Schrauben die Methode aufrufst. + +Sorge dafür dass die AB2-Roboter auch frei stehende Wände umlaufen können (s. Bild rechts). +Sorge dafür, dass die AB2-Roboter auch frei stehende Wände umlaufen können (s. Bild rechts). + + +AB3 +Der Roboter AB3 ganz oben links soll den Feuerlöscher aufnehmen, der vor ihm steht, damit auf das Feld vor dem Feuer (nicht auf das Feuer!!!) gehen und es löschen. +Der Roboter AB3 ganz oben links soll den vor ihm stehenden Feuerlöscher aufnehmen, damit auf das Feld vor dem Feuer (nicht auf das Feuer!!!) gehen und es löschen. + +Es gibt Methoden, die benötigen eine Zusatzinformation (einen sogenannten Parameter) um korrekt arbeiten zu können. +Es gibt Methoden, die eine Zusatzinformation (einen sogenannten Parameter) benötigen, um korrekt arbeiten zu können. + +Die weiteren Roboter darunter, sollen ihre ersten Feuer in der Reihe auch mit dem Befehl loesche() löschen können. +Die weiteren Roboter darunter sollen ihre ersten Feuer in der Reihe auch mit dem Befehl loesche() löschen können. + +Setze diese Methode sinnvoll in der loesche()-Methode ein, in dem du einige Zeilen deines Quelltextes durch den Befehl vorBisFeuer(); ersetzt. +Setze diese Methode sinnvoll in der loesche()-Methode ein, indem du einige Zeilen deines Quelltextes durch den Befehl vorBisFeuer(); ersetzt. + +Teste die nun neue loesche()-Methode an allen vier Löschrobotern. +Teste nun die neue loesche()-Methode an allen vier Löschrobotern. + +Um diese zu löschen muss man immer wieder löschen, dann einen Schritt gehen, dann wieder löschen usw. +Um diese zu löschen, muss man immer wieder löschen, dann einen Schritt gehen, dann wieder löschen usw.. + +Ersetzte anschließend in deiner loesche-Methode das Benutzen des Feuerlöschers durch die neue Methode loescheReihe().Teste die Veränderung. +Ersetze anschließend in deiner loesche-Methode das Benutzen des Feuerlöschers durch die neue Methode loescheReihe().Teste die Veränderung. + +Verwende eine while-Schleife um zu überprüfen, ob der Feuerlöscher noch nicht leer ist. +Verwende eine while-Schleife, um zu überprüfen, ob der Feuerlöscher noch nicht leer ist. + +Vor dem Roboter unten links ist ein Gang, mit vielen Feuerlöschern in den Nischen (drücke ggf. unten auf den Reset-Knopf). +Vor dem Roboter unten links ist ein Gang mit vielen Feuerlöschern in den Nischen (drücke ggf. unten auf den Reset-Knopf). + +Wir wissen nicht wie groß das Feuer schon ist. +Wir wissen nicht, wie groß das Feuer schon ist. + +Versuche zunächst nur die erste Reihe Feuer zu löschen und wieder nach rechts zur Wand zu laufen. Drehe den Roboter wieder so, dass er nach unten Blickt (Ausgangsstellung). +Versuche zunächst, nur die erste Reihe Feuer zu löschen und danach wieder nach rechts zur Wand zu laufen. Drehe den Roboter wieder so, dass er nach unten blickt (Ausgangsstellung). + +Wiederhole diese mit einer While-Schleife solange das Protal noch nicht erreicht ist (Warum erreicht man es automatisch?). +Wiederhole diese mit einer While-Schleife, solange das Protal noch nicht erreicht ist (warum erreicht man es automatisch?). + +Im Quelltext werden Wiederholungen geschrieben mit dem Schlüsselwort while im Schlei­fenkopf und dahinter der Ausführungsbedingung in runder Klammer() sowie dem Schleifen­rumpf innerhalb des Blockklammerpaares {...}. +Im Quelltext schreibt man Wiederholungen mit dem Schlüsselwort while im Schlei­fenkopf und dahinter eine Ausführungsbedingung in runder Klammer() sowie einen Schleifen­rumpf innerhalb des Blockklammerpaares {...}. + + + +AB4 +Wie unterscheidet sich die Form der Entscheidung in den beiden Methoden. +Wie unterscheidet sich die Form der Entscheidung in den beiden Methoden? + + +Zeichne für jeden der vier AB4 ein, wie sie sich be­wegen, wenn sie diese Anweisungen aus­führen: +Zeichne für jeden der vier AB4-Roboter ein, wie sie sich be­wegen, wenn sie diese Anweisungen aus­führen: + +WENN -> FALLS +Alternativen in Handlungen erkennen, als WENN-DANN-SONST-Entschei­dungen formulieren und in Programmiersprache umsetzen können. +Alternativen in Handlungen erkennen, als FALLS-DANN-SONST-Entschei­dungen formulieren und in Programmiersprache umsetzen können. + +Wie verhält sich der Roboter, wenn er auf einer Schraube steht? +Wie verhält sich der Roboter, falls er auf einer Schraube steht? + +Wie wenn er auf einem leeren Feld steht? +Wie verhält er sich, falls er auf einem leeren Feld steht? + +Implementiere eine Methode umgeheOelfleck(), die den Roboter einen Schritt nach vorne gehen lässt, wenn kein Ölfleck vor ihm ist. +Implementiere eine Methode umgeheOelfleck(), die den Roboter einen Schritt nach vorne gehen lässt, falls kein Ölfleck vor ihm ist. + +Schreibe eine Methode sammleSchluessel(), die einen Schlüssel aufnimmt, wenn der Roboter auf einem steht. +Schreibe eine Methode sammleSchluessel(), die einen Schlüssel aufnimmt, falls der Roboter auf einem steht. + +Der Roboter soll einen Schlüssel aufheben, wenn er an der Startposition liegt. +Der Roboter soll einen Schlüssel aufheben, falls er an der Startposition liegt. + +Wenn er vor einem Schloss steht (istVorne(''Schloss'')), soll er den Schlüssel benutzen (benutze(''Schluessel'')), andernfalls den Schalter benutzen (benutze(''Schalter'')). +Falls er vor einem Schloss steht (istVorne(''Schloss'')), soll er den Schlüssel benutzen (benutze(''Schluessel'')), andernfalls den Schalter benutzen (benutze(''Schalter'')). + +Sorge dafür, dass er sich nach links dreht, wenn links frei ist. Wenn rechts frei ist, nach rechts +Sorge dafür, dass er sich nach links dreht, falls links frei ist. Falls rechts frei ist, nach rechts + +Dies wird gelesen als: Wenn NICHT vorne frei ist ... oder Wenn Vorne frei falsch ist ... oder Wenn Vorne nicht frei ist ... +Dies wird gelesen als: „Falls NICHT vorne frei ist...“ oder „Falls vorne frei falsch ist...“ oder „Falls vorne nicht frei ist...“. + + + +AB5 +Diese soll true zurückgeben, wenn der Roboter nur noch weniger als 20 Energiepunkte hat (Überprüfung mit getEnergie()<20). +Diese soll true zurückgeben, falls der Roboter nur noch weniger als 20 Energiepunkte hat (Überprüfung mit getEnergie()<20). + +Aber nur wenn vor dem Fass Platz ist. +Aber nur, wenn vor dem Fass Platz ist. + +Diese soll false zurückgeben, wenn vor dem Fass eine Wand ist. +Diese soll false zurückgeben, falls vor dem Fass eine Wand ist. + +Wenn ja, gibt er true zurück, sonst false. +Falls ja, gibt er true zurück, sonst false. + +In diesem Arbeitsblatt lernst du neue (komplexere) Sensoren selbst zu erstellen. +In diesem Arbeitsblatt lernst, du neue (komplexere) Sensoren selbst zu erstellen. + +Es werden also keine Befehle mehr nach dem Return ausgeführt. +Es werden also keine Befehle mehr nach dem Ausführen eines Return ausgeführt. + +Am Ende soll er aber wieder so stehen, wie am Anfang. +Am Ende soll er aber wieder so stehen wie am Anfang. + +Geht man geradeaus weiter liegt dort eine Reihe von Akkus. +Geht man geradeaus weiter, liegt dort eine Reihe von Akkus. + + + +AB6 +Daher soll der Roboter ein Notfallprogramm bekommen mit dem er jederzeit den Ausgang wiederfinden kann, wenn er sich in einem zerstörten Kraftwerk befindet und der normale Rückweg plötzlich versperrt ist… +Daher soll der Roboter ein Notfallprogramm bekommen, mit dem er jederzeit den Ausgang wiederfinden kann, wenn er sich in einem zerstörten Kraftwerk befindet und der normale Rückweg plötzlich versperrt ist… + +Man sagt der Typ des Attributs ist integer (engl. für Ganzzahl). +Man sagt: Der Typ des Attributs ist integer (engl. für Ganzzahl). + +So wie beim Abhören deines MP3-Players der Musikinhalt ja weiterhin gespeichert bleibt. +So wie beim Anhören eines Musikstücks auf deinem Smartphone der Musikinhalt ja weiterhin gespeichert bleibt. + +Dort wird der Wert von schritte auf 0 gesetzt. schritte = 0; +Dort wird der Wert von schritte auf 0 gesetzt. Um zu verdeutlichen, dass dieses Attribut zu dem Roboter gehört, schreibt man statt „schritte“ immer „this.schritte“: this.schritte = 0; + +In der Methode einsVorMitZaehlen() wird der Wert des neuen Attributs um 1 erhöht: schritte++; und dann die normale einsVor()-Methode aufgerufen. +In der Methode einsVorMitZaehlen() wird der Wert des neuen Attributs um 1 erhöht: this.schritte++; und dann die normale einsVor()-Methode aufgerufen. + +Dazu verwenden wir einfach den Namen des Attributs: return this.schritte; +Dazu verwenden wir einfach den Namen des Attributs: return schritte; + +/** nennt die gesamten zurück- + * gelegten Schritte */ +public int getSchritte() { + return schritte; +} +/** nennt die gesamten zurück- + * gelegten Schritte */ +public int getSchritte() { + return this.schritte; +} + +Daher bekommt der Roboter ein Not-Programm mit dem er in beliebigen Umgebungen den Ausgang (gekennzeichnet durch das Portal) immer wiederfindet, egal wie viele Ecken und Wände im Weg sind. +Daher bekommt der Roboter ein Not-Programm, mit dem er in beliebigen Umgebungen den Ausgang (gekennzeichnet durch das Portal) immer wiederfindet, egal wie viele Ecken und Wände im Weg sind. + +Ja, John Pledge ein 12-jähriger Junge hat entdeckt, wie das geht. +Ja, John Pledge, ein 12-jähriger Junge, hat entdeckt, wie das geht. + + +Hinweis: korrigiere die Befehle (wie beispielsweise wandLinks()) falls nötig! +Hinweis: Korrigiere die Befehle (wie beispielsweise wandLinks()), falls nötig! + + +AB7 +Im AB5 hast du viele neue Sensoren für den Roboter programmiert, in AB6 hat er gelernt Schritte und Drehungen zu zählen. +Im AB5 hast du viele neue Sensoren für den Roboter programmiert, in AB6 hat er gelernt, Schritte und Drehungen zu zählen. + +Verändere die Klasse AB6_AB7 so, dass sie nicht mehr eine direkte Unterklasse von Roboter sondern eine Unterklasse des AB5-Roboters ist. +Verändere die Klasse AB6_AB7 so, dass sie nicht mehr eine direkte Unterklasse von Roboter, sondern eine Unterklasse des AB5-Roboters ist. + +Um die alte Methode aufzurufen musst du beim AB6_AB7-Roboter super.einsVor(); schreiben (lies: rufe die Methode einsVor() bei der übergeordneten Klasse auf). +Um die alte Methode aufzurufen, musst du beim AB6_AB7-Roboter super.einsVor(); schreiben (lies: rufe die Methode einsVor() bei der übergeordneten Klasse auf). + +Verschiebe zum Testen das Fass vor dem Roboter oben links, damit er einen Gang mit Kreuzungen vor sich hat. +Verschiebe zum Testen mit der Maus das Fass vor dem Roboter oben links, damit er einen Gang mit Kreuzungen vor sich hat. + +Eventuell reicht die Energie nicht aus um das Bergwerk zu verlassen. +Eventuell reicht die Energie nicht aus, um das Bergwerk zu verlassen. + +Ändere die überflüssig gewordene Methode bisWandMitZaehlen(), so dass sie zählt, wie viele Brennstäbe auf dem Weg zur Wand liegen (wir verwenden auf dem Testgelände natürlich nur ungefährliche Attrappen, die aber täuschend echt aussehen). +Ändere die überflüssig gewordene Methode bisWandMitZaehlen(), so dass sie in einem neuen Attribut brennstaebe zählt, wie viele Brennstäbe auf dem Weg zur Wand liegen (wir verwenden auf dem Testgelände natürlich nur ungefährliche Attrappen, die aber täuschend echt aussehen). + +Überschreibe die Methoden istWandVorne() und istWandLinks() so, dass sie true zurückgeben, wenn wirklich eine Wand vorne (super.istWandVorne()) bzw. links (super.istWandLinks()) ist oder wenn ein Fass vorne bzw. links ist. +Überschreibe die Methoden istWandVorne() und istWandLinks() so, dass sie true zurückgeben, falls wirklich eine Wand vorne (super.istWandVorne()) bzw. links (super.istWandLinks()) ist oder falls ein Fass vorne bzw. links ist. + + +AB8 +In Skelettcode waren teilweise falsche Aufgabennummen; korrigiert + + +Was passiert bei Robotern die nach links/oben/unten laufen? +Was passiert bei Robotern, die nach links/oben/unten laufen? + +Du kannst dir aussuchen in welcher. +Du kannst dir aussuchen, in welcher. + +Sinnvoll ist es dazu zunächst einen Sensor istFassRechts() zu implementieren. +Es ist sinnvoll, zunächst einen Sensor istFassRechts() zu implementieren. + + + + +AB9 +Die Verwendung von "Etage" ist missverständlich, wenn direkt danach "Stockwerk" verwendet wird. +Ich habe jetzt jedes Vorkommen von "Etage" durch "Stockwerk" ersetzt und definiert. + + + +Eine Einsatzleiter wurde bestimmt, die anstehenden heiklen Arbeiten zu koordinieren. +Ein Einsatzleiter wurde bestimmt, die anstehenden heiklen Arbeiten zu koordinieren. + +Manchmal ist es auch erforderlich mehrere Parameter anzugeben. +Manchmal ist es auch erforderlich, mehrere Parameter anzugeben. + +Markiere im untenstehenden Bild alle Methoden, die beim Aufruf eine Eingabe verlangen. +Markiere im unten stehenden Bild alle Methoden, die beim Aufruf eine Eingabe verlangen. + +Vervollständige die Methode public void dreheRoboter(int richtung), der den Roboter in die angegebene Richtung dreht (0=Blick nach rechts, 90=Blick nach unten, …). +Vervollständige die Methode public void dreheRoboter(int richtung), die den Roboter in die angegebene Richtung dreht (0=Blick nach rechts, 90=Blick nach unten, …). + +Wie du schon richtig erkant hast, schauen wir nun nicht mehr auf die Roboterwelt von oben, sondern wir betrachten einen Querschnitt eines Bergwerks. +Wie du schon richtig erkannt hast, schauen wir nun nicht mehr auf die Roboterwelt von oben, sondern wir betrachten einen Querschnitt eines Bergwerks. + +Bisher muss ein Roboter nach unten bzw. nach oben schauen und einsVor gehen, damit der Aufzug eine Etage nach unten bzw. nach oben fährt. +Bisher muss ein Roboter nach unten bzw. nach oben schauen und einsVor gehen, damit der Aufzug ein Stockwerk nach unten bzw. nach oben fährt. + +Vervollständige die Methode public void fahreAufzug(int etagen, boolean abwaerts), die einen Roboter, der auf einem Aufzug steht (istAufGegenstand(„Aufzug“)?), die angegebe Anzahl von Etagen abwärts oder aufwärts fahren lässt. +Vervollständige die Methode public void fahreAufzug(int etagen, boolean abwaerts), die einen Roboter, der auf einem Aufzug steht (istAufGegenstand(„Aufzug“)?), die angegebene Anzahl von Etagen abwärts oder aufwärts fahren lässt. + + + 5. Fahre Aufzug: Vervollständige die Methode public void fahreAufzug(int etagen, boolean abwaerts), die einen Roboter, der auf einem Aufzug steht (istAufGegenstand(“Aufzug“)?), die angegebene Anzahl von Etagen abwärts oder aufwärts fahren lässt. Diese Methode soll funktionieren, egal in welche Richtung der Roboter am Anfang schaut. Steht der Roboter nicht auf einem Aufzug, soll nichts passieren. + Bedenke: Die Roboter können in leere Aufzugsschächte stürzen, da man in diesem Level nicht von oben sondern von vorne auf die Welt schaut. + 6. Fahre ins Stockwerk: Implementiere die Methode public void fahreInsStockwerk(int etage). Dabei werden die Stockwerke vom Boden ab abwärts gezählt (blaue Koordinate). + + 5. Fahre Aufzug: Vervollständige die Methode public void fahreAufzug(int stockwerke, boolean abwaerts), die einen Roboter, der auf einem Aufzug steht (istAufGegenstand(“Aufzug“)?), die angegebene Anzahl von Stockwerken (ein Stockwerk entspricht einem Schritt) abwärts oder aufwärts fahren lässt. Diese Methode soll funktionieren, egal in welche Richtung der Roboter am Anfang schaut. Steht der Roboter nicht auf einem Aufzug, soll nichts passieren. + Bedenke: Die Roboter können in leere Aufzugsschächte stürzen, da man in diesem Level nicht von oben sondern von vorne auf die Welt schaut. + 6. Fahre ins Stockwerk: Implementiere die Methode public void fahreInsStockwerk(int stockwerk). Dabei werden die Stockwerke vom Boden ab abwärts gezählt (blaue Koordinate). + + +Bild ausgetauscht + +AB10 + +Daher gibt es in den Programmiersprachen die Möglichkeit solche Wieder­holungen zu notieren. +Daher gibt es in den Programmiersprachen die Möglichkeit, solche Wieder­holungen zu notieren. + +Analysiere das Verhalten der nebenstenden Methode (Welche Aufgabe erledigt der Roboter?). +Analysiere das Verhalten der nebenstehenden Methode (Welche Aufgabe erledigt der Roboter?). + + +**** ENDE ÄNDERUNGEN NOPPER **** + +**** ÄNDERUNGEN SCHALLER (Version 3.12.2019) ******* + +Im Lösungsdokument für AB1 die Nummerierung der Aufgaben angepasst + +**** ENDE ÄNDERUNGEN *********** + +**** ÄNDERUNGEN NOPPER (Version 3.12.2019) ******* + +AB2 und AB7: Bildquellen als einziges auf neue Seite gerutscht -> auf die vorherige geholt (2 Seiten weniger Ausdruck) + +**** ENDE ÄNDERUNGEN *********** + diff --git a/README.md b/README.md new file mode 100644 index 0000000..048c2b3 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# Reaktorrobot + +Dieses Projekt ist eine Einführung in die Java-Programmierung mit Hilfe eines Greenfoot-Projekts. Als Szenario wird ein Roboter gesteuert, der verschiedene Aufgaben erfüllen muss. + +## Themen +- Verzweigungen +- Schleifen (while, for) +- Variablen +- Methoden mit und ohne Parameter und Rückgabewerte +- Grundidee der OOM +- Debugging + diff --git a/liste_urheberschaft_lokale_robot_zsl.odt b/liste_urheberschaft_lokale_robot_zsl.odt new file mode 100644 index 0000000..d5a2590 Binary files /dev/null and b/liste_urheberschaft_lokale_robot_zsl.odt differ diff --git a/readme.adoc b/readme.adoc new file mode 100644 index 0000000..849992d --- /dev/null +++ b/readme.adoc @@ -0,0 +1,11 @@ += Material : + +|=== +|Zuordnung| +|Klassenstufe| +|Bildungsplanbezug | +|Werkzeug| +|Autoren| +|=== + +== Inhalt