import java.util.Random;
public class BugGame
{
   Bug player1, player2;
   String player1Name, player2Name;
   boolean player1Done, player2Done,complete = false;
   Random die = new Random ();
	boolean debug = false;
//  	boolean debug = true;
   
  
public BugGame()
{
   // starts the game by calling playGame()
	  playGame();
}


          // welcomes users	
   private void printWelcome ()
   {
     System.out.println ();
     System.out.println ("\t\t\tWelcome to AH-Bug");
     System.out.println ();
   }
	
	
	      // rolls a die
    private int takeTurn ( )
    {
      int points;
     
	   points = die.nextInt(6) + 1;
	 
	   return points;
    }

	           // get names from players 
	private String getUserName (String whichPlayer)
   {
     String name;

     System.out.print
	    (" Please enter the " + whichPlayer + " player's name: ");
	  name = Keyboard.readString ();
     System.out.println();

     return name;
   }

	            // play the game
   public void playGame()	
	{
	   int roll, result;
		String part;
		String name;
	
	        // welcomes users
			  // if rules were included, they would go here
	  printWelcome();
			  
			// get first player's name from user
     player1Name = getUserName ("first");
	  	
      	// instantiate first player
     player1 = new Bug (player1Name);
	
	      // get second player's name from user
	  player2Name = getUserName ("second");
 	
		// instantiate second player
 	  player2 = new Bug (player2Name);
     
	      // while no one has completed their bug
			// complete set to false originally to
			// force entry into loop - could have used a
			// do loop instead
	  while (! complete)
     {
	         // throw die
      	 roll = takeTurn();
          if (debug)
			    System.out.println (" player1 roll is " + roll);
		      // to add a part or not
          result = player1.addPart(roll);
	       if (debug)
			    System.out.println (" success/failure result is " + result);
		        // find out what part
				  // associated with roll is
    		 part = player1.getPartName(roll);
          if (debug)
			    System.out.println (" player1 part is " + part);

		        // find out current player's name
    		 name = player1.getName();
		 
 		       // print result of turn
   	 	 printTurnResult (name, roll, result, part);
		 
		        // see if player's bug is complete
	       complete = player1.isBugComplete();
              
				  // if it's complete end game
		 if (complete)
		    completionMessage (name);   	 

       // if game not over
		 if (!complete)
		 {
		        // roll the die
		  	 roll = takeTurn();
          if (debug)
			    System.out.println ("player2 roll is " + roll);
       
		        // find out whether
				  // part added or not 0,1,2,3
          result = player2.addPart(roll);
			 if (debug)
    		    System.out.println (" result = " + result);
		        // find out what part
				  // associated with roll is
    		 part = player2.getPartName(roll);
          if (debug)
			    System.out.println (" player2 part is " + part);
		 
		        // find out current player's name
    		 name = player2.getName();
   
	           // print result of turn
			 printTurnResult (name, roll, result, part);
		 
		         // is player's bug complete
   	    complete = player2.isBugComplete();
	   	 if (complete)
		        completionMessage (name);   	 

      } // end if !complete
	  } // end while
	 } // end playGame
	 
                 // print out ending message and winner
	 public void completionMessage(String winner)
    {
    System.out.println("\t\t\t" + winner + " wins!");
	 System.out.println ("\t\t\tAH-Bug complete");
    }



   public void  printTurnResult (String name, int roll, 
	                              int result, String part)
   {
	     String message;
		  
	    switch (result)
       {
		 case 0: message = part +  " added ";
		         break;
		 case 1: message = part +  " not added - already done ";
 		         break;
		 case 2: message = part +  " not added - missing body ";
		         break;
		 case 3: message = part +  " not added - missing head ";
		         break;
		 default: message = " ERROR ERROR ERROR";
		 }  // end switch
		 
		 System.out.println 
		 ( "Player: " + name + "\tRoll: " + roll + "\tResult: " + message);
		 
	} // end printTurnResult
       
} // end bugGame