Reputation: 21
I am a newbie in Ruby. I am trying to write a simple interactive game in ruby but am stuck. Need help to proceed. Below is the concept:
money = [100, 200, 300, 400]
beneficiaries = ["John", "Sam", "Mary"]
cost1 = [50, 25, 30, 75, 18]
cost2 = [120, 150, 200, 250]
gift1 = [" crayon ", " Pencil ", " Biro "]
gift2 = [" bag ", " shoe ", " Radio "]
cashowned = [50]
a = money.sample
b = cost1.sample
c = cost2.sample
d = gift1.sample
e = gift2.sample
f = cashowned
puts " Hi, what is your name? "
puts
name = gets.chomp
puts
puts " #{name} is a nice name."
puts
puts "#{name} you have #{f} in your bank account."
puts
puts "Roll the dice and let's see how much you just earned."
puts
gets.chomp.to_i
dice1 = a
puts "#{name} you just earned: #{dice1}"
puts
gets.chomp.to_i
Cashowned = dice1 + f
puts "Your account balance is now : #{cashowned}"
puts
gets.chomp.to_i
I am stuck here. I want to repeat/loop the sequence so that I can give out gift at a cost and deduct from cash owned. But cash owned is not updating. A simpler way to go about this will be appreciated. Thanks.
Upvotes: 2
Views: 140
Reputation: 9497
Here is a simple game I've made. It's not perfect as I've rushed it, but it works and shows you what type of code I think you are asking for. Pay attention to the while loop and if statements within the while loops.
#set your variables
b = 200 #initial balance
br = -500 #account limit
dice = [1, 2, 3, 4, 5, 6]
puts "State name?"
n = gets.chomp
puts ""
puts "Greetings #{n}"
puts ""
puts "============================"
puts "Your initial balance is #{b}"
puts "============================"
puts ""
puts "If it reaches or exceeds #{br}"
puts "you'll be declared bankrupt!"
puts ""
while b > br do
#rolling the positive di
puts "Roll good di? (y/n)"
puts ""
a = gets.chomp.downcase
if a == "y"
pd = dice.sample*100
b += pd
puts ""
puts "****you scored #{pd}****"
puts "============================"
puts" new balance: #{b}"
puts "============================"
puts ""
else
puts "============================"
puts "your balance remains at #{b}"
puts "============================"
puts ""
end
#rolling the negative di
puts "Roll evil di? (y/n)"
puts ""
ans = gets.chomp.downcase
if ans == "y"
nd = dice.sample*-100
b += nd
puts ""
puts "****you scored ****#{nd}****"
puts "============================"
puts "new balance: #{b}"
puts "============================"
puts ""
else
puts "============================"
puts "your balance remains at #{b}"
puts "============================"
puts ""
end
#option to repeat
puts ""
puts "Continue playing (y/n)?"
puts ""
ans = gets.chomp.downcase
puts ""
if ans == "n"
puts ""
puts "============================"
puts "final balance is #{b}"
puts "============================"
puts ""
exit
else
b
end
end
puts "You have now reached/exceeded your limit"
puts "of #{br}, so your account has been frozen"
puts ""
Run this code and have a look and modify it to suit your needs.
Upvotes: 0
Reputation: 1157
If you want to update/access value in an array, you need to use index operator
cashowned[0] = dice1 + f[0]
Upvotes: 0
Reputation: 2022
Ruby is a case sensitive language.
Fist you declared your variable as:
cashowned = [50]
and later you are trying to update using another variable name:
Cashowned = dice1 + f
note that "cashowned"
and "Cashowned"
are different variables
Line 7, you have:
cashowned = [50]
my question is, why not use only:
cashowned = 50
?
As you are doing will cause the error: Array can't be coerced into Fixnum (TypeError)
You are trying to sum a Fixnum with an Array.
See the code:
money = [100, 200, 300, 400]
beneficiaries = ["John", "Sam", "Mary"]
cost1 = [50, 25, 30, 75, 18]
cost2 = [120, 150, 200, 250]
gift1 = ["crayon", "Pencil", "Biro"]
gift2 = ["bag", "shoe", "Radio"]
cashowned = 50
a = money.sample
b = cost1.sample
c = cost2.sample
d = gift1.sample
e = gift2.sample
f = cashowned
puts "Hi, what is your name?"
name = gets.chomp
puts "#{name} is a nice name."
puts "#{name} you have #{f} in your bank account."
puts "Roll the dice and let's see how much you just earned."
gets.chomp.to_i
dice1 = a
puts "#{name} you just earned: #{dice1}"
gets.chomp.to_i
cashowned = dice1 + f
puts "Your account balance is now : #{cashowned}"
gets.chomp.to_i
And See the test result:
Upvotes: 1