Frage

Deshalb baue ich das Pacman-Spiel in Java, um mir das Programmieren von Spielen beizubringen.

Ich habe das Grundspielfenster mit dem Pacman-Sprite und den gezeichneten Geister-Sprites, 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 auf diesem Bild:

Pacman maze

Kann mir jemand eine Anleitung geben, wie das aufgebaut werden kann, ohne mir die direkte/vollständige Lösung dafür zu geben?Ich spreche hier nur von den Grenzen und den Rohren („T“-Markierungen), durch die man nicht hindurchgehen kann und die man umgehen muss.Noch nicht die Punkte, die der Pacman isst.

Hier sind meine Fragen:

1) Was ist der effizienteste Algorithmus/die effizienteste Methode zum Erstellen dieses Labyrinths?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 dem Bildschirm dargestellt?Ich gehe davon aus fillRect() wird verwendet?

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

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

Danke

War es hilfreich?

Lösung

So würde ich es nicht machen.

Ich würde die grafische Karte zeichnen und dann ein 2D-Datenarray erstellen, das die Karte darstellt.Die Datenkarte wäre dafür verantwortlich, Kollisionen zu bestimmen, Punkte zu fressen, wo sich Süßigkeiten befinden und wo sich Geister aufhalten.Sobald die gesamte Logik für alles erledigt ist, verwenden Sie einfach das 2D-Array, um alles in den richtigen Pixelkoordinaten über der grafischen Karte anzuzeigen.

Beispielsweise 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 kennzeichnen, sodass Sie den Code implementieren können, um ihn dazu zu bringen, den Befehl zu ignorieren.

BEARBEITEN:

Jedes Element würde ungefähr darstellen, wo sich ein Punkt befinden könnte.Zum Beispiel:

Nein, wenn ich mir die Platine ansehe, würde ich sagen, dass das Array ungefähr so ​​aussehen würde.

d,d,d,d,d,d,d,d,d,d,d,d,w,w,d,d,d,d,d,d,d,d,d,d,d,d
d,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,d
p,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,p    
d,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,d    
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d

Und so weiter.Möglicherweise möchten Sie jedoch eine flexiblere Datenstruktur als nur Zeichen wählen, da einige Bereiche eine Reihe unterschiedlicher Informationen enthalten müssen.IE, obwohl der Geister-Laichbereich leer ist, darf Pacman dort nicht hinein.Die Bewegung der Geister und Pacmans ist bei den Nebenfluchten unterschiedlich. Der Süßigkeiten-Spawnpunkt ist ein leerer Punkt. Wenn Sie jedoch flexibel bleiben möchten, sollten Sie für jede Karte festlegen, wo sich dieser befindet.

Sie sollten sich außerdem daran erinnern, dass sich Pacman und die Geister häufig zwischen Punkten befinden. Daher ist es für die Kollisionserkennung und -bestimmung wichtig, Informationen zu enthalten, die einen Prozentsatz des von ihnen eingenommenen Raums zwischen 1,2 und 1,3 darstellen wenn Sie Punkte, Powerups und Süßigkeiten vom Brett entfernen möchten.

Andere Tipps

Hier ist ein Hinweis für Sie:

ALT Text http://www.freeimageHosting.net/uploads/66e4131f59.jpg

Mit diesem ordnungsgemäß verwendeten Hinweis können Sie die Rendering- und Kollisionserkennung behandeln und das Labyrinth auch kompakt darstellen.

  1. Sie können die Karte in ein gepuffertes Problem streichen und das auf jeder Farbe () nur zeichnen. Auf diese Weise werden Sie eine angemessene Leistung erzielen.

  2. Wenn Sie zufrieden sind, dass die Wände fest sind, können Sie jeden Quadratwandblock mit Fillrect zeichnen. Wenn Sie das gleiche Aussehen wie auf dem Bild erhalten möchten, müssen Sie feststellen, wie Sie die Linien richtig zeichnen und Bögen für Ecken verwenden können.

  3. Die Pacman Game Map besteht aus Quadraten und Pacman, und die Geister bewegen sich in einem animierten Schritt immer von einem Platz zum benachbarten Platz (dh Sie drücken nach rechts, der Pacman bewegt einen Platz nach rechts). Das bedeutet, dass die Kollisionserkennung einfach ist: Lassen Sie einfach keine Moves zu Quadraten, die nicht leer sind.

  4. Ich verstehe nicht, was Sie hier zu fragen versuchen.

1) Nur um meinen Rat zum erneuten Zeichnen zu geben. Etwas, das Sie tun können, wenn Sie das gesamte Bild neu zeichnen, ist langsam, nur die Elemente zu bestimmen, die sich auf dem Bildschirm geändert haben und diese neu zeichnen. Ein Ansatz hierfür wäre der folgende: Bestimmen Sie die Sprites, die sich bewegt haben. Bestimmen Sie ein Rechteck um diese Sprites. Zeichnen Sie diese Rechtecke nur neu. Auf diese Weise erfrischen Sie nur Teile des Bildschirms und nicht auf dem gesamten Bildschirm. Dies sollte zu einer Erhöhung der Leistungssteigerung gegenüber dem Neuzuziehen des gesamten Bildschirms führen.

Die anderen Antworten waren für die anderen von Ihnen gestellten Fragen angemessen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top