-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathboard.rb
More file actions
118 lines (91 loc) · 2.61 KB
/
board.rb
File metadata and controls
118 lines (91 loc) · 2.61 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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
require_relative "piece.rb"
class Board
def initialize(setup = true)
@board = Array.new(8) { Array.new(8) }
make_board(setup)
end
def [](pos)
row, col = pos.first, pos.last
@board[row][col]
end
def []=(pos, piece)
row, col = pos.first, pos.last
@board[row][col] = piece
end
def dup
new_board = Board.new(false)
pieces.each do |piece|
new_pos = piece.pos.dup
new_board[new_pos] = Piece.new(new_board, color: piece.color,
pos: new_pos,
kinged: piece.kinged)
end
new_board
end
def empty?(pos)
self[pos].nil?
end
def over?
pieces.all? { |piece| piece.color == :red } ||
pieces.all? { |piece| piece.color == :black }
end
def render
print " "
8.times { |i| print " #{(97 + i).chr.upcase} " }
puts
@board.each_with_index do |row, i|
print " #{i + 1} "
row.each_with_index do |piece, j|
background = (i + j).even? ? :on_white : :on_yellow
print(piece.nil? ? " ".send(background) :
" #{piece.display[piece.color]} ".send(background))
end
puts " #{i + 1} "
end
print " "
8.times { |i| print " #{(97 + i).chr.upcase} " }
puts
end
private
def make_board(setup)
return self if setup == false
@board.each_with_index do |row, i|
row.each_with_index do |col, j|
pos = [i, j]
if (i + j).odd?
self[pos] = Piece.new(self, color: :black, pos: pos)if i.between?(0, 2)
self[pos] = Piece.new(self, color: :red, pos: pos) if i.between?(5, 7)
end
end
end
self
end
def pieces
@board.flatten.compact
end
end
if $PROGRAM_NAME == __FILE__
new_board = Board.new(true)
# Board#dup test
# dup_board = new_board.dup
# p new_board.object_id
# p dup_board.object_id
# dup_board[[2, 1]].perform_slide([3, 2])
# new_board.render
# dup_board.render
# TEST SETUP
# new_board[[4, 3]] = Piece.new(new_board, color: :black, pos: [4, 3])
# new_board[[3, 6]] = Piece.new(new_board, color: :red, pos: [3, 6])
# new_board.render
# SLIDE MOVES TEST
# p new_board[[2, 1]].valid_slide_moves == [[3, 0], [3, 2]]
# JUMP MOVES TEST
# p new_board[[2, 7]].valid_jump_moves == [[4, 5]]
# p new_board[[5, 2]].valid_jump_moves == [[3, 4]]
# PERFORM MOVES TEST
# new_board[[1, 0]] = nil
# new_board.render
# new_board[[5, 4]].perform_moves([[5, 4], [3, 2], [4, 1]])
# new_board[[5, 4]].perform_moves([[5, 4], [3, 2], [1, 0]])
# new_board.render
end