Pacman Labyrinth in Java

8

Also baue ich das Pacman-Spiel in Java, um mich selbst zu programmieren.

Ich habe das grundlegende Spielfenster mit dem Pacman-Sprite und den Geister-Sprites gezeichnet, der Pacman bewegt sich mit den Pfeiltasten, bewegt sich nicht über die Wände des Fensters hinaus usw. Jetzt versuche ich das Labyrinth zu bauen, wie in diesem Bild:

Ohne mir die direkte / vollständige Lösung zu geben, kann mir jemand sagen, wie das aufgebaut werden kann? Ich spreche nur von den Grenzen und den Pfeifen ('T'-Zeichen) hier, die du nicht durchgehen kannst und du musst herumgehen. Nicht die Punkte, die der Pacman noch isst.

Hier sind meine Fragen:

1) Was ist der effizienteste Algorithmus / Methode um dieses Labyrinth zu erstellen? Muss es jedes Mal gezeichnet werden, wenn die Methode paint () aufgerufen wird oder gibt es eine Möglichkeit, es nur zu Beginn des Spiels und nie wieder zu zeichnen?

2) Wie wird das eigentlich auf den Bildschirm gezeichnet? Ich nehme an, dass fillRect() verwendet wird?

3) Hinweise zur Kollisionserkennung (damit die Pacman / Geister nicht durch die Wände gehen können) wären hilfreich.

4) Hinweise, wie der freie Platz zwischen den Rohren berechnet wird, damit die Punkte dazwischen gefüllt werden können, sind ebenfalls sehr hilfreich.

Danke

    
Click Upvote 07.03.2009, 20:45
quelle

4 Antworten

9

Ich würde es nicht so machen.

Ich würde die grafische Karte zeichnen und dann ein 2D-Datenfeld erstellen, das die Karte darstellt. Die Datenkarte würde dafür verantwortlich sein, Kollisionen zu bestimmen, Punkte zu essen, wo Süßigkeiten sind und wo die Geister sind. Sobald alle Logik für alles gehandhabt ist, verwenden Sie einfach das 2D-Array, um alles in ihren richtigen Pixelkoordinaten über der grafischen Karte anzuzeigen.

Zum Beispiel drückt der Benutzer die linke Taste. Zuerst stellen Sie fest, dass sich pacman bei Element 3, 3 befindet. Element 3, 2 enthält Informationen, die eine Wand bezeichnen, damit Sie den Code implementieren können, damit er den Befehl ignoriert.

BEARBEITEN:

Jedes Element würde darstellen, wo ein Punkt sein könnte. Zum Beispiel:

Nein, wenn ich auf das Board gucke, würde ich sagen, das Array würde ungefähr so ​​aussehen.

%Vor%

Und so weiter. Vielleicht möchten Sie eine flexiblere Datenstruktur als nur Buchstaben auswählen, da einige Bereiche eine Reihe unterschiedlicher Informationen enthalten müssen. IE obwohl der Ghost-Laichbereich leer ist, ist Pacman dort nicht erlaubt. Die Bewegung der Geister und Pacman ist unterschiedlich für die Seitenfluchten, der Süßigkeiten-Spawn-Punkt ist ein leerer Punkt, aber wenn Sie flexibel bleiben wollen, sollten Sie angeben, wo dies auf einer Karte ist.

Eine weitere Sache, an die du dich erinnern solltest, ist, dass Pacman und die Geister oft zwischen Punkten sind. Daher ist es wichtig für die Kollisionserkennung, dass Informationen enthalten sind, die einen Prozentsatz eines Raums repräsentieren, den sie zwischen 1,2 und 1,3 einnehmen Sie können auch bestimmen, wann Sie Punkte, Powerups und Süßigkeiten vom Board entfernen möchten.

    
Spencer Ruport 07.03.2009, 21:02
quelle
6

Hier ist ein Hinweis für Sie:

alt text http://www.freeimagehosting.net/uploads/66e4131f59.jpg

Dieser richtig verwendete Hinweis ermöglicht es Ihnen, Rendering und Kollisionserkennung zu handhaben und ermöglicht Ihnen außerdem, das Labyrinth kompakt darzustellen.

    
Willie Wheeler 07.03.2009 21:18
quelle
2
  1. Sie können die Karte in ein BufferedImage zeichnen und nur drawImage auf jedem paint () zeichnen. Sie werden auf diese Weise ziemlich vernünftige Leistung erhalten.

  2. Wenn Sie zufrieden damit sind, dass die Wände solide sind, können Sie jeden quadratischen Wandblock mit fillRect zeichnen. Wenn Sie das gleiche Aussehen wie auf dem Bild erhalten möchten, müssen Sie sich überlegen, wie Sie die Linien richtig zeichnen und Bögen für Ecken verwenden.

  3. Die Pacman-Spielkarte besteht aus Quadraten und Pacman und die Geister bewegen sich immer in einem animierten Schritt von einem Quadrat zum benachbarten Quadrat (d. h., Sie drücken nach rechts, der Pacman bewegt sich ein Feld nach rechts). Das bedeutet, dass die Kollisionserkennung einfach ist: Lassen Sie keine Bewegungen auf nicht leere Quadrate zu.

  4. Ich verstehe nicht, was Sie hier fragen wollen.

TrayMan 07.03.2009 21:02
quelle
2

1) Nur um meinen Rat zum Neuzeichnen zu geben. Etwas, das Sie tun können, wenn Sie das gesamte Bild neu zeichnen, ist langsam, es werden nur die Elemente bestimmt, die sich auf dem Bildschirm geändert haben, und diese neu zeichnen. Ein Ansatz hierfür wäre der folgende: Ermitteln Sie die Sprites, die sich bewegt haben. Bestimmen Sie (ungefähr) ein Rechteck um diese Sprites. Zeichnen Sie nur diese Rechtecke neu. Auf diese Weise werden nur Teile des Bildschirms und nicht der gesamte Bildschirm aktualisiert. Dies sollte zu einer Leistungssteigerung führen, wenn Sie den gesamten Bildschirm neu zeichnen.

Die anderen Antworten waren vernünftig für die anderen Fragen, die Sie gestellt haben.

    
kgrad 07.03.2009 21:18
quelle

Tags und Links