Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions game.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
class GAME
attr_accessor :current_game_word, :current_guess, :past_letter, :total_errors

def initialize(current_game_word, hangman_pics)
@current_game_word = current_game_word
@hangman_pics = hangman_pics
#@current_hangman_pic = current_hangman_pic
@current_guess = []
@past_letter = [] # letters already said
@total_errors = 0
end

def underscore
@current_guess = []
@current_game_word.length.times do
@current_guess << "_ "
end

letters = ""
@current_guess.each do |space|
letters = space + letters + " "
end
return letters
end

def check_if_letter(str)
# Use 'str[/[a-zA-Z]*/] == str' to let all_letters
# yield true for the empty string
str[/[a-zA-Z]+/] == str
end

def check_if_guessed(input_letter)
while @past_letter.include? input_letter
puts "That letter has already been guessed"
puts "Please guess a letter"
input_letter = gets.chomp
end
return input_letter
end

def add_past_letters(valid_letter)
@past_letter << valid_letter
end

def replace_letters(no_repeated_letter)
@current_game_word.length.times do |i|
if no_repeated_letter == @current_game_word[i]
@current_guess[i] = no_repeated_letter
end
end
end

def show_letters
nice_word = ""
@current_guess.each do |i|
nice_word = nice_word + i + " "
end
return nice_word
end

def count_errors(input_letter)
unless @current_game_word.include? input_letter
@total_errors += 1
end
return @total_errors
end
#
def display_ascii
return @hangman_pics[@total_errors]
end
end
120 changes: 120 additions & 0 deletions main.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
require_relative 'game'
require_relative 'word'

all_words = ["tiger", "cat", "dog", "turtle", "horse", "lyon", "fish"]

hangman_pics = ['''
+---+
| |
|
|
|
|
=========''', '''
+---+
| |
O |
|
|
|
=========''', '''
+---+
| |
O |
| |
|
|
=========''', '''
+---+
| |
O |
/| |
|
|
=========''', '''
+---+
| |
O |
/|\ |
|
|
=========''', '''
+---+
| |
O |
/|\ |
/ |
|
=========''', '''
+---+
| |
O |
/|\ |
/ \ |
|
=========''']

puts "WELCOME TO WORD GUESS!"
puts
puts "PRESS 1 TO START"

game_start = gets.chomp.to_i

while game_start == 1
###### NEW GAME STARTS HERE
new_words = WORD.new(all_words)

word = new_words.choose_word

game = GAME.new(word, hangman_pics)
# PRINTS UNDERSCORES
game.underscore

print game.display_ascii
puts

####### LOOP UNTIL WORD IS COMPLETE OR IF TOTAL ERRORS = 6 #######
until game.total_errors == 6 || game.current_guess.join == word
# DISPLAY LETTERS IN ARRAY
print game.show_letters
puts
# GET INPUT FROM USER
puts "\nPlease guess a letter"
input_letter = gets.chomp

# MAKE SURE INPUT IS A LETTER
until game.check_if_letter(input_letter)
puts "Please enter a valid letter"
input_letter = gets.chomp
end
# COUNTER FOR GAME ERRORS
game.count_errors(input_letter)

# MAKE SURE THAT THE LETTER WAS NOT GIVEN BEFORE
no_repeated_letter = game.check_if_guessed(input_letter)

# PUSHING ALL GUESSED LETTERS INTO AN ARRAY
game.add_past_letters(no_repeated_letter)

# REPLACE LETTERS
game.replace_letters(no_repeated_letter)
# DISPLAY ASCII
print game.display_ascii
puts
puts game.past_letter.join.upcase
puts
end

if game.total_errors == 6
puts "YOU LOSE!"
puts "THE WORD WAS ACTUALLY: #{word.upcase}"
puts "PRESS 1 TO RESTART OR OTHER KEY TO ESCAPE"
game_start = gets.chomp.to_i
else
puts "YOU WIN! \nTHE WORD WAS: #{word.upcase}"
puts "PRESS 1 TO RESTART OR OTHER KEY TO ESCAPE"
game_start = gets.chomp.to_i
end
end
puts
puts "PLEASE COME BACK AGAIN!"
11 changes: 11 additions & 0 deletions word.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
class WORD
attr_accessor :words

def initialize(words)
@words = words
end

def choose_word
return @words.sample
end
end