title: Nim Game, Public Void Play and Calling Methods
body: <p>Hello I am a student struggling to create a game of Nim for a homework assignment. I am currently confused on the in the first file public void play() method where in the comments, my teacher posted, </p>
  
  <pre><code>call computer;s play method, send it marbleCount, and
  // reduce marblecount by the amount the computer takes
  // Then you need to check for a winner
  // switch the turn
  </code></pre>
  
  <p>I basically don't get how you would call the Computer play method, send it marbleCount or check for the winner. Can someone please give me some hints/help? I am extremely tired and have been working on this for a long time so if I missed something easy sorry. Thanks in advance.</p>
  
  <pre><code>import java.util.Random;
  import javax.swing.JOptionPane;
  
  /**
   * Represents a game of Nim, where players take turns removing marbles from a pile.
   * The player that takes the last marble wins the game.
   */
  public class Nim
  {
      public static int COMPUTER = 0;
      public static int HUMAN = 1;
  
      private Player computer;
      private Player human;
      private int marbleCount;
      private int turn;           // whose turn it is
      private int winner;
  
      /**
       * Constructs a Nim game.  There are two players, one is the computer and the other is human.
       * The player who gets to go first is chosen at random.  The number of marbles in the pile is
       * generated randomly between 10 and 100.  A message is displayed showing how many marbles the
       * starts with.  The contructor calls the play() method to start the game.
       */
      public Nim()
      {
          Random rand = new Random();
          // assign values for all instance fields before play() is called
          computer = new Player(COMPUTER);
          human = new Player (HUMAN);
          marbleCount = rand.nextInt(91) + 10;
          turn = rand.nextInt(2);
          winner = HUMAN;
          // JOptionPane - Show number of marbles
          JOptionPane.showInputDialog(marbleCount);
  
          play();
      }
  
      /**
       * The play method continues game play until the pile is reduced to 0.  Whoever takes the last marble
       * loses the game.  At the beginning of each play, the number of marbles left is displayed.  The player
       * whose turn it is calls the Player play method, sending it the number of marbles left.  When the player
       * takes marbles, the marbleCount is decreased.  When the marbles are gone, the winner of the game is
       * displayed.
       */
      public void play()
      // while there are marbles left
      // if else for turn
      // if its the computers turn you are going to call the computer's play method,
      // last method in the player file
          // call computer;s play method, send it marbleCount, and
          // reduce marblecount by the amount the computer takes
          // Then you need to check for a winner
          // switch the turn
      // else human's turn
          //call the human's play method - send it marbleCount
              // reduce marbleCount by the human's take
              // check for a winner
              // switch the turn
      {
          while(marbleCount &gt;= 0)
              JOptionPane.showMessageDialog(null,"There are " + marbleCount + "marbles left");
              if(turn = 0)
  
                  turn = 1;
              else
                  turn = 0;
  
  
  
  
  
  
  
  
  
  
  
  
  
          // At the end of play (when the loop exits), the winner is displayed
          if (winner == COMPUTER)
              JOptionPane.showMessageDialog(null,"Computer wins!");
          else
              JOptionPane.showMessageDialog(null,"Human wins!");
      }
  }
  </code></pre>
  
  <p>end of the first file</p>
  
  <pre><code>import java.util.Random;
  import javax.swing.JOptionPane;
  
  /**
   * Represents a player in the game of Nim.  The player is either human or computer.
   * Humans are prompted for their plays.
   */
  public class Player
  {
      public static int COMPUTER = 0;
      public static int HUMAN = 1;
  
      private int type; // computer or human
  
      /**
       * Constructs a player of type t.  0 is COMPUTER, 1 is HUMAN.
       * If t is not 0 or 1, type will be set to HUMAN.
       * @param t type of player
       */
      public Player(int t)
      {
          type = t;
          if(!(type == 0 || type == 1))
              type = 1;
      }
  
      /**
       * Determines how many marbles are taken, and returns that number.
       * Human player will be asked how many marbles they want to take.
       * If the move is illegal, they will be asked again until they select a legal move.
       * The computer will take a random number of marbles between 1 and pileSize/2.
       * @param pileSize the number of marbles in the pile
       * @return the number of marbles taken by the player
       */
      public int play(int pileSize)
      {
          Random r = new Random();
          int numTaken;
          if(type == COMPUTER)
          {
              if(pileSize == 1)
              {
                  numTaken = 1;
                  JOptionPane.showMessageDialog(null," Computer took 1 marble ");
              }
              else
              {
  
              numTaken = r.nextInt(pileSize / 2) + 1;  // POSSIBLE ERROR
              pileSize = pileSize - numTaken;
              JOptionPane.showMessageDialog(null," Computer took " + numTaken + "marbles ");
              }
          }
          else
              {
                  boolean correct;
                  do
                  {
                  String numTakenbyhuman = JOptionPane.showInputDialog("There are " + pileSize + "marbles" + "How many marbles will you take ?");
                  numTaken = Integer.parseInt(numTakenbyhuman);
                  pileSize = pileSize - numTaken;
                  JOptionPane.showMessageDialog(null," Computer took " + pileSize + " marbles ");
                  if(1 &lt;= numTaken &lt;= pileSize / 2)
                      correct = false;
                  else
                      correct = true;
                  }
                  while(!correct);
                      JOptionPane.showMessageDialog(null, "You must take between " + pilesize/2 + " 1 marbles");
  
  
                  }
                  return numTaken;
  
  
  
  
              }
  
  
  
  
      }
  </code></pre>