EdvardM
8/4/2016 - 2:49 PM

peli-1.rb

peli-1.rb

AAKKOSET = ('a'..'z').to_a
AAKKOS_LKM = 20

def jaa_aakkoset
  taulukko = []

  AAKKOS_LKM.times do
    taulukko.push(AAKKOSET.sample)
  end
  taulukko
end

def näytä_käsi(merkit)
  puts
  puts "Sinulla on kädessäsi " + merkit.sort.join(', ')
end

def lue_sanasto(tiedosto)
  rivit = File.readlines(tiedosto).map do |rivi|
    rivi.strip.downcase
  end

  puts "Luettiin #{rivit.size} sanaa"
  rivit.reject do |sana|
    sana.size <= 1
  end
end

def onko_sana?(syöte, sanasto)
  sanasto.include?(syöte.downcase)
end

def tarkista_sana(syöte, sanasto)
  if onko_sana?(syöte, sanasto)
    puts "Sana löytyi"
    true
  else
    puts "Ei osumaa sanalla " + syöte
    false
  end
end

def poista_aakkosista(aakkoset, merkki)
  kopio = aakkoset.dup
  indeksi = kopio.index(merkki)

  if indeksi
    kopio.delete_at(indeksi)
  end

  kopio
end

def muodostettavissa_aakkosista?(alkup_aakkoset, sana)
  aakkoset = alkup_aakkoset.dup

  sana.chars.each do |merkki|
    temp = poista_aakkosista(aakkoset, merkki)
    if temp == aakkoset
      return false
    end

    aakkoset = temp
  end

  return true
end

def laske_pisteet(sana)
  sana.size**2
end

### Pääohjelma
aakkoset = jaa_aakkoset
# sanasto = lue_sanasto('sanasto.txt')
sanasto = lue_sanasto('/usr/share/dict/words')
pisteet = 0

fail "laske_pisteet ei toimi" if laske_pisteet('cat') != 9

loop do
  näytä_käsi(aakkoset)
  puts "Sanasto: " + sanasto[0..9].join(', ')
  print "Kirjoita sana, tai piste (.) lopettaaksesi ja <Enter>: "
  syöte = STDIN.gets.strip
  break if syöte == "."

  if tarkista_sana(syöte, sanasto) &&
      muodostettavissa_aakkosista?(aakkoset, syöte) &&
      syöte.size > 1
    pisteet = pisteet + laske_pisteet(syöte)

    # poistetaan muodostettu sana
    syöte.chars.each do |merkki|
      aakkoset = poista_aakkosista(aakkoset, merkki)
    end
  end

  puts "Sinun pisteesi ovat nyt: " + pisteet.to_s
end