Skip to content

Instantly share code, notes, and snippets.

@DaveGavin
Last active Oct 27, 2019
Embed
What would you like to do?
class Game
GAME_NAME = "Ghost"
MAX_SCORE = GAME_NAME.length
ALPHABET = Set.new("a".."z")
def initialize(player_list)
@players = player_list
@word_fragment = ""
@dictionary = initialize_dictionary("dictionary.txt")
@scoreboard = initialize_scoreboard
end
def initialize_dictionary(file_name)
words = File.readlines(file_name).map(&:chomp)
Set.new(words)
end
def initialize_scoreboard
players = {}
@players.each { |player| players[player] = 0 }
players
end
attr_reader :players, :dictionary, :scoreboard
attr_accessor :word_fragment
# Helper Methods
def active_players
active = @scoreboard.select { |_, v| v <= MAX_SCORE }
active.keys
end
def valid_char?(char)
return false unless ALPHABET.include?(char)
new_fragment = @word_fragment + char
@dictionary.any? { |word| word.start_with?(new_fragment) }
end
def update_game_state(player, player_letter_choice)
@word_fragment += player_letter_choice
@scoreboard[player] += 1 if word_complete?
end
def word_complete?
@dictionary.any? { |word| word == @word_fragment }
end
# Display Methods
def prompt_choice_redo
puts [ "The character you chose was not valid.",
"Valid choices continute to build towards a word.",
"The current fragment is #{word_fragment}.",
"Please choose again."
].join("\n")
end
def display_game_state(player)
puts "#{player} added #{@word_fragment[-1]} to the fragment."
puts "It is now #{@word_fragment}."
puts "#{player} spelled a word!" if word_complete?
end
end
players = ["Dave", "Josh"]
ghost = Game.new(players)
@DaveGavin
Copy link
Author

DaveGavin commented Oct 27, 2019

When I try to run this code in pry I get an "unexpected end" error.

I suspect that the single line if and unless statements are the cause. I've posted another version of this code in another gist with them removed. The code with them removed does not give me any error.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment