Grundsätzlicher Spieleaufbau an (m)einem Beispiel

k3ltis

Mitglied
Hallo,

ich hab eine art Moorhuhnjagd in Java gemacht. Anstatt Hühner gibts aber drollige Zombies. Es funktioniert alles ganz gut - trotzdem bin ich irgendwie unzufrieden mit dem Quellcode... wir haben im Studium immer wieder eingebläut bekommen, dass man sich bei der Modellierung der JavaKlassen am besten an der Realität orientiert, sprich: modelliere eine Klasse Zombie so, wie du ihn dir auch in wirklichkeit (ok blödes Beispiel :oops: ) vorstellen würdest.

Eine weitere "Regel" ist, dass man bei Klassenattributen unbedingt das Geheimnisprinzip wahren soll - mache alles möglichst Private und baue getter bzw. setter mit ein...

Um dann den Zugriff auf eine Klasse so gering wie möglich zu halten mache so wenig getter und setter wie möglich, sondern rufe lieber eine Zentrale Methode, wie z.b. "update()" auf, die dann Klassenintern alles selbstständig regelt...

Mit diesen drei Grundsätzen, die ja eigentlich schon irgendwie Sinn machen, habe ich einen Quellcode geshreiben, der zwar alles schön strukturiert - an dem mich aber einige Dinge vom Zugriff her massiv stören. Um zu erläutern, was genau ich meine hab ich mal den Aufbau des Spiels grob als UML-Diagramm dargestellt.




Uploaded with ImageShack.us


Erläuterung:

Spiel hat 3 Attribute, die jeweils spielrelevante Objekte separat
organisieren sollen.
Es sieht momentan so aus: Spiel.update() ruft drei Methoden auf:
1. interfaceverwaltung.update()
2. waffenverwaltung.update()
3. zombieverwaltung.update()

Diese rufen wiederrum selbst die updateMethoden ihrer Unterobjekte auf
z.B. die der Gun-Objekte und Zombie-Objekte.

Das gleich läuft mit der render()-Methode, den key- und
mouseListenern...

Stellt euch vor man feuert auf einen Zombie. Die keyPressed
Methode der Waffenverwaltung liefert ein Ereignis an die KeyPressedMethode der
aktuell ausgewälten Gun. Dann wird intern eine Kugel vom Magazin
abgezogen und so weiter... alles schön und gut.

Gleichzeitig soll aber auch überprüft werden, ob ein Zombie getroffen wurde. Also muss bei
einem wirklcihen Schuss (nicht bl0ß bei einem Klick) ein Event in der Zombie-mousePressedMethode ausgelöst werden.

Die einfachste Möglichkeit wäre es also das mousePressed-Event an die zombieverwaltungsklasse
direkt aus der GunKlasse zu übergeben. Denn - wenn z.B. das Magazin leer ist, wird auch nicht gefuert und dann muss auch keine Kollision aufgerufen werden.

Was habe ich also getan? Ich habe an die GunObjekte einInstanz von zombieVerwaltung übergeben,
um diese von der GunKlasse aus aufzurufen.

Macht man das so??? Wäre es nicht sinvoller die Zwischenebene der ganze VerwaltungsKlassen wegzulassen und einfach NUR eine Gun- und eine ZombieKlasse anzulegen, deren Objekte dann direkt in Spiel.java erzeugt und verwaltet werden?


liebe Grüße
Keltis
 

Fu3L

Top Contributor
Die Verwaltungsklassen sollten im Idealfall von der Eingabe getrennt sein.

Eine Möglichkeit der update Methode im Spiel.java wäre folgende Umsetzung:


Code:
-Input. Was für ein Input: Schuss:
  boolean geschossen = Waffenverwaltung.schieße 
  wenn(geschossen)
    boolean zombieGetötet =  ZombiVerwaltung.schieße an position (berechne WeltPosition des klicks) 
      wenn(zombiegetötet)
        increaseScore
        playSound

Dabei könnte zombiegetötet auch ein int sein, dass die erzielte Punktzahl angibt, je nach Zombie.
Soltlest du mehr zurückgeben müssen, kanns auch ein ResultObjekt geben, ist klar.
 

k3ltis

Mitglied
Hab ich das richtig verstanden?

NUR in der Spiel.java soll ein Listener sein? Das würde bedeuten, dass ebenfalls NUR in der Spiel.java die Eingabe mit einer If-Kasakde vorselektiert wird um dann die entprechenden Methoden der VerwaltungsKlassen aufzurufen.

Kannst du mir das mit dem Input etwas genauer erläutern?


gruß
keltis
 
Zuletzt bearbeitet:

Fu3L

Top Contributor
Ja, das hast du richtig verstanden. Es sollte nach Möglichkeit nur ein System (das kann eine einzige Klasse sein), die sich mit dem Input befasst. Und diese wandelt das dann in Spielaktionen um, wie etwa "es wurde geschossen". Im Menü (sofern es eins gäbe) könnte man ja auch klicken und es wäre kein Schuss. Für sowas ist diese Trennung sinnvoll.

