In: Computer Science
Objective:
Write a program which simulates a hot potato game. In this version of a classic game, two or more players compete to see who can hold onto a potato the longest without getting caught. First the potato is assigned a random value greater than one second and less than three minutes both inclusive. This time is the total amount of time the potato may be held in each round. Next players are put into a circular list. Then each person gets possession of the potato in order. The player with the potato indicates how long they wish to hold on to it by entering a number from 1-10 seconds. If the player’s time is less than the remaining potato possession time then it moves on to the next player. However, if the time is larger, then the player is removed from the circular list and the potato’s time is reset. This is done until there is one player remaining.
Notes:
Example Dialog:
Welcome to the Hot Potato Game!
Enter the number of players (2 or more required).
3
Enter the player 1's name
Human H. Human
Enter the player 2's name
Person H. Person
Enter the player 3's name
NotLizard H. NotLizard
Human H. Human Enter a number from 1-10 corresponding to the number of seconds to hold the potato
4
Human H. Human is safe for now.
Person H. Person Enter a number from 1-10 corresponding to the number of seconds to hold the potato
6
Person H. Person is safe for now.
NotLizard H. NotLizard Enter a number from 1-10 corresponding to the number of seconds to hold the potato
10
NotLizard H. NotLizard is safe for now.
Human H. Human Enter a number from 1-10 corresponding to the number of seconds to hold the potato
44
The number must be between 0 and 10. We will assume you meant 10
Human H. Human is safe for now.
Person H. Person Enter a number from 1-10 corresponding to the number of seconds to hold the potato
10
HOT POTATO!!! Person H. Person has been eliminated!
NotLizard H. NotLizard Enter a number from 1-10 corresponding to the number of seconds to hold the potato
3
NotLizard H. NotLizard is safe for now.
Human H. Human Enter a number from 1-10 corresponding to the number of seconds to hold the potato
10
Human H. Human is safe for now.
NotLizard H. NotLizard Enter a number from 1-10 corresponding to the number of seconds to hold the potato
5
NotLizard H. NotLizard is safe for now.
Human H. Human Enter a number from 1-10 corresponding to the number of seconds to hold the potato
10
HOT POTATO!!! Human H. Human has been eliminated!
NotLizard H. NotLizard WINS!
Would you like to continue? Press ENTER to continue or enter "quit" to quit
quit
Goodbye
//I'm a beginner level coder and have a hard time understanding it. If the code could include a note for what each method is doing I would really appreciate it. Plus I would appreciate it if the code stayed as simple as possible with no advanced coding within it. Typically the language I use while coding and what the professor recommended is Java Eclipse
Java Code:
import java.util.*; //for Scanner and Random classes
class Node //class Node which represents Player
{
protected String name; //to store player name
protected Node link; //links to next player
// non-argument Constructor
public Node()
{
link = null;
name = "";
}
// Parameterized Constructor
public Node(String s,Node n)
{
link = n;
name = s;
}
// Function to set link to next Player
public void setLink(Node n)
{
link = n;
}
// Function to set Name
public void setName(String s)
{
name = s;
}
// Function to get link to next Player
public Node getLink()
{
return link;
}
// Function to get name
public String getName()
{
return name;
}
}
class HotPotato{ //driver class named HotPotato
//deleteNode method takes a node and removes the node from
list
public static Node deleteNode(Node del){
Node node = del.getLink(), prev = null;
while(node!=del){ //loops until node mathces with del
prev = node;
node = node.getLink();
}
prev.setLink(node.getLink());
return prev.getLink(); //returns the linked node to prev
}
public static void main(String[] args) { //main method.
Scanner keyboard = new Scanner(System.in); //created object for
scanner
System.out.print("Welcome to the Hot Potato Game!");
String chose; //to store the quit the game or play input
do{
System.out.println("Enter the number of players (2 or more
required). ");
int n = keyboard.nextInt(); //stores the number of players into
n
keyboard.nextLine(); //escapes the nextline character
int i=1;
Node start=null, node=null, end=null;
while(i<=n){ //generates the singly circular linked list
System.out.println("Enter the player "+i+"'s name");
String name = keyboard.nextLine();//keyboard.nextLine();
node = new Node(name,start);
if(start==null){
start = node;
node.setLink(start);
end = start;
}
else{
end.setLink(node);
end = node;
}
i += 1;
}
Random rand = new Random();
int potatoTime = rand.nextInt(121)+60; //generates random number
between 60 and 180
node = start;
int seconds = potatoTime; //assings the potatoTime to seconds
while(n>1){ //loops until the only one player is remaining in
list
System.out.println(node.getName()+" Enter a number from 1-10
corresponding to the number of seconds to hold the potato");
int input = keyboard.nextInt();
if(input>10){
System.out.println("The number must be between 0 and 10. We will
assume you meant 10");
input = 10;
}
if(input>=seconds){ //if input is greater than seconds
then
n--; //decrements the number of players
seconds = potatoTime; //resets the potatoTime
System.out.println("HOT POTATO!!! "+node.getName()+" has been
eliminated! ");
node = deleteNode(node); //deletes the node from list
continue; //and contiunues without execuitng further loop
block
}
else{ //else decrements input from seconds
seconds -= input;
System.out.println(node.getName()+" is safe for now. ");
}
node = node.getLink(); //takes next node into node
}
System.out.println(node.getName()+" WINS!");
System.out.println("Would you like to continue? Press ENTER to
continue or enter 'quit' to quit");
chose = keyboard.next(); //takes the users choice
}while(!chose.equals("quit")); //loops until user enters quit
System.out.println("Goodbye"); //prints good bye statement
}
}
Output Screenshots: