Class: CheckerCriteria
- Inherits:
-
Object
- Object
- CheckerCriteria
- Defined in:
- lib/checker_criteria.rb
Instance Attribute Summary collapse
-
#win ⇒ Object
readonly
Returns the value of attribute win.
-
#winner ⇒ Object
readonly
Returns the value of attribute winner.
Instance Method Summary collapse
- #check_horizontal_win(board) ⇒ Object
- #check_vertical_win(board) ⇒ Object
- #check_win_conditions(board) ⇒ Object
-
#initialize ⇒ CheckerCriteria
constructor
A new instance of CheckerCriteria.
-
#test_for_diagonal_wins(board) ⇒ Object
def.
-
#token_positions_by_type(type, board) ⇒ Object
Private.
Constructor Details
#initialize ⇒ CheckerCriteria
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
#win ⇒ Object (readonly)
Returns the value of attribute win.
2 3 4 |
# File 'lib/checker_criteria.rb', line 2 def win @win end |
#winner ⇒ Object (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 |