Dann holt das Spielupdate die angesammelten Inputs vom Inputhandler ab und sieht zB, dass ein Schuss vom Spieler getätigt wurde. Es guckt dann, ob das tatsächlich möglich ist und lässt dann prüfen, ob da wo der Maus Cursor ist, auch ein Zombie ist und ob der dadurch getötet wird.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Rendering order auf einem ismetrischen Grid Spiele- und Multimedia-Programmierung 8
P Wie kann ich einem Programm hinter eine GUI verstecken? Spiele- und Multimedia-Programmierung 12
J (Libgdx) animation nur einmal in einem Event aufrufen Spiele- und Multimedia-Programmierung 1
B Programmieren wie der Befehl /ban in Minecraft geblockt wird aber nicht /ban mit einem Argument Spiele- und Multimedia-Programmierung 1
P selectedItem aus einem Methodenerstellten JPanel auslesen. Spiele- und Multimedia-Programmierung 5
O Problem beim Aufrufen des Spiels von einem Menü Spiele- und Multimedia-Programmierung 7
G Entity Verwaltung in einem 2D Spiel Spiele- und Multimedia-Programmierung 1
G Collision Detection in einem 2D Sandbox Game. Spiele- und Multimedia-Programmierung 2
E Einem A*-Pfad folgen Spiele- und Multimedia-Programmierung 27
G Auf einem Stick bewegen Spiele- und Multimedia-Programmierung 5
windl MP3-Tags von einem Inputstream auslesen Spiele- und Multimedia-Programmierung 5
U DPI von einem Bild definieren Spiele- und Multimedia-Programmierung 5
X Erklärung zu einem Tic Tac Toe Spiel Spiele- und Multimedia-Programmierung 1
C Hilfe bei einem Mosaikspiel Spiele- und Multimedia-Programmierung 16
M [JOGL] Maus über einem gezeichnetem Objekt abfragen? Spiele- und Multimedia-Programmierung 5
P Winkel von einem Punkt zum anderen berechnen Spiele- und Multimedia-Programmierung 9
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
S Java3D: Primitives zu einem Objekt kombinieren Spiele- und Multimedia-Programmierung 7
Fl4sh1 Datum und Uhrzeit von einem Ereignis ausgeben lassen Spiele- und Multimedia-Programmierung 3
P Frage zu einem Projekt "Einarmiger Bandit" 3 Walzen / 9 Zeichnungen BLUEJ Spiele- und Multimedia-Programmierung 10
S Problem mit Sichtfeld/Licht in einem Raster Spiele- und Multimedia-Programmierung 5
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
A Drehen von einem Image Spiele- und Multimedia-Programmierung 4
F Bot updaten von einem Browser game Spiele- und Multimedia-Programmierung 7
W Java3D: Kanten die hinter einem Objekt liegen werden gezeigt Spiele- und Multimedia-Programmierung 2
B Reset bei einem Spiel Spiele- und Multimedia-Programmierung 16
C auf einem PC kein mp3 unter Java Spiele- und Multimedia-Programmierung 6
A Steuerung des Bewegungsflusses bei einem Netzwerkspiel Spiele- und Multimedia-Programmierung 18
R Mehrere Shader in einem Program Spiele- und Multimedia-Programmierung 8
B Generierung einer Wertetabelle aus einem Bild Spiele- und Multimedia-Programmierung 3
Z Kugeln aufgrund von Daten aus einem Array verschieben Spiele- und Multimedia-Programmierung 2
S Probleme mit JMenu in einem JFrame mit BufferStrategy Spiele- und Multimedia-Programmierung 2
K Kanten anzeigen lassen in einem Shape3D-Objekt Spiele- und Multimedia-Programmierung 4
A Interaktion von J3D in einem Applet Spiele- und Multimedia-Programmierung 4
N In einem Kasten springende Bälle programmieren...Hilfe Spiele- und Multimedia-Programmierung 7
H Speichern und Öffnen von einem Zeichenprogramm Spiele- und Multimedia-Programmierung 4
A Wie kann ich die Dateigröße aus einem tiff auslesen? Spiele- und Multimedia-Programmierung 2
hdi mehrere Threads/Tasks in einem synchronisieren -> TaskPoo Spiele- und Multimedia-Programmierung 36
N Farberkennung und -ersetzung in einem Bild Spiele- und Multimedia-Programmierung 2
F Umsetzung von einem Partikelsystem Spiele- und Multimedia-Programmierung 4
J Java3D Rotationsproblem bei einem 3D-Maennchen Spiele- und Multimedia-Programmierung 3
B Frage zur Spielsteuerung bei einem rundenbasiertes Spiel Spiele- und Multimedia-Programmierung 5
K Seitenlänge aus einem Würfel lesen Spiele- und Multimedia-Programmierung 3
K Einzelne Pixel in einem Bild lesen Spiele- und Multimedia-Programmierung 5
T Kollisionsabfrage von einem Stein mit einem Ball Spiele- und Multimedia-Programmierung 5
G Einen gif oder jpg Datei aus einem Graphics Objekt o. JFrame Spiele- und Multimedia-Programmierung 2
A 3D Gegenstand in einem 2D Koordinatensystem darstellen. Spiele- und Multimedia-Programmierung 3
K Hilfe bei Grafikeinbindung in einem Spiel Spiele- und Multimedia-Programmierung 6
D Image.getGraphics() in einem Frame Spiele- und Multimedia-Programmierung 4
G Bufferimage bei einem Frame Spiele- und Multimedia-Programmierung 4
I Zweite Kamera in einem SimpleUniverse Spiele- und Multimedia-Programmierung 6

Ähnliche Java Themen

Neue Themen


Oben