Sha256: 40f5f913696733aae24fa89cf2698b2f3ea7d9b5ee6e235598f326f1761c9325

Contents?: true

Size: 1.28 KB

Versions: 1

Compression:

Stored size: 1.28 KB

Contents

class Board
  # Board Positions:
  # 0 | 1 | 2
  # ---------
  # 3 | 4 | 5
  # ---------
  # 6 | 7 | 8

  def initialize
    @board = Array.new()
  end

  def to_s
    str = "-----------\n"
    (1..3).to_a.each do |i|
      str << " #{@board[(i*3)-3] || (i*3)-2} | #{@board[(i*3)-2] || (i*3)-1} | #{@board[(i*3)-1] || i*3} \n"
      str << "-----------\n"
    end
    str
  end

  def place_marker(marker, location)
    if location < 9 && location >= 0
      unless @board[location].nil?
        raise 'Location already taken'
      else
        @board[location] = marker
      end
    else
      raise 'Location does not exist'
    end
  end

  def get_winner
    return @board[0] if(@board[0] == @board[1] && @board[1] == @board[2]) # Top Row
    return @board[3] if(@board[3] == @board[4] && @board[4] == @board[5]) # Middle Row
    return @board[6] if(@board[6] == @board[7] && @board[7] == @board[8]) # Bottom Row
    return @board[0] if(@board[0] == @board[4] && @board[4] == @board[8]) # Diagonal from Top Right
    return @board[2] if(@board[2] == @board[4] && @board[4] == @board[6]) # Diagonal from Top Left
    return nil                                                             # No one has won
  end

  def game_over?
    (0..8).inject(true) { |val, i| val && @board[i] } || get_winner
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tic-tac-toe-1.1.0 lib/tic-tac-toe/board.rb