leopolicastro
11/5/2018 - 1:20 AM

Number Guessing Game

Number Guessing Game

// Declare our variables
const prompt = require('readline-sync');
let maxGuesses = 3;
let currentGuess = 0;
const maxRange = 10;
// Generate random number
let randomNumber = Math.floor(Math.random() * maxRange + 1);
// console.log('Random number: ', randomNumber);
// Get user name

// Prompt user to make first guess
let userGuess = prompt.question(
  `Hi, I have chosen a number between 1 and ${maxRange}, you have ${maxGuesses} tries to guess it.\n`
);

const handleGuess = userGuess => {
  for (let guesses = 0; guesses < maxGuesses; guesses++) {
    if (userGuess == randomNumber) {
      console.log('You win! 🏆');
      guesses = maxGuesses;
      playAgain();
    } else if (guesses === maxGuesses - 1) {
      console.log(`You lose. 💀\nThe number was ${randomNumber}`);
      playAgain();
    } else if (userGuess > randomNumber) {
      thinkLower();
      userGuess = prompt.question('Guess again...\n');
    } else {
      thinkHigher();
      userGuess = prompt.question('Guess again...\n');
    }
  }
};

// Play Again Function
const playAgain = () => {
  let playAgain = prompt.question('Do you want to play again? y || n \n');
  playAgain = playAgain.toLowerCase();
  if (playAgain === 'y') {
    randomNumber = Math.floor(Math.random() * maxRange + 1);
    // console.log("New random number", randomNumber);
    let newGuess = prompt.question(
      `I have chosen a number between 1 and ${maxRange}, you have ${maxGuesses} tries to guess it.\n`
    );
    currentGuess = 0;
    guesses = 0;
    handleGuess(newGuess);
  } else {
    console.log('Thanks for playing.\nGoodbye.');
  }
};

// Function declaration
function thinkLower() {
  console.log('Think lower.');
  currentGuess++;
  console.log('Guesses Left: ', maxGuesses - currentGuess);
}

// ES6 Arrow function
const thinkHigher = () => {
  console.log('Think higher.');
  currentGuess++;
  console.log('Guesses Left: ', maxGuesses - currentGuess);
};

//  Call our function
handleGuess(userGuess);