A greenhand rubyist program -- ask for comments

Dear all,
I am a newbie in programming and ruby.
I have tried to learn ruby via practicing.
And here is a simple program I have just written for fun.
I would like to get some comments for improvement from you.
Thank you for your time in prior.
(Well, this is a little old game for guessing a word.)


class Words
attr_reader :word
WORDS_LIST = %w(linux window mac office perl python ruby java
smalltalk fortan pascal)

def initialize
WORDS_LIST.shuffle!
@word = WORDS_LIST[rand(WORDS_LIST.size - 1)]
end

def word_length
@word.size
end
end

class Interface
attr_reader :secret, :s_length, :secret_array, :letters

def initialize
@secret = Words.new.word
@secret_array = @secret.split(//)
@s_length = secret_length
@letters = (“a”…“z”).to_a
show_blurred_word([])
main_loop([])
end

def secret_length
length = secret.size
end

def getting_input
input = gets.chomp
input.strip
end

def analysis_input(input)
case input
when “a”…“z”
delete_from_letters_list(input)
guessing(input)
when “hints”
puts “You are cheating. The word is #@secret.”
nil
when “exit”
puts “Goodbye”
exit
end
end

def print_remained_letters
puts "The remaining letters list: (or exit/hints) "
p letters
end

def guessing(letter)
matched_idx = []
secret_array.each_with_index do |char, idx|
if char == letter
matched_idx << idx
end
end
matched_idx
end

def show_blurred_word(matched_array)
if matched_array.empty?
print " _ " * s_length
else
secret_array.each_with_index do |obj, idx|
if matched_array.include? idx
print " #{@secret_array[idx]} "
else
print " _ "
end
end
end
puts “\n”
end

def delete_from_letters_list(letter)
letters.delete(letter)
end

def greeting
print "Please enter a letter to guess: "
end

def main_loop(matched_array)
print_remained_letters
greeting
user_input = getting_input
checked = analysis_input(user_input)
if checked != nil
matched_array << checked
end
if matched_array.nil?
main_loop(matched_array)
else
matched_array.flatten!
matched_array.uniq!
show_blurred_word(matched_array)
if matched_array.size == s_length
print “You got it! The word is #@secret!\n”
else
main_loop(matched_array)
end
end
end
end

Interface.new


On Mon, 28 Mar 2011 02:15:25 +0900
Wik [email protected] wrote:

WORDS_LIST.shuffle!
@word = WORDS_LIST[rand(WORDS_LIST.size - 1)]

If you’re using .shuffle! on the array, then why not change the second
line to something like:
@word = WORDS_LIST[0]

Also, I wonder if you need to use srand for the .shuffle!

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs