2017-01-20 13 views
-3
https://cse.sc.edu/~shephejj/csce146/Homework/Homework01.html 

import java.util.*; 
public class MineSweep { 
    enum Spaces{Empty,Player,Cone,Mine} 
    public static final int Board_Size=10; 
    public final static double Percent_Mine = 0.1; 

    public static void main(String[]arg){ 
     Spaces[][] Board= new Spaces[Board_Size][Board_Size];//Creates new multidimensional array. 
     int numOfMoves=0; 
     int positionX=0; 
     int positionY=0; 
     boolean isOver=false; 
     boolean isDead = false; 
     Random r= new Random(); 
     //Random Places the cone on the GameBoard. 
     int coneX=r.nextInt(Board_Size); 
     int coneY=r.nextInt(Board_Size); 
     Scanner Scan = new Scanner(System.in); 
     Scanner scan2 = new Scanner(System.in); 

     for(int i=0;i<Board.length;i++){ 
      for(int j =0; j<Board[1].length;j++){ 
       Board[i][j]=Spaces.Empty; 
        } 
       } 
     Board[positionX][positionY]= Spaces.Player; 
     Board[coneX][coneY]=Spaces.Cone; 
     System.out.println("Welcoem to Mine Walker. Get the ice cream cone and avoid the Mines."); 

     int mines = (int)(Board_Size*Board_Size*Percent_Mine); 
     do 
     { 
      int x = r.nextInt(Board_Size-1)+1; 
      int y =r.nextInt(Board_Size-1)+1; 
      //Places mines in random spots 
      if (Board[x][y]== Spaces.Empty) 
      { 
      Board[x][y]=Spaces.Mine; 
      mines--; 
      } 
     } 
     while(mines>0); 
     if(isDead==true){ 
     Board=generateBoard(); 
     }else{ 

      while(isOver==false) 
       { 
       for(int y=0;y<Board.length;y++) 
       { 
        for(int x=0;x<Board[y].length;x++) 
        { 
         switch(Board[x][y]) 
         { 
          case Empty: 
           System.out.print("_"); 
           break; 
          case Player: 
           System.out.print("X"); 
           break; 
          case Mine: 
           System.out.print("!"); 
           break; 
          case Cone: 
           System.out.print("^"); 
           break; 
          default: 
           System.out.print("?"); 
          break; 
         } 
        } 
        System.out.println(" "); 
       } 
       System.out.println("Enter either -1,0,1 to move in the X or 9 to quit"); 

       int directionX = Scan.nextInt(); 

       if(directionX==9) 
       { 
        System.out.println("Game Over"); 
        System.exit(0); 

        } 
       System.out.println("Enter either -1,0,1 to move in th Y"); 
       int directionY= Scan.nextInt(); 

       if(directionX<-1 || directionX>1){ 
        System.out.println("Invalid Input X"); 
        directionX=0; 
       } 
       if(directionY <-1 || directionY>1) 
       { 
        System.out.println("Invalid input Y"); 
        directionY = 0; 
       } 

       Board[positionX][positionY] = Spaces.Empty; 
       positionX+=directionX; 
       positionY+=directionY; 

       if(positionX < 0) 
       { 
        positionX = 0; 
       } 
       else if(positionX>Board_Size-1) 
       { 
        positionX = Board_Size-1; 
       } 
       if(positionY < 0) 
       { 
        positionY = 0; 
       } 
       else if(positionY> Board_Size-1) 
       { 
        positionY = Board_Size-1; 
       } 
       String retry; 
       if(Board[positionX][positionY]==Spaces.Mine) 
       {   
        isDead=true; 
        System.out.println("Boom! Dead!"); 
        System.out.println("Would you like to play again? \"Yes\" or \"No\""); 
        retry = scan2.nextLine(); 
        if (retry.equalsIgnoreCase("Yes")) 
        { 

          isOver = false; 
          generateBoard(); 
        } 
        else if (retry.equalsIgnoreCase("No")) 
        { 
         System.out.println("Goodbye!"); 
         System.exit(0); 
        } 
       } 
       if(Board[positionX][positionY]==Spaces.Cone) 
       { 
        System.out.println("You win!"); 
        System.out.println("Would you like to play again? \"Yes\" or \"No\""); 
       } 
       Board[positionX][positionY] = Spaces.Player; 
      } 
     } 
    } 


