Mosaik Spiel

sarun

Mitglied
Guten Tag
Hab eine frage bezüglich der Point Klasse.
Ich habe s oein Mosaik Spiel gemacht z.B 5x5 Würfelfelder die man aufdecken kann kennen bestimmt welche.

Zur frage, wie kann ich die einzelnen würfel mit point speichern? Ich kann ja keine Coordinaten benutzen.
Ich habe die Felder im Code mit zeile und spalte deklariert. Irgendwie häng ich hir fest :bahnhof:

public void setLocation()
 
Ein Point ist eine Abstaktion einer Koordinate eines Pixels. Ich glaube nicht, dass es das ist, was Du suchst. Ich denke, es ist sinnvoller, sich ein Layout zu suchen, mit dem man bequem 5x5 Felder tabellarisch andordnen kann (evtl. GridLayout) und dann auf diesen Feldern Images zu platzieren. D.h. Du brauchst jetzt nur noch 6 verschiedene Bilder für die verschiedenen Augenzahlen....
 
Allso so sehen bei mir ein teil der Klassen aus
Jetzt muss ich über die Metode getStatiskInfo die anzahl der versuche sowie der Reihe nach alle angeklickten Felder ausgeben.
z.B zeile 4 / spalte 3
zeile 0 / spalte 2 usw
Jemmand ein Tipp wie ich das speichern kann?

Java:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Panel;

public class FarbMosaik extends Panel {


	private MosaikEventHandler eventHandler;
	private ModelIF model;
	public MosaikEventHandler getEventHandler(){
		return eventHandler;
	}

	public FarbMosaik(int raster, int breite, Color farbeRueckseite, Color farbeVorderseite) {
		model = new MosaikModel (raster, raster);
		eventHandler = new MosaikEventHandler (model);
		this.setLayout(new GridLayout(raster, raster, 1, 1));
		int canvasBreite=breite/raster;

		for (int i=0; i< raster; i++) {
			for (int j=0; j< raster; j++) {
				MosaikCanvas mc = new MosaikCanvas(i, j, farbeRueckseite, farbeVorderseite);
				mc.addMouseListener(eventHandler);
				model.putObj(i, j, mc);
				mc.setSize(canvasBreite, canvasBreite);
				this.add(mc);
			}
		}
	}
}
Java:
public class MosaikModel implements ModelIF {

	MosaikIF [] [] mObjects;
	protected int zeilen, spalten;

	public MosaikModel(int zeilen, int spalten) {
		this.zeilen=zeilen;
		this.spalten=spalten;
		mObjects = new MosaikIF[zeilen][spalten];



	}

	public void switchNachbarn(int zeile, int spalte) {
		// erste Zeile: Mitte, links, rechts
		if (zeile-1 >=0){
			invert(zeile-1, spalte);
			if (spalte-1 >=0)
				invert (zeile-1, spalte-1);
			if (spalte+1 < spalten)
				invert(zeile-1, spalte+1);
		}
		// zweite Zeile: links, rechts
		if (spalte-1 >=0)
			invert(zeile, spalte-1);
		if (spalte+1 < spalten)
			invert(zeile, spalte+1);
		// dritte Zeile: Mitte, links, rechts
		if (zeile+1< zeilen) {
			invert(zeile+1, spalte);
			if (spalte-1 >=0)
				invert(zeile+1,spalte-1);
			if (spalte+1 < spalten)
				invert (zeile+1, spalte+1);
		}

	}
	public void action(int zeile, int spalte){
		this.switchNachbarn(zeile, spalte);
	}
	public void invert(int zeile, int spalte) {
		mObjects[zeile] [spalte].switchSeite();
	}
	public void putObj(int zeile, int spalte, MosaikIF mObj) {
		mObjects [zeile][spalte] = mObj;
		}


}
Java:
public class StatistikModel implements ModelIF {

	private int versuche;
	public StatistikModel() {
	}
	public void action(int zeile, int spalte) {
		versuche++;
	}
	public String getStatistikInfo(){
	String returnString = "Anzahl Versuche: ";
		returnString += versuche;
		returnString += "\n";
		return returnString;
	}
	public void putObj(int zeile, int spalte,MosaikIF mObjc) {
		// in diesem Model kein Implementierungsbedarf
	}
}
Java:
public interface ModelIF {
	public void action(int zeile, int spalte);
	public void putObj(int zeile, int spalte, MosaikIF mObj);
}

Java:
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.util.Hashtable;
import java.util.Enumeration;


public class MosaikEventHandler implements MouseListener {


	Hashtable modelTable;
	Object key;

	public MosaikEventHandler(ModelIF model){
		modelTable = new Hashtable();
		addModel(model);

}
	private int zeile, spalte;
	public void mouseReleased(MouseEvent me)    {
		zeile=((MosaikIF)me.getSource()).getZeile();
		spalte=((MosaikIF)me.getSource()).getSpalte();

		Enumeration enum = modelTable.keys();
			while(enum.hasMoreElements()) {
			key=enum.nextElement();
			((ModelIF)modelTable.get(key)).action(zeile, spalte);
		}
	}
	public void mouseClicked(MouseEvent me){}
	public void mouseEntered(MouseEvent me){}
	public void mouseExited(MouseEvent me){}
	public void mousePressed(MouseEvent me){}

	public void addModel(ModelIF model) {
		key=new Integer(model.hashCode());
		modelTable.put(key, model);
	}
	public ModelIF removeModel(ModelIF model) {
		key=new Integer(model.hashCode());
		return (ModelIF)modelTable.remove(key);
	}
}
 
auf beliebige Weise, erstelle eine Klasse Zug, speichere Objekte davon in einer Liste,
oder nimm normalere Roh-Daten, etwa einen String

bei jedem Vorgang ein neuer Eintrag,
 
die Kästchen an sich hast du mit [c]MosaikIF [] [] [/c] doch schon,
ansonsten wäre eine Wiederholung der Frage nicht besonders charmant,
oder inwiefern habe ich bestimmte Details nicht berücksichtigt?

einfach nur 'ich nix wissen, häh'-Fragen sind allgemein die schlimmsten,
versuche jede Frage lang und ausführlich zu stellen, mit tausenden zu bedenkenden Details, hunderten Beispielen, zig versuchten Varianten, Fehlermeldungen und allem drum und dran
(Idealversion, nicht zwanghaft sehen 😉 )
 
Ich weiß jetzt nicht ob ich meine frage richtig verstanden habe, "warte auf Antwort".
Aber bis jetzt hab ich ein 4x4 Kästchen, also 4 spalten und 4 zeilen.
Wie könnte man jetzt das Kästchen oben links in der ecke speichern?

Also sowas wie Kästchen1 = zeile0 , spalte0 / kästchen2 = zeile0, spalte1
 
ich verstehe deine Frage auch nicht, was bedeutet es 'ein Kästchen zu speichern'?
wenn es dir noch um die grundsätzliche Initialisierung des Programmes geht, dann bestimmt die Ablage im Array die Position,
> putObj(int zeile, int spalte, MosaikIF mObj)
scheint mir dazu weit gediegen, die Doppel-Schleife in FarbMosaik-Konstruktor macht doch alles?

oder geht es dir wie danach dann einmal erwähnt um eine Dokumentation der im Programmverlauf durchgeführten Züge?
all diese Worte darf man auch verwenden zur eindeutigen Beschreibung einer Frage

beantwortet habe ich es freilich schon, wegen der allgemeinen Verwirrung wiederhole ich es noch ein wenig,
aber grundsätzlich ist das vollkommen sinnlos, schon gesagt:
erstelle z.B. eine Klasse Zug, mit beliebigen internen Aufbau, int-Attribute, String-Attribute usw.,
während du einen Zug durchführst, lege alle relevanten Informationen im Zug-Objekt ab,
merke dir alle Züge in einer Liste

wie könnte bei so einem einfachen Vorgang, spätestens nachdem ich ihn schon erwähnt habe, an sich eine Frage offen sein?
wenn du alles implementierst und Fehler auftreten usw. sind Detail-Fragen natürlich immer möglich
 
Directupload.net - 2r8iq3l3.jpg

So siht das aus und es soll eine statistische Auswertung hinzugefügt werden über die Method getStatistikInfo welches wie offt angeklickt wurde.
Ich weiß es ist ganz einfach aber irgendwie fehlt mir zurzeit der start also die deklaration.

Hoffe das bild siht man
 
Zuletzt bearbeitet:
die einfachste Variante ist ein Zähler, eine int-Variable,
bei jeder Aktion oder was auch immer den Zählerstand erhöhen, so dass du später
'20 Aktionen wurden ausgeführt' oder ähnliches als Statistik vermelden kannst

auch zu dieser um 95% vereinfachten Variante des Problems keinerlei Ideen außer große Fragezeichen?
 
keine Schleife, jede Aktion ist doch ein ActionListener, oder ein MouseListener, mouseReleased() sehe ich oben,

da machst du schon komplizierte Sachen, zwei Bilder vertauschen oder was auch immer,
und nun nur noch zusätzlich count++; eine Variable um 1 erhöhen,

Ergebnis: du kannst dir zu jeder Zeit die Variable count anschauen, wenn sie auf 17 steht, dann wurde wohl 17x irgendwas gemacht,
das ist eine Information, für die Statistik

was kann daran schwer sein?

wenn du das begriffen hast, kann man danach komplizierter arbeiten, statt nur count zu zählen
für jede Aktion z.B. einen String "diesmal habe ich .. + .. vertauscht", diese Strings in einer Liste sammeln,
bei jeder Aktion einen String erstellen und ablegen
 
in der statistik hab ich ja qwasi den zähler für maus klicks wie oft geklickt wurden.
Ich möchte wissen wie ich die einzelne Felder speichern kann und der reihe nach ausgebn.
 
ich verstehe nicht was du willst, kannst du das nicht eindeutig mit Worten oder Beispielen beschreiben, Zustand vorher/ nachher?
jetzt bist du wieder einmal bei 'einzelne Felder speichern', was bedeutet das, was ändert sich wo und wie?
willst du A) das Programm bedienen, was immer dabei überhaupt passiert, willst du bei einem Mausklick in der GUI eine Änderung bewirken,
z.B. in einem Memomy-Spiel eine Karte umdecken

oder geht es dir B) GRUNDLEGEND um was anderes, wie ich die ganze Zeit halb vermute, funktioniert dein Programm schon bestens,
geht es dir allein darum, eine Aktion zu dokumentieren, Informationen abzuspeichern so dass später in einer Statistik ausgegeben werden kann
"Spielschritt 27: zu Zeitpunkt xy klickte der User auf Feld z, das wurde von sichtbar auf nicht sichtbar gedreht"
(um bei meinem Memory zu bleiben)

ich weiß nicht wovon du redest,
"wie ich die einzelne Felder speichern kann und der reihe nach ausgebn" kann alles mögliche bedeuten
 
Es geht um B. Es soll wiedergegeben werden in der Statistik follgendes.

versuch: 10 zeile 4 / spalte 3
zeile 0 / spalte 2
zeile 2 / spalte 2
usw

aber vorher muss das ja gespeichert werden auf welches Kästchen man geklickt hat.

Und in dem Beispiel wäre ja Kästchen 1 z.B zeile 0 / spalte 0.
 
also weiter im bisherigen Weg,
ich hoffe du hast das mit der count-Variable gemacht/ bisschen nachvollzogen,

statt der count-Variable kommt wie gesagt eine Liste,
statt count++; kommt ein add() für die Liste, etwas einfügen,
als relativ einfache Variante ein String "zeile .. / spalte ..." den du an dieser Stelle, beim add() zusammenbaust,
die Informationen, Zeilennummer usw. werden an dieser Stelle ja wohl vorhanden sein

Ergebnis: eine Liste mit "zeile 4 / spalte 3", "zeile 0 / spalte 2" usw., damit weißt du dann hoffentlich etwas anzufangen


unvermeidbare Standardfrage: was ist daran nun schwer?
na, kann man wirklich ignorieren 😉
 
da wo count war, z.B. in der Klasse MosaikEventHandler, falls es nicht mehrere Handler gibt
(schlecht, dann wären es mehrere Listen mit je nur Teil-Daten),

kann auch erstmal eine 'public static'-Variable sein, dann überall möglich wie 'System.out',
ist irgendeiner zentralen Klasse,

wie eine Liste zu erstellen ist ist für sich Standardwissen
 
ich habe mir nur irgendwas ausgesucht, dein Programm kannte ich nicht so genau

Java:
    private int versuche;

    public void action(int zeile, int spalte) {
        versuche++;
    }
uiui, das ist ja mal genau die richtige Stelle, und ich rede noch lange neu über einen counter, hast du doch schon,
ruhig hinweisen wenn ich nur Stuss erzähle/ nicht genau nachschaue, je mehr Infos desto besser

also hier ein neues Attribut Liste,
und diese Methode ist prädestiniert, einen String "zeile .. / spalte ..." mit den Parametern zusammenzubauen
und diesen in die Liste einzufügen
 

Zurück
Oben