Java Minesweeper feinschliff

Dr.Kaya

Cadet 2nd Year
Registriert
Nov. 2010
Beiträge
19
Hallo Zusammen

vielleicht könnt ihr mir ja bei meinem Problem helfen.
Ich habe für die Uni nun ein kleines Minesweeper programmiert.
Sowet läuft auch alles sehr gut.

Es erstellt ein 2d Array mit von denen jedes ein Spielfeld ist :

Code:
public class Minesweeper extends JApplet implements MouseListener {

	static int anzahlMinen;
	static int anzahlKaestchen;
	static int anzahlSichereFelder;
	
	private Feld[][] felder = new Feld[10][10];;

ich versuche nun zwei Dinge:

1.: Die Feldgröße erst bei Spielbeginn vom Benutzer
festlegen zu lassen.

Code:
	private void Settings() {

		String inputValue1 = JOptionPane.showInputDialog("Wieviel Kästchen ? (X*X)");
		String inputValue2 = JOptionPane.showInputDialog("Wieviel Bomben ?");

		anzahlKaestchen = (int) (Double.valueOf(inputValue1).doubleValue());
		anzahlMinen = (int) (Double.valueOf(inputValue2).doubleValue());

Wenn ich nun die 10er beim erstellen des Feldes durch anzahlKaestchen ersetze
klappt das leider nicht. Das Feld wird anscheinend erstellt bevor in Settings anzahlKaestchen
oder anzahlMinen festgelegt werden.

Bei den Minen ist das nicht schlimm aber bei den
Kaestchen halt schon ^^ Settings steht ganz oben in meiner init.

2.: Bei Spielende möchte ich zwei Möglichkeiten anbieten, entweder ein neues Spiel zu beginnen oder das Spiel zu beenden... wie wäre dies möglich ? Und wenn ja wie ?

Code:
		if (Feld.anzahlAufgedeckt == anzahlSichereFelder) {
			JOptionPane.showMessageDialog(null, "Sie haben gewonnen!",
					"Sieg!", JOptionPane.INFORMATION_MESSAGE);	
		} else {
			JOptionPane.showMessageDialog(null,"Sie haben leider verloren!",
					"Niederlage!",JOptionPane.ERROR_MESSAGE);
		}

Hat jemand eine Idee ?

Grüße Kaya
 
In Java kann man Arrays nicht dynamisch erweitern.

Hierfür gibt es z.B. die ArrayList, die Du dafür nutzen kannst.
Am besten einmal Google hierzu befragen, da gibts gute Hinweise und Codebeispiele, wie man die ArrayList benutzt.

Gruß,

8utch0r
 
Gibt es eine Möglichkeit anzahlKaestchen festzulegen bevor das Array angelegt wird ?
Das würde mein eines Problem ja auch schon lösen...

Grüße

Kaya
 
Dr.Kaya schrieb:
Gibt es eine Möglichkeit anzahlKaestchen festzulegen bevor das Array angelegt wird ?
Das würde mein eines Problem ja auch schon lösen...

Wenn Breite und Höhe feststehen kannst du doch einfach ein neuse Array zuweisen. Im Moment initialisierst du es ja direkt bei der Deklaration.


Du könntest es erstmal auf null bleiben lassen und später, nach der Abfrage erst, dann neu zuweisen.

Code:
public class Minesweeper extends JApplet implements MouseListener {

	static int anzahlMinen;
	static int anzahlKaestchen;
	static int anzahlSichereFelder;
	
	private Feld[][] felder = new Feld[10][10];;


Hat jetzt nichts direkt mit dem Thema zu tun, aber du solltest kein static verwenden. Das sind Klassenmember und keine Objektmember.

Das führt dazu, dass alle Objekte der Klasse immer den gleichen Wert in anzahlMinen ... anzahlSichereFelder sehen. Ändert ein Objekt den Wert, wird er für alle sichtbar mitgeändert.

Also weg mit dem static und ein ordentliches private hin :)
 
Zuletzt bearbeitet: (Beitrag wiederhergestellt)
kannst du mir erklären wie du das gemeint hast banthor,
also das mit den arry initalisieren,
ich versteh nicht ganz wie das aussehen soll

und ich habs mal auf private geändert ^^
Ergänzung ()

ok Problem 1 hab ich gelöst...

Code:
	public void init() {
		Settings();
		felder = new Feld[anzahlKaestchen][anzahlKaestchen];

Code:
	private int anzahlMinen;
	private int anzahlKaestchen;
	private int anzahlSichereFelder;
	
	private Feld[][] felder;

so naheliegend =(

hat jemand eine idee zu meinem zweiten Problem ?

also kann mir jemand den Befehl sagen um das alte Fenster zu schliessen ?
 
Zuletzt bearbeitet:
Du schreibst das ganze ja als Applet (Warum eigentlich, das ist schon seit Jahren veraltet?).

Ein Applet ist meines Wissens ja schon ein Fenster und dieses verwendest du doch auch um das Feld zu zeigen oder?

Ich glaube diese Appletfenster kann man gar nicht wirklich schließen. Was du stattdessen machen könntest wäre das Fenster zu recyclen. Also alle Elemente entfernen und dann nochmal von vorne alles wieder aufbauen.
 
also ich schreibe den ganzen Spass überhaupt nur weil ichs von der Uni her machen muss und
die haben einem das halt so vorgegeben.

Ja das Spielfeld habe ich in einem Fenster, mein Problem ist weniger das neue Spiel da kann ich einfach das
alte Fenster verwenden.
Aber wie bring ich das Programm dazu das Fenster zu schliessen falls der Benutzer nicht weiter spielen möchte ?

Grüße
 
Benutzt du den AppletViewer oder schaust dir das ganze im Browser an?

Im Browser (eigentlich die natürliche Umgebung eines Applets) macht es glaube ich gar keinen Sinn das Fenster zu schließen, da ja der Bildbereich für das Applet reserviert ist.


Normalerweise kannst du Fenster schließen indem du

setVisible(false);

auf das Fenster (in diesem Fall das Applet) aufrufst.
 
also ich mach das ganze in eclipse ...
ich drück da oben auf start und dann gehts ab ^^
Ergänzung ()

bin auch in den weiten des www nicht fündig geworden, wäre eh nur ein kleiner Zusatz gewesen.
Die Aufgabenstellung habe ich auch so mehr als erfüllt...

Danke dir für deine Hilfe

Grüße Kaya
 
Zurück
Oben