2016-04-26 9 views
0
import java.util.Random; 
import java.util.Scanner; 
public class field { 
    private int[][] mines; 
    private char[][]game; 
    private int Row, Column; 
    Random random = new Random(); 
    Scanner keyboard = new Scanner(System.in); 

//create field array 
public field(){ 
    mines = new int[10][10]; 
    game = new char [10][10]; 
    startMines(); 
    randomMines(); 
    fillNum(); 
    startField(); 
} 
//set win conditions 
public boolean win(){ 
    int count=0; 
    for(int Row = 1; Row<9; Row++) 
     for(int column = 1; column<9; column++) 
      if(game[Row][column]=='_') 
       count++; 
    //if 10 mines are found you win 
    if(count==10) 
     return true; 
    else 
     return false; 
} 
public void openNeighbors(){ 
    for(int i=-1;i<2;i++) 
     for(int j=-1;j<2;j++) 
      if((mines[Row+i][Column+j] != -1) && (Row !=0 && Column != 0 && Column !=9)) 
       game[Row+i][Column+j]=Character.forDigit(mines[Row+i][Column+j], 10); 
} 
//get the suspected mines position 
public int getPosition(int Row, int Column){ 
    return mines[Row][Column]; 
} 
//have the user input the position of the suspected mine 
public boolean setPosition(){ 

    do{ 
     System.out.print("\nRow: "); 
     Row = keyboard.nextInt(); 
     System.out.print("Column: "); 
     Column = keyboard.nextInt(); 

     if((game[Row][Column] != '_')&&((Row < 9 && Row > 0) && (Column< 9 && Column >0))) 
      System.out.println("Field already shown"); 

     if(Row < 1 || Row >8 || Column < 1 || Column>8) 
      System.out.println("Chose a number between 1 and 8."); 

    }while((Row <1 || Row>8 || Column<1 || Column>8 || (game[Row][Column] != '_'))); 

    if(getPosition(Row, Column)==-1) 
     return true; 
    else 
     return false; 

} 
//show the mine field 
public void show(){ 
    System.out.println("\n Rows"); 
    for(int Row = 8; Row>0;Row++){ 
     System.out.print("  "+Row+" "); 

     for(int Column=1; Column<9;Column++){ 
      System.out.print(" "+game[Row][Column]); 
     } 
     System.out.println(); 

    } 
    System.out.println("\n   1 2 3 4 5 6 7 8"); 
    System.out.println("     Columns"); 

} 
//show the hints for the game when selected 
public void fillNum(){ 
    for(int row=1; row<9;row++) 
     for(int column=1; column<9; column++){ 

      for(int i=-1;i<=1;i++) 
       for(int j=-1;j<=1;j++) 
        if(mines[row][column]!=-1) 
         if(mines[row+i][column+j]==-1) 
          mines[row][column]++; 


     } 
} 
//show the mines on the mine field 
public void showMines(){ 
    for(int i=1; i<9;i++) 
     for(int j=1;j<9;j++) 
      if(mines[i][j]==-1) 
       game[i][j]='*'; 

    show(); 

} 
//generate the field 
public void startField(){ 
    for(int i=1; i<mines.length; i++) 
     for(int j=1; j<mines.length; j++) 
      game[i][j]='_'; 

} 
//start the mines 
public void startMines(){ 
    for(int i=0; i<mines.length ; i++) 
     for(int j=0; j<mines.length; j++) 
      mines[i][j]=0; 

} 
//randomly place the 10 mines 
public void randomMines(){ 
    boolean raffled; 
    int Row, Column; 
    for(int i=0;i<10;i++){ 

     do{ 
      Row = random.nextInt(8) +1; 
     Column = random.nextInt(8) +1; 
     if(mines[Row][Column]==-1) 
      raffled=true; 
      else 
       raffled=false; 

     }while(raffled); 
     mines[Row][Column]=-1; 
    } 
} 
} 

Mine Field CodeSweeper Programm beendet, sobald ich es laufen

public class Play { 
    boolean end = false; 
    boolean win = false; 
    private field field; 
    int turn=0; 

    public void Begin(){ 
     field = new field(); 
     Start(field); 
    } 
    public void Start(field field){ 
     do{ 
      turn++; 
      System.out.println("Turn " +turn); 
      field.show(); 
      end = field.setPosition(); 

      if(!end){ 
       field.openNeighbors(); 
       end = field.win(); 
      } 

     }while(!end); 
     if(field.win()){ 
      System.out.println("You found all 10 of the hidden mines in the minefield in " +turn +"turns."); 
     field.showMines(); 
     }else{ 
      System.out.println("You hit a mine. You lose."); 
     field.showMines(); 
     } 
    } 
    } 

den Code Spiel spielen

sind meine Programme sind für das Minenfeld zu schaffen und das Spiel zu spielen. Wenn ich den Code kompiliere und ausführe, wird das Programm sofort beendet und zeigt nichts anderes in der Konsole an. Der Code scheint keine Kompilierungsfehler zu enthalten. Jede Hilfe, die jemand bei der Lösung dieses Problems leisten kann, wäre sehr willkommen.

+0

Haben Sie schon von der Java ['main' Methode] (https://csis.pace.edu/~bergin/KarelJava2ed/ch2/javamain.html) erfahren? – davidbak

+0

Wie möchten Sie das ausführen? Keine Idee, die ich kenne, wird nicht eine Hauptmethode nicht gefunden Fehler geben. –

+0

'public static void main (Zeichenfolge [] args) {new Play(). Begin();}' – flakes

Antwort

0

Ändern Sie Ihre Play-Klasse, so dass der Anfang wie folgt aussieht:

public class Play { 
boolean end = false; 
boolean win = false; 
private field field; 
int turn=0; 

// All Java programs require the following method to run, it must 
// be declared public, static, void, named "main" and take a 
// String array as an argument. 
public static void main(String[] args) { 
    // Because main must be static (defined at compile time, once per class) 
    // you need to create an instance of your play class before you can 
    // call Begin() 
    new Play().Begin(); 
} 

public void Begin(){ 
    field = new field(); 
    Start(field); 
} 

Hinweis: Mit dem Java-Konvention, Methodennamen mit Kleinbuchstaben beginnen, so (Beginnen) beginnen sollte() und Klassennamen beginnen mit Großbuchstaben sollte das Feld also Field (und Field.java) sein. Variablennamen sind in der Regel auch Kleinbuchstaben. Nicht erforderlich, aber auf lange Sicht ist das Lesen von Code einfacher.

Sobald Sie Ihre Hauptmethode hinzugefügt haben. Es gibt auch einen Fehler in Ihrer "Show" für Schleife. Ich denke, dass Sie Row statt Increment-Zeile dekrementieren möchten, basierend darauf, wie Ihre Schleife eingerichtet ist.

//show the mine field 
public void show(){ 
    System.out.println("\n Rows"); 
    for(int Row = 8; Row>0;Row++){ // <-- Try Row-- here instead. 

Fröhliche Programmierung!

+1

Vielen Dank für Ihre Hilfe, das Programm läuft jetzt einwandfrei. – hhayes96

+0

@ hhayes96 Ich bin froh, dass das hilfreich war! Würde es Ihnen etwas ausmachen, die Antwort als richtig zu markieren? –