954,545 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Rock Paper Scissors Code Help Lot's of Detail

Hey guys, this is my first post here and I need a lot of help. I'd like to start off by saying that I'm VERY new to this so I might have some really obvious errors in here/my code might not make sense(i hope this is not the case) and yes I have added some comments to help you guys help me. :D

I'm in a]Computer Science class at my high school and we are supposed to make a game of Rock Paper Scissors that has some form of computer AI in it. The only rules are that it must:
1) Have some form of AI
2) In 4 turns, you must have used at least one of every option (Rock Paper or Scissors)
If it violates this rule, there is a # of points penalty taken away.

Here's what my thought process is:
1) Have two parallel arrays. One will be the computer's input and the other will be the
User's input. The arrays will be int arrays with 4 slots. With each choice a value
will be given.(Rock=1,Paper=3,Scissors=9)
2) The computer AI will take the sum of the last 3 values played, and because each value
is unique (i.e a value of 21 would be Two Scissors and One Paper) it will know what
it has to play in order to (A)not violate rule #2 and (B) beat the other person's
choices because it will also search their array sum.

So, here's my problem:

1) I'm not very skilled with arrays, and I don't know how to (take the sum) or how to
search through the arrays to check the values.

2) Also, once I have looped through 4 rounds of the game (i.e my array lists are full)
I am not sure how to delete the 1st input(userinput[0]) or (computerinput[0]) in order
for the AI to keep refreshing and basing it's decisions off of new information.

OKAY: So here's my code. If there are undefined variables, most likely it's because it was an idea I was thinking about trying, but couldn't figure out how to make it work.

import java.io.*;
import java.util.*;
public class PlayGame
{
	static int index=4;
	static int y;
	static int numGames=0;
	static int Userinput[]=new int[index];
    static int Compinput[]=new int[index];
    static int Rock=1;
    static int Paper=3;
    static int Scissors=9;
    static boolean rock,paper,scissors;
 


    public static void main(String args[])
    {
     //set up scanner
    	 Scanner RPS = new Scanner(System.in);

     //set up strings
     	System.out.println("Welcome to the Rock Paper Scissors Game\n");
     	System.out.println("Are you ready to play?   y/n");

     //User defines if they are ready to play
     //Set input as a char for a switch
     	String WouldYouPlay = RPS.nextLine();
		char YesOrNo = WouldYouPlay.charAt(0);

     //Define Switch
     	switch(YesOrNo)
     	{
     		case 'y':
    			PlayGame.RockPaperScissors();
     			break;
     		case 'n':
     			System.out.println("Goodbye!");
     			break;
     	}
    }


    public static void RockPaperScissors()
    {
    	//set up another scanner
    	Scanner rpsReader = new Scanner(System.in);
    	//Computer outputs a random number, either 0,1,or 2
    	//if the comp outputs a 0 it equals Rock, and puts a 1 in the 1st spot of the comp array
    	//if the comp outputs a 1 it equals Paper, and puts a 3 in the 1st spot of the comp array
    	//if the comp outputs a 2 it equals Scissors, and puts a 9 in the 1st spot of the comp array
    	int CompStart = (int)(Math.random()*3);
			if(CompStart==0)
			{
				Compinput[0]=Rock;
				System.out.println("My choice is Rock");
    		}
    		else if(CompStart==1)
    		{
    			Compinput[0]=Paper;
    			System.out.println("My choice is Paper");
    		}
    		else if(CompStart==2)
    		{
    			Compinput[0]=Scissors;
    			System.out.println("My choice is Scissors");
    		}

    	for(int xx=0;xx<4;xx++)
    		{
    			System.out.println("Your selection R,P,S)?");
    			String RockPaperScissors=rpsReader.nextLine();
    			char RPSchoice= RockPaperScissors.charAt(0);
    			 if(xx==0)
    			 {
    			 	y=0;
    			 }
    			 else if(xx==1)
    			 {
    			 	y=1;
    			 }
    			 else if(xx==2)
    			 {
    			 	y=2;
    			 }
    			 else if(xx==3)
    			 {
    			 	y=3;
    			 	System.out.println("Last slot of array, (xx==3) it needs to loop over again from this point");
    			 	//when xx==3, its on the fourth slot in the array (y) (I was checking to see if this would work may not be necessary.
    			 }
						switch(RPSchoice)
	    				{	
	    					case 'R':
	    					case 'r':
	    						Userinput[y]=Rock;
	    						System.out.println("You chose Rock!");
	    						boolean rock=true;//an idea that i was messing with, may not be necessary: SEE COMPUTER AI
	    						ComputerAI();//if you enter an 'r' it will call in the computer AI to find out what to play next
								break;
							case 'P':
							case 'p':
								Userinput[y]=Paper;
								boolean paper=true;
								System.out.println("You chose Paper!");
								ComputerAI();
								break;
							case 'S':
							case 's':
								Userinput[y]=Scissors;
								boolean scissors=true;
								System.out.println("You chose Scissors!");
								ComputerAI();//if you enter an 's' it will call in the computer AI to find out what to play next
								break;
	    				}		

			}


	}
	public static void ComputerAI()
	{
		if(rock=true)//checks to see if the User selected 'r'. If the user did, then it will search it's own array to see if it needs to play					
		{			//something mandatory, if not it will play paper
			if(Compinput.equals())
			{
			}
				
			
		}
	}
}
SketchGamer
Newbie Poster
14 posts since Dec 2011
Reputation Points: 10
Solved Threads: 0
 

Sorry, I don't know why it formatted weird.
Bump

SketchGamer
Newbie Poster
14 posts since Dec 2011
Reputation Points: 10
Solved Threads: 0
 
why it formatted weird.


Could be your tabs are set differently than the forums. Can change your tabs to spaces? I don't know how to (take the sum) or how to
search through the arrays to check the values.
Write a simple program that works with a loop and an array and learn how you can use them.
Define a String array something like this:
String[] anArray = {"this", "is", "an", "array"};
and then write a loop to go through the array and print out each String in the array.
Then another loop to look for the String that is equal to "an" and print out the index of that String in the array.

NormR1
Posting Expert
Moderator
6,677 posts since Jun 2010
Reputation Points: 1,138
Solved Threads: 656
 

What is an example of searching through an array for something. For example: if i wanted to search the array for a value of 1(rock) 3(paper) 9(scissors)?

SketchGamer
Newbie Poster
14 posts since Dec 2011
Reputation Points: 10
Solved Threads: 0
 

Have you tried writing the array and loops as I suggested?
Post that code and any questions your have about it.
Change the array I posted from String to an int array and search through it.
int[] anArray = {22,3,11,44}; // an int array

Write a loop to search this array for 11 and print its index.

NormR1
Posting Expert
Moderator
6,677 posts since Jun 2010
Reputation Points: 1,138
Solved Threads: 656
 

My question was HOW to search through an array... I wanted you to tell me so I could apply that knowledge in my game.

SketchGamer
Newbie Poster
14 posts since Dec 2011
Reputation Points: 10
Solved Threads: 0
 
My question was HOW to search through an array... I wanted you to tell me so I could apply that knowledge in my game.

simple... just use a loop
pseudo:

for(int i=0;i<array.length();i++){
    if(array[i]==11){
       //do something
    }
}
zeroliken
Veteran Poster
1,106 posts since Nov 2011
Reputation Points: 201
Solved Threads: 162
 

ok wow that is really simple. thanks :D

now for part 2: If i wanted to sum up integers in the array what would be the most efficient way to do that?

SketchGamer
Newbie Poster
14 posts since Dec 2011
Reputation Points: 10
Solved Threads: 0
 

Still simple... use a loop again

int sum;
for(int i=0;i<array.length();i++){
    sum=sum+array[i];
}
zeroliken
Veteran Poster
1,106 posts since Nov 2011
Reputation Points: 201
Solved Threads: 162
 

OMG I'M SO GLAD YOUR ONLINE :) okay i've got updated code if you'd care to take a look at it. I already figured that part out but i need help with this bit...

I've got it so that whenever I check the sum of the array, the AI knows it's options to take(i.e if the value is 21 it chooses rock)

What i don't know is the loop structure i need to keep constantly updating my array [4]. I know the basic idea but i don't know the code for it.

I need the array to constantly delete the [0] spot and replace it somehow so that when my AI checks for the values it doesn't keep checking old ones...

Sorry if this is hard to read it's 2 a.m here and i'm very tired. This is due today :D lol

import java.io.*;
import java.util.*;
public class RockPaperScissors
{
	static int Compinput[]=new int[4];
	static int Userinput[]=new int[4];
	static int rockCounter=0,paperCounter=0,scissorCounter=0;
	
	
	
	public static void main(String args[])
	{
		Scanner answrReader=new Scanner(System.in);
		System.out.print("Are You Ready To Play? y/n\n");
		String answr=answrReader.nextLine();
		char answryn=answr.charAt(0);
		
		switch(answryn)
		{
			case 'Y':
			case 'y':
				PlayGame();
				break;
			case 'N':
			case 'n':
				System.out.println("Goodbye");
		}
	}
	
	
		public static void randomStartValue()
		{
			int randomStartVal=(int)(Math.random()*3);
				if(randomStartVal==0)
				{
					Compinput[0]=1;
					System.out.println("My choice is rock");
				}
				else if(randomStartVal==1)
				{
					Compinput[0]=3;
					System.out.println("My choice is paper");
				}
				else if(randomStartVal==2)
				{
					Compinput[0]=9;
					System.out.println("My choice is scissors");
				}
		}		
			
			
		public static void randomValue()
		{
			int randomVal=(int)(Math.random()*3);
				if(randomVal==0)
				{
					System.out.println("My choice is rock");
				}
				else if(randomVal==1)
				{
					System.out.println("My choice is paper");
				}
				else if(randomVal==2)
				{
					System.out.println("My choice is scissors");
				}
		}			
	
	
		public static void ComputerAI()
		{
			for(int i=0;i<4;i++)
			{
				if(Compinput[i]==1)
				{
					rockCounter++;
				}
				if(Compinput[i]==3)
				{
					paperCounter+=3;
				}
				if(Compinput[i]==9)
				{
					scissorCounter+=9;
				}
				
			int totalCompValue=(rockCounter+paperCounter+scissorCounter);
			
				if(totalCompValue==13)
				{
					randomValue();
				}
				else if(totalCompValue==5)
				{
					System.out.println("My selection is Scissors");
					
				}
				else if(totalCompValue==11)
				{
					System.out.println("My selection is Paper");
				}
				else if(totalCompValue==15)
				{
					System.out.println("My selection is Rock");
				}
				else if(totalCompValue==7)
				{
					System.out.println("My selection is Scissors");
				}
				else if(totalCompValue==19)
				{
					System.out.println("My selection is Paper");
				}
				else if(totalCompValue==21)
				{
					System.out.println("My selection is Rock");
				}
				else
				{
					randomValue();
				}
			}	
		}
		
		public static void addToArray()
		{
			for(int y=0;y<4;y++)
			{
				Compinput[y
			}
		}
		
		
		
		
		public static void PlayGame()
		{
			
		}
}
SketchGamer
Newbie Poster
14 posts since Dec 2011
Reputation Points: 10
Solved Threads: 0
 
Compinput[y

line 129: ...your getting careless

zeroliken
Veteran Poster
1,106 posts since Nov 2011
Reputation Points: 201
Solved Threads: 162
 
What i don't know is the loop structure i need to keep constantly updating my array [4]. I know the basic idea but i don't know the code for it.

what do you mean by update? change the content? shouldn't you just assign another value to it

zeroliken
Veteran Poster
1,106 posts since Nov 2011
Reputation Points: 201
Solved Threads: 162
 
line 129: ...your getting careless


haha i saw my post got answered when i was changing songs and i dropped everything and started typing! That was a method I was just starting to add the values (looping) to my arrays.

My question(simplified) is what is the best way to have an array be moved/deleted in order to make room for a value?

for instance let's say that array[0], array[1], array[2], array[3] are all full, and but i need a new value to go to array[0] each time i enter Rock Paper or Scissors.
What is the best way to do that?

// it needs to be in a loop so that the game continues until the person tells it to stop//
//also i need to keep the previous 3 so that my AI for the game can check it. (essentially i need to move (assuming array[3] is filled last) array[1],to array[0], array[2] to array[1], and array[3] to array[2]..then array[3] will get replace by my next choice rock paper or scissors

SketchGamer
Newbie Poster
14 posts since Dec 2011
Reputation Points: 10
Solved Threads: 0
 

You can't exactly delete an array since its static and not dynamic
maybe just assign a new value to it...

zeroliken
Veteran Poster
1,106 posts since Nov 2011
Reputation Points: 201
Solved Threads: 162
 
// it needs to be in a loop so that the game continues until the person tells it to stop//

use a boolean and change the value on the boolean once the user makes the choice to stop

zeroliken
Veteran Poster
1,106 posts since Nov 2011
Reputation Points: 201
Solved Threads: 162
 

Sorry, i updated my last post I don't know if you saw it. Basically what i need it to do is not DELETE the arrays but simply move them. For instance when I put in a new value of rock and all of the four array slots are full then it should move array[3] to array[2]...ect therefore, array[0] will lose it's old value, and array[3] will receive an entirely new value.

SketchGamer
Newbie Poster
14 posts since Dec 2011
Reputation Points: 10
Solved Threads: 0
 
Sorry, i updated my last post I don't know if you saw it. Basically what i need it to do is not DELETE the arrays but simply move them. For instance when I put in a new value of rock and all of the four array slots are full then it should move array[3] to array[2]...ect therefore, array[0] will lose it's old value, and array[3] will receive an entirely new value.

make another loop that assigns the current arrays value and the array after it

array[i]=array[i+1];
zeroliken
Veteran Poster
1,106 posts since Nov 2011
Reputation Points: 201
Solved Threads: 162
 

make another loop that assigns the current arrays value and the array after it

array[i]=array[i+1];

You're my hero :)

SketchGamer
Newbie Poster
14 posts since Dec 2011
Reputation Points: 10
Solved Threads: 0
 

So i was going to do a while loop, and as long as you let the game continue (boolean=true) then it will keep running. I keep getting error messages when I set it up. Help? :)

public static void PlayGame()
		{
			Scanner rpsReader=new Scanner(System.in);
			boolean stay=true;
			randomStartValue();
			while(boolean stay=true)
			{
				System.out.println("Your Selection(R,P,S)? ");
				String rpsAnswer=rpsReader.nextLine();
				char rpsAnswr=rpsAnswer.charAt(0);
			}
			
			
		}
SketchGamer
Newbie Poster
14 posts since Dec 2011
Reputation Points: 10
Solved Threads: 0
 

post the errors

also you have no option or statement to change the value of stay

zeroliken
Veteran Poster
1,106 posts since Nov 2011
Reputation Points: 201
Solved Threads: 162
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You
View similar articles that have also been tagged: