Fehler bei Objektaufruf (Spiel Mühle)

drpingoo

Erfahrenes Mitglied
Hallo zusammen,

ich mach das Mühle-Spiel jetzt in Java. Leider gibt es im main bei der Objekterstellung einen Fehler und ich weiss einfach nicht wieso. Weiss da jemand Rat?

Als Fehlermeldung steht bei allen drei: No enclosing instance of type ShapeMuehle is accessible. Must qualify the allocation with an enclosing instance of type ShapeMuehle (e.g. x.new A() where x is an instance of ShapeMuehle).

lg

Java:
/*   0 1 2 3 4 5 6
 *   0O - - O - - O
 *   1| O - O - O |
 *   2| - O O O - |
 *   3O O O * O O O
 *   4| - O O O - |
 *   5| O - O - O |
 *   6O - - O - - O
 * 
 * 
 * 
 */

public class ShapeMuehle {
	
	public enum player {NOONE,PLAYER1,PLAYER2, INVALID};

	class Player{
		
		private
		player p;
		public Player(player person){
			p = person;
			
		}
		/*
		 * Die Schleife wird solange ausgeführt, bis ein korrekter Zug angegeben wird.
		 * Ansonsten wird man wiederholt aufgefordert einen Zug einzugeben
		 */
		void Move(Board b){
			int reihe=0;//Sinnlos, bloss der Impelmetierung wegen, später soll die Zuweisung per Mausklick (Java-Appelet) erfolgen
			int zeile=0;
			boolean wahr = true;
			while(wahr){
				
			System.out.println("Zug eingeben: ");
			if(b.getVal(zeile, reihe)==player.NOONE){
			b.setVal(zeile, reihe,p);
			wahr = false;
			}
			else {
				System.out.println("Zug ungültig, bitte einen anderen eingeben");
			}
			}
		};
		
	}



	class Game {
		protected
			Player p1, p2;
			Board b;
		public
		    
			Game(Player pl1, Player pl2){
			p1=pl1;
			p2=pl2;}
		/*
		 * Die schleife wird solange ausgeführt bis ein Spieler gewonnen hat. Ansonsten wird unentschieden(null)
		 * zurückgegeben, aber dennoch weitergespielt. Noch nicht ganz korrekt implementiert, da ein Unentschieden
		 * ebenfalls möglich wäre
		 */
			Player play(){
				
				Player ergebnis = null;
				Player unentschieden = null;
				boolean wahr = true;
				while(wahr){
					p1.Move(b);
					if(b.getWinner()==p1.p){
						wahr = false;
						System.out.println("Spieler 1 hat gewonnen!");
						ergebnis = p1;
						return p1;
					}
					
					p2.Move(b);
					if(b.getWinner()==p2.p){
						
						wahr = false;
						System.out.println("Spieler 2 hat gewonnen!");
						ergebnis = p2;
						return p2;
					}
					else {
						ergebnis = unentschieden;
						return unentschieden;
					}
				}
				return ergebnis;
			}
	}
	
	
	
	

/*
 * Mehtode, die momentan eigtl keine Verwendung hat. SInn davon, den Typ player als Int zurückgeben
 */
		public static int toInt(player en) {
			switch (en) {
				case NOONE: { return 0; }
				case PLAYER1: { return 1; }
				case PLAYER2: { return 2; }
				case INVALID: {return 3;}
				default: { return -1; }
			}
		}


	
	class Board{
	
		protected
			player board[][]= new player[7][7];//Das Feld, eine 7x7-Matrix
			int reihe;
		    public
		    /*
		     * Alle Felder werden zunächst einmal auf leer gesetzt, danach werden die ungültigen Züge
		     * als INVALID deklariert. IDEE: Raster bzw. Matrix über Mühle-Spiel legen, siehe
		     * Skizze zu Beginn
		     */
		    Board() {
		    	for(int i=0;i<7;i++){
		    		for(int j=0;j<7;j++){
		    			board[i][j]=player.NOONE;
		    		}
		    	}
		    	
		    	for(int i=0;i<7;i++){
		    		switch(i){
		    		case 0:
		    			board[i][1]=player.INVALID; 
		    			board[i][2]=player.INVALID;
		    			board[i][4]=player.INVALID;
		    			board[i][5]=player.INVALID; break;
		    		case 1:
		    			board[i][0]=player.INVALID; 
		    			board[i][2]=player.INVALID;
		    			board[i][4]=player.INVALID;
		    			board[i][6]=player.INVALID; break;
		    			
		    		case 2:
		    			board[i][0]=player.INVALID; 
		    			board[i][2]=player.INVALID;
		    			board[i][4]=player.INVALID;
		    			board[i][6]=player.INVALID; break;
		    			
		    		case 3:
		    			board[i][3]=player.INVALID; break;
		    		case 4:
		    			board[i][0]=player.INVALID; 
		    			board[i][2]=player.INVALID;
		    			board[i][4]=player.INVALID;
		    			board[i][6]=player.INVALID; break;
		    			
		    		case 5:
		    			board[i][0]=player.INVALID; 
		    			board[i][2]=player.INVALID;
		    			board[i][4]=player.INVALID;
		    			board[i][6]=player.INVALID; break;
		    			
		    		case 6:
		    			board[i][1]=player.INVALID; 
		    			board[i][2]=player.INVALID;
		    			board[i][4]=player.INVALID;
		    			board[i][5]=player.INVALID; break;
		    			
		    		}
		    	}
		    	
		    }
		    
		    
		    
		    void print(){}//Muss noch implementiert werden
		    
		    /*
		     * Gibt Besetzung eines Feldes zurück
		     */
		    player getVal(int r, int c) {
		    	
				return board[r][ c];
			}
		    
		    /*
		     * Gibt true zurück, falls Feld leer ist
		     */
		   boolean setVal(int r, int c, player val){
		    	if(getVal(r,c)==player.NOONE){
		    	return true;
		    	}
		    	else{
		    		return false;
		    	}
		    }
		   
		   /*
		    * Gibt den Gewinner zurück ( es werden wohl noch nicht alle möglichen Fälle
		    * implementiert sein)
		    */
		   player getWinner(){
			   
				if(board[0][0]==player.PLAYER1&&board[0][3]==player.PLAYER1&&board[0][6]==player.PLAYER1||board[6][0]==player.PLAYER1&&board[6][3]==player.PLAYER1&&board[6][6]==player.PLAYER1)
					return player.PLAYER1;
				
				else if(board[0][6]==player.PLAYER1&&board[3][6]==player.PLAYER1&&board[6][6]==player.PLAYER1||board[0][0]==player.PLAYER1&&board[3][0]==player.PLAYER1&&board[6][0]==player.PLAYER1)
					return player.PLAYER1;

				else if(board[3][0]==player.PLAYER1&&board[3][1]==player.PLAYER1&&board[3][2]==player.PLAYER1)
					return player.PLAYER1;

				else if(board[3][4]==player.PLAYER1&&board[3][5]==player.PLAYER1&&board[3][6]==player.PLAYER1)
					return player.PLAYER1;

				else if(board[2][2]==player.PLAYER1&&board[2][3]==player.PLAYER1&&board[2][4]==player.PLAYER1||board[4][2]==player.PLAYER1&&board[4][3]==player.PLAYER1&&board[4][4]==player.PLAYER1)
					return player.PLAYER1;
				
				else if(board[0][3]==player.PLAYER1&&board[1][3]==player.PLAYER1&&board[2][3]==player.PLAYER1||board[4][3]==player.PLAYER1&&board[5][3]==player.PLAYER1&&board[6][3]==player.PLAYER1)
					return player.PLAYER1;
						



				else if (board[0][0]==player.PLAYER2&&board[0][3]==player.PLAYER2&&board[0][6]==player.PLAYER2||board[6][0]==player.PLAYER2&&board[6][3]==player.PLAYER2&&board[6][6]==player.PLAYER2)
					return player.PLAYER2;

				else if(board[0][6]==player.PLAYER2&&board[3][6]==player.PLAYER2&&board[6][6]==player.PLAYER2||board[0][0]==player.PLAYER2&&board[3][0]==player.PLAYER2&&board[6][0]==player.PLAYER2)
					return player.PLAYER2;

				else if(board[3][0]==player.PLAYER2&&board[3][1]==player.PLAYER2&&board[3][2]==player.PLAYER2)
					return player.PLAYER2;

				else if(board[3][4]==player.PLAYER2&&board[3][5]==player.PLAYER2&&board[3][6]==player.PLAYER2)
					return player.PLAYER2;

				else if(board[2][2]==player.PLAYER2&&board[2][3]==player.PLAYER2&&board[2][4]==player.PLAYER2||board[4][2]==player.PLAYER2&&board[4][3]==player.PLAYER2&&board[4][4]==player.PLAYER2)
					return player.PLAYER2;
				
				else if(board[0][3]==player.PLAYER2&&board[1][3]==player.PLAYER2&&board[2][3]==player.PLAYER2||board[4][3]==player.PLAYER2&&board[5][3]==player.PLAYER2&&board[6][3]==player.PLAYER2)
					return player.PLAYER2;


				else return player.NOONE;
		
		   }
	}
	

	
	
	 public static void main( String[] args ){
		
		 Player one = new Player(player.PLAYER1);//Schlägt fehl! Wieso?
		 Player two = new Player(player.PLAYER2);//Schlägt fehl! Wieso?
		// ShapeMuehle sh = (ShapeMuehle)Player ;

		  //Player one = new Player(po);
		//  System.out.println(one);
		  //Player two = new Player(player.PLAYER2);
		 Game g =new Game(one,two); //Schlägt fehl! Wieso?
		 
		 
	 }
	 
	
	
}
 
Weil Du diese Klassen in die Klasse ShapeMuehle gepackt hast. So sollte es funktionieren:

Java:
ShapeMuehle.Player one = new ShapeMuehle.Player(player.PLAYER1);

Weiß aber nicht, aus welchem Grund Du diese Klassen verschachtelt hast. Ist in diesem Fall sicher kein schöner Stil. Pack jede Klasse in eine eigene Datei und Deine Probleme sind gelöst.
 
Hallo,

also das mit der ShapeMuehle hat nicht geklappt, aber ich hab jetzt alles mal sauber in einzelne Klassen gepackt und dann hats funktioniert:) - Danke! Ich programmier jetzt mal weiter, wahrscheinlich werde ich später nochmals auf einen Stolperstein stossen...
 

Neue Beiträge

Zurück