Class: Model::Board

Inherits:
Object
  • Object
show all
Defined in:
lib/tic_tac_toe/model/board.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ Board

Returns a new instance of Board.



5
6
7
8
9
# File 'lib/tic_tac_toe/model/board.rb', line 5

def initialize(args)
  @tile_collection = args[:tile_collection]
  @team_collection = args[:team_collection]
  @game_state = args[:game_state]
end

Instance Attribute Details

#tile_collectionObject (readonly)

Returns the value of attribute tile_collection.



3
4
5
# File 'lib/tic_tac_toe/model/board.rb', line 3

def tile_collection
  @tile_collection
end

Instance Method Details

#available_movesObject



29
30
31
# File 'lib/tic_tac_toe/model/board.rb', line 29

def available_moves
  current_team.available_moves(self)
end

#available_tilesObject



33
34
35
# File 'lib/tic_tac_toe/model/board.rb', line 33

def available_tiles
  @tile_collection.available_tiles
end

#cloneObject



65
66
67
68
69
# File 'lib/tic_tac_toe/model/board.rb', line 65

def clone
  self.class.new(tile_collection: @tile_collection.clone,
                 team_collection: @team_collection.clone,
                 game_state: @game_state.clone)
end

#complete?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/tic_tac_toe/model/board.rb', line 37

def complete?
  available_tiles.count.zero? || !winner.nil?
end

#current_teamObject



41
42
43
# File 'lib/tic_tac_toe/model/board.rb', line 41

def current_team
  @team_collection.current
end

#cycle_teamsObject



45
46
47
# File 'lib/tic_tac_toe/model/board.rb', line 45

def cycle_teams
  @team_collection.next
end

#dimensionsObject



11
12
13
# File 'lib/tic_tac_toe/model/board.rb', line 11

def dimensions
  @tile_collection.dimensions
end

#rating(team) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/tic_tac_toe/model/board.rb', line 53

def rating(team)
  rating = @game_state.rating(self, team)

  if rating.negative?
    rating -= available_tiles.count
  elsif rating.positive?
    rating += available_tiles.count
  end

  rating
end

#set_piece(row, col, piece) ⇒ Object



15
16
17
18
19
20
21
# File 'lib/tic_tac_toe/model/board.rb', line 15

def set_piece(row, col, piece)
  tile = @tile_collection.find_tile(row, col)

  tile.piece = piece

  tile
end

#tile_available?(row, col) ⇒ Boolean

Returns:

  • (Boolean)


23
24
25
26
27
# File 'lib/tic_tac_toe/model/board.rb', line 23

def tile_available?(row, col)
  tile = @tile_collection.find_tile(row, col)

  tile.piece.nil?
end

#winnerObject



49
50
51
# File 'lib/tic_tac_toe/model/board.rb', line 49

def winner
  @game_state.winner(self)
end