Objekte eines Würfelspiels

Kackfohgel

Mitglied
Hallo,

ich programmiere gerade ein kleines Würfelspiel.

Ziel des Spiels ("Schlag den Raab" hat mich da auf die Idee gebracht) ist es möglichst schnell 50 Punkte zu erwürfeln. Man darf so lange würfeln, bis man eine 6 gewürfelt hat (dann gehen alle noch nicht gesicherten Punkte verloren) oder man seine Punkte sichert. In beiden Fällen ist dann erstmal der Gegner/Mitspieler an der Reihe.

Ich habe die Programmlogik zunächst einmal funktional programmiert mit zwei Klassen Spiel und Spieler. Nun habe ich versucht, dass Ganze etwas objektorientierter anzugehen und gleichzeitig in einer GUI zu verpacken. Bisher habe ich ein gutes Gefühl dabei auf dem richtigen Weg zu sein (jedenfalls habe ich derzeit eine funktionierende Vorabversion*). Woran es derzeit in erster Linie hapert ist mehr die Logik als der Code. Deshalb und da ich mich bisher noch nicht wirklich um Kapselung usw. gekümmert habe, möchte ich es auch erstmal ohne meinen bisherigen Code probieren.

Gehört eine Methode würfeln z. B. eher in eine Spielerklasse, wo die ermittelte Zufallszahl von 1 bis 6 direkt den Spielerattributen zugewiesen wird und die weiteren Aktionen (z. B. Spieler bei 6 auf Inaktiv setzen bzw. bei 1-5 eine Entscheidungsabfrage (Weiter?/Schieben?)) direkt in der Spielerklasse erfolgen oder wäre die Ermittlung der Zufallszahl eher die Aufgabe einer Klasse Würfel und der Spieler ruft eine Methode wuerfel.wuerfeln() auf und bearbeitet dann den Return (die Augenzahl) wie oben?

In diesem Fall wäre die Aufgabe der Klasse Würfel sehr einfach => Ermitteln der Zufallszahl (Ok, mit der GUI vlt. noch Aktualisierung des Fensters mit den aktuellen Augen evtl. mit einer kleinen Animation). Womit ich bei der nächsten Problematik wäre. Gehört die gesamte Darstellung des Würfels (paint) und der Spielernamen (JLabel) in die Klasse Spielfeld (JPanel) und aktualisiert das Würfeln lediglich das Spielfeld oder ist auch die Selbstdarstellung der Klassen eine Aufgabe die eher in die Klasse selbst gehört. Für Variante 1 spricht, dass alles was die Darstellung betrifft übersichtlich in einer Datei untergebracht ist. Objektorientiert könnte ich beides erklären:
Das Spielfeld-JPanel ist die Tafel und dort wird ja nicht der Spieler selbst drangenagelt sondern nur der Name angeschrieben. Auch wird dort nicht der Würfel festgeklebt sonder lediglich die aktuelle Augenzahl aufgemalt.
Auf der anderen Seite gehört zu den Eigenschaften des Objektes doch auch irgendwie das Aussehen und das spricht dafür, dass auch dieses in der Klasse selbst definiert wird.
Oder bin ich komplett auf dem Holzweg und das eine ist das Spielfeld, dass andere der Spieler oder der Würfel und dann gibt es noch ein Objekt Namensschild und Würfelanzeige oder Ähnliches?

Welche/wieviele Klassen/-aufteilung empfehlt ihr?

Ich hoffe, das kann man so abstrakt erklären/beantworten. Objektorientierung klingt theoretisch eigentlich so logisch und einfach, aber gerade als Anfänger neigt man doch schnell dazu (zumindest ist das bei mir so) prozessorientiert zu denken.

___
*Falls es für die Beantwortung hilfreich ist und ihr versprecht mich nicht zu hart ranzunehmen ;-) stelle ich meinen bisherigen Code natürlich gerne zur Verfügung
 
T

TryToHelp

Gast
Erstmal die Idee des Spiel klingt interessant,

Ich würde den Würfel als eigene Klasse machen, da es ja auch im realen Leben ein eigenes Objekt ist und man könnte so zum beispiel leicht das spiel varieren mit anderen würfeln, z.b. einem w20 oder w2 (ach mist das heißt dann ja Münze)

Generell würde ich Darstellung und Logik trennen, dann lässt sich leicht die GUI bzw. Darstellung ändern, aber nichts an der Logik, z.b. der Logig ist es egal, ob sie auf der Konsole, einer Gui, über das Netzwerk oder einer KI die aufrufe bekommt.

Aber das ist nur meine Meinung, ob diese gut ist oder nicht, sei mal dahin gestellt ;-)
 

Kackfohgel

Mitglied
Hallo und vielen Dank für deine Antwort.

Erstmal die Idee des Spiel klingt interessant,

Naja, die Idee ist wohl schon uralt und die Variante wird in Würfelclubs und Kneipen angeblich rauf und runter gespielt. Mich haben vor allem die relativ einfachen Regeln dazu bewogen, mich an diesem Spiel zu probieren.

Ich würde den Würfel als eigene Klasse machen, da es ja auch im realen Leben ein eigenes Objekt ist und man könnte so zum beispiel leicht das spiel varieren mit anderen würfeln, z.b. einem w20 oder w2 (ach mist das heißt dann ja Münze)

Die Wartung mögliche Änderungen/Ergänzungen hatte ich bisher bei dieser Entscheidung garnicht mit einbezogen, aber genau das hat mich jetzt überzeugt. Btw: Da fällt mir ein Kapitel in "Java von Kopf bis Fuß" ein, wo die das in einem lustigen Beispiel erklären bei dem ein Prozessorientierter gegen einem Objektorientierten antritt um bei der Chefin zu landen und der P0 zwar zu Beginn die Nase vorne hat, aber der OO durch die späteren Änderungswünsche schnell aufholt. Wie konnte ich das nur vergessen ... vlt. fehlt mir die gutaussehende Auftraggeberin ;-)

Generell würde ich Darstellung und Logik trennen, dann lässt sich leicht die GUI bzw. Darstellung ändern, aber nichts an der Logik, z.b. der Logig ist es egal, ob sie auf der Konsole, einer Gui, über das Netzwerk oder einer KI die aufrufe bekommt.

Das hört sich auch plausibel an und ist von Prinzip auch der Ansatz, den ich bisher verfolgt habe :)

Aber das ist nur meine Meinung, ob diese gut ist oder nicht, sei mal dahin gestellt ;-)

Vom Prinzip will ich ja auch Meinungen hören. Den Königsweg nach Rom gibt es hier vlt. nicht, aber bevor ich mich in die falsche Richtung aufmache, dürfen mir die erfahrenen Wanderer gerne ihren Weg nach Rom zeigen ;-)
 

Marco13

Top Contributor
Auch wenn man das für den Anfang und so ein "einfaches" Spiel nicht als unbedingte Empfehlung oder gar "Umsetzungsvorschrift" ansehen sollte, könntest du dir mal MVC (Model View Controller) ansehen. Gibt auch FAQ-Einträge dazu
 

Kackfohgel

Mitglied
Hallo Marco,

vielen Dank für deine Antwort.

Das MVC-Tutorial hatte ich schonmal gelesen. Werd es mir aber nochmal zu Gemüte führen. Denke, als ich es das erste mal studiert habe, war mir das noch zu theoretisch und ich wusste noch nicht wirklich, welche praktischen Vorteile mir das bringen kann. Ist halt auch schwierig, bei den ganzen Input im Selbststudium das wirklich relevante herauszufiltern und zu behalten :oops:

MfG
 

Marco13

Top Contributor
Wie angedeutet: Man kann bei MVC viel diskutieren und philosophieren (und das wird hier auch immer wieder gerne gemacht ;)) aber ... nur um zu verhindern, dass dann irgendwann die Zeile
class Würfel extends JLabel
irgendwo auftaucht ;)
 

Kackfohgel

Mitglied
... nur um zu verhindern, dass dann irgendwann die Zeile
class Würfel extends JLabel irgendwo auftaucht ;)

Du scheinst ein Hellseher zu sein :)
So sah meine Klasse wirklich noch aus (nur als ein Überbleibsel vom Ganzen hin und her probieren). Hab das jetzt schnell gelöscht (da es in der derzeitigen Version eh nicht mehr genutzt wurde), genauso wie die überflüssigen imports.

Hab jetzt auch beschlossen, erstmal aufzuräumen, die ganzen Auskommentierungen zu löschen, anständig zu Kapseln usw. .... bevor doch mal jmd. den Code sehen will. Vlt. blick ich dann auch selber wieder besser durch.
 

Kackfohgel

Mitglied
Beim Überarbeiten meines Programms fällt mir gerade auf, dass ich aus einer Klasse heraus eine Methode einer anderen Klasse aufrufe und dabei das (komplette) Objekt mit this übergebe.

chef.class
Java:
Knecht knecht = new Knecht();
int fruststufe = 8;
...
knecht.tuwas(this);
...

knecht.class
Java:
...
tuwas(Chef chef) {
 if(chef.fruststufe > 10) { /* tue ich was */ } else { /* so tun als ob */ }
}
...

Eigentlich brauche ich für die derzeitige Methode ja lediglich die Fruststufe und könnte die Methode auch anpassen und nur knecht.tuwas(this.fruststufe); aufrufen. Das hätte erstmal den Vorteil, dass ich den Knecht nicht mit den ganzen anderen Problemen/Attributen des Chefs zumülle und er sich auf seine Arbeit konzentrieren kann. Auf der anderen Seite macht es Anpassungen einfacher, weil ich für mehr benötigte Informationen lediglich die tuwas-Methode des Knechtes anpassen muss.

In meinem Fall kommt noch hinzu, dass ich die Fruststufe zur Weiterverarbeitung in einen String umwandeln muss (für die Ausgabe in einem JLabel) und hier stellt sich die Frage, wo ich den Fruststufen-Wert caste, wenn ich nicht das komplette Chefobjekt übergebe: Bereits den gecasteten Wert übergeben oder in der Methode casten?

Vlt. ist beides am Ende wieder eine Geschmacksfrage, aber ich würde gerne eure Meinungen dazu hören.


____
Ich hoffe, dass Beispiel ist jetzt nicht allzu blöd, aber ein Schöneres ist mir jetzt auf die Stelle nicht eingefallen.
 
T

TryToHelp

Gast
Wie angedeutet: Man kann bei MVC viel diskutieren und philosophieren (und das wird hier auch immer wieder gerne gemacht ;)) aber ... nur um zu verhindern, dass dann irgendwann die Zeile
class Würfel extends JLabel
irgendwo auftaucht ;)

Das war ja auch mein Vorschlag, zwar nicht ganz so groß wie MVC, die Logig und die Darstellung zu trennen ;-)

Zu deiner Frage, also ich würde dann nur die Fruststufe, als nicht das ganze Objekt übergeben, da der Knecht garnicht das wissen haben muss über das andere Objekt.
Das Casten würde ich bei dem Knecht, als der aufgerufenen Funktion machen, weill dann muss der Chef nicht wissen, was der Knecht will, sondern rein mit seinem Objekt so arbeiten wie er es kennt ;-)
 

Landei

Top Contributor
Wahrscheinlich zu spät, aber ich würde vorschlagen, die erste Version eines solchen Spiels immer erst auf der Konsole umzusetzen. Da kommt man gar nicht erst in Versuchung, Programmlogik mit GUI zu vermanschen.
 
Zuletzt bearbeitet:

Kackfohgel

Mitglied
Hi Landei,

du wirst lachen, aber meine erste Zwei-Klassen-Version (Spiel, Spieler) war auf der Konsole (mit Ausnahme der Abfrage, ob nochmal gewürfelt oder geschoben werden soll mittels JOptionPane). Hatte mir das dann auch relativ einfach vorgestellt mit der Erweiterung um eine grafische Ausgabe. Aber aus der Vorstellung einfach ein, zwei weitere Klassen für die grafische Darstellung zu erstellen, bin ich dann schnell in die Realität zurückgeholt worden, da die Konsolenversion relativ unsauber und nicht wirklich objektorientiert war. Wollte dann das "aufräumen" und die GUI in einem Schritt machen und da steck ich jetzt gerade mittendrin bzw. seid eurer Hilfe gestern sehe ich schon Licht am Ende des Tunnels.

Bin guter Dinge das Spiel am Wochenende fertig stellen zu können. Habe aber schon neue Features im Kopf - so schnell werdet ihr mich nicht los ;-)

MfG
 
T

TryToHelp

Gast
... bzw. seid eurer Hilfe gestern sehe ich schon Licht am Ende des Tunnels.

Bin guter Dinge das Spiel am Wochenende fertig stellen zu können. Habe aber schon neue Features im Kopf - so schnell werdet ihr mich nicht los ;-)...

Das freut mich, das dir die Hilfe weiterhilft, ohne das man dir den ganzen Code direkt vorkauen muss, sondern du wirklich nur ideen / inputs suchst und diese dann selber umsetzt und scheinbar mit spaß dabei bist, was ein wichtiger teil ist, beim Erlernen des Programmierens.

Das hört sich doch gut an, kannst ja wenn du es soweit hast ja mal Zeigen, was du hast, würde mich interessieren und helfe auch gerne weiter wenn ich kann =)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Methoden Einzelne Objekte eines Vectors addieren Java Basics - Anfänger-Themen 10
T Auf Objekte innerhalb eines Panels zugreifen Java Basics - Anfänger-Themen 9
D Initialisierung von Klassen-Objekte Java Basics - Anfänger-Themen 47
W Objekte erzeugen Httprequest oder Httpclient Java Basics - Anfänger-Themen 3
G Kann Arrays.stream() auch auf Objekte angewant werden? Java Basics - Anfänger-Themen 40
krgewb Über Objekt, das Objekte desselben Typs enthält iterieren Java Basics - Anfänger-Themen 5
I Zapier -> wie werden Objekte gespeichert? Java Basics - Anfänger-Themen 10
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
K Hab ich dass so richtig erklärt (Objekte und Referenzen)? Java Basics - Anfänger-Themen 5
J Objekte in JSON speichern?? Java Basics - Anfänger-Themen 1
I Objekte in ShareProject speichern um später zu nutzen Java Basics - Anfänger-Themen 4
J Objekte Java Basics - Anfänger-Themen 22
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
Hzrfa Objekte, Referenz Java Basics - Anfänger-Themen 5
T 3D Objekte verarbeiten Java Basics - Anfänger-Themen 2
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
E Objekte löschen Java Basics - Anfänger-Themen 9
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
B Objekte verschwinden beim Übersetzen Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
G Übergeordnete Objekte abrufen Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
B Objekte, bspw. konkret Arraylists,manuell aus Speicher löschen? Java Basics - Anfänger-Themen 70
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
Spandeli8 Erzeugte Objekte gegenüber Bildern hervorheben in Java Processing Java Basics - Anfänger-Themen 1
J Zwei Objekte vergleichen Java Basics - Anfänger-Themen 8
L Werte von Objekte addieren Java Basics - Anfänger-Themen 14
U Objekte in LinkedList löschen und editieren Java Basics - Anfänger-Themen 14
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
G Methoden Informationen aus zwei Objekte bekommen? Java Basics - Anfänger-Themen 6
P Globale Objekte Java Basics - Anfänger-Themen 2
C Nachträglich neue grafische Objekte hinzufügen Java Basics - Anfänger-Themen 7
D Interaktion zweier Objekte Java Basics - Anfänger-Themen 5
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
S Objekte indiziert erstellen Java Basics - Anfänger-Themen 27
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
A (Objekte Java Basics - Anfänger-Themen 6
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
G Java Objekte auf Duplikate testen Java Basics - Anfänger-Themen 4
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
M Objekte miteinander vergleichen Java Basics - Anfänger-Themen 18
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
J Java GUI- Objekte Position per Quelltext bestimmen Java Basics - Anfänger-Themen 4
G Objekte in Methoden? Java Basics - Anfänger-Themen 13
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
K Boolean in einer Methode um 2 Objekte zu vergleichen Java Basics - Anfänger-Themen 12
I Objekte Hilfe Java Basics - Anfänger-Themen 8
G Klassen und Objekte Java Basics - Anfänger-Themen 2
W Verschachtelte Objekte wieder auspacken Java Basics - Anfänger-Themen 3
R Attribute mehrerer Objekte ausgeben Java Basics - Anfänger-Themen 3
C Objekte und Konstruktoren Java Basics - Anfänger-Themen 2
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
O ObjectOutputStream Anzahl Objekte festhalten Java Basics - Anfänger-Themen 17
R Objekte aus Array als String + kommasepariert speichern Java Basics - Anfänger-Themen 12
X Objekte einer ArrayList richtig ausgeben? Java Basics - Anfänger-Themen 8
J Best Practice Dateiinhalte validieren und auf Objekte mappen Java Basics - Anfänger-Themen 3
B Automatisch Objekte erzeugen mit verschiedenen Namen Java Basics - Anfänger-Themen 4
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
PaperHat Objekte in Array vergleichen Java Basics - Anfänger-Themen 9
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
PaperHat Programmieraufgabe - Objekte in Objekten Java Basics - Anfänger-Themen 2
E Methode mit Parametern um Objekte zu übergeben Java Basics - Anfänger-Themen 4
V Collections Objekte einer ArrayList in der main() ausgeben Java Basics - Anfänger-Themen 9
T Klassen Klassenübergreifende Objekte erstellen lassen Java Basics - Anfänger-Themen 5
A Objekte verknüpfen Java Basics - Anfänger-Themen 2
M Objekte mit einer Schleife mehrmals erzeugen Java Basics - Anfänger-Themen 17
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
S Zählen der Zeiger auf Objekte Java Basics - Anfänger-Themen 35
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
B Erste Schritte Objekte von JFrame der Fenstergröße anpassen Java Basics - Anfänger-Themen 3
M Klassen und Objekte Java Basics - Anfänger-Themen 2
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Array Objekte einer Klasse zuordnen Java Basics - Anfänger-Themen 15
H Interface Objekte speichern und laden (serialisieren/deserialisieren) Java Basics - Anfänger-Themen 1
Orkanson Objekte in ein Array einfügen Java Basics - Anfänger-Themen 5
X Objekte in ArrayList einfügen Java Basics - Anfänger-Themen 10
L Vorherige Objekte zählen und ausgeben Java Basics - Anfänger-Themen 11
Orkanson Objekte und Klassen Java Basics - Anfänger-Themen 8
R Objekte zur Laufzeit in Schleife erzeugen und in ArrayList ablegen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben