Class: Board

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBoard

Returns a new instance of Board.



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

def initialize
  @grid = Array.new(6) { Array.new(7, '.') }
  @last_move = nil
  @columns = ["A", "B", "C", "D", "E", "F", "G"]
  @integer = nil
end

Instance Attribute Details

#columnsObject (readonly)

Returns the value of attribute columns.



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

def columns
  @columns
end

#gridObject

Returns the value of attribute grid.



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

def grid
  @grid
end

#integerObject

Returns the value of attribute integer.



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

def integer
  @integer
end

#last_moveObject

Returns the value of attribute last_move.



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

def last_move
  @last_move
end

Instance Method Details

#check_diagonalObject



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/board.rb', line 102

def check_diagonal
  # Check diagonal wins in both directions

  # Check diagonal going downwards (left to right)
  (0..2).each do |row|
    (0..3).each do |col|
      if @grid[row][col] != '.' &&
         @grid[row][col] == @grid[row + 1][col + 1] &&
         @grid[row][col] == @grid[row + 2][col + 2] &&
         @grid[row][col] == @grid[row + 3][col + 3]
        return @grid[row][col]
      end
    end
  end

  # Check diagonal going upwards (left to right)
  (3..5).each do |row|
    (0..3).each do |col|
      if @grid[row][col] != '.' &&
         @grid[row][col] == @grid[row - 1][col + 1] &&
         @grid[row][col] == @grid[row - 2][col + 2] &&
         @grid[row][col] == @grid[row - 3][col + 3]
        return @grid[row][col]
      end
    end
  end

  nil
end

#check_fullObject



54
55
56
# File 'lib/board.rb', line 54

def check_full
  @grid.flatten.none? { |cell| cell == '.' }
end

#check_horizontalObject



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/board.rb', line 62

def check_horizontal
  # Check for a horizontal win
  @grid.each do |row|
    count = 0
    current_disc = nil

    row.each do |cell|
      if cell == current_disc
        count += 1
        return current_disc if count == 4 && current_disc != '.'
      else
        current_disc = cell
        count = 1
      end
    end
  end

  nil
end

#check_verticalObject



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/board.rb', line 82

def check_vertical
  # Check for a vertical win
  (0...6).each do |col|
    count = 0
    current_disc = nil

    @grid.each do |row|
      if row[col] == current_disc
        count += 1
        return current_disc if count == 4 && current_disc != '.'
      else
        current_disc = row[col]
        count = 1
      end
    end
  end

  nil
end

#check_winnerObject



58
59
60
# File 'lib/board.rb', line 58

def check_winner
  return check_horizontal || check_vertical || check_diagonal
end

#column_full(column) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# File 'lib/board.rb', line 16

def column_full(column)
  (0...6).reverse_each do |row|
    next unless @grid[row][column] == '.'
    if @grid [row][column] == '.'
      return false
    else
      return true
    end
  end
end

#default_boardObject



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

def default_board
  @grid = Array.new(6) { Array.new(7, '.') }
end

#display_boardObject



40
41
42
43
44
45
46
47
48
# File 'lib/board.rb', line 40

def display_board
  puts "ABCDEFG"
  @grid.each do |row|
    row.each do |cell|
      print cell
    end
    puts "\n"
  end
end

#drop_disc(column, disc) ⇒ Object



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

def drop_disc(column, disc)
  (0...6).reverse_each do |row|
    next unless @grid[row][column] == '.'
    if @grid[row][column] != '.'
      return false
    else
      @grid[row][column] = disc
      @last_move = [row, column]
      return true
    end
  end
end

#valid_column(player_input) ⇒ Object



50
51
52
# File 'lib/board.rb', line 50

def valid_column(player_input)
  @columns.include?(player_input)
end