-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathboard.rb
More file actions
91 lines (70 loc) · 1.55 KB
/
Copy pathboard.rb
File metadata and controls
91 lines (70 loc) · 1.55 KB
1
2
3
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
require_relative 'piece.rb'
class Board
GRID_SIZE = 8
attr_accessor :grid
def initialize
@grid = Array.new(GRID_SIZE) { Array.new(GRID_SIZE) }
end
# def setup
# grid.each_with_index do |row, row_idx|
# row.each_with_index do |col, col_idx|
# if row_idx.between?(0,2) &&
# end
# end
# end
def render
grid.each do |row|
row.each do |square|
if square.nil?
print "[ ]"
else
print "[#{square.to_s}]"
end
end
print "\n"
end
print "~~~~~~~~~~~~~~~~~~~~~~~~\n"
end
def dup
new_grid = Board.new
pieces = self.grid.flatten.compact
pieces.each do |piece|
new_grid.add_piece(piece.pos, piece.color)
end
new_grid
end
def add_piece(pos, color)
self[pos] = Piece.new(pos, color, self)
end
def [](pos)
x, y = pos
grid[x][y]
end
def []=(pos, piece)
x, y = pos
self.grid[x][y] = piece
end
def move!(from_pos, to_pos)
self[to_pos], self[from_pos] = self[from_pos], self[to_pos]
self[to_pos].pos = to_pos unless self[to_pos].nil?
end
def clear_space(pos)
self[pos] = nil
end
def on_board?(pos)
pos.all? { |coordinate| (0...GRID_SIZE).include?(coordinate) }
end
end
if __FILE__ == $PROGRAM_NAME
board = Board.new
board.add_piece([2,4], :b)
board.add_piece([4,2], :r)
board.add_piece([2,2], :b)
board.add_piece([4,6], :r)
board.render
p board[[4,6]].valid_move_seq?([[3,5]])
board[[4,6]].move([3,5])
board.render
p board[[3,5]].valid_move_seq?([[1,3], [3,1], [5,3]])
board.render
end