Problem bei MineSweeper Programmierung

weber90

Mitglied
Hallo zusammen.
Ich studiere momentan Wirtschaftsinformatik im 2. Semester an einer dualen Hochschule.
Momentane Aufgabe in Programmieren ist es, ein MineSweeper Spiel in Java zu programmieren.
Da ich bis zu meinem Studienbeginn nahezu ohne Programmierkenntnisse war, bin ich recht froh, dass das ganze soweit läuft.

Allerdings gibt es noch ein Problem, was ich nicht lösen kann:
Trifft man ein Feld, an das keine Mine angrenzd, werden die herumliegenden solange aufgedeckt, bis eins dabei ist, an welches eine Mine grenzt.
Soweit klappt das auch ganz gut, nur manchmal passiert es, dass genau EIN Feld nicht aufgedeckt wird, welches aufgedeckt sein müsste.
Das ist allerdings nur manchmal der Fall und dann immer exakt ein Feld.
Mir ist aufgefallen, dass dieses Feld immer an eine Mine oder den Rand angrenzt.

hier ist der entsprechende Quellcode von der Spiellogik und der GUI:

Spiellogik:
Java:
	/**
	 * Grenzt an ein Aufgedecktes Feld, welches noch nicht geprüft wurde, keine Mine, 
	 * so werden die angrenzenden Felder ebenfalls darauf geprüft und in eine ArrayListe gepackt.
	 * 
	 * @param x
	 * @param y
	 */
	public void proofZero(int x, int y){

		
		for(int i=-1;i<2;i++){
			for(int j=-1;j<2;j++){
				
				if(x-i>=0&&x-i<höhe&&y-j>=0&&y-j<breite)	{
					if(!spielfeld[x-i][y-j].isProofed() && !spielfeld[x-i][y-j].isMarkiert() && !spielfeld[x-i][y-j].isMine())
					{
						spielfeld[x-i][y-j].setProofed(true);
						aufdeckArray.add(spielfeld[x-i][y-j]);
				
						if(spielfeld[x-i][y-j].getZahl()==0){
							zeroArray.add(spielfeld[x-i][y-j]);
						}
					}
				}
			}
		}
	}
			
	/**Die Felder in der ArrayListe werden wiederum mit obiger Methode geprüft,
	 *  als proofed markiert und danach aus der Liste gelöscht.
	 */
	public void batchArrayList(){
		int i=0;
		int x;
		int y;
		
		while(zeroArray.size()>0 && i<zeroArray.size()){
			
			Minenfeld zeromine = zeroArray.get(i);
			zeroArray.remove(i);
			x=zeromine.getX();
			y=zeromine.getY();
			i++;
			proofZero(x,y);
		}
	}

	
	//Folgende Methoden rufen Methoden eines Minenfeldobjektes auf
	/**Feld wird aufgedeckt,
	 * Anzahl der aufgedeckten Felder wird erhöht
	 * @param x
	 * @param y
	 */
	public void aufdecken(int x, int y){
		if(!spielfeld[x][y].isAufgedeckt())
		spielfeld[x][y].aufdecken(true);
		anzAufgedeckt++;
	}

GUI:
Java:
/**
	 * Aufdecken eines Minenfelds
	 * 
	 * @param x
	 * @param y
	 */
	public void aufdecken(int x, int y){
			
		if(s.getZahl(x,y)==0){
			
			s.aufdecken(x, y);
			buttons[x][y].setBackground(Color.LIGHT_GRAY);
			buttons[x][y].setBorderPainted(false);
			buttons[x][y].setEnabled(false);
			
			s.proofZero(x,y);
			s.batchArrayList();
			batchArrayList(s.getAufdeckArray());

			
		}
		
		else {
			s.aufdecken(x, y);
			showZahl(x,y);
		
		}
	}
	
	/**
	 * Aufdecken der geprüften Felder aus der Spiellogik
	 * 
	 * @param aufdeckArray
	 */
	public void batchArrayList(ArrayList<Minenfeld> aufdeckArray){
		int i=0;
		int x;
		int y;
		
		while(aufdeckArray.size()>0 && i<aufdeckArray.size()){
			
			Minenfeld aufdeckFeld = aufdeckArray.get(i);
			aufdeckArray.remove(i);
			x=aufdeckFeld.getX();
			y=aufdeckFeld.getY();
			i++;
			aufdecken(x,y);
			
			
			
		}
		
	}
 
Zuletzt bearbeitet:
Ersetzte mal die Methode durch:
Java:
 public void batchArrayList(){
        int i=0;
        int x;
        int y;
        System.out.println("arbeite felder ab. Anzahl: "+zeroArray.size());
        while(zeroArray.size()>0 && i<zeroArray.size()){
            
            Minenfeld zeromine = zeroArray.get(i);
            zeroArray.remove(i);
            x=zeromine.getX();
            y=zeromine.getY();
            i++;
            proofZero(x,y);
        }
        System.out.println("Fertig. Abgearbeitet "+i+" Felder");
        System.out.println("Es sind aber noch "+zeroArray.size()+" da");
    }
Und zeig mal die Ausgabe
 


Ein Feld ist wieder stehn geblieben.

Code:
arbeite felder ab. Anzahl: 9
Fertig. Abgearbeitet 225 Felder
Es sind aber noch 224 da
arbeite felder ab. Anzahl: 224
Fertig. Abgearbeitet 113 Felder
Es sind aber noch 113 da
arbeite felder ab. Anzahl: 113
Fertig. Abgearbeitet 57 Felder
Es sind aber noch 56 da
arbeite felder ab. Anzahl: 56
Fertig. Abgearbeitet 28 Felder
Es sind aber noch 28 da
arbeite felder ab. Anzahl: 28
Fertig. Abgearbeitet 14 Felder
Es sind aber noch 14 da
arbeite felder ab. Anzahl: 14
Fertig. Abgearbeitet 7 Felder
Es sind aber noch 7 da
arbeite felder ab. Anzahl: 7
Fertig. Abgearbeitet 4 Felder
Es sind aber noch 3 da
arbeite felder ab. Anzahl: 3
Fertig. Abgearbeitet 2 Felder
Es sind aber noch 1 da
arbeite felder ab. Anzahl: 1
Fertig. Abgearbeitet 1 Felder
Es sind aber noch 0 da
arbeite felder ab. Anzahl: 0
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
arbeite felder ab. Anzahl: 0
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
arbeite felder ab. Anzahl: 0
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
... (bestimmt noch 50 mal)
 
Auf jeden Fall überspringst du Felder. Du musst nicht das i-te Element holen und dann remove&i++ machen, sondern immer das 0-te.
 
Wie gesagt, ich kenne mich mit Java und vor allem ArrayLists nicht so aus. Heißt das, dass wenn ich das 1. Element einer ArrayList lösche, die anderen quasi nachrutschen und die 1. Stelle nie leer ist?

hab das ganze jetzt so abgeändert:
Java:
	 public void batchArrayList(){
	        int i=0;
	        int x;
	        int y;
	       
	        while(zeroArray.size()>0){
	        	 System.out.println("arbeite felder ab. Anzahl: "+zeroArray.size());
	            Minenfeld zeromine = zeroArray.get(0);
	            zeroArray.remove(0);
	            x=zeromine.getX();
	            y=zeromine.getY();
	            i++;
	            proofZero(x,y);
	        }
	        System.out.println("Fertig. Abgearbeitet "+i+" Felder");
	        System.out.println("Es sind aber noch "+zeroArray.size()+" da");
	    }

kommt leider immernoch vor, allerdings seltener.





