Hilfe beim programmieren von Krümel und Monster?


27.01.2020, 18:00

Die Datei ist leider schreibgeschützt, aber man kann sie auch hier finden: http://kruemelundmonster.de/unterrichtskonzept.html --》 dann Kapitel 11

2 Antworten

Mal abgesehen von dem Fehler in der Aufgabenstellung...

11.1

Hier haste Du eine Methode, die Du im Struktodingens sieht, die im Grunde Dir zeigt, wie die "Arbeitsanweisung" eines Objekts unter bestimmten Bedingungen ist:

Die Methode bezieht sich auf die Arbeitsanweisung nach Osten gehen.

nachOstenGehen()

Die Einschränkung ist gegeben durch die

positionX < 10 - 1

Hier prüft der also, ob die Position kleiner als 10-1 ist (true) oder ob sie nicht kleiner als 10 - 1 ist (false)

Das Feld, wo das Ding nach rechts gehen kann, ist 10 Felder breit. Nen Algorithmus fängt bei 0 an zu zählen, daher minus 1.

Der guckt halt auf welcher Position sich das Objekt gerade befindet, und wenn diese Position kleiner als die Feldbreite ist, also "true", dann macht er folgendes:

positionX = positionX + 1;

Die Variable positionX, wo die Position gespeichert ist (wahrscheinlich ne Zahl), wir mit der Zuweisung positionX + 1 um 1 erhöht und der Variablen links positionX somit ein neuer Wert (um 1 erhöht) zugewiesen.

Wenn die Position nicht kleiner als 10 - 1 ist (wie zählen dabei die Felder von links nach rechts beginnend bei 0 durch), also "false", dann macht er nix.

Also das, was in dem Dreieck steht, ist für die Einschränkung verantwortlich.

Die Einschränkung kann man aufheben, indem man das, was in dem Dreieck steht wegnimmt und auch den Part true, false rausnimmt, weil ja dann keine Abfrage bzw. Bedingung mehr da ist.

Wenn die sich allerdings auf die Einschränkung beziehen, dass das Ganze nur für ein Feld der Größe 10 x 10 funktioniert und eben nicht für eins der Größe 20 x 20, dann kann man diese Einschränkung aufheben, indem man die Bedingung ändert von positionX < 10 - 1 zu positionX < 20 - 1 oder man ist richtig cool und speichert die Feldgröße in einer weiteren Variable und macht ein positionX < feldgroesse - 1 draus, was eine Eigenschaft des Labyrinths wäre (wo er nachfragt).

11.2

Voraussetzung, dass Mampfi mit dem Labyrinth kommunizieren kann, ist, dass das Labyrinth sichtbar für Mampfi ist. Das heißt die Klasse muss entweder public sein oder zumindest im gleichen "Ordner", ein sogenanntes Paket, abgespeichert wie Mampfi... Oder Mampfi ist eine Unterklasse zu Labyrinth, weil damit würde die Klasse Mampfi alle Eigenschaften, Methoden und Variablen, von Labyrinth erben.

Die bezeichnen das als Referenz, die sich ergibt, wenn Du die "Adresse" zur Klasse anwählen kannst. Voraussetzung dafür ist, was ich beschrieben hab. Entweder ist Mampfi eine Unterklasse zu Labyrinth, also Mampfi extends Labyrinth oder Labyrinth ist z. B. public. Dann würdest Du ggfs Labyrinth in die Mampfi-Klasse implementieren, d. h. dass Du quasi in der Mampfi-Klasse zu Beginn das Paket benennst, wo sich die Klasse Labyrinth befindet, damit das Programm weiß, wo es reingucken muss, um die Klasse und die Eigenschaften oder Methoden von Labyrinth zu finden sind.

Moviemen 
Fragesteller
 27.01.2020, 18:35

Du rettest mir das Leben. Dankesehr!

0
chilly10  27.01.2020, 18:37
@Moviemen

nicht vergessen - dem Typen das unter den Zinken halten, dass da ein Fehler drin ist im Struktogramm... das gibt es seit 2007 und scheinbar hat sich das niemand mal richtig durchgelesen. Kann doch nicht sein so was

1
Moviemen 
Fragesteller
 27.01.2020, 19:09
@chilly10

Wäre es evtl. möglich, dass sie mir auch bei der 11.3 helfen?

0

Die Datei ist scheinbar schreibgeschützt und man kann die Aufgabe nicht lesen

Moviemen 
Fragesteller
 27.01.2020, 17:59

Das Blatt gibts auf http://kruemelundmonster.de/unterrichtskonzept.html bei Kapitel 11.

0
chilly10  27.01.2020, 18:04
@Moviemen

Die Aufgabe kannste gleich mal kompetenterweise an den Aufgabensteller zurückgeben, weil 11.1 handelt von nach Osten gehen, aber daneben ist das Struktogramm von nach Osten blicken, also ist die angegebene Methode falsch

1
chilly10  27.01.2020, 19:34
@chilly10

DieLösung steht da drunter in der pdf.

Im Grunde hast Du die Klasse Mampfi. Und in dieser Klasse sind zum Einen die Klassenvariablen und die Klassenmethoden gespeichert.

Wenn Du so eine Beziehung erstellen willst, musst Du der Klasse Mampfi, eine Objektvariable Labyrinth zuordnen, in dem ein Labyrinth, in dem Mapfi sich bewegt, gespeichert wird.

Das heißt, Du erstellst erst das Objekt und wenn Du ein Objekt Mampfi erstellst, weist Du ihm im Konstruktor Mampfi das erstellte Labyrinth-Objekt zu. Ein Konstruktor ist eine spezielle Methode bei Objekten, die speziell für die Objekt-Erstellung dient, wobei eine Klasse als Vorlage für das Objekt dient. Innerhalb der Konnstruktormethode kannst Du bestimmen, was mit den übergebenen Variablen-Werten passiert.

Hier wäre das dann z. B. bei der Klasse Mampfi, dass Du im Konstruktor

MAMPFI(LABYRINTH labyrinth) {

laby = labyrinth;

}

Das übergebene Objekt labyrinth mittels des Konstruktors dem Objekt Mampfi bei seiner Erstellung der Mampfi-Variable laby zuordnest und damit das Objekt labyrinth da speicherst.

0
chilly10  27.01.2020, 19:37
@chilly10

Noch mal neu, auf verständlichem Deutsch:

DieLösung steht da drunter in der pdf.

Im Grunde hast Du die Klasse Mampfi. Und in dieser Klasse sind zum Einen die Klassenvariablen und die Klassenmethoden gespeichert.

Wenn Du so eine Beziehung erstellen willst, musst Du der Klasse Mampfi, eine Objektvariable Labyrinth zuordnen, in dem ein Labyrinth, in dem Mapfi sich bewegt, gespeichert wird.

Das heißt, Du erstellst erst das Objekt und wenn Du ein Objekt Mampfi erstellst, weist Du ihm im Konstruktor Mampfi das erstellte Labyrinth-Objekt zu.

Ein Konstruktor ist eine spezielle Methode von Klassen, die speziell der Objekt-Erstellung dient, wobei eine Klasse als Vorlage für das Objekt verwendet wird.

Innerhalb der Konstruktormethode kannst Du bestimmen, was mit den übergebenen Variablen-Werten (zwischen den Klammern) passiert.

Hier wäre das dann z. B. bei der Klasse Mampfi, dass Du im Konstruktor

MAMPFI(LABYRINTH labyrinth) {

laby = labyrinth;

}

Das übergebene Objekt labyrinth mittels des Konstruktors dem Objekt Mampfi bei seiner Erstellung der Mampfi-Variable laby zuordnest und damit das Objekt labyrinth da speicherst.

Die Mampfi-Klasse selbst, also die Vorlage, hat dann für jedes Mampfi-Objekt eine LABYRINTH laby-Objektvariable vorgesehen als eine Art Speicherplatz bzw. Verknüpfung zu einem speziellen Objekt vom Klassentyp Labyrinth.

0