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
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?
}
}