Okay also ich werd's mal versuchen
Ich seh eh grad, daß ich in meinem Code-Schnipsel 'nen Fehler gemacht hab. Aber egal, ich erklär's jetzt mal.
Ein Array mußt Du Dir vorstellen wie eine Tabelle. Idealerweise stellen wir uns Dein Labyrinth mal wie ein Schachbrett vor, also eine Tabelle mit einer bestimmten Spalten- und Zeilenanzahl.
Dafür definieren wir ganz am Anfang des Programms (nicht innerhalb einer Procedure) folgendes:
Dim Labyrinth.b(100,60)
Dein Labyrinth besteht nun also aus 100 Spalten und 60 Zeilen, wenn man sich das mal so vorstellen will.
Nun speicherst Du einfach überall dort, wo 'ne Mauer stehen soll, eine 1 z.B.
Das machst Du am besten, indem Du diese Daten aus einer Datei lädst.
Jetzt brauchst Du nur fragen, wenn einer nach links läuft:
Ist in dem Feld, das links von dem Feld liegt, auf dem der Spieler sich gerade befindet, eine Mauer? Wenn nicht, dann darf der Spieler sich nach links bewegen.
Noch was wichtiges:
Wenn Deine Figur nicht kästchenweise laufen soll, sondern pixelweise, und Deine Kästchen 30 Pixel breit sind, dann befindet sich der Spieler, wenn er im 5. Kästchen von links ist, natürlich 5*30=150 Pixel von links. Also steht in Deiner Variable plx die Zahl 150. Es kann aber auch sein, daß er nicht genau auf 150 ist, sondern vielleicht auf 167, was aber auch noch in diesem Kästchen wäre.
Deshalb teilst Du die plx durch 30, schreibst das aber in die int()-Funktion, die dann einfach alles nach dem Komma abschneidet. Somit käme bei 167/30 = 5,57 raus, durch das int() allerdings nur eine 5. Somit hätten wir wieder unser 5. Kästchen von links.
Nun müssen wir also das 4. Kästchen von links überprüfen, wenn der Spieler im 5. ist und nach links laufen will. Allerdings brauchen wir das ja erst tun, wenn er genau am Rand des Kästchens ist, also erst bei Position 150 und nicht z.B. 167.
Ob der Spieler sich dort befindet, prüfen wir einfach, indem wir int(plx/30) mit plx/30 (ohne int()) vergleichen. Es gibt auch noch eine andere Möglichkeit, die erklär ich später.
Jedenfalls muß der richtige Code erstmal so aussehen:
Code: Alles auswählen
If int(plx/30)=plx/30
If Labyrinth((plx/30)-1, ply/30)=0
plx=plx-1
EndIf
EndIf
Erklärung: Wenn wir also genau auf dem Kästchen sind, und es somit relevant wird, ob wir nach links können, wird überprüft, ob in unserem Labyrinth ein Kästchen weiter links eine Mauer ist. Wenn nicht (=0), dann darf die Figur ein Pixel weiter nach links.
Das Kästchen wird so überprüft:
Der Spieler befindet sich ja an Position plx, aber um die Nummer des Kästchens rauszufinden, teilen wir einfach wieder durch 30. Das gleiche machen wir auch mit ply. Bei plx müssen wir allerdings noch 1 abziehen, denn wir wollen ja das Kästchen, das sich eine Position weiter links befindet, überprüfen.
Ich hoffe mal, das ist einigermaßen verständlich. Natürlich kann das noch komplizierter werden, denn Du willst ja auch die Kästchen rechts, oben und unten vergleichen, und manchmal ist es auch nötig, z.B. das oben UND das rechts gleichzeitig zu überprüfen, aber ich denk mal, das wirst Du dann schon hinkriegen. Notfalls mach erstmal ein Spiel, wo der Spieler immer gleich um 30 Pixel läuft (also Kästchenbreite), das ist etwas einfacher.
Noch was zu dem Vergleich (die bessere Möglichkeit):
Du kannst auch einfach plx durch 30 teilen und schauen, ob ein Rest übrig bleibt. Das funktioniert mit dem Modulo-Operator (dargestellt durch ein Prozent-Zeichen).
Wenn also plx % 30 = 0 ergibt, heißt das, es gibt keinen Rest, sprich, wir befinden uns genau auf dem Kästchen.
Also könnte der Code auch so lauten:
Code: Alles auswählen
If plx % 30 = 0
If Labyrinth((plx/30)-1, ply/30)=0
plx=plx-1
EndIf
EndIf
Ich hoffe mal, das war jetzt alles zu kapieren
