Skip to content

Instantly share code, notes, and snippets.

@BrianDunlap89
Created September 28, 2015 02:35
Show Gist options
  • Select an option

  • Save BrianDunlap89/15fa5d9a1676ebe536b4 to your computer and use it in GitHub Desktop.

Select an option

Save BrianDunlap89/15fa5d9a1676ebe536b4 to your computer and use it in GitHub Desktop.
board = (0..8).to_a
WINNING_COMBINATIONS = [[0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6]]
PLAYER1_MARK = "X"
PLAYER2_MARK = "O"
def greeting
puts "Welcome to Tic Tac Toe!\n"
end
def show_board(board)
puts "
#{board[0]} | #{board[1]} | #{board[2]}
#{board[3]} | #{board[4]} | #{board[5]}
#{board[6]} | #{board[7]} | #{board[8]}
\n"
end
def prompt_player(current_guesses, prev_guesses, current_player)
total_guesses = current_guesses + prev_guesses
puts "#{current_player}, please make a selection: "
guess = gets.chomp.to_i
until(0..8).to_a.include?(guess)
puts "#{guess} is not a valid entry. Please choose a number between 1 and 8: "
guess = gets.chomp.to_i
end
while total_guesses.include?(guess)
puts "Please select a number that has not been chosen: "
guess = gets.chomp.to_i
end
guess
end
def player_win?(current_guesses)
if current_guesses.count >= 3
current_guesses = current_guesses.sort.combination(3).to_a
current_guesses.any? do |triplet|
WINNING_COMBINATIONS.include?(triplet)
end
end
end
def game_over(current_guesses, turn_count)
player_win?(current_guesses) || turn_count == 9
end
def aftermath(current_guesses, prev_player, player1, player2, turn_count)
if player_win?(current_guesses) && prev_player == player1
puts "\nNice work, #{player2}! You win."
puts "Haha, #{player1}! You lose!"
elsif turn_count == 9
puts "You both lose!"
else
puts "\nNice work, #{player1}! You win."
puts "Haha, #{player2}! You lose!"
end
end
def tic_tac_toe(board)
player1_guesses = Array.new
player2_guesses = Array.new
turn_count = 0
greeting
puts "Player 1, please enter your name: \n"
player1 = gets.chomp
puts "Player 2, please enter your name: \n"
player2 = gets.chomp
show_board(board)
current_player = player1
current_guesses = player1_guesses
current_mark = PLAYER1_MARK
prev_guesses = []
prev_player = nil
until game_over(prev_guesses, turn_count)
guess = prompt_player(current_guesses, prev_guesses, current_player)
current_guesses.push(guess)
board[guess.to_i] = current_mark
show_board(board)
prev_guesses = current_guesses
turn_count += 1
if current_player == player1
current_player = player2
current_guesses = player2_guesses
prev_player = player1
current_mark = PLAYER2_MARK
else
current_player = player1
current_guesses = player1_guesses
current_mark = PLAYER1_MARK
prev_player = player2
end
end
aftermath(current_guesses, prev_player, player1, player2, turn_count)
end
tic_tac_toe(board)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment