Feedback zu kleinem Spiel

Spencer Reid

Mitglied
Hey zusammen,

ich habe mich an einem kleinen Memory-Spiel versucht, und hätte gerne einmal Feedback dazu.

Ich habe versucht so gut es geht das MVC Prinzip zu beachten und einfach mal mich mit dem Oberserver Pattern zu beschäftigen.


Über jeden Hinweis bzw. über jede Kritik wäre ich dankbar :)

Entweder hier:

https://github.com/spencerreidhere/JavaFx


oder hier:

Code:
package application;



import controller.MemoryController;

import gui.MemoryBoard;

import javafx.application.Application;

import javafx.scene.Scene;

import javafx.scene.layout.BorderPane;

import javafx.stage.Stage;



public class Main extends Application {

@Override

public void start(Stage primaryStage) {

try {

primaryStage.setTitle("Memory --v0.1SNAPSHOT");



final BorderPane root = new BorderPane();

final Scene scene = new Scene(root, 801, 838);

scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());



new MemoryBoard(root, new MemoryController());



primaryStage.setScene(scene);

primaryStage.show();



} catch (final Exception e) {

e.printStackTrace();

}

}



public static void main(String[] args) {

launch(args);

}

}

Code:
package controller;

import java.util.Observable;

import gui.Card;

public class MemoryController extends Observable {

    private Card firstCard;
    private Card secondCard;
    private boolean checkTime;

    public MemoryController() {
    }

    public Card getFirstCard() {
        return firstCard;
    }

    public void setFirstCard(Card firstCard) {
        this.firstCard = firstCard;
    }

    public Card getSecondCard() {
        return secondCard;
    }

    public void setSecondCard(Card secondCard) {
        this.secondCard = secondCard;
    }

    public void check() {
        setChanged();
        notifyObservers();
    }

    public boolean isCheckTime() {
        return checkTime;
    }

    public void setCheckTime(boolean checkTime) {
        this.checkTime = checkTime;
    }

}
Code:
package gui;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Observable;
import java.util.Observer;

import controller.MemoryController;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;

public class MemoryBoard implements Observer {

    private final Card[][] boardCards = new Card[4][4];
    private final Pane pane = new Pane();
    private final MemoryController memoryController;
    private final BorderPane borderPane;

    public MemoryBoard(final BorderPane borderPane, final MemoryController memoryController) {
        this.borderPane = borderPane;
        this.memoryController = memoryController;

        memoryController.addObserver(this);

        addTop();
        addCenter();
    }

    private void addTop() {
        final HBox hBox = new HBox();
        hBox.setPadding(new Insets(5));
        hBox.setSpacing(10);
        hBox.setStyle("-fx-background-color: #336699;");

        final Button button = new Button("Neues Spiel");
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                for (final Card[] cards : boardCards) {
                    for (final Card card : cards) {
                        card.setValue("");
                    }
                }
            }
        });

        hBox.getChildren().add(button);
        borderPane.setTop(hBox);
    }

    private void addCenter() {
        final List<Integer> memoryIds = Arrays.asList(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8);
        Collections.shuffle(memoryIds);
        Integer memoryId = 0;

        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                final Card card = new Card(memoryIds.get(memoryId), memoryController, this);
                memoryId++;
                card.setTranslateX(j * 200);
                card.setTranslateY(i * 200);
                pane.getChildren().add(card);
                boardCards[j][i] = card;
            }
        }
        borderPane.setCenter(pane);
    }

    protected void disable(final boolean disable) {
        for (final Card[] cards : boardCards) {
            for (final Card card : cards) {
                card.setDisable(disable);
            }
        }
    }

    @Override
    public void update(Observable o, Object arg) {
        if (memoryController.getFirstCard().getValue().equals(memoryController.getSecondCard().getValue())) {
            memoryController.getFirstCard().setFound();
            memoryController.getSecondCard().setFound();
        } else {
            memoryController.getFirstCard().setValue("");
            memoryController.getSecondCard().setValue("");
        }
    }

}

Code:
package gui;

import controller.MemoryController;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.geometry.Pos;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.util.Duration;

public class Card extends StackPane {
    private final Text text = new Text();
    private final Rectangle border;

    public Card(final Integer memoryId, MemoryController controller, final MemoryBoard memoryBoard) {
        border = new Rectangle(200, 200);
        border.setFill(null);
        border.setStroke(Color.BLACK);

        text.setFont(Font.font(72));

        setAlignment(Pos.CENTER);
        getChildren().addAll(border);
        getChildren().addAll(text);

        setOnMouseClicked(event -> {
            text.setText("M " + memoryId);
            if (!controller.isCheckTime()) {
                controller.setFirstCard(this);
                controller.setCheckTime(true);
            } else {
                memoryBoard.disable(true);
                // wait 0,5 second
                final Timeline tl = new Timeline(new KeyFrame(Duration.millis(500), e -> {
                    controller.setSecondCard(this);
                    controller.check();
                    controller.setCheckTime(false);

                    memoryBoard.disable(false);
                }));
                tl.setCycleCount(1);
                tl.play();
            }
        });

    }

    public String getValue() {
        return text.getText();
    }

    public void setValue(final String text) {
        this.text.setText(text);
    }

    public void setFound() {
        border.setFill(Color.GREENYELLOW);
    }

}


Vielen Dank!

spencerreidhere
 

krgewb

Top Contributor
Dazu braucht man noch die Datei application.css:
Java:
/* JavaFX CSS - Leave this comment until you have at least create one rule which uses -fx-Property */

Wie dem auch sei. Dein Programm hat mehrere Fehler:
- Wenn ich auf "Neues Spiel" klicke werden die grünen Felder nicht wieder grau.
- Wenn ich ein Feld zweimal anklicke wird es grün.
 
Zuletzt bearbeitet:

Spencer Reid

Mitglied
Vielen Dank für das Feedback!

Dazu braucht man noch die Datei application.css:
Java:
/* JavaFX CSS - Leave this comment until you have at least create one rule which uses -fx-Property */

Stimmt, ich habe dort allerdings nichts weiter gemacht, deswegen hatte ich nicht dran gedacht.



Habe beides gefixt und das repo aktualisiert!

Ist die Struktur des Programmes sonst soweit okay?
 

krgewb

Top Contributor
Ich bin mitten im Spiel. Ich habe bereits einige grüne Felder. Wenn ich jetzt ein weißes Feld anklicke und dann ein grünes, dann verschwindet der Text von beiden!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
6 Best Practice Feedback zu Service / JUnit Tests Java Basics - Anfänger-Themen 3
Vivien Bitte um Optimierungsvorschläge / Verbesserungsvorschläge / allgemeines Feedback Java Basics - Anfänger-Themen 8
J Erste Schritte Feedback zum ersten Anfängerprogramm Java Basics - Anfänger-Themen 6
T Erste Schritte Feedback erwünscht Java Basics - Anfänger-Themen 2
A Feedback zum Spiel Java Basics - Anfänger-Themen 5
C Bitte kurzes Feedback - JavaVersionen Java Basics - Anfänger-Themen 6
U Primfaktorzerlegung m. kleinem Fermat-Satz Java Basics - Anfänger-Themen 4
J Finde Fehler bei kleinem Programm nicht Java Basics - Anfänger-Themen 3
J Brauch kurz hilfe bei nem kleinem Zahlenschloss Programm. :) Java Basics - Anfänger-Themen 12
G Frage zu kleinem Java Programm Java Basics - Anfänger-Themen 4
C Hilfe bei kleinem java programm Java Basics - Anfänger-Themen 4
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
I Threads Spiel gol Java Basics - Anfänger-Themen 6
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
J ArrayList vergleichen im spiel Mastermind Java Basics - Anfänger-Themen 2
enesss tictactoe spiel Java Basics - Anfänger-Themen 5
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
berserkerdq2 Spiel hängt sich immer in der 4 Runde auf, obwohl ich jede Runde das gleiche mache Java Basics - Anfänger-Themen 1
Ekooekoo Hilfe spiel Java Basics - Anfänger-Themen 5
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
Kennewick Basketball Spiel Ergebnisse Java Basics - Anfänger-Themen 11
X Erste Schritte Hilfe bei einem kleinen Spiel. Java Basics - Anfänger-Themen 19
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
R Hangman-Spiel-zufälliges Wort ermitteln Java Basics - Anfänger-Themen 4
JEP1 Java Dialog Fenster schließen Spiel Java Basics - Anfänger-Themen 0
I Simples Risiko-Spiel Java Basics - Anfänger-Themen 5
Hallolu Pong-Spiel: Schläger schneller werden lassen Java Basics - Anfänger-Themen 9
M Java Spiel wie Wer wird Millionär Java Basics - Anfänger-Themen 1
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
C Java Spiel Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
B Memory Spiel Java Basics - Anfänger-Themen 29
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
Kamy Ein einfaches "Vier Gewinnt" Spiel für Anfängerin Java Basics - Anfänger-Themen 51
A Breakout-Spiel , Ball mit Platten abprallen lassen Java Basics - Anfänger-Themen 1
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
Olis Erste Schritte Simples Memory Spiel möglich? Java Basics - Anfänger-Themen 1
J Spiel mit Button klick starten Java Basics - Anfänger-Themen 9
C Rekursives Backtracking beim Spiel Peg Java Basics - Anfänger-Themen 22
M Spiel programmieren Java Basics - Anfänger-Themen 16
kokojamboo92 Spiel programmieren Java Basics - Anfänger-Themen 1
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
I Spiel Java Basics - Anfänger-Themen 34
H ein einfaches Tic Tac Toe Spiel Java Basics - Anfänger-Themen 1
I Spiel programmieren. Java Basics - Anfänger-Themen 16
B Hilfe bei Escape - Spiel Java Basics - Anfänger-Themen 6
S Java-Spiel Java Basics - Anfänger-Themen 2
M Nim-Spiel geht in den negativen Bereich Java Basics - Anfänger-Themen 1
K Klassen Registrierungsseite für ein Spiel Java Basics - Anfänger-Themen 6
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 3
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 2
M Brauche Tipps für ein Spiel Java Basics - Anfänger-Themen 4
S Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur Java Basics - Anfänger-Themen 2
Mxxxt Mosaik Spiel - Steuerpanel wird nicht angezeigt Java Basics - Anfänger-Themen 5
M Erste Schritte Zufallszahl Spiel Problem Java Basics - Anfänger-Themen 7
Z Erste Schritte Kleines 2D. Spiel Objekt Bewegung funktioniert nicht Java Basics - Anfänger-Themen 2
H Spiel Kniffel: Gesamtes Array untersuchen. Java Basics - Anfänger-Themen 15
Tacofan Hangman als fertiges Spiel Java Basics - Anfänger-Themen 7
M Array und Objektorientierung? - TicTacToe Spiel Java Basics - Anfänger-Themen 43
C Klassen Sudoku-Spiel Werte werden nicht gesetzt Java Basics - Anfänger-Themen 4
K Kleines Spiel auf Java programmieren Java Basics - Anfänger-Themen 2
W Tic Tac Toe Spiel ohne Arrays Java Basics - Anfänger-Themen 7
S Im objektorientiertem "Spiel" kämpfen Java Basics - Anfänger-Themen 3
I Klassen Umsetzungsfrage zu Spiel "Zuul" Java Basics - Anfänger-Themen 3
F Mastermind Spiel Java Basics - Anfänger-Themen 9
H Liste ausgeben (Spiel Hey Fisch (software-challenge) ändern Anzahl Fische) Java Basics - Anfänger-Themen 1
F Game-Engine für textbasierendes Spiel: Architektur? Java Basics - Anfänger-Themen 9
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2
J Java Spiel Zufallsauswahl für Zugbeginn Java Basics - Anfänger-Themen 3
J Frage Antwort Spiel - Wie Zeitcountdown realisieren? Java Basics - Anfänger-Themen 2
L Erste Schritte Spiel: Glückliches Sieben Java Basics - Anfänger-Themen 3
T Hangman spiel Java Basics - Anfänger-Themen 5
J 2 Pc's - Spiel gegeneinander ?! Java Basics - Anfänger-Themen 3
V Spiel Programmieren Java Basics - Anfänger-Themen 9
P 2D-Spiel und Bildschirmgröße Java Basics - Anfänger-Themen 2
O Methoden Fehlermeldung(Illegal start of expression) bei 4-Gewinnt-Spiel Java Basics - Anfänger-Themen 5
T Blöcke für ein Jump and Run Spiel Java Basics - Anfänger-Themen 8
S 2D-Spiel mit Threads... Java Basics - Anfänger-Themen 3
S 2D-Spiel im Vollbild an größe anpassen? Java Basics - Anfänger-Themen 3
M hangman spiel Java Basics - Anfänger-Themen 1
K JTextField in ein Spiel einfügen Java Basics - Anfänger-Themen 2
S Mosaik Spiel Java Basics - Anfänger-Themen 19
pinar memory spiel Java Basics - Anfänger-Themen 10
T OOP Mein erstes Java-Spiel - Schiffe versenken! Java Basics - Anfänger-Themen 2
K Erste Schritte Wie mache ich weiter? (Spiel-Menü) Java Basics - Anfänger-Themen 9
C Java Applet in html. Pong - old school Spiel Java Basics - Anfänger-Themen 10
J Variablen Invalid Character - Error -> Spiel mit Variablenergebnissen Java Basics - Anfänger-Themen 8
K Schere Stein Papier Spiel Java Basics - Anfänger-Themen 3
F Hilfe bei meinem Spiel Java Basics - Anfänger-Themen 3
C Lotto Spiel Java Basics - Anfänger-Themen 23
Jagson Dotcom Spiel - Dots Random setzen Java Basics - Anfänger-Themen 8
Dogge Farben-Spiel Java Basics - Anfänger-Themen 20
K Diverse Bugs in einem Snake Spiel Java Basics - Anfänger-Themen 4
2 Lotto-Spiel Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben