iNeedScissors61
iNeedScissors61

Reputation: 195

Rock, paper, scissors game in Ruby

I am trying to get this program to run:

cpucount = 0
playercount = 0
tiecount = 0

playerchoice = 

while playerchoice != "n" 
  puts "Chose your Weapon. Paper (0), Rock (1), Scissors (2)"
  player1 = 0 #gets
  cpuplayer = 2#rand(3)
  puts player1
  puts cpuplayer
  if player1 == 0 and cpuplayer == 1
    puts "You Win"
    playercount +=1
  elsif player1 == 1 and cpuplayer == 2
    puts "You Win!"
    playercount +=1
  elsif player1 == 2 and cpuplayer == 0
    puts "You Win!"
    playercount +=1
  elsif player1 == cpuplayer
    puts "You tied!"
    tiecount +=1
  else
    puts "You lose"
    cpucount +=1
  end
  puts cpucount
  puts playercount
  puts tiecount
  puts "Do you want to play again? y/n?"
  playerchoice = gets
  puts playerchoice
end

but there are a few issues.

First, regardless of whether I select "y" to continue to another round or "n" to quit, it still runs another round.

Second, the logic is fine when I manually input the values for player1 and cpuplayer, but when I use the rand method and the user input, the program takes those and then the logic doesn't work.

Any help would be appreciated.

Upvotes: 0

Views: 1139

Answers (2)

Shawn Mehan
Shawn Mehan

Reputation: 4568

In your input statement which is using gets you need to take into account the newline that is placed in the string, and the fact that it is a string. When the player is inputting it, it is coming in as text, not an integer. A simple way to do this is to make it an integer on input, via

player1 = gets.to_i

That will guarantee that the conditional logic you use to test against integers is not going to fail because you are comparing a string.

The newline that is coming in with the playerchoice input needs get chomped to make that happy for comparison. So, there is another method to get rid of newlines.

playerchoice = gets.chomp

Upvotes: 2

Zoran
Zoran

Reputation: 4226

Try assigning the playerchoice variable in the following way:

playerchoice = gets.chomp

The #gets method by itself will output any carriage returns that come with the user's input, which is why if you were to inspect the returned value for playerchoice, you'd see that instead of "n", the value returned is actually "n\n", causing your comparison to resume looping the game. Calling #chomp on that value strips out the carriage return characters (\n, \r, \r\n), which should allow the game to end if "n" is typed in by the user.

Hope it helps!

Upvotes: 0

Related Questions