Aufbau von Klassen für Spiel

S

Sphinx2k

Mitglied
Hallo,
Ich möchte ein Spiel in der Art von Master of Orion (Erklärung weiter unten) erstellen, ziel soll ehr sein mehr über das Programmieren zu lernen als ein Blockbuster zu erschaffen.
Version 1 soll so aussehen.
Man startet auf einem Planet und Raumschiff und kann dieses dann zu einem anderen Planeten schicken um ihn zu Kolonisieren.
Jetzt kommt mir die Überlegung: hmm gebe ich dem Raumschiff Funktionen um von A nach B zu fliegen, eine Funktion um den Planeten zu Kolonisieren. Was in etwa den Simpel Programmierbeispielen nach Schema Programmiere eine Klasse Auto welche Funktionen zum Starten und Losfahren hat.
Selbst mit Vererbung von einer Superklasse kommt mir das recht Statisch vor bei dem was ich evtl. noch alles einbauen möchte.
Meine Idee ist jetzt in etwa für jede mögliche Handlung eines Raumschiffs eine eigene Klasse zu erstellen. Eine Klasse FliegeNach, eine Klasse Kolonisieren. Meine Raumschiffsklasse hat dann einmal ein Array mit allen Handlungen die es tun kann um diese Nachzuschlagen/Anzuzeigen. Wird jetzt eine verwendet wird diese an ein neues Array "Warteschlange" angehängt, welche dann Stück für Stück abgearbeitet wird.
Pseudoablauf für das Kolonisieren.
Klick auf Raumschiff.
Im Array schauen was es kann und die Optionen in einem Menü anzeigen.
Bei klick auf Kolonisieren ein Ziel erwarten.
Nach dessen auswahl eine neue Instanz von FliegeNach in der Warteschlange erstellen, gefolgt von einer Kolonisiere Instanz.

Kommt mir im ersten Moment erst mal wie eine gute Idee vor das so zu machen. Aber ist es das wirklich?
Ich möchte eine Struktur haben die ich eben erweitern kann wenn ich möchte ohne jedes mal den Kompletten Quellcode umzugraben wenn ich eine neue Idee hab was für ein Feature ich einfügen möchte.
 
T

Tomate_Salat

Gast
Du solltest dir OOP nochmal genau ansehen. Man erstellt nicht für jede "Handlung" eine eigene Klasse. Wenn dann hast du eine Klasse Raumschiff mit den Methoden:
- fly
- land
- doHitTheEvilRedButtonWhichForcesASupernovaSelfDestruction

Wenn du Eigenschaften ausdrücken willst, dann arbeite mit Interfaces:

class Raumschiff implements FlyAble, SelfDestructAble

Vllt nochmal die Basics anschauen, erstmal mit Konsolenanwendungen zufrieden geben. Danach empfehle ich dir mal Quaxlis tutorial durchzuarbeiten.
 
H

HimBromBeere

Top Contributor
Du solltest auf jeden Fall einige Interfaces erstellen, wie bereits erwähnt ein FlyAble-Interface (das sind z.B. Raumschiffe, aber können auch Kometen oder Katzen sein (man staunt nicht schlecht, was man da sol alles finden kann...)). Dieses Interface schreibt Methoden wie fly, land, unload (Passagiere entladen) und die bereits erwähnte superNovaSelfDestructOnRedEvilButtonHit.

Methoden speichert man nicht in einem Array ab, das ist Blödsinn (zumahl das auch gar nicht mal soooo einfach ist für den Anfang...).
Alle deine Himmelsobjekte (Planeten, Raumschiffe, Katzen, ...) erben irgendwann auch von einer Superklasse SoaceObject, die z.B. eine Methode checkOnCollision(anderesSpaceObject) kennt (diese Methode hast du dann in allen Objekten am Himmel: Raumschiffe, Planeten, Katzen, Raketen...).
Ein Planet könnte eine Art statischer Himmelskörrper sein, der zusätzlich auch noch eine Methode zur Bevölkerung besitzt sowie eine doNotMoveToBeAsMeaninglessAsPossible().
 
Zuletzt bearbeitet:
G

Gast2

Gast
Also soo abwegig finde ich es nicht die Aktionen als eigene Klassen zu definieren, siehe strategy pattern. Dann könnte man auch

Methoden speichert man nicht in einem Array ab, das ist Blödsinn (zumahl das auch gar nicht mal soooo einfach ist für den Anfang...).
Blödsinn finde ich das nicht. Ich weiß zwar nicht wie genau das Spiel ablaufen soll, aber ich kenns so dass man Einheiten mehrere Befehle geben kann, wie bspw. "Fliege nach x", "Kolonisiere y", "Fliege nach z". Wenn man die Aktionen als eigene Klasse modelliert hat besitzt das Raumschiff einfach ne
Code:
List<Action>
.
 
T

Tomate_Salat

Gast
Sagt ja niemand was dagegen, dass eine Klasse/Interface nur eine Methode implementiert. Aber wenn der TO für jede Aktion eine eigene Klasse erstellt und diese noch "FliegeNach" nennt, dann verfehlt das wieder sein Ziel. FliegeNach, Koloniesiere,... sind geeignete Namen für Methoden, aber nicht für Objekte.

Es sollte nicht das Ziel sein, für jede Aktion eine eigene Klasse zu schreiben, sondern diese sinnig auszulagern.
 
S

Sphinx2k

Mitglied
Jetzt bin ich vollends verwirrt, und ich versuche noch mal etwas aufzuklären was ich meinte.
Aktuell hab ich eine Abstrakte Oberklasse Weltraumobjekt davon erbt die abstrakte Klasse BeweglichesWeltraumobjekt und davon ist ein Raumschiff abgeleitet.
Die Weltraumobjekt Klasse hat natürlich Sachen wie x,y Koordinaten, Methoden wie Draw() und co. BeweglichesWeltraumobjekt aktuell so etwas wie flugrichtung und geschwindigkeit.
Klar kann ich jetzt in der BeweglichesWeltraumobjekt Klasse eine MoveTo(WeltraumObjekt X) erstellen, oder ein Interface welches Methoden einbringt, die ich dann ausformuliere.
Dann brauche ich aber z.B. noch eine Liste welche mir die Aktionen speichert die geplant sind, eine Funktion Arbeitet diese liste dann ab und ruft die Passende Funktion auf.
Würde funktionieren möchte ich gar nicht absprechen.

Hätte ich ein Objekt "Flug" könnte ich dem Sachen wie.
Weltraumobjekt ziel;
double geschwindigkeit
. . . . .
und deine doIt() Methode mitgeben die das ganze ausführt.

Jetzt brauche ich nur eine Liste zu haben an der bei jedem neuen Befehl so ein neues Objekt angehängt wird welche dann abgearbeitet wird.
Mir kommt diese Variante immer noch "schlauer" vor, aber ich möchte in erster Linie ja was daraus lernen und mir dann doch lieber einen ordentlichen Stiel angewöhnen.
Ich bin auch über Tipps dankbar welche Literatur was Klassen Design angeht sinnvoll ist. Die meisten gehen aber auf das Prinzip ein, machen ein Mini bespiele und das war es, das Große Gesamtbild hat sich daraus noch nie für mich ergeben (Einer der Hauptgründe warum dieses Lernprojekt).
 
T

Tomate_Salat

Gast
Such mal nach dem Forum-user [c]Quaxli[/c] und lade dir das Tutorial aus seiner Signatur herunter. Da beschreibt er ganz gut, wie man 2D-Spiele entwickelt.

Wenn du das Beispiel mal durchgearbeitet und verstanden hast, wird denke ich dein Vorhaben um einiges klarer.
 
H

HimBromBeere

Top Contributor
und deine doIt() Methode mitgeben die das ganze ausführt.
OK, ich hab kapiert, was du willst, aber als wirklich sinnvoll erachte ich es immer noch nicht. Um die Aktionen - wie du sie nennst - in eine Liste zu speichern - musst du diese doch auch wenigstens vom Namen her kennen, formulieren musst du sie auch hin wie her, also was spricht gegen
Java:
BeweglichesObjekt Raumschiff = new Raumschiff();
Raumschiff.bewege();
Raumschiff.prüfeKollision(...);
Raumschiff.drueckDenBosenRotenKnopfundZerstoreDamitAllesLebenUndDasUniversum()
und für
Java:
List<Action> actions = new ArrayList<Action>;
actions.add(bewege);
actions.add(prüfeKollision (über Parameterübergaben musst du dir auch noch Gedanken machen...));
actions.add(drueckDenBosenRotenKnopfundZerstoreDamitAllesLebenUndDasUniversum);

raumschiff.arbeiteAb(actions);
Versteh ich ehrlich gesagt nicht...
 
S

Sphinx2k

Mitglied
Firephoenix seine Nachlese Tipps werde ich mir jetzt erst einmal durchlesen und erst danach weitermachen. Interessieren würde mich aber schon ob ich hier so auf dem Holzweg bin oder ich nur nicht richtig dargelegt hab wo ich das Problem sehe.
Das Tutorial von Quaxli kenn ich und das ist für sich gut aber kratzt leider nicht mal an was meine Überlegung/Problem ist.

HimBromBeere hat gesagt.:
Versteh ich ehrlich gesagt nicht...

Erst einmal spricht da natürlich gar nichts gegen das so zu machen. Wenn ich jetzt aber Aufträge in einer Warteschlange möchte muss ich mir ohnehin ein Array "warteschlange" bei meinem Raumschiff anlegen. Und für alle Sachen die das Raumschiff mal können soll eine Struktur erstellen. Einmal ist fliegeZu(WeltraumObjekt), einmal Lade 50t Rohstoff X ein, einmal LegeMinenfeld...
Also brauche ich ohnehin ein Array was all diese Werte/Objekte aufnimmt. Dann muss ich bei jedem Eintrag mit Switch/If die nötige Methode meiner Raumschiffklasse herausfinden und mit passenden Werten aufrufen.
Das ist entweder von mir zu Kompliziert gedacht oder es ist so kompliziert dann frage ich mich wo der vor teil liegen soll.
 
M

Marco13

Gesperrter Benutzer
OK, ich hab kapiert, was du willst, aber als wirklich sinnvoll erachte ich es immer noch nicht. Um die Aktionen - wie du sie nennst - in eine Liste zu speichern - musst du diese doch auch wenigstens vom Namen her kennen, formulieren musst du sie auch hin wie her, also was spricht gegen
Java:
BeweglichesObjekt Raumschiff = new Raumschiff();
Raumschiff.bewege();
Raumschiff.prüfeKollision(...);
Raumschiff.drueckDenBosenRotenKnopfundZerstoreDamitAllesLebenUndDasUniversum()
und für
Java:
List<Action> actions = new ArrayList<Action>;
actions.add(bewege);
actions.add(prüfeKollision (über Parameterübergaben musst du dir auch noch Gedanken machen...));
actions.add(drueckDenBosenRotenKnopfundZerstoreDamitAllesLebenUndDasUniversum);

raumschiff.arbeiteAb(actions);
Versteh ich ehrlich gesagt nicht...

Hm... Das eine ist hart verdrahtet und das andere nicht. Allgemein finde ich, so eine "Action"-Klasse (die vielleicht wegen Swing Actions anders heißen sollte) nicht nur sinnvoll, sondern u.U. geradezu notwendig. Abgesehen davon, dass man solche Aktionen ggf. in einer Liste im GUI darstellen will, und es praktisch sein könnte, wenn in der Liste das stehen würde, was bei [c]action.getDescription();[/c] (und ähnlichen Methoden, wie z.B. zur Abfrage der Zeit, wann die Aktion gestartet wurde, wie weit sie schon fortgeschritten ist usw) zurückgeliefert werden könnte, stellt sich beim Hartverdrahteten Ansatz die Fragen: Wie entfernt man die letzte Aktion, wenn man das Universum (warum auch immer :bahnhof: ) nun DOCH nicht zerstören will!?
 
Landei

Landei

Top Contributor
Sagt ja niemand was dagegen, dass eine Klasse/Interface nur eine Methode implementiert. Aber wenn der TO für jede Aktion eine eigene Klasse erstellt und diese noch "FliegeNach" nennt, dann verfehlt das wieder sein Ziel. FliegeNach, Koloniesiere,... sind geeignete Namen für Methoden, aber nicht für Objekte.

Es sollte nicht das Ziel sein, für jede Aktion eine eigene Klasse zu schreiben, sondern diese sinnig auszulagern.

Hier möchte ich widersprechen: Bei einem solchen Spiel kann es viele verschiedene Aktionsarten geben, die nicht bei jedem Schiff und auch nicht unter allen Bedingungen möglich sind (Kolonisieren können nur Kolonieschiffe, und auch nur dann, wenn sie vorher Leute an Bord genommen haben, schwer beschädigte Schiffe können nicht kämpfen u.s.w.). In einer Hierarchie lässt sich das schlecht abbilden, insbesondere wenn man erlauben will, dass der Spieler Schiffstypen relativ frei weiterentwickeln kann. Insofern erfordert die Klasse Schiff viel mehr Flexibilität als etwa ein normales Business-Objekt, und der TO tut sehr gut daran, das von Anfang an einzuplanen.
 
S

Sphinx2k

Mitglied
Kleiner zwischenstand bei meinem Testprojekt.
Nach viel grübeln und testen hab ich das ganze jetzt mit einer AbilityMoveTo Klasse gelöst welche wie alle Fähigkeiten dann von einer AbstractAbility abgeleitet werden. Dieser Ansatz bringt mir einfach die nötige Flexibilität.
Die Fähigkeit wird erstellt mit den nötigen Informationen und in einer Warteschlangen Liste gespeichert. Es wird immer die erste genommen und die darf arbeiten. Wenn die Fähigkeit erledigt ist setzt sie einen boolean done = true. und die Raumschiff klasse kickt sie aus der Warteschlange und nimmt sich die neue oberste Fähigkeit vor.

Und damit geht das ganze sehr locker und für mich schön strukturiert über die Bühne. Aktuell kann sich das Raumschiff nur bewegen, aber an sich sollte es auch mit anderen Aktionen wunderbar funktionieren.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Problem beim Aufbau des Spielfelds Spiele- und Multimedia-Programmierung 18
A Aufbau einer JOGL Anwendung Spiele- und Multimedia-Programmierung 12
S Aufbau meines Top Down Shooters Spiele- und Multimedia-Programmierung 10
S Aufbau für 2D Spiele Spiele- und Multimedia-Programmierung 7
0 Vorgehensweise Aufbau/Strategie Spiel Spiele- und Multimedia-Programmierung 14
O Suche Tutorial zum Aufbau von großen Spielen(mit Multiplayer über Netzwerk...) Spiele- und Multimedia-Programmierung 3
M Aufbau Spiel Spiele- und Multimedia-Programmierung 2
T Verständnisfrage zum Aufbau des Universe Spiele- und Multimedia-Programmierung 3
Arif Designproblem mit innere Klassen und Vererbung Spiele- und Multimedia-Programmierung 6
T Proplem (evtl. Klassen?) Spiele- und Multimedia-Programmierung 15
Y Applet für "Vier Gewinnt": Welche Klassen verwende Spiele- und Multimedia-Programmierung 10
T Kollisions Abfrage und Klassen design Spiele- und Multimedia-Programmierung 15
S Welche Klassen für ein 4 Gewinnt? Spiele- und Multimedia-Programmierung 6
N Array mit verschiedenen Klassen Spiele- und Multimedia-Programmierung 15
B Java3D Klassen können trotz Installation nicht benutzt werde Spiele- und Multimedia-Programmierung 6
BestGoalkeeper Deepmind Poker Bot für PokerStars konfigurieren? Spiele- und Multimedia-Programmierung 2
G Minecraft PlayerBot (Listener Thread für jeden Spieler?) Spiele- und Multimedia-Programmierung 3
K Wie bekomme ich eine Transition für alle Objekte zum stoppen? Spiele- und Multimedia-Programmierung 1
E Organisation für Game Spiele- und Multimedia-Programmierung 1
Excess Ballerfisch für Android Spiele- und Multimedia-Programmierung 3
coolian ich brauche irgendeine gui lib für lwjgl2 Spiele- und Multimedia-Programmierung 51
krgewb Anderer Algorithmus für Bounding Box Spiele- und Multimedia-Programmierung 9
M MP3 Dateien für Metadaten abgleichen Spiele- und Multimedia-Programmierung 0
Freshy Bot für Discord Spiele- und Multimedia-Programmierung 61
R Ideen für die Backend-Entwicklung eines Games gesucht Spiele- und Multimedia-Programmierung 8
trustlesseyes Mikrophon-/Audiosteuerung für einen Character Spiele- und Multimedia-Programmierung 1
P Tennis- Spielstand- Zähler für Schule programmieren Spiele- und Multimedia-Programmierung 6
M Logik für ein Quiz Spiele- und Multimedia-Programmierung 7
P Hilfe für Seminar Arbeit Spiele- und Multimedia-Programmierung 9
M Metadaten für Multimedia Daten ermitteln Spiele- und Multimedia-Programmierung 4
G Übungsprogramm für Matheaufgaben Spiele- und Multimedia-Programmierung 1
F Algorithmus für bessere Kollisionsabfragen Spiele- und Multimedia-Programmierung 10
S Bilder Für Schachfiguren Spiele- und Multimedia-Programmierung 14
Timo_neu_in_java Suche etwas einfaches für Anfänger Spiele- und Multimedia-Programmierung 6
S GUI erstellen für Text Adventure Spiele- und Multimedia-Programmierung 4
S Eigene Klasse vec_t - 3 oder 4 Einheiten für x, y, z und w Spiele- und Multimedia-Programmierung 11
R Vererbbarer GameLoop für Engine Spiele- und Multimedia-Programmierung 14
J Vektor für Gravitation erzeugen Spiele- und Multimedia-Programmierung 34
I Minecraft: Craftingrecipe für Braustand ändern Spiele- und Multimedia-Programmierung 9
Z Minimax-Algorithmus für TicTacToe Spiele- und Multimedia-Programmierung 5
H KI für Spiele Spiele- und Multimedia-Programmierung 1
S Pssende Datenstruktur für ein Netz Spiele- und Multimedia-Programmierung 5
S MouseEvents für Sprites Spiele- und Multimedia-Programmierung 3
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
K Bestes Bildformat für Spielegrafiken und deren Einbindung in Java Spiele- und Multimedia-Programmierung 2
J mehrere Listener für einen Button / Label Spiele- und Multimedia-Programmierung 1
C Port umleiten: lesen und schreiben für MCServer-Client über Skype Spiele- und Multimedia-Programmierung 0
J Musik Bibliothek für GUI Spiele- und Multimedia-Programmierung 7
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
R Ratschlag für 2D-3D Engine für die Spieleentwicklung gesucht Spiele- und Multimedia-Programmierung 4
Androbin KI für Verfolgung im Raster Spiele- und Multimedia-Programmierung 2
A Bot für Browsergame Spiele- und Multimedia-Programmierung 2
H Tutorials für Fortgeschrittene 3D-Anwedungen Spiele- und Multimedia-Programmierung 2
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
Furtano Vektoren für Bewegung für eine 2D-Simulation Spiele- und Multimedia-Programmierung 3
T Sinusgenerator für eine Hp Spiele- und Multimedia-Programmierung 8
J Menü für Snakespiel in einzelnem JFrame Spiele- und Multimedia-Programmierung 5
Guybrush Threepwood Ketzerische Frage: Opus-Codec für Java Spiele- und Multimedia-Programmierung 14
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
N Animationen für ein 2D game Spiele- und Multimedia-Programmierung 6
L Client für ein Browsergame Spiele- und Multimedia-Programmierung 21
Devil0s Swing Elemente für Inventar? Spiele- und Multimedia-Programmierung 9
Kenan89 Ansatzfrage: Kartenspiel für 2 Spieler Online Spiele- und Multimedia-Programmierung 3
F Ideen für spiel Spiele- und Multimedia-Programmierung 4
P Spielfeld für RPG Spiele- und Multimedia-Programmierung 15
Hoppelmann Alphamap (Bild) für 3D-Terrain generieren Spiele- und Multimedia-Programmierung 2
S Algorithmus zur Ressourcesuche für die KI Spiele- und Multimedia-Programmierung 5
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
K Einfache Engine für einfaches 3D gesucht Spiele- und Multimedia-Programmierung 10
C KI für Skatspiel - Wie können die Computerspieler eigenständig handeln? Spiele- und Multimedia-Programmierung 10
Kenan89 Kleines Projekt für Java Spiele- und Multimedia-Programmierung 5
M Empfehlungen für ein 2D-Jump'n'run Spiele- und Multimedia-Programmierung 4
A Grundlagensuche für Spiel Spiele- und Multimedia-Programmierung 8
C Wo ist der MP3 Plugin für JMF? Spiele- und Multimedia-Programmierung 3
sla89 Design Pattern gesucht für Spielregeln Spiele- und Multimedia-Programmierung 2
M Java als Programmiersprache für kommerzielle Spieleentwicklung? Spiele- und Multimedia-Programmierung 3
K Game Engine für selbstprogrammiertes Spiel Spiele- und Multimedia-Programmierung 27
Y Warum Thread für Spieleprogrammierung? Spiele- und Multimedia-Programmierung 27
A Music für Android game Spiele- und Multimedia-Programmierung 3
Gossi Probleme beim Laden der Images aus dem "Tutorial für Java-Spiele" Spiele- und Multimedia-Programmierung 4
Luk10 Tipps für bessere Animationen / Grafik Engine Spiele- und Multimedia-Programmierung 2
T 2D Menü für 3D Spiel Spiele- und Multimedia-Programmierung 5
T Grundlagenwissen für den 3D Raum Spiele- und Multimedia-Programmierung 6
I getSubImage sorgt für starken Performanceeinbruch Spiele- und Multimedia-Programmierung 6
M technologie für video, webcam & co Spiele- und Multimedia-Programmierung 25
C Java für große Spiele geeignet ? Spiele- und Multimedia-Programmierung 101
D Libraryempfehlung für Effekte Spiele- und Multimedia-Programmierung 3
B Spiele programmieren für ein Fenster? Spiele- und Multimedia-Programmierung 14
D Tabelle für Spiel Spiele- und Multimedia-Programmierung 3
N Grundlagen für ein Jump&Run Spiele- und Multimedia-Programmierung 3
S Datenbank gesucht für Bilder(gif-dateien) Spiele- und Multimedia-Programmierung 5
J Suche 3D Programm für jMonkeyEngine Spiele- und Multimedia-Programmierung 5
W 3D-APIs für Java - Eine Übersicht Spiele- und Multimedia-Programmierung 8
D Problem beim Öffnen einer PHP für eine Highscore Spiele- und Multimedia-Programmierung 5
S Game Client für kleine Competition Spiele- und Multimedia-Programmierung 3
F Programm für Bildbearbeitung gesucht: Skalieren und Speichern Spiele- und Multimedia-Programmierung 6
K Lösungsansätze für ein Spiel Spiele- und Multimedia-Programmierung 2
Plastagen Frameworls für Animationen und co Spiele- und Multimedia-Programmierung 3
aze Wie Transform3D für PosPathInterpolator bestimmen Spiele- und Multimedia-Programmierung 8
M Musik für Spiel wo downloaden? Spiele- und Multimedia-Programmierung 7

Ähnliche Java Themen

Anzeige

Neue Themen


Oben