    public static Spaces[][] generateBoard(){ 
     int positionX=0; 
     int positionY=0; 
     Random r= new Random(); 
     //Random Places the cone on the GameBoard. 
     int coneX=r.nextInt(Board_Size); 
     int coneY=r.nextInt(Board_Size); 
     Spaces[][] Board= new Spaces[Board_Size][Board_Size]; 
    for(int i=0;i<Board.length;i++){ 
      for(int j =0; j<Board[1].length;j++){ 
       Board[i][j]=Spaces.Empty; 
        } 
       } 
     Board[positionX][positionY]= Spaces.Player; 
     Board[coneX][coneY]=Spaces.Cone; 
     System.out.println("Welcoem to Mine Walker. Get the ice cream cone and avoid the Mines."); 

     int mines = (int)(Board_Size*Board_Size*Percent_Mine); 
     do 
     { 
      int x = r.nextInt(Board_Size-1)+1; 
      int y =r.nextInt(Board_Size-1)+1; 
      //Places mines in random spots 
      if (Board[x][y]== Spaces.Empty) 
      { 
      Board[x][y]=Spaces.Mine; 
      mines--; 
      } 
     } 
     while(mines>0); 
     return Board; 
    } 
} 

上記のコードはすべて動作しますが、新しいゲームボードを作成することはできません。「generateboard()」というメソッドを作成し、「isDead = true」というメソッドを呼び出してユーザーが応答します彼らが再試行したい場合は、はい。助けてください!再起動したい場合、ユーザーが「はい」と応答した後、新しいゲームボードを再生成できないのはなぜですか?

+2

デバッガでコードを実行してみてください –

+0

これをクラスやメソッドに分解してください。彼らが望むなら 'play()'の上にあるとき 'play()'ゲーム 'と呼びます。 'do {新しいGame.play(); } while(isPlaying); ' – ChiefTwoPencils

答えて

0

まず、コードを少しきれいにしてください。いくつかの重複があり、読みにくいです。つまり、あなたの問題はこのコードにあると思います。

if (retry.equalsIgnoreCase("Yes")) 
{ 
    isOver = false; 
    generateBoard(); 
} 

あなたは新しいボードを生成していますが、使用するようにプログラムに指示していません。 generateBoard()Board = generateBoard();に変更してください。また、プレーヤーの位置を0,0にリセットすることも忘れてしまいます。

ここでは、プログラムのクリーンアップ方法についていくつか指摘したいと思います。あなたのmainメソッドの最初の部分は、基本的にはあなたのgenerate boardメソッドのコピー貼り付けです。つまり、そのメソッドを再利用してボードを初期化することができます。

ボードを生成した後、最初のif文if (isDead == true)は、isDead = falseと設定されているため、決してtrueになりません。このifステートメントを削除してください。実際にはisDead変数は使用しないので、isDead変数は使用されません。

generateBoardメソッドからプレーヤの開始位置を返すか、プレーヤの位置がどこにあるかを知るために、開始位置をメソッドの引数として取ります。あなたの例では、プレーヤーは常に0,0から始まりますが、あなたはその時間を変更したいと思うでしょう。

注意すべき事項:
Javaでは、変数は通常小文字で始まります(「Board」ではなく「board」を使用)。
Javaの列挙型は通常すべて大文字(EmptyなどではなくEMPTY)です。
ブール値に== falseまたは==trueを使用する必要はありません。単にif (isDead)と書くだけです。

コードをメソッドに分割することもできますが、私はこれを練習問題として残しておきます。また、プレイヤーがゲームで勝利したときには、実際には何もしません。

関連する問題