Files
odin-project-solutions/tic_tac_toe/Board.rb

79 lines
1.9 KiB
Ruby

class Board
attr_accessor :turn, :squares, :update_square
def initialize(turn = 1)
@turn = turn
@squares = [
[" ", " ", " "],
[" ", " ", " "],
[" ", " ", " "]
]
end
def to_s
print "\n
1: #{@squares[0][0]} | 2: #{@squares[0][1]} | 3: #{@squares[0][2]} \n
---------------------\n
4: #{@squares[1][0]} | 5: #{@squares[1][1]} | 6: #{@squares[1][2]} \n
---------------------\n
7: #{@squares[2][0]} | 8: #{@squares[2][1]} | 9: #{@squares[2][2]} \n
"
end
def update_square(square, symbol)
# translate a numbered square onto a matrix
row = ((square - 1) / 3).ceil()
column = (square - 1) % 3
success = false
if @squares[row][column] != " "
puts "Square is already taken."
puts "Please try again."
else
@squares[row][column] = symbol
success = true
end
success
end
def check_for_winner
winner = nil
# check whether all squares in a row match
for row in @squares
if row.all? { |square| square == "X" }
if !winner
winner = "X"
end
elsif row.all? { |square| square == "O" }
if !winner
winner = "O"
end
end
end
# check whether all columns match
if not winner
for column in 0..2
if @squares[column].all? { |square| square == "X" }
winner = "X"
elsif @squares[column].all? { |square| square == "O" }
winner = "O"
end
end
end
# check for diagonal matches
if not winner
if (@squares[0][0] == "X" or @squares[0][0] == "O") and @squares[0][0] == @squares[1][1] and @squares[1][1] == @squares[2][2]
winner = @squares[0][0]
elsif (@squares[0][2] == "X" or @squares[0][2] == "O") and @squares[0][2] == @squares[1][1] and @squares[1][1] == @squares[2][0]
winner = @squares[0][2]
end
end
winner
end
end