Class: Board
- Inherits:
-
Object
- Object
- Board
- Defined in:
- lib/board.rb
Instance Attribute Summary collapse
-
#columns ⇒ Object
readonly
Returns the value of attribute columns.
-
#grid ⇒ Object
Returns the value of attribute grid.
-
#integer ⇒ Object
Returns the value of attribute integer.
-
#last_move ⇒ Object
Returns the value of attribute last_move.
Instance Method Summary collapse
- #check_diagonal ⇒ Object
- #check_full ⇒ Object
- #check_horizontal ⇒ Object
- #check_vertical ⇒ Object
- #check_winner ⇒ Object
- #column_full(column) ⇒ Object
- #default_board ⇒ Object
- #display_board ⇒ Object
- #drop_disc(column, disc) ⇒ Object
-
#initialize ⇒ Board
constructor
A new instance of Board.
- #valid_column(player_input) ⇒ Object
Constructor Details
#initialize ⇒ Board
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
#columns ⇒ Object (readonly)
Returns the value of attribute columns.
2 3 4 |
# File 'lib/board.rb', line 2 def columns @columns end |
#grid ⇒ Object
Returns the value of attribute grid.
3 4 5 |
# File 'lib/board.rb', line 3 def grid @grid end |
#integer ⇒ Object
Returns the value of attribute integer.
3 4 5 |
# File 'lib/board.rb', line 3 def integer @integer end |
#last_move ⇒ Object
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_diagonal ⇒ Object
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_full ⇒ Object
54 55 56 |
# File 'lib/board.rb', line 54 def check_full @grid.flatten.none? { |cell| cell == '.' } end |
#check_horizontal ⇒ Object
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_vertical ⇒ Object
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_winner ⇒ Object
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_board ⇒ Object
12 13 14 |
# File 'lib/board.rb', line 12 def default_board @grid = Array.new(6) { Array.new(7, '.') } end |
#display_board ⇒ Object
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 |