Created
September 27, 2015 12:23
-
-
Save Joeventures/a5e5acbfb398cdf2d8fc to your computer and use it in GitHub Desktop.
Tic-Tac-Toe Easy Mode
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# The board is laid out as a simple array 0..8 | |
#all_guesses is a hash: {"x"=>[1,2,3,4], "o"=>[5,6,7,8]} | |
WIN_SET = [ | |
[0,1,2], [3,4,5], [6,7,8], | |
[0,3,6], [1,4,7], [2,5,8], | |
[0,4,8], [2,4,6] | |
] | |
def winning_set?( player_guesses ) | |
winner = false | |
combos = player_guesses.sort.combination(3).to_a | |
combos.each do |a| | |
winner = true if WIN_SET.include?(a) | |
end | |
winner | |
end | |
def draw?( all_guesses ) | |
every_guess = all_guesses['x'] + all_guesses['o'] | |
every_guess.count == 9 | |
end | |
def game_over? ( current_player, all_guesses ) | |
if winning_set?( all_guesses[current_player] ) | |
current_player | |
elsif draw?( all_guesses ) | |
"Nobody" | |
else | |
false | |
end | |
end | |
def show_grid( all_guesses ) | |
puts "\n" * 20 | |
space = Array.new | |
available_spaces = Array.new | |
(1..9).to_a.each do |n| | |
space[n-1] = n.to_s | |
space[n-1] = "x" if all_guesses["x"].include?(n-1) | |
space[n-1] = "o" if all_guesses["o"].include?(n-1) | |
available_spaces.push(n-1) if space[n-1] == n.to_s | |
end | |
puts "-------------" | |
puts "| #{space[0]} | #{space[1]} | #{space[2]} |" | |
puts "-------------" | |
puts "| #{space[3]} | #{space[4]} | #{space[5]} |" | |
puts "-------------" | |
puts "| #{space[6]} | #{space[7]} | #{space[8]} |" | |
puts "-------------" | |
available_spaces | |
end | |
def take_turn( all_guesses, current_player, name) | |
available_spaces = show_grid(all_guesses) | |
puts "Player #{name}: Your turn." | |
puts "Choose a square. Choose carefully!" | |
guess = gets.chomp.to_i | |
until (available_spaces).include?(guess-1) | |
puts "That is not an available square. Please try again." | |
guess = gets.chomp.to_i | |
end | |
guess = guess - 1 | |
all_guesses[current_player].push(guess) | |
end | |
def play_round(x_name, o_name) | |
all_guesses = {'x' => [], 'o' => []} | |
names = { 'x' => x_name, 'o' => o_name } | |
current_player = 'o' | |
until game_over?(current_player, all_guesses) | |
if current_player == 'o' | |
current_player = 'x' | |
else | |
current_player = 'o' | |
end | |
take_turn(all_guesses, current_player, names[current_player]) | |
end | |
winner = game_over?(current_player, all_guesses) | |
show_grid(all_guesses) | |
puts winner + " wins!" | |
end | |
def play_tic_tac_toe | |
puts "You are about to play tic-tac-toe. Get ready!" | |
sleep(3) | |
puts "Player x: What is your name?" | |
x_name = gets.chomp | |
puts "Player o: What is your name?" | |
o_name = gets.chomp | |
if x_name == o_name | |
x_name = "x" + x_name + "x" | |
o_name = "o" + o_name + "o" | |
puts "You both have the same name!" | |
puts "To keep things simple, Player x will now be known as #{x_name}" | |
puts "and Player o will now be known as #{o_name}. So there." | |
puts "Press Enter to continue." | |
gets | |
end | |
play_again = 'y' | |
until play_again == 'n' | |
play_round(x_name,o_name) | |
sleep(1) | |
puts "Great job! Play again? (y/n)" | |
play_again = gets.chomp | |
end | |
puts "A strange game. The only winning move is not to play." | |
puts "How about a nice game of chess?" | |
end | |
play_tic_tac_toe |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment