Zum Inhalt springen

Im Kreis coden ...


Adrian_S

Empfohlene Beiträge

Hi !

Ich hab mal wieder ein komisches Problem :) Bin grad dabei ein Spiel zu programmieren , nix besonderes (Memory). Praktisch funktiert das Spiel ohne Probleme. Nur bin ich grad an einen Punkt gestoßen wo ich einfach nicht weiter komme. Ich hab folgenden Klassenaufbau:

MemoryMain (Erzeugt ein neus Objekt von MemoryFrame)

MemoryFrame (Erzeugt ein neues Objekt von MemoryTimeAttack)

MemoryTimeAttack (Erzeugt ein neues Objekt von MemoryField

MemoryField (Erzeugt mehrere neue Objekte von MemoryCard)

MemoryCard

Ich werde nur ausschlaggebende Teile des Codes hier Posten weil sonst wird das bißchen zuviel :)

MemoryMain:


package Memory;

...

public class MemoryMain {


	public static void main(String[] args) {

		MemoryFrame memory = [B]new MemoryFrame();[/B]

		memory.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		memory.setVisible(true);

	}

}

MemoryFrame:

package Memory;

...

public class [B]MemoryFrame[/B] extends [B]JFrame[/B] {

....

public class MenuListener implements ActionListener {

....

			if (event.getActionCommand().equalsIgnoreCase("time attack")) {

				setEnabled(false);

				MemoryTimeAttack memory_timeattack = [B]new MemoryTimeAttack();[/B]

				memory_timeattack.addWindowListener(new MemoryWindowListener());

				memory_timeattack.setVisible(true);

			}		

		}

	}

...

MemoryTimeAttack:

package Memory;

public class [B]MemoryTimeAttack[/B] extends [B]JFrame[/B] {


...

	private MemoryField field = new MemoryField(title);

...

	[B]public void isGameEnd() [/B]{

		if(field.getRightFlippedCards() == ((field.getFieldSize() * field.getFieldSize())/2)){

			System.out.println("DAS SPIEL IST VORBEI !!");

			field.isGameEnd = true;

			[B][U]showDone();[/U][/B]

		}else

			field.isGameEnd = false;

	}


	[B][U]public void showDone()[/U][/B] {

		setEnabled(false);

		MemoryTimeAttackDone done = new MemoryTimeAttackDone();

		done.addWindowListener(new MemoryDoneWindowListener());

		done.setVisible(true);

	}


	public class MemoryDoneWindowListener implements WindowListener {


		public void windowOpened(WindowEvent e) {}

		public void windowClosing(WindowEvent e) {

			setEnabled(true);

			e.getWindow().dispose();

		}

		public void windowClosed(WindowEvent e) {}

		public void windowIconified(WindowEvent e) {}

		public void windowDeiconified(WindowEvent e) {}

		public void windowActivated(WindowEvent e) {}

		public void windowDeactivated(WindowEvent e) {}

	}

...

MemoryField:

package Memory;

public class MemoryField extends [B]JPanel[/B]{

...

	[B]static int rightFlippedCards;[/B]

	[B]static boolean isGameEnd;[/B]


...	

	[B]static void setEndGameVariables() {[/B]

		 rightFlippedCards = MemoryCard.rightFlippedCards;

		 isGameEnd = MemoryCard.isGameEnd;

		 if(gameType.equals("Time Attack")) [B][U]MemoryTimeAttack.isGameEnd();[/U][/B]

	}


	public int getFieldSize() {

		return fieldSize;

	}


	public int getRightFlippedCards() {

		return rightFlippedCards;

	}


	public boolean isGameEnd() {

		return isGameEnd;

	}

...

MemoryCard:

package Memory;


public class MemoryCard extends [B]JPanel[/B]{

...

	[B]static boolean isGameEnd = false;[/B]

	[B]static int rightFlippedCards = 0;[/B]

...

public class MemoryCardListener implements ActionListener {


		public void actionPerformed(ActionEvent e) {

                  ...

				[B]MemoryField.setEndGameVariables();[/B]

		  ...

	}

...	

Ich rufe in MemoryCard die static methode setEndGameVariables von MemoryField auf. Diese setzt dann die static Instanzvariablen von MemoryField und ... führt die static methode isGameEnd von MemoryTimeAttack aus. Das ist mein Problem: Wenn ich die Methode isGameEnd static mache kann ich dann die Methode showDone() nicht aufrufen weil diese public ist. Ich kann die showDone() methode aber auch nicht static machen sonst kann ich setEnabled(false) nicht ausführen ... und ich muß in der Klasse MemoryTimeAttack das fenster done vom typ MemoryTimeAttackDone erstellen sonst kann ich kein Windowlistener damit verknüpfen.

Ich hoffe ihr versteht meine Problematik ... ich vermute dass ich das ohne Großes umstrukturieren nicht lösen kann.

Ich bin für jeden der sich da reingelesen hat und antwortet sehr Dankbar !

Gruß Adrian !

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ähm...

das ist kein programmiertechnisches Problem sondern ein Fehler in der Architektur.

1. Was macht eine isGameEnd-Methode in der Klasse MemoryTimeAttack?

2. Was macht isGameEnd in einer Memory-Karte?

3. Was macht ein rightFlippedCards in der Klase Memory-Karte ?

Du solltest das ganze nochmal überdenken...denn so ist es nicht korrekt.

- gameEnd gehört in den GameController

- rightedFlippedCards in die Model-Klasse

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi danke für die Antwort !

Ich hab mir das schon so gedacht, das ganze um zustrukturieren. Aber bevor ich anfange alles umzuschreiben wollte ich nochmal 100% sicher gehen, ob es nicht doch eine lösung gibt das so zu realisieren.

ich prüf doch jedesmal die memorykarte ob das spiel vorbei ist ... wo soll ich das denn sonst prüfen ? da jede karte ein JButton ist, versehen mit einem actionlistener.

Theoretisch müßte ich das ja im JFrame prüfen (weil in diesem das Spielfeld existiert), aber auf welches ereignis soll ich denn dann warten und reagieren ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ohne jetzt besserwisserisch klingen zu wollen (aber vermeiden lässt sich das leider nicht)... Software-Entwicklung beginnt mit Konzeptarbeit. Und wenn die gewissenhaft durchgeführt wurde, können einem kaum noch Fehler beim Programmieren passieren.

Tut mir Leid, dass das jetzt nicht sehr konstruktiv war.

Aber du weißt ja sicherlich...

48e482d2191922ce99bdd8b8dfdfc69c0.png

Beste Grüße & viel Erfolg beim Umwürfeln deines Memory-Spiels!

Arvid.

Link zu diesem Kommentar
Auf anderen Seiten teilen

alles klar... danke für die antworten ... werde das ganze Ding umkrempeln ... wenn ich das soweit geschafft hab werd ich dann hier mal den link zum spiel posten ! ;)

p.s.: das ist eine studienaufgabe in dem fach Softwareengineering ;) peinlich was :)

werd mich in der Vorlesungsfreien zeit drum kümmern und was dazu lernen ;)

Gruß Adrian

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...