Ich schreibe ein Bomberman-Spiel in Java und ich habe bereits den Code für die Karte des Spiels geschrieben (der Kacheln enthält), die Spieler (und deren Bewegung in der Map) und jetzt stecke ich im Code fest die Bombenexplosion.
Ich habe eine Klasse Map
, die ein 2D-Array von Tiles
enthält, das Player
s, Block
s und Bomb
s enthalten kann.
Das Objekt Player
hat eine Methode dropBomb
, die die Methode receiveBomb
vom Objekt Map
(jede Player
hat die Referenz des Objekts Map
) mit der Position der Bombe und der Bombe aufruft. Wenn die Map
Methode receiveBomb
aufgerufen wird, wird die Bombe in die richtige Tile
Karte gesetzt.
Mein Problem ist die Explosion der Bombe. Wer sollte sich darum kümmern? Die Bombe selbst? Wenn ja, sollte die Bombe die Referenz für das Tile
haben, das sie enthält? Bis jetzt benötigt meine Kachel keine Map
Referenz.
Eine Möglichkeit, die ich mir gedacht habe, ist die Tile
Referenz im Bomb
Objekt. Wenn also die Bombe explodiert (und die Bombe weiß, wann sie explodieren soll), ruft sie eine Methode im Kachelobjekt für die Explosion auf und die Kachel ruft eine Methode in der Karte auf. Übrigens, ich weiß nicht, dass das eine gute Idee ist. Was soll ich tun?
Spielerklasse:
%Vor%Kartenklasse:
%Vor%Ich habe die Bewegungsmethoden weggelassen, weil die Bewegung schon in Ordnung ist.
Ich habe immer gelernt und lebe nach der Regel "der Tisch malt sich". Der Maler könnte die Farbe wählen und die Methode aufrufen, der Boden könnte entscheiden, wie die Lecks und Spritzer angezeigt werden, aber der Tisch malt sich selbst.
Zurück zu Ihrem Problem: explodiert die Bombe selbst . Auf diese Weise können Sie verschiedene Effekte von verschiedenen Bomben haben. Die Bombe wirkt sich auf die Fliese aus und die Fliese reagiert darauf.
Beispiel: Eine Bombe hat eine Kraft und eine Art Explosion. Die Bombe (die nur ein und ein Plättchen einnimmt, denke ich?) Wird einem Fliese ihre Wirkung verleihen.
Jetzt ist es die Kachel, die sich damit beschäftigt, diese Kraft zu verteilen. Nehmen wir an, Sie haben mehrere Arten von Bomben, eine Macht (sagen wir eine Zahl zwischen 1 und 10) und zwei Arten (sagen wir normal, Brandstiftung, Einfrieren).
Jetzt explodiert deine Bombe, und weil dein Avatar ein Feuermagier der Stufe 5 ist, sind deine Bomben 4 und geben Feuergefechte. Also sagst du zu deiner Fliese: Ich explodiere mit Kraft 4 und ich bringe dich in Brand!
Jetzt kommt die Fliese zum spielen. Jede Kachel, die durch die Kraft einer Explosion "berührt" wird, muss ihre "Explodierte" Funktion nennen, um etwas zu tun. Wenn es auch brennt, gibt es in der "onFire" -Funktion mehr zu tun
Welche Kacheln "explodiert" sind, kommt von Gewalt. Normale Kärtchen mit der Stärke 4 geben allen Quadraten innerhalb einer Reichweite von 4 die Wirkung, aber wenn es sich um ein spezielles Plättchen handelt (das weiß es von sich selbst), wie ein Bergplättchen, könnte es mit dieser Kraft nicht vorwärts kommen.
Kachel 1 explodiert mit 4 und gibt sie mit Kraft 3 an benachbarte Kacheln. Eine dieser Kacheln könnte eine Wand sein, macht also nichts weiter. Ein anderes ist ein normales Plättchen und explodiert und gibt es weiter mit der Kraft 2, usw. Wenn es ein "Wasser" -Kärtchen ist, wird die Explosion nach oben gedrückt, aber das Feuer ist nicht, usw.
so:
Am Ende mag es so aussehen, als ob die meisten Arbeiten von den Fliesen gemacht würden, und das ist wahrscheinlich sogar der Fall. aber die ersten Schritte: Die Berechnung der Kraft, des Typs und der ersten Anrufe stammen von der Bombe. Die Bombe explodiert. Und dann hat die Explosion Auswirkungen auf die Fliese. Die Kachel behandelt das und propagiert es bei Bedarf.
Ihre Karte sollte für die Explosion verantwortlich sein, wie für jede andere Kachel auf der Karte. Denn was ist eine Explosion, wenn nicht ein anderer Kacheltyp nach ein paar Sekunden verschwindet?
Wenn Ihre Spielschleife die Update-Methode für das Map-Objekt aufruft, sollte Ihre Map herausfinden:
Denken Sie an Ihr Design als eine Reihe von Ereignissen, die nacheinander in der Spielschleife behandelt werden, bevor sie schließlich gezeichnet werden. Wenn deine Bombe abgeworfen wird, löst sie ein Ereignis in Form von recieveBomb()
auf der Karte aus, wobei die Karte der Ereignis-Controller ist.
Ich glaube, diese Frage passt besser in ein Diskussionsformat und nicht in ein Q & A-Format. Es ist schwer zu sagen, was das "richtige Design" ist, ohne die Gesamtarchitektur zu verstehen.
Die Karte sollte die verantwortliche Person für die Handhabung einer Bombenexplosion sein.
Ich würde vorschlagen, eine Warteschlange in der Karte zu haben, die alle anwesenden Bomben enthält. Außerdem sollten Ihre Bomben einen Timer haben (d. H. CreationTime), so dass Sie, wenn Bomben in die Warteschlange geschoben werden, jede Bombe in der Warteschlange auf ihre Aufenthaltsdauer überprüfen und sie gegebenenfalls "explodieren" lassen.
Fügen Sie eine ExplodeBomb
-Funktion in der Map hinzu, die alle 4 Richtungen überprüft und die Kacheln entsprechend behandelt.
Tags und Links java