Ich weiß nicht, wie ich meinen Code richtig designen soll und komme nicht weiter

nik.stffrs

Mitglied
Hallo,
Nach nun endlosen Versuchen komme ich trotzdem nicht dahin wo ich hin möchte. Ich bin momentan dabei ein kleines Spiel zu programmieren, jedoch weiß ich nicht wie ich dieses richtig designen soll. Im Internet bin ich auch noch nicht viel weiter gekommen und deswegen frage ich jetzt hier. Also, Ich habe eine GameMain Klasse:

Java:
public class GameMain {

public GameMain() {
    new GameFrame();
}

}

Diese ruft die Klasse GameFrame auf:
Java:
public class GameFrame extends JFrame {

public GameFrame() {
    new GameLabel(this);
}

}

Diese ruft wiederum die Klasse GameLabel auf:
Java:
public class GameLabel extends JLabel {

private GameFrame gameFrame;

public GameLabel(GameFrame gameFrame) {

}
@Override
public void paintComponent(Graphics g) {

}
}

Jetzt habe ich eine Player Klasse von der ich ein Objekt zeichnen lassen möchte:
Java:
public class Player {

public Player() {

}

public void paintPlayer(Graphics g) {

}

}

Jetzt ist mein Problem, dass ich die Verlinkung der beiden Klassen nicht richtig hinbekomme. Ich hatte vorher folgendes Modell:
Java:
public class GameMain {

private GameFrame frame;
private GameLabel label;
private Player player;

public GameMain() {
    frame = new GameFrame(this);
    label = new GameLabel(this, frame);
    player = new Player(this);
}
public GameFrame getFrame() {
    return frame;
}

public GameLabel getLabel() {
    return label;
}

public Player getPlayer() {
    return player;
}

}
und hatte dann dementsprechend meine GameLabel Klasse:
Java:
ublic class GameLabel extends JLabel {

private GameMain main;

public GameLabel(GameMain main) {
    this.main = main;
}
@Override
public void paintComponent(Graphics g) {
    main.getPlayer().paintPlayer(g);
}
}
Allerdings wurde mir gesagt, dass es so wie Ich es gemacht habe kein guter Stil ist. So wie ich es verstanden habe, gebe ich den einzelnen Klassen zu viel Sichtbarkeit untereinander. Nun weiß ich jedoch nicht, wie ich dann meinen Player zeichnen soll. Irgendwie muss dieser ja auf mein Label kommen.

Vielen Dank für eure Antworten!
 

mihe7

Top Contributor
Mal ganz allgemein zu Swing:
  1. So lange Du eine Komponente nicht um Funktionalität erweiterst, brauchst Du keine Vererbung. Das gilt insbesondere für JFrame.
  2. Du musst Komponenten den jeweiligen Containern hinzufügen (Methode add())
Allerdings wurde mir gesagt, dass es so wie Ich es gemacht habe kein guter Stil ist.
Das war aber sehr freundlich formuliert ;) Du hast jetzt eine wunderbare zirkuläre Abhängigkeit: GameMain ist von GameLabel abhängig und umgekehrt.

Der Bezeichner GameLabel ist auch nicht glücklich gewählt. Man könnte damit ja alles mögliche verbinden, aber doch nicht, dass irgendwelche Spieler gezeichnet werden sollen.

Was für eine Art Spiel soll das denn werden? Was soll GameLabel denn nun eigentlich sein?
 

nik.stffrs

Mitglied
Mal ganz allgemein zu Swing:
  1. So lange Du eine Komponente nicht um Funktionalität erweiterst, brauchst Du keine Vererbung. Das gilt insbesondere für JFrame.
  2. Du musst Komponenten den jeweiligen Containern hinzufügen (Methode add())

Das war aber sehr freundlich formuliert ;) Du hast jetzt eine wunderbare zirkuläre Abhängigkeit: GameMain ist von GameLabel abhängig und umgekehrt.

Der Bezeichner GameLabel ist auch nicht glücklich gewählt. Man könnte damit ja alles mögliche verbinden, aber doch nicht, dass irgendwelche Spieler gezeichnet werden sollen.

Was für eine Art Spiel soll das denn werden? Was soll GameLabel denn nun eigentlich sein?
Erstmal vielen Dank für die Antwort,
Es soll so ein kleines Tile Game werden. Ich dachte mir in der Klasse GameMain programmiere ich sozusagen den Haupt Timer, der alles immer wieder updatet. Die Klasse GameLabel sollte dazu genutzt werden den ganzen Spaß dann zu zeichnen. Also nicht nur den Spieler, sondern auch Hintergrund und Weiteres. Die GameLabel Klasse soll dann sozusagen immer die verschiedenen game states abfragen (damit meine ich sowas wie im Hauptmenü oder Im Spiel) und auf Basis dieser States das Spiel zeichnen. Ich hoffe das war jetzt verständlicher ausgedrückt. Wie man wahrscheinlich merkt ist dieses Spiel das Erste, welches ich komplett selber programmiere. Ich hatte vorher schon mit Hilfe von Youtube ein kleines Spiel programmiert, in welchem alles statisch geschrieben wurde (Es gab eine Klasse Var die alle möglichen Werte des Spiels in statischen Variablen gehalten hat. Das hat auch super funktioniert und man könnte schön von überall aus auf die Variablen zugreifen, aber dann hab ich erfahren, dass diese Vorgehensweise wohl nicht so super ist ;D).
 

mihe7

Top Contributor
Es soll so ein kleines Tile Game werden.
Ok. Du solltest das Spiel erstmal ohne UI modellieren. Das UI ist nur zur Interaktion mit dem Benutzer da.

Die GameLabel Klasse soll dann sozusagen immer die verschiedenen game states abfragen (damit meine ich sowas wie im Hauptmenü oder Im Spiel) und auf Basis dieser States das Spiel zeichnen.

Menü und Spielfeld in einer Komponente? Das ist keine gute Idee. Mach eigene Komponenten daraus und verwende im JFrame ein CardLayout, dann kannst Du hin und her schalten und hast die Teile voneinander getrennt.

Zurück zum GameLabel (evtl. wäre Matchfield passender?) und Player:
Java:
public class GameLabel extends JLabel {
    private Player player;
    public GameLabel(Player player) {
        this.player = player;
    }

    @Override
    protected void paintComponent(Graphics g) {
        player.paint(g);
    }
}
Das wäre eine Möglichkeit. Wie kommt das Ding in einen Frame?

Java:
public class Game {
    public void start() {
        Player player = new Player();
        GameLabel label = new GameLabel(player);
        JFrame frame = new JFrame();
        ...
        frame.add(label);
        frame.setVisible(true);
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Game().start());
    }
}

Ich hatte vorher schon mit Hilfe von Youtube ein kleines Spiel programmiert, in welchem alles statisch geschrieben wurde
:(
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
B Fehler, aber ich weiß nicht warum Java Basics - Anfänger-Themen 3
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
M Weiß nicht, wie ich es nennen soll. Java Basics - Anfänger-Themen 1
J Vererbung Kleiner Fehler, weiß aber nicht warum und wo Java Basics - Anfänger-Themen 9
M ArrayList - remove() löscht nicht! - weiß nicht wieso! Java Basics - Anfänger-Themen 8
H Variable ändert wert und ich weiß nicht warum Java Basics - Anfänger-Themen 3
O unexpected type - weiß nicht weiter! Java Basics - Anfänger-Themen 3
J Wert wird überschrieben, weiß nicht wieso Java Basics - Anfänger-Themen 2
I Weiß einfach nicht mehr weiter... Java Basics - Anfänger-Themen 3
X Ich weiß, wo der Fehler ist, kann ihn aber nicht beheben Java Basics - Anfänger-Themen 2
H contains (für LIST) funktioniert nicht - ich weiß nicht warum? Java Basics - Anfänger-Themen 7
N ich weiß nicht weiter. Java Basics - Anfänger-Themen 13
M java.lang.IndexOutOfBoundsException weiß nicht warum Java Basics - Anfänger-Themen 8
X Weiß nicht weiter! Java Basics - Anfänger-Themen 73
H Fehler: NullPointerException und ich weiß net warum Java Basics - Anfänger-Themen 4
G Weiß jemand wie man dieses Programm schreibt? Java Basics - Anfänger-Themen 84
A Fenster bleibt weiß Java Basics - Anfänger-Themen 7
B Signatur erstellen - Bild ist nur weiß Java Basics - Anfänger-Themen 0
M JavaFX: Fenster bleibt weiß Java Basics - Anfänger-Themen 3
N Erste Schritte HSV color space - schwarz und weiß nur anhand von Saturation oder Multiplikator ermitteln Java Basics - Anfänger-Themen 14
J GUI wird direkt nach dem erstellen weiß übermalt Java Basics - Anfänger-Themen 3
R weiß jemand warum Java diesen Fehler ausspuckt? "Variable might not hav been initialized" Java Basics - Anfänger-Themen 4
B JList wird nach Ändern weiß Java Basics - Anfänger-Themen 11
P Paket einbinden: Mal Braun, mal weiß Java Basics - Anfänger-Themen 2
U Animation bleibt leer (weiß) Java Basics - Anfänger-Themen 5
F Servlets, Formulare und ich weiß keine Lösung Java Basics - Anfänger-Themen 4
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
S Wie debugge ich dies am besten: SingleThreadExecutor führt Task nicht aus..? Java Basics - Anfänger-Themen 29
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
missy72 Erste Schritte (nicht) Deterministischer endlicher Automat Java Basics - Anfänger-Themen 9
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
C Kann mir jemand sagen warum ich nicht mal rechnen kann ? Java Basics - Anfänger-Themen 32
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
J Meine Mails gehen nicht raus Java Basics - Anfänger-Themen 8
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben