Untitled

 avatar
unknown
plain_text
5 months ago
5.0 kB
2
Indexable
/**
 * Nim.java
 * This program will let you play a 2 player game called "Nim".
 * Filip Ostrowski
 * Nov 19, 2024
 */
import java.util.Random;
import java.util.Scanner;

public class Nim {
  
  public static void main(String[] args) { 
    Scanner input = new Scanner(System.in);
    Random rand = new Random();
    int stones = rand.nextInt(16) + 15;  //Generate random # between 15-30
    int userInput, computerInput;        //Get user input + the computer generated input
    
    System.out.println("Welcome to the game of Nim!");
    
    while (stones > 0) {      //Begin the game by starting the loop, and the loop only ends if there are no stones left
      
      //Players turn
      userInput = userTurn(stones);  //First method, userTurn
      stones -= userInput;           //Total stones subracted by the users amount
      
      if (stones == 0) {                   
        System.out.println("The computer beats you!");   //If stones = 0 during the players turn the computer wins.
        break;
      }
      
      //Computers turn
      computerInput = computerTurn(stones); //Second method, computerTurn
      stones -= computerInput;              //Total stones after users turn subracted by the computer generated amount
      
      System.out.println("You took " + userInput + " stones and the computer takes " + computerInput + " stones. There are " + stones + " stones left.");
      
      if (stones == 0) {
        System.out.println("The player beats the computer!"); //If stones = 0 during the computers turn the player wins.
        break;
      }
    }
  }
  
  /**
   * userTurn
   * Pre : The # of stones remaining and the Scanner for user input
   * Post : Returns the valid number of stones the user wants to take
   */
  public static int userTurn(int stonesLeft) {
    Scanner input = new Scanner(System.in);  // Create the Scanner object inside the method
    
    int userInput;
    System.out.println("There are " + stonesLeft + " stones. How many would you like?");  //Ask how many stones the user wants to take
    userInput = input.nextInt();  //Take user input
    
    while (userInput < 1 || userInput > 3 || userInput > stonesLeft) {  //Check if they picked numbers 1, 2, or 3. If not repeat loop until they do
      System.out.println("Invalid choice. Please pick 1, 2, or 3.");
      userInput = input.nextInt();
    }
    return userInput;  //When they pick valid choice return the users #
  }
  
  /**
   * computerTurn
   * Pre : The number of stones remaining
   * Post : Returns a random valid number of stones for the computer to take
   */
  public static int computerTurn(int stonesLeft) {
    int computerInput;
    
    //Artifical Intelligence
    if (stonesLeft==8) {        //8 stones on P turn, C takes 3
      computerInput=3;   
      
      //Difficulty + Remove if you want ez. /Comment out
    }else if (stonesLeft==15) {  //7 stones on P turn, C takes 2
      computerInput=3;    
    }else if (stonesLeft==14) {  //7 stones on P turn, C takes 2
      computerInput=2;
    }else if (stonesLeft==13) {  //7 stones on P turn, C takes 2
      computerInput=1;
    }else if (stonesLeft==11) {  //7 stones on P turn, C takes 2
      computerInput=1;
    }else if (stonesLeft==10) {  //7 stones on P turn, C takes 2
      computerInput=3;
    }else if (stonesLeft==9) {  //7 stones on P turn, C takes 2
      computerInput=1;
      
      
      
      
    }else if (stonesLeft==7) {  //7 stones on P turn, C takes 2
      computerInput=2;
    }else if (stonesLeft==6) {  //6 stones on P turn, C takes 1
      computerInput=1;
    }else if (stonesLeft==5) {  //5 stones on P turn, C takes 1
      computerInput=1;
    }else if (stonesLeft==4) {  //4 stones on P turn, C takes 3
      computerInput=3;
    }else if (stonesLeft==3) {  //3 stones on P turn, C takes 2
      computerInput=2;
    }else if (stonesLeft==2) {  //2 stones on P turn, C takes 1
      computerInput=1;
    }else if (stonesLeft==1) {  
      computerInput=1;
    }else {                     //If there are more then 8 stones, C picks random #
      computerInput=drawStones(stonesLeft);
    }
    return computerInput;
  }
  
  /**
   * isValidEntry
   * Pre : The user's input and the number of stones remaining
   * Post : Returns true if the input is valid
   */
  public static boolean isValidEntry(int take, int stonesLeft) {
    return take >= 1 && take <= 3 && take <= stonesLeft;   //Checks if trying to take less than 1, more than 3, or more than the amount left in the game
  }
  
  /**
   * drawStones
   * Pre : The number of stones remaining
   * Post : Returns a random valid number of stones for the computer to take
   */
  public static int drawStones(int stonesLeft) {
    Random rand = new Random();
    int stonesTaken = rand.nextInt(3) + 1;   
    return stonesTaken;
  }
}
Editor is loading...
Leave a Comment