CLI Application (xo game)
../bin/xo
require_relative '../lib/xo'
puts "Lets play XO"
board = [" ", " ", " ", " ", " ", " ", " ", " ", " "]
play(board)
../lib/xo
def display_board(board)
puts " #{board[0]} | #{board[1]} | #{board[2]} "
puts "-----------"
puts " #{board[3]} | #{board[4]} | #{board[5]} "
puts "-----------"
puts " #{board[6]} | #{board[7]} | #{board[8]} "
end
win_conditions = [
[0, 1, 2],
[0, 3, 6],
[0, 4, 8],
[1, 4, 7],
[2, 5, 8],
[2, 4, 6],
[3, 4, 5],
[6, 7, 8],
]
def input_to_index(input)
input.to_i - 1
end
def move(board, index, symbol)
board[index] = symbol
end
def position_taken?(board, index)
if board[index] == " " || board[index] == "" || board[index] == nil
taken = false
elsif board[index] == "X" || board[index] == "O"
taken = true
end
end
def valid_move?(board, index)
index.between?(0,8) && !position_taken?(board, index)
end
def turn(board)
puts "Please enter 1-9:"
userInput = gets.strip
index = input_to_index(userInput)
if !valid_move?(board, index)
turn(board)
else
move(board, index, current_player(board))
end
display_board(board)
end
def turn_count(board)
count = 0
board.each do |index|
if index != " "
count += 1
end
end
count
end
def current_player(board)
if turn_count(board) % 2 == 0
return "X"
else
return "O"
end
end
def won?(board)
win_conditions.each do |win|
if win.all?{|y| board[y] == "X"}
return win
elsif win.all?{|y| board[y] == "O"}
return win
end
end
return false
end
def full?(board)
board.all? do |position|
position == "X" || position == "O"
end
end
def draw?(board)
!(won?(board)) && full?(board)
end
def over?(board)
if full?(board) == true
return true
end
return false
end
def winner(board)
if (draw?(board) || !full?(board)) && !won?(board)
return nil
elsif (board[won?(board)[0]] == "X")
return "X"
elsif (board[won?(board)[0]] == "O")
return "O"
end
end
def play(board)
while !over?(board) && !won?(board) && !draw?(board)
turn(board)
end
if won?(board)
puts "Congratulations #{winner(board)}!"
end
if draw?(board)
puts "Cats Game!"
end
end