Class: CheckerCriteria

Inherits:
Object
  • Object
show all
Defined in:
lib/checker_criteria.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeCheckerCriteria

Returns a new instance of CheckerCriteria.



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/checker_criteria.rb', line 4

def initialize
  @win = false
  @winner = nil
  @positive_diagonals = [["A5", "B4", "C3", "D2"], 
  ["A4", "B3", "C2", "D1"], 
  ["A3", "B2", "C1", "D0"], 
  ["B5", "C4", "D3", "E2"], 
  ["B4", "C3", "D2", "E1"], 
  ["B3", "C2", "D1", "E0"], 
  ["C5", "D4", "E3", "F2"], 
  ["C4", "D3", "E2", "F1"], 
  ["C3", "D2", "E1", "F0"], 
  ["D5", "E4", "F3", "G2"], 
  ["D4", "E3", "F2", "G1"], 
  ["D3", "E2", "F1", "G0"]]

  @negative_diagonals = 
  [["D5", "C4", "B3", "A2"],
  ["D4", "C3", "B2", "A1"],
  ["D3", "C2", "B1", "A0"],
  ["E5", "D4", "C3", "B2"],
  ["E4", "D3", "C2", "B1"],
  ["E3", "D2", "C1", "B0"],
  ["F5", "E4", "D3", "C2"],
  ["F4", "E3", "D2", "C1"],
  ["F3", "E2", "D1", "C0"],
  ["G5", "F4", "E3", "D2"],
  ["G4", "F3", "E2", "D1"],
  ["G3", "F2", "E1", "D0"]]
  
  @columns = [:A, :B, :C, :D, :E, :F, :G]
end

Instance Attribute Details

#winObject (readonly)

Returns the value of attribute win.



2
3
4
# File 'lib/checker_criteria.rb', line 2

def win
  @win
end

#winnerObject (readonly)

Returns the value of attribute winner.



2
3
4
# File 'lib/checker_criteria.rb', line 2

def winner
  @winner
end

Instance Method Details

#check_horizontal_win(board) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/checker_criteria.rb', line 95

def check_horizontal_win(board)
  horizontal_strings = board.play_area.values.transpose.map do |row|
    row.map {|token| token.type}
  end
  horizontal_wins = horizontal_strings.map {|row| row.join}
  if horizontal_wins.any? {|str| str.include?("XXXX")} 
    @winner = "X"
    @win = true  
  elsif horizontal_wins.any? {|str| str.include?("OOOO")} 
    @winner = "O"
    @win = true  
  end
end

#check_vertical_win(board) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/checker_criteria.rb', line 81

def check_vertical_win(board)
  vert_strings = board.play_area.values.map do |column|
    column.map {|token| token.type}
  end
  vert_wins = vert_strings.map {|col| col.join}
  if vert_wins.any? { |str| str.include?("XXXX") }
    @winner = "X"
    @win = true  
  elsif vert_wins.any? { |str| str.include?("OOOO") }
    @winner = "O"
    @win = true  
  end
end

#check_win_conditions(board) ⇒ Object



37
38
39
# File 'lib/checker_criteria.rb', line 37

def check_win_conditions(board)
  check_vertical_win(board) || check_horizontal_win(board) || test_for_diagonal_wins(board)
end

#test_for_diagonal_wins(board) ⇒ Object

def



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/checker_criteria.rb', line 57

def test_for_diagonal_wins(board)
  @positive_diagonals.each do |win| if (win - token_positions_by_type("X", board)).empty?
    @win = true
    @winner = "X"
    end
  end
  @negative_diagonals.each do |win| if (win - token_positions_by_type("X", board)).empty?
    @win = true
    @winner = "X"
    end
  end
  @positive_diagonals.each do |win| if (win - token_positions_by_type("O", board)).empty?
    @win = true
    @winner = "O"
    end
  end
  @negative_diagonals.each do |win| if (win - token_positions_by_type("O", board)).empty?
    @win = true
    @winner = "O"
    end
  end
  @win
end

#token_positions_by_type(type, board) ⇒ Object

Private



43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/checker_criteria.rb', line 43

def token_positions_by_type(type, board)
  counter = 0
  single_array =[]
  until counter == 7
  board.play_area[@columns[counter]].select.with_index do |point, index| 
    if point.type == type
      single_array << "#{@columns[counter].to_s}#{index}"
    end #if
    end #do
    counter += 1
  end #until
  single_array
end