<file_sep>require './methods.rb'

puts "Game gallows, version 1"

letters = get_letters

cls

errors = 0

bad_letters = []
good_letters = []

while errors < 7 do
  print_status(letters, good_letters, bad_letters, errors)

  puts "Write next letter"

  user_input = get_user_input


  result = check_result(user_input, letters, good_letters, bad_letters)

  if result == -1 # увеличили счетчик ошибок, угадываем дальше
    errors += 1
  elsif result == 1 #слово угадано полностью
    break
  end
end

print_status(letters, good_letters, bad_letters, errors)


# не хватает защиты от написания нескольких букв за 1 ввод<file_sep>require './game.rb'
require './result_printer.rb'

=begin

=end


printer = ResultPrinter.new

game = Game.new(STDIN.gets.chomp)

while game.status == 0 do
  printer.print_status(game)
  game.ask_next_letter
end

printer.print_status(game)

<file_sep>class Bridge

  def initialize
    puts "Bridge created."
    @opened = false

  end

  def open
    puts "Bridge is open, you can go."
    @opened = true
  end

  def is_opened?
    @opened
  end

end<file_sep>puts "Helo. It's uour diary!"
puts "I save all that you write to String \"end\" in file."
puts


# Хранит путь к папке в которой выполняется программа
# Определим папку, в которой лежит эта программа ""
# С помощью специальног ослужебного объекта Ruby __FILE__
current_path = File.dirname(__FILE__)

line = nil
all_lines = []

while line != "end" do
  line = gets.chomp
  all_lines << line
end


# Узнаем текущее время, когда был сделан пост
time = Time.now

# Записываем строку определенного вида согласно документации класса Time и его метода strftime
# передаются ключи, ключи определяются знаком %
file_name = time.strftime("%Y-%m-%d") #2016-05-25

time_string = time.strftime("%H:%M") #22:16

separator = "----------------------------"

# a:UTF-8 - открыть файл для записи в кодировке UTF-8
# если файла не существует - создает файл
# если файл существует - открывает файл для записи в конец файла
file = File.new(current_path + "/" + file_name + ".txt", "a:UTF-8")

# Метод print получает на вход строку и
# записывает ее в файл как есть
file.print("\n\r" + time_string + "\n\r")

# удаляем последний элемент массива- слово "end"
all_lines.pop

# метод puts сам добавляет символ перевода строки
# записываем им в файл из массива слов
for item in all_lines do
  file.puts item
end

file.puts separator

file.close

puts "Ваша запись сохранена в файл: #{file_name}.txt по адресу: #{current_path}"<file_sep>require './bridge'

puts "Go!"

sleep 1

puts "Внезапно река!"

sleep 1

bridge = Bridge.new

sleep 1
if !bridge.is_opened?
  bridge.open
end

sleep 1

puts "Поехали дальше"

puts bridge.is_opened?.to_s<file_sep>basket = []

basket << "Apple"

basket.push "Mellon"

basket.push("Cherry", "Mango", "Banana")

puts "Корзина: #{basket}"
puts "Корзина: #{basket.join", "}"

basket.delete "Cherry"
puts "Корзина: #{basket.join", "}"

basket.delete_at(0)
puts "Корзина: #{basket.join", "}"

basket.delete_if{ |x| x <= "Banana"}
puts "Корзина: #{basket.join", "}"<file_sep>def alter_input
  argument = ARGV[0]

  if (Gem.win_platform? and ARGV[0])
    argument = argument.encode(ARGV[0].encoding, "cp1251").encode("UTF-8")
  end

  if (argument == "дурак")
    puts "Сам дурак!"
  else
    puts "Здравствуй дорогой!"
  end
end


#забил из-за обработки теста - мног описать<file_sep>
def get_letters
  slovo = gets.chomp

  if slovo == nil || slovo == ""
    abort "You have not entered a word for the game"
  end

  slovo.split("")
end


