Class: XO::Engine

Inherits:
Object
  • Object
show all
Includes:
Observable
Defined in:
lib/xo/engine.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeEngine

Returns a new instance of Engine.



14
15
16
17
18
# File 'lib/xo/engine.rb', line 14

def initialize
  @grid = Grid.new
  @turn = :nobody
  @state = :idle
end

Instance Attribute Details

#stateObject

Returns the value of attribute state.



12
13
14
# File 'lib/xo/engine.rb', line 12

def state
  @state
end

#turnObject

Returns the value of attribute turn.



12
13
14
# File 'lib/xo/engine.rb', line 12

def turn
  @turn
end

Instance Method Details

#continue_playing(player) ⇒ Object

Raises:

  • (ArgumentError)


63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/xo/engine.rb', line 63

def continue_playing(player)
  raise ArgumentError, "unknown player #{player}" unless XO.is_player?(player)

  case state
  when :game_over
    handle_continue_playing(player)
  else
    raise NotImplementedError
  end

  self
end

#gridObject



20
21
22
# File 'lib/xo/engine.rb', line 20

def grid
  @grid.dup
end

#next_turnObject



24
25
26
# File 'lib/xo/engine.rb', line 24

def next_turn
  XO.other_player(turn)
end

#play(r, c) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/xo/engine.rb', line 52

def play(r, c)
  case state
  when :playing
    handle_play(r.to_i, c.to_i)
  else
    raise NotImplementedError
  end

  self
end

#start(player) ⇒ Object

Raises:

  • (ArgumentError)


28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/xo/engine.rb', line 28

def start(player)
  raise ArgumentError, "unknown player #{player}" unless XO.is_player?(player)

  case state
  when :idle
    handle_start(player)
  else
    raise NotImplementedError
  end

  self
end

#stopObject



41
42
43
44
45
46
47
48
49
50
# File 'lib/xo/engine.rb', line 41

def stop
  case state
  when :playing, :game_over
    handle_stop
  else
    raise NotImplementedError
  end

  self
end