Rock Paper Scissors Double Round Robin Tournament Objective: Write a program whi
ID: 3663344 • Letter: R
Question
Rock Paper Scissors Double Round Robin Tournament
Objective:
Write a program which simulates a rock, paper, scissors double round robin tournament using a circular linked list. Each player in the tournament is controlled by the computer, and they randomly choose rock, paper, or scissors each round. The computer players have a win, lose, and tie record, which is displayed at the end.
Notes:
Rock wins over scissors, scissors wins over paper, and paper wins over rock.
A circular linked list is just like a single linked list (which was demonstrated in class) except the last element links to the first element.
A double round robin tournament is when each contestant competes against all other contestants in one round. In the double tournament each contestant competes against the other twice.
For instance it let’s assume there are 5 contestants named 0-4. The first round would be 0 vs 1, 0 vs 2, 0 vs 3, 0 vs 4. Then round two would be 1 vs 2, 1 vs 3, 1 vs 3, 1 vs 0. This continues until everyone competes against everyone else twice.
Suggested Methodology
You can solve this in any number of ways, and here’s a way you may take to approach this problem.
Make a generic circular linked list
Make a class player which has a name, number of wins, number of losses, and number of ties
Use the inherit properties of a circular linked list to schedule the tournament
Example Dialog:
Welcome to the Rock Paper Scissors Tournament!
We have 10 players. Let’s BEGIN!
0 uses Rock
1 uses Rock
TIE!
0 uses Rock
2 uses Paper
2 Wins!
0 uses Scissors
3 uses Paper
0 Wins!
0 uses Scissors
4 uses Scissors
TIE!
0 uses Scissors
5 uses Scissors
TIE!
0 uses Rock
6 uses Scissors
0 Wins!
0 uses Rock
7 uses Scissors
0 Wins!
0 uses Scissors
8 uses Paper
0 Wins!
0 uses Paper
9 uses Paper
TIE!
1 uses Rock
2 uses Rock
TIE!
1 uses Paper
3 uses Scissors
3 Wins!
1 uses Rock
4 uses Paper
4 Wins!
1 uses Paper
5 uses Rock
1 Wins!
1 uses Rock
6 uses Rock
TIE!
1 uses Scissors
7 uses Rock
7 Wins!
1 uses Paper
8 uses Paper
TIE!
1 uses Rock
9 uses Paper
9 Wins!
1 uses Scissors
0 uses Scissors
TIE!
2 uses Paper
3 uses Paper
TIE!
2 uses Rock
4 uses Paper
4 Wins!
2 uses Rock
5 uses Rock
TIE!
2 uses Paper
6 uses Paper
TIE!
2 uses Paper
7 uses Rock
2 Wins!
2 uses Rock
8 uses Paper
8 Wins!
2 uses Rock
9 uses Rock
TIE!
2 uses Rock
0 uses Scissors
2 Wins!
2 uses Paper
1 uses Scissors
1 Wins!
3 uses Rock
4 uses Paper
4 Wins!
3 uses Scissors
5 uses Scissors
TIE!
3 uses Scissors
6 uses Scissors
TIE!
3 uses Scissors
7 uses Paper
3 Wins!
3 uses Rock
8 uses Rock
TIE!
3 uses Rock
9 uses Paper
9 Wins!
3 uses Scissors
0 uses Paper
3 Wins!
3 uses Paper
1 uses Scissors
1 Wins!
3 uses Rock
2 uses Paper
2 Wins!
4 uses Rock
5 uses Paper
5 Wins!
4 uses Scissors
6 uses Paper
4 Wins!
4 uses Scissors
7 uses Scissors
TIE!
4 uses Rock
8 uses Paper
8 Wins!
4 uses Rock
9 uses Rock
TIE!
4 uses Scissors
0 uses Rock
0 Wins!
4 uses Paper
1 uses Paper
TIE!
4 uses Paper
2 uses Scissors
2 Wins!
4 uses Paper
3 uses Scissors
3 Wins!
5 uses Paper
6 uses Paper
TIE!
5 uses Scissors
7 uses Paper
5 Wins!
5 uses Scissors
8 uses Rock
8 Wins!
5 uses Rock
9 uses Scissors
5 Wins!
5 uses Scissors
0 uses Rock
0 Wins!
5 uses Rock
1 uses Rock
TIE!
5 uses Scissors
2 uses Paper
5 Wins!
5 uses Scissors
3 uses Rock
3 Wins!
5 uses Rock
4 uses Rock
TIE!
6 uses Scissors
7 uses Scissors
TIE!
6 uses Rock
8 uses Paper
8 Wins!
6 uses Rock
9 uses Paper
9 Wins!
6 uses Rock
0 uses Scissors
6 Wins!
6 uses Scissors
1 uses Paper
6 Wins!
6 uses Rock
2 uses Scissors
6 Wins!
6 uses Rock
3 uses Paper
3 Wins!
6 uses Scissors
4 uses Rock
4 Wins!
6 uses Paper
5 uses Paper
TIE!
7 uses Rock
8 uses Scissors
7 Wins!
7 uses Paper
9 uses Rock
7 Wins!
7 uses Rock
0 uses Scissors
7 Wins!
7 uses Scissors
1 uses Paper
7 Wins!
7 uses Rock
2 uses Paper
2 Wins!
7 uses Paper
3 uses Rock
7 Wins!
7 uses Scissors
4 uses Scissors
TIE!
7 uses Rock
5 uses Rock
TIE!
7 uses Paper
6 uses Rock
7 Wins!
8 uses Rock
9 uses Scissors
8 Wins!
8 uses Rock
0 uses Rock
TIE!
8 uses Paper
1 uses Rock
8 Wins!
8 uses Paper
2 uses Rock
8 Wins!
8 uses Paper
3 uses Rock
8 Wins!
8 uses Scissors
4 uses Rock
4 Wins!
8 uses Paper
5 uses Scissors
5 Wins!
8 uses Paper
6 uses Paper
TIE!
8 uses Paper
7 uses Rock
8 Wins!
9 uses Paper
0 uses Paper
TIE!
9 uses Paper
1 uses Paper
TIE!
9 uses Scissors
2 uses Paper
9 Wins!
9 uses Scissors
3 uses Scissors
TIE!
9 uses Scissors
4 uses Rock
4 Wins!
9 uses Rock
5 uses Scissors
9 Wins!
9 uses Paper
6 uses Scissors
6 Wins!
9 uses Paper
7 uses Paper
TIE!
9 uses Scissors
8 uses Paper
9 Wins!
The tournament is over here are the results!
Name 0 Wins 6 Ties 7 Losses 5
Name 1 Wins 3 Ties 8 Losses 7
Name 2 Wins 6 Ties 5 Losses 7
Name 3 Wins 6 Ties 5 Losses 7
Name 4 Wins 7 Ties 6 Losses 5
Name 5 Wins 5 Ties 8 Losses 5
Name 6 Wins 4 Ties 7 Losses 7
Name 7 Wins 7 Ties 5 Losses 6
Name 8 Wins 9 Ties 4 Losses 5
Name 9 Wins 6 Ties 7 Losses 5
Explanation / Answer
Here is the code for Node.java
/*
* Java Program to Implement Circular Singly Linked List
*/
import java.util.Scanner;
/* Class Node */
class Node
{
protected int name;
protected int noOfWins;
protected int noOfLosses;
protected int noOfTies;
protected Node link;
/* Constructor */
public Node(int nm, Node n)
{
name = nm;
noOfWins = 0;
noOfLosses = 0;
noOfTies = 0;
link = n;
}
/* Function to set link to next Node */
public void setLink(Node n)
{
link = n;
}
/* Function to set name to current Node */
public void setName(int d)
{
name = d;
}
/* Function to set wins to current Node */
public void setWins(int d)
{
noOfWins = d;
}
/* Function to set losses to current Node */
public void setLosses(int d)
{
noOfLosses = d;
}
/* Function to set ties to current Node */
public void setTies(int d)
{
noOfTies = d;
}
/* Function to get link to next node */
public Node getLink()
{
return link;
}
/* Function to get name from current Node */
public int getName()
{
return name;
}
/* Function to get wins to current Node */
public int getWins()
{
return noOfWins;
}
/* Function to get losses to current Node */
public int getLosses()
{
return noOfLosses;
}
/* Function to get ties to current Node */
public int getTies()
{
return noOfTies;
}
}
And the code for linkedList.java:
/* Class linkedList */
class linkedList
{
protected Node start ;
protected Node end ;
public int size ;
/* Constructor */
public linkedList()
{
start = null;
end = null;
size = 0;
}
/* Function to check if list is empty */
public boolean isEmpty()
{
return start == null;
}
/* Function to get size of the list */
public int getSize()
{
return size;
}
/* Function to insert element at the begining
public void insertAtStart(int val)
{
Node nptr = new Node(val,null);
nptr.setLink(start);
if(start == null)
{
start = nptr;
nptr.setLink(start);
end = start;
}
else
{
end.setLink(nptr);
start = nptr;
}
size++ ;
}*/
/* Function to insert element at end */
public void insertAtEnd(int val)
{
Node nptr = new Node(val,null);
nptr.setLink(start);
if(start == null)
{
start = nptr;
nptr.setLink(start);
end = start;
}
else
{
end.setLink(nptr);
end = nptr;
}
size++ ;
}
/*Function to update element at position */
public void updateAtPos(int nm, int wins, int losses, int ties, int pos)
{
Node ptr = start;
pos = pos - 1 ;
for (int i = 1; i < size - 1; i++)
{
if (i == pos)
{
ptr.setName( nm );
ptr.setWins( wins );
ptr.setLosses( losses );
ptr.setTies( ties );
break;
}
ptr = ptr.getLink();
}
size++ ;
}
/* Function to delete element at position
public void deleteAtPos(int pos)
{
if (size == 1 && pos == 1)
{
start = null;
end = null;
size = 0;
return ;
}
if (pos == 1)
{
start = start.getLink();
end.setLink(start);
size--;
return ;
}
if (pos == size)
{
Node s = start;
Node t = start;
while (s != end)
{
t = s;
s = s.getLink();
}
end = t;
end.setLink(start);
size --;
return;
}
Node ptr = start;
pos = pos - 1 ;
for (int i = 1; i < size - 1; i++)
{
if (i == pos)
{
Node tmp = ptr.getLink();
tmp = tmp.getLink();
ptr.setLink(tmp);
break;
}
ptr = ptr.getLink();
}
size-- ;
}*/
/* Function to display contents
public void display()
{
System.out.print(" Circular Singly Linked List = ");
Node ptr = start;
if (size == 0)
{
System.out.print("empty ");
return;
}
if (start.getLink() == start)
{
System.out.print(start.getData()+ "->"+ptr.getData()+ " ");
return;
}
System.out.print(start.getData()+ "->");
ptr = start.getLink();
while (ptr.getLink() != start)
{
System.out.print(ptr.getData()+ "->");
ptr = ptr.getLink();
}
System.out.print(ptr.getData()+ "->");
ptr = ptr.getLink();
System.out.print(ptr.getData()+ " ");
}*/
}
And the final code for ScissorRockPaperDoubleRoundRobin.java:
import java.util.*;
class ScissorRockPaperDoubleRoundRobin
{
//Given the options of 2 players, returns true if player 1 wins, false otherwise.
public static boolean DetermineWinner(String player1, String player2)
{
if(player1.equals("Rock") && player2.equals("Paper"))
return false;
else if(player1.equals("Paper") && player2.equals("Scissor"))
return false;
else if(player1.equals("Scissor") && player2.equals("Rock"))
return false;
else
return true;
}
public static String getItem(int x)
{
if(x == 0)
return "Rock";
else if(x == 1)
return "Paper";
else //if(x == 2)
return "Scissor";
}
public static void main(String[] args)
{
/* Creating object of linkedList */
linkedList list = new linkedList();
Random rn = new Random();
for(int i = 0; i < 10; i++)
list.insertAtEnd(i);
Node ptr = list.start;
Node newPtr;
Node currentPtr = ptr;
Node nextPtr = ptr;
for(int i = 0; i < 10; i++)
{
currentPtr = nextPtr;
nextPtr = nextPtr.getLink();
do
{
//newPtr = ptr;
ptr = (ptr.getLink());
int player1 = rn.nextInt(3);
int player2 = rn.nextInt(3);
String item1 = getItem(player1);
String item2 = getItem(player2);
if(DetermineWinner(item1, item2))
{
currentPtr.setWins(currentPtr.getWins() +1);
ptr.setLosses(ptr.getLosses() +1);
}
else
{
currentPtr.setLosses(currentPtr.getLosses() +1);
ptr.setWins(ptr.getWins() +1);
}
System.out.println(currentPtr.getName()+" uses "+getItem(player1));
System.out.println(ptr.getName()+" uses "+getItem(player2));
}while(ptr != list.end);
}
}
}
I'm not done with it. Still need to do some finalizing work. Hope you can manage this. As I'm running out of time, I'm submitting this code. If you need any further refinements, just get back to me.
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.