Ausgabe:
Code:
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 12
arbeite felder ab. Anzahl: 12
arbeite felder ab. Anzahl: 12
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 13
arbeite felder ab. Anzahl: 13
arbeite felder ab. Anzahl: 14
arbeite felder ab. Anzahl: 14
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 17
arbeite felder ab. Anzahl: 17
arbeite felder ab. Anzahl: 20
arbeite felder ab. Anzahl: 20
arbeite felder ab. Anzahl: 20
arbeite felder ab. Anzahl: 20
arbeite felder ab. Anzahl: 22
arbeite felder ab. Anzahl: 22
arbeite felder ab. Anzahl: 21
arbeite felder ab. Anzahl: 23
arbeite felder ab. Anzahl: 22
arbeite felder ab. Anzahl: 21
arbeite felder ab. Anzahl: 21
arbeite felder ab. Anzahl: 21
arbeite felder ab. Anzahl: 20
arbeite felder ab. Anzahl: 19
arbeite felder ab. Anzahl: 19
arbeite felder ab. Anzahl: 19
arbeite felder ab. Anzahl: 19
arbeite felder ab. Anzahl: 20
arbeite felder ab. Anzahl: 20
arbeite felder ab. Anzahl: 20
arbeite felder ab. Anzahl: 19
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 17
arbeite felder ab. Anzahl: 16
arbeite felder ab. Anzahl: 19
arbeite felder ab. Anzahl: 19
arbeite felder ab. Anzahl: 19
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 19
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 17
arbeite felder ab. Anzahl: 16
arbeite felder ab. Anzahl: 15
arbeite felder ab. Anzahl: 15
arbeite felder ab. Anzahl: 17
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 17
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 17
arbeite felder ab. Anzahl: 17
arbeite felder ab. Anzahl: 19
arbeite felder ab. Anzahl: 19
arbeite felder ab. Anzahl: 19
arbeite felder ab. Anzahl: 19
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 20
arbeite felder ab. Anzahl: 19
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 18
arbeite felder ab. Anzahl: 17
arbeite felder ab. Anzahl: 16
arbeite felder ab. Anzahl: 16
arbeite felder ab. Anzahl: 16
arbeite felder ab. Anzahl: 17
arbeite felder ab. Anzahl: 16
arbeite felder ab. Anzahl: 16
arbeite felder ab. Anzahl: 15
arbeite felder ab. Anzahl: 14
arbeite felder ab. Anzahl: 13
arbeite felder ab. Anzahl: 12
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 9
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 9
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 12
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 12
arbeite felder ab. Anzahl: 12
arbeite felder ab. Anzahl: 14
arbeite felder ab. Anzahl: 13
arbeite felder ab. Anzahl: 12
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 12
arbeite felder ab. Anzahl: 12
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 12
arbeite felder ab. Anzahl: 12
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 9
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 9
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 9
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 9
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 4
arbeite felder ab. Anzahl: 3
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 4
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 4
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 4
arbeite felder ab. Anzahl: 3
arbeite felder ab. Anzahl: 4
arbeite felder ab. Anzahl: 3
arbeite felder ab. Anzahl: 3
arbeite felder ab. Anzahl: 4
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 13
arbeite felder ab. Anzahl: 13
arbeite felder ab. Anzahl: 14
arbeite felder ab. Anzahl: 13
arbeite felder ab. Anzahl: 12
arbeite felder ab. Anzahl: 11
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 9
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 9
arbeite felder ab. Anzahl: 10
arbeite felder ab. Anzahl: 9
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 4
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 4
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 8
arbeite felder ab. Anzahl: 7
arbeite felder ab. Anzahl: 6
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 4
arbeite felder ab. Anzahl: 5
arbeite felder ab. Anzahl: 4
arbeite felder ab. Anzahl: 3
arbeite felder ab. Anzahl: 2
arbeite felder ab. Anzahl: 1
Fertig. Abgearbeitet 231 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
Fertig. Abgearbeitet 0 Felder
Es sind aber noch 0 da
 
Zuletzt bearbeitet:
Stell mal ein KSKB rein und bedenke, dass du noch eine andere Methode hast, die genau so umgeschrieben werden muss

ok danke, die 2. methode habe ich jetzt auch umgeschrieben, leider gleiches ergbenis. Das mit dem KSKB werd ich jetzt erstmal im forum nachlesen was das ist, wie man es macht und so.. also bis dahin schonmal danke!
 
So, habe noch nie ein KSKB gemacht, hoffe das ist kurz genug geworden.

Java:
package KSKB;

import java.awt.* ;
import java.awt.event.* ;
import javax.swing.* ;
import java.util.ArrayList;


public class KSKB_Test extends JFrame{
	
	
	private int breite=30;
	private int höhe=16;
	private Minenfeld spielfeld[][] = new Minenfeld[höhe][breite];
	private ArrayList<Minenfeld> zeroArray = new ArrayList<Minenfeld>();
	private ArrayList<Minenfeld> aufdeckArray = new ArrayList<Minenfeld>();
	private Insets buttonMargin = new Insets(2, 2, 2, 2);
	private JButton [][] buttons = new JButton [höhe][breite];
	
	private static final long serialVersionUID = 1L;

	public KSKB_Test(int anzMinen) {
				
		this.generateSpielfeld();
		this.setMinen(anzMinen);
		this.setZahlen();
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		GridLayout layout = new GridLayout(höhe,breite);
		this.setLayout (layout) ;

	}
		

	/**
	 *  Spielfeld aufbauen (Mehrdiemensionales Array wird mit Minenefeldobjekten befüllt)
	 */
	 
	public void generateSpielfeld(){
				
	
		for(int x=0;x<höhe;x++){
			for(int y=0;y<breite;y++){
				
				spielfeld[x][y]=new Minenfeld(x,y);
				buttons[x][y] = new JButton();
				buttons[x][y].setMargin(buttonMargin);
				buttons[x][y].addMouseListener(new MyMouseListener(x,y));
				this.add(buttons[x][y]);
				
			}
		}
	}

	public void setMinen(int minen){
		int benötigt = minen;
		
		
		while ( benötigt > 0 ) {
			
			int x = ( int ) Math.floor ( Math.random ( ) * höhe ) ;
			int y = ( int ) Math.floor ( Math.random ( ) * breite ) ;
			if ( !spielfeld[x][y].mine ) {
				spielfeld[x][y].mine=true;
				benötigt -- ;
			}
		}
	}

	public void setZahlen(){
		for(int x=0;x<höhe;x++){
			for(int y=0;y<breite;y++){
				int z=0;
				for(int i=-1;i<2;i++){
					for(int j=-1;j<2;j++){
						if(x-i>=0&&x-i<höhe&&y-j>=0&&y-j<breite)	{
							if(spielfeld[x-i][y-j].mine){
								z++;
							}
						}
					}
				}
				spielfeld[x][y].zahl=z;
				if(spielfeld[x][y].mine){
					spielfeld[x][y].zahl=99;
				}
			}
		}
	}
	

	public void proofZero(int x, int y){

		
		for(int i=-1;i<2;i++){
			for(int j=-1;j<2;j++){
				
				if(x-i>=0&&x-i<höhe&&y-j>=0&&y-j<breite)	{
					if(!spielfeld[x-i][y-j].proofed && !spielfeld[x-i][y-j].mine)
					{
						spielfeld[x-i][y-j].proofed=true;
						aufdeckArray.add(spielfeld[x-i][y-j]);
				
						if(spielfeld[x-i][y-j].zahl==0){
							zeroArray.add(spielfeld[x-i][y-j]);
						}
					}
				}
			}
		}
	}

	 public void batchArrayList(){
	        int i=0;
	        int x;
	        int y;
	       
	        while(zeroArray.size()>0){
	        	 System.out.println("arbeite felder ab. Anzahl: "+zeroArray.size());
	            Minenfeld zeromine = zeroArray.get(0);
	            zeroArray.remove(0);
	            x=zeromine.x;
	            y=zeromine.y;
	            i++;
	            proofZero(x,y);
	        }
	        System.out.println("Fertig. Abgearbeitet "+i+" Felder");
	        System.out.println("Es sind aber noch "+zeroArray.size()+" da");
	    }
		public void batchArrayListAufdecken(ArrayList<Minenfeld> aufdeckArray){
			int i=0;
			int x;
			int y;
			
			while(aufdeckArray.size()>0 && i<aufdeckArray.size()){
				
				Minenfeld aufdeckFeld = aufdeckArray.get(0);
				aufdeckArray.remove(0);
				x=aufdeckFeld.x;
				y=aufdeckFeld.y;
				i++;
				aufdecken(x,y);
				
				
				
			}
			
		}

	
		public void aufdecken(int x, int y){
			
			if(spielfeld[x][y].zahl==0){
				
				spielfeld[x][y].aufgedeckt=true;
				buttons[x][y].setBackground(Color.LIGHT_GRAY);
				buttons[x][y].setBorderPainted(false);
				buttons[x][y].setEnabled(false);
				
				proofZero(x,y);
				batchArrayList();
				batchArrayListAufdecken(aufdeckArray);

				
			}
			
			else {
				spielfeld[x][y].aufgedeckt=true;
				showZahl(x,y);
			
			}
		}
		
		public void showZahl(int x, int y){
			buttons[x][y].setBackground(Color.LIGHT_GRAY);
			buttons[x][y].setText(""+spielfeld[x][y].zahl);
			buttons[x][y].setBorderPainted(true);
			buttons[x][y].setEnabled(true);
		}
			

	private class MyMouseListener extends MouseAdapter{
		
		int x;
		int y; 
		public MyMouseListener(int x, int y){
			this.x=x;
			this.y=y;
		}

		@Override
		public void mouseClicked(MouseEvent event) {
		if(event.getButton()==MouseEvent.BUTTON1){
								
								 aufdecken(x,y);
								}
				
							}
								
						}

	
		public class Minenfeld {
			
			protected int zahl;
			protected int x;
			protected int y;
			protected boolean mine = false;
			protected boolean aufgedeckt = false;
			protected boolean proofed;
			
			public Minenfeld(int x, int y) {
				this.x=x;
				this.y=y;
			}
		}
		
		public static void main(String[] args) {
			// TODO Auto-generated method stub
			
			KSKB_Test g = new KSKB_Test(40);
			g.setVisible(true);		
			g.setSize(600, 400);
			
		}
	
}
 
Nur was ich kurz gesehen habe: in
Code:
batchArrayListAufdecken
benutzt du immer noch
Code:
i
, was zu Fehlern führen kann.
 

Zurück
Oben