Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Pacman-Wände-Problem (https://www.delphipraxis.net/129242-pacman-waende-problem.html)

Heffty 15. Feb 2009 11:14


Pacman-Wände-Problem
 
Hallo Leute. Ich habe ein Problem mit meinem Spiel Pacman. Und zwar läuft Pacman (ein Icon im Image) über ein wieters großes Image, das Level. Mein Problem ist, dass ich es überhaupt nicht hinbekomme die Wände für Pacman undurchlässig zu machen. Hat vielleicht jemand eine Lösung? Danke im Voraus.

Noedel 15. Feb 2009 11:21

Re: Pacman-Wände-Problem
 
wenn der pacman auf left und top der wand ist, dann soll er sich nicht mehr bewegen.

Der_Unwissende 15. Feb 2009 11:26

Re: Pacman-Wände-Problem
 
Hi und erstmal herzlich Willkommen in der DP :dp:

Ich bin sicher, dass viele nette Leute hier gerne bei Deinem Problem helfen, was dazu aber immer gaaanz wichtig ist: Informationen!

Du sagst ja schon, dass Du das ganze angefangen hast und ein Teil funktioniert. Genauso wichtig ist aber immer auch, dass Du sagst was Du schon probiert hast oder (ggf.) auch was nicht. Bei Deinem konkreten Problem wäre jetzt also die Frage, hast Du schon einen Ansatz wie Du Wände erkennst? Hast Du den probiert und funktioniert der einfach nicht? Oder fehlt Dir einfach nur der Anfang?

An sich kannst Du Dein "großes" Image oder eben die Levelmap in ein Raster teilen. Jedes Element im Raster ist eben so groß wie Deine Spielfiguren, entsprechend viele Felder ist das Level hoch und breit. Dann kannst Du z.B. Informationen zu jeder Grenze in einem Feld (Array) speichern. Am einfachsten geht das, wenn Du der Intuition folgst, speicher einfach zu jedem Element des Spielfeldes ob eine Bewegung nach links, rechts, oben oder unten von dieser Position aus möglich ist. Das kannst Du dann entsprechend einfach prüfen, soll Pacman eine Bewegung machen kennst Du seine Position und schaust im Array nach ob die neue Position erreicht werden kann.

Besten Gruß,
Der Unwissende

Florian Hämmerle 15. Feb 2009 12:03

Re: Pacman-Wände-Problem
 
Speichere die Informationen in nem Array deiner Spielfeldgröße.
zB

-1 => Wand
0 => Frei
1 => Münze
2 => ...
10 => PacMan

Dann kannst du immer überprüfen, ob das Feld betretbar ist.

mfg Flö

Heffty 15. Feb 2009 12:35

Re: Pacman-Wände-Problem
 
Ja vielen Dank für die schnellen Antworten. Also ich habe eigentlich keinen Ansatz wie ich die Wände erkennen lasse, dass mit dem Raster hört sich Prima an aber wie erstelle ich ein solches?

Florian Hämmerle 15. Feb 2009 14:16

Re: Pacman-Wände-Problem
 
Nehmen wir mal an dein Spielfeld ist 10x10 Felder groß.
Dann hast du ein Array[1..10][1..10] in dem deine Felder gespeichert sind.
Jedes Objekt in deinem spiel wird durch eine Zahl repräsentiert (zB 0 für ein leeres feld, -1 für ein nicht begehbares feld = Wand). Dann sieht dein Array zb so aus

-1-1-1-1-1-1-1-1-1-1-1
-1 0 0 0 3 3 3 3 3 9 0
...

Hier ist -1 eine Wand, 0 ein leeres Feld, 3 = Feld mit Münze, 9 = PacMan

PacMan wird über die Pfeiltasten gesteuert:
Links: => Position-x wird um eines verringert
Rechts: => Position-x wird um eines erhöht
Oben => Position-y wird um eines verringert
Unten => Position-y wird um eines erhöht

Somit hast du immer die aktuelle Position des PacMan und kannst so ganz einfach abfragen ob er laufen kann oder nicht:
Wenn neue Position = -1 dann darf er nicht laufen
Wenn neue Position = 3 dann Score um eines erhöhen und neue Position beim nächsten Zug auf 0 setzen (ist ja nichts mehr drauf)

mfg Flö

Namenloser 15. Feb 2009 14:33

Re: Pacman-Wände-Problem
 
Wobei es mit "darf nicht mehr bewegen" nicht getan ist. Man muss zusätzlich noch prüfen, in welche Richtung er sich nicht mehr bewegen darf, sonst bleibt er an den Wänden kleben :wink:

Der_Unwissende 15. Feb 2009 14:34

Re: Pacman-Wände-Problem
 
Das mit dem Spielfeld als Array hatte ich ja schon erwähnt, dem stimme ich dann bei Florian auch voll zu.
Allerdings brauchst Du gar nicht mit Zahlen zu arbeiten. Hierfür gibt es in Delphi die gute Alternative, dass Du selbst einen Typen festlegst. Einfach mit dem Schlüsselwort Type beginnen und einen neuen Typen deklarieren:

Delphi-Quellcode:
type
 TPacmanGameMapElement = (gmeWall, gmeEmpty, gme...);
Das ist dann ein ganz normaler Typ, kannst entsprechend auch ein Array von diesem Typen erzeugen und die Werte direkt setzen. Statt Zahlen zu vergleichen kannst Du auch direkt den Wert prüfen (also z.B. x = gmeWall, natürlich sollten Variablen eher nie x heißen). Der Vorteil an so einem Typen ist die Typsicherheit, Du stellst einfach sicher, dass Du nicht versehentlich einen falschen Wert zuweist. Außerdem kann man den Code viel einfacher lesen, da bereits klar ist was Du meinst. Bei Zahlen ist das immer so eine Sache (ob -1 nun eine Wand ist oder was ganz anderes wird keiner korrekt erraten). Intern macht Delphi zudem eh nichts anderes als es in Zahlen umsetzen.

Das geschilderte Prinzip ist ansonsten natürlich schon mal ein Ansatz. Da solltest Du mal schauen wie weit Du kommst.

Florian Hämmerle 15. Feb 2009 14:36

Re: Pacman-Wände-Problem
 
Das mit eigenem Typ würd ich auch empfehlen. Hab nur Zahlen verwendet, um es besser darstellen zu können.
Über den Typ kannst du dann auch noch ganz einfach jedem ein eigens Bild zuweisen.

mfg Flö

Heffty 15. Feb 2009 14:52

Re: Pacman-Wände-Problem
 
Gut gut das mit dem Array verstehe ich soweit aber ich müsste dann ja mein Level komplett neu machen mit Quadraten die so groß sind wie meine Spielfigur? Wenn meine Annahme also richtig ist müsste mir jemand erklären wie ich dieses Image mit den vielen Rechtecken die nebeneinander angeordnet sind erstelle. Denn bisher kann ich nur rechtecke an bestimmte Positionen aber nicht aufgereiht erstellen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:46 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz