Wiki2
RubyTextGames

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 "j, det är mindre. Gissa igen ..."
  elsif tal > gissning then
    puts ", det är större. Gissa igen ..."
  end
  antal_gissningar += 1
  break if tal == gissning
end

puts "med bara #{gissningar}ingar"

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"