def get_user_input
  letter = ""
  while letter == ""
    letter = STDIN.gets.chomp
  end
  letter
end

def check_result(user_input, letters, good_letters, bad_letters)
  if good_letters.include?(user_input) || #проверка на повторные буквы
      bad_letters.include?(user_input)
    0
  end

  if letters.include? user_input
    good_letters << user_input

    #условие когда откгадано всё слово
    if letters.uniq.size == good_letters.size  #метод uniq выбирает из исходного массива тольок уникальные значения
      1
    else
      0
    end
  else
    bad_letters << user_input
    -1
  end
end

def get_word_for_print(letters, good_letters)
  result = ""
  for elem in letters do
    if good_letters.include? elem
      result += elem + " "
    else
      result += "_ "
    end
  end
  result
end

#1. выводить загаданное слово
#2. информацию об ошибках и уже названные буквы
#3. ошибок > 7 - сообщить о поражении
#4. слово угадано - сообщить о победе
def print_status(letters, good_letters, bad_letters, errors)
  puts "\nСлово: #{get_word_for_print(letters, good_letters)}"

  puts "Errors (#{errors}): #{bad_letters.join(", ")}"

  if errors >= 7
    puts "You loose :("
  else
    if letters.uniq.size == good_letters.size
      puts "You are winner!!!\n"
    else
      puts "You have #{7-errors} effort"
    end
  end

end

def cls
  system "clear" or system "cls"
end<file_sep>require 'pony'

# переменная, содержащая мою реальную почту
my_mail = "<EMAIL>"

puts "Введите пароль от вашей почты #{my_mail} для отправки письма:"
password = STDIN.gets.chomp

puts "Введите адрес получателя:"
send_to = STDIN.gets.chomp

puts "Введите текст письма:"
body = STDIN.gets.chomp

Pony.mail(
        {
            :subject => "привет из Руби!",
            :body => body,
            :to => send_to,
            :from => my_mail,

            :via => :smtp,
            :via_options =>{
                        :address        => '<EMAIL>',
                        :port           => '465',
                        :tls            => true ,
                        :user_name      => my_mail,
                        :password       => <PASSWORD>,
                        :authentication => :plain, # :plain, :login, :cram_md5, no auth by default
                        #:domain         => "localhost.localdomain" # the HELO domain provided by the client to the server
                    }
        }
)


puts "Письмо успешно отправлено!"


<file_sep>=begin

 Хранит текущее состояние и всю логику игры

=end

class Game

  def initialize(word)
    @word = get_word(word)

    @errors = 0

    @good_letters = []
    @bad_letters = []

    @status = 0
  end

  def get_word(word)
    if word == nil || word == ""
      abort "You have not entered a word for the game"
    end

    word.split("")
  end

  # 1. спросить букву с консоли
  # 2. проверить результат
  def ask_next_letter
    puts "\n Enter the next letter"

    letter = ""

    while letter == ""
      letter = STDIN.gets.chomp
    end

    next_step(letter) # 2. проверить результат

  end

  # Метод next_step должен проверить наличие буквы в загаданном слове
  # Или среди уже названных букв (массивы @good_letters, @bad_letters)
  # Аналог метода check_result в первой версии "Виселицы"
  def next_step(letter)
    if @status == -1 || @status == 1
      return
    end

    if @good_letters.include?(letter) || @bad_letters.include?(letter)
      return
    end

    if @word.include?(letter)
      @good_letters << letter

      if @good_letters.size == @word.uniq.size
        @status = 1
      end
    else
      @bad_letters << letter
      @errors += 1

      if @errors >= 7 #если допустил 7 ошибок, то
        @status = -1  # проиграл
      end

    end

  end

=begin
  def word
    @word
  end

  def good_letters
    @good_letters
  end

  def bad_letters
    @bad_letters
  end

  def status
    @status
  end

  def errors
    @errors
  end
=end
#вместо этого используем ридер

  attr_reader :word, :good_letters, :bad_letters, :status, :errors

end