Några små spel
Dessa spel behöver programspråket Ruby.
Spara programmen som en fil och kör dom med ruby.
$ cat fint_namn.rb
#!/usr/local/bin/ruby
puts "Vad heter du?"
namn = gets.strip()
n = namn.downcase()
fina = ["simon", "peter", "anna", "boel"]
if fina.any? { |f| f == n } then
puts "#{namn}, det var ett superfint namn!"
puts "Låt oss fira ..."
(1..4).each { |i| puts "Hurra #{namn}" }
else
puts "#{namn} var ett FULT namn!"
end
$ ruby fint_namn.rb
Du kan också göra programmet exekverbart och köra det utan ruby
framför.
$ chmod +x fint_namn.rb
$ ./fint_namn.rb
Du kan också testa att köra i browsern via tex. repl.it
Vad heter du
Ett spel om namn.
#!/usr/local/bin/ruby
puts "Vad heter du?"
namn = gets.strip()
n = namn.downcase()
fina = ["simon", "peter", "anna", "boel"]
if fina.any? { |f| f == n } then
puts "#{namn}, det var ett superfint namn!"
puts "Låt oss fira ..."
(1..4).each { |i| puts "Hurra #{namn}" }
else
puts "#{namn} var ett FULT namn!"
end
Gissa talet
Ett spel om tal.
#!/usr/local/bin/ruby
tal = rand(1000)
antal_gissningar = 0
puts "Gissa vilket tal jag tänker på?"
loop do
gissning = gets.to_i
if tal < gissning then
puts "Nej, det är mindre. Gissa igen ..."
elsif tal > gissning then
puts "Nej, det är större. Gissa igen ..."
end
antal_gissningar += 1
break if tal == gissning
end
puts "Rätt med bara #{antal_gissningar} gissningar"
Hänga gubbe
Klassiskt hänga gubbe spel.
#!/usr/local/bin/ruby
# Hänga gubbe
# _______
# |// |
# |/ (_)
# | \|/
# | |
# | / \
# |
# __|__
#
ord = "julskyltning".split(//)
def korrekta(gissning)
gissning.reject{ |c| c == '-' }.uniq.size
end
gissade = ord.collect { |c| '-' }
antal_gissningar = 0
puts "Gissa vilket ord jag tänker på?"
loop do
puts gissade.join(' ')
puts
puts "Gissa en ny bokstav?"
ny = gets[0]
antal_gissningar += 1
gissade = ord.zip(gissade).collect { |pair| pair[0] == ny ? ny : pair[1] }
break if ord == gissade
break if antal_gissningar - korrekta(gissade) > 11
end
if (antal_gissningar - korrekta(gissade)) > 11
puts "Ledsen du blev hängd ..."
else
puts ord.join(' ')
puts "Du klarade det! Bara #{antal_gissningar - korrekta(gissade)} av #{antal_gissningar} felaktiga gissningar"
end
Ekvationer
Inspiration från NOMP och Plato.
#!/usr/local/bin/ruby
# 1 + 7 - X = 3 Vad är X?
def add_sub_mul
ops = ['+', '-', '*']
o = [rand(3), rand(3)]
vars = [rand(10), rand(10), rand(10), 0]
left = "#{vars[0].to_s} #{ops[o[0]]} #{vars[1].to_s} #{ops[o[1]]} #{vars[2].to_s}"
vars[3] = eval left
x_pos = rand 4
x = vars[x_pos]
vars[x_pos] = 'X'
puts "#{vars[0].to_s} #{ops[o[0]]} #{vars[1].to_s} #{ops[o[1]]} #{vars[2].to_s} = #{vars[3].to_s}"
return x
end
# (1 + X) / 2 = 4 Vad är X?
def add_sub_div
ops = ['+', '-']
c = 1 + rand(9)
d = 1+rand(9)
a = 2*rand(c*d)
o = 0
o = 1 if a > c*d
b = eval "#{ops[o]}(#{(c*d).to_s}-#{a.to_s})"
vars = [a,b,c,d]
x_pos = rand 4
x = vars[x_pos]
vars[x_pos] = 'X'
puts "(#{vars[0].to_s} #{ops[o]} #{vars[1].to_s}) / #{vars[2].to_s} = #{vars[3].to_s}"
return x
end
n = 5
correct = 0
puts; puts "Vad är X i följande ekvationer?"; puts
(1..n).each { |i|
f = [:add_sub_mul, :add_sub_div][rand(2)]
x = Kernel.send(f)
print "X = "
ans = gets.to_i
if x == ans
puts "Du har helt rätt!"; puts
correct += 1
else
puts "Tyvärr fel svar. Rätt svar är #{x.to_s}"; puts
end
}
puts "Du hade #{correct.to_s} av #{n.to_s} korrekta svar"
Multiplikation
#!/usr/bin/env ruby
(0..24).each() do |n|
print "#{(3*n).to_s}. #{(1+rand(9)).to_s} * #{(1+rand(9)).to_s} =\t\t\t"
print "#{(3*n+1).to_s}. #{(1+rand(9)).to_s} * #{(1+rand(9)).to_s} =\t\t\t"
puts "#{(3*n+2).to_s}. #{(1+rand(9)).to_s} * #{(1+rand(9)).to_s} ="
end