---
# System prepended metadata

title: Untitled

---



package INF101.lab1.rockPaperScissors;

import java.util.List;
import java.util.Random;
import java.util.Arrays;
import java.util.Scanner;

public class RockPaperScissors {

public static void main(String[] args) {
	/* 	
	 * The code here does two things:
	 * It first creates a new RockPaperScissors -object with the
	 * code `new RockPaperScissors()`. Then it calls the `run()`
	 * method on the newly created object.
     */
    new RockPaperScissors().run();
}


Scanner sc = new Scanner(System.in);
int roundCounter = 1;
int humanScore = 0;
int computerScore = 0;
List<String> rpsChoices = Arrays.asList("rock", "paper", "scissors");
Random random = new Random();

public void run() {
    while (true) {
        System.out.println("Let's play round " + roundCounter);
        String myChoice = humanChoice();
        String compChoice = computerChoice();
        
        String matchSummary = String.format("Human chose %s, computer chose %s. ", myChoice, compChoice);

        if (myChoice.equals(weaknessOf(compChoice))) {
            matchSummary += "Human wins!";
            humanScore++;
        } else if (compChoice.equals(weaknessOf(myChoice))) {
            matchSummary += "Computer wins!";
            computerScore++;
        } else {
            matchSummary += "It's a tie!";
        }
        
        System.out.println(matchSummary);
        System.out.printf("Score: human %s, computer %s\n", humanScore, computerScore);

        if (!wantsToPlayAgain()) {
            System.out.println("Bye bye :)");
            break;
        }
        roundCounter++;
    }
}

/**
 * Reads input from console with given prompt
 * @param prompt
 * @return string input answer from user
 */
public String readInput(String prompt) {
    System.out.println(prompt);
    String userInput = sc.next();
    return userInput;
}

/*
 * Weapon selection
 */
public String humanChoice() {
    String userAnswer;
    while (true) {
        userAnswer = readInput("Your choice (Rock/Paper/Scissors)?").toLowerCase();
        if (rpsChoices.contains(userAnswer))
            return userAnswer;
        else
            System.out.printf("I do not understand %s. Could you try again?\n", userAnswer);
   }
}

public String computerChoice() {
    int randomNumber = random.nextInt(rpsChoices.size());
    return rpsChoices.get(randomNumber);
}

public boolean wantsToPlayAgain() {
    String continuePlayingAnswer;
        while (true) {
            continuePlayingAnswer = readInput("Do you wish to continue playing? (y/n)?").toLowerCase();
            
            if (continuePlayingAnswer.equals("n"))
                return false;
            else if (continuePlayingAnswer.equals("y"))
                return true;
            else
                System.out.println("I do not understand " + continuePlayingAnswer + ". Could you try again?");
        }
}

public String weaknessOf(String string) {
    if (string.equals("rock")) {
        return "paper";
    } else if (string.equals("scissors")) {
        return "rock";
    } else {
        return "scissors";
    }
}

}

