AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Pacman-Wände-Problem

Pacman-Wände-Problem

Ein Thema von Heffty · begonnen am 15. Feb 2009 · letzter Beitrag vom 6. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2   
Heffty

Registriert seit: 15. Feb 2009
4 Beiträge
 
#1

Pacman-Wände-Problem

  Alt 15. Feb 2009, 12:14
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.
  Mit Zitat antworten Zitat
Noedel

Registriert seit: 7. Aug 2008
204 Beiträge
 
Delphi 7 Professional
 
#2

Re: Pacman-Wände-Problem

  Alt 15. Feb 2009, 12:21
wenn der pacman auf left und top der wand ist, dann soll er sich nicht mehr bewegen.
-"Was studierst du eigentlich? Nerdologie?"
-"Informatik..."
-"Wusst ich´s doch!"
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Pacman-Wände-Problem

  Alt 15. Feb 2009, 12:26
Hi und erstmal herzlich Willkommen in der 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
  Mit Zitat antworten Zitat
Florian Hämmerle
(Gast)

n/a Beiträge
 
#4

Re: Pacman-Wände-Problem

  Alt 15. Feb 2009, 13:03
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ö
  Mit Zitat antworten Zitat
Heffty

Registriert seit: 15. Feb 2009
4 Beiträge
 
#5

Re: Pacman-Wände-Problem

  Alt 15. Feb 2009, 13:35
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?
  Mit Zitat antworten Zitat
Florian Hämmerle
(Gast)

n/a Beiträge
 
#6

Re: Pacman-Wände-Problem

  Alt 15. Feb 2009, 15:16
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ö
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Pacman-Wände-Problem

  Alt 15. Feb 2009, 15:33
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
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#8

Re: Pacman-Wände-Problem

  Alt 15. Feb 2009, 15:34
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.
  Mit Zitat antworten Zitat
Florian Hämmerle
(Gast)

n/a Beiträge
 
#9

Re: Pacman-Wände-Problem

  Alt 15. Feb 2009, 15:36
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ö
  Mit Zitat antworten Zitat
Heffty

Registriert seit: 15. Feb 2009
4 Beiträge
 
#10

Re: Pacman-Wände-Problem

  Alt 15. Feb 2009, 15:52
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:22 Uhr.
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