-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathboard_printer.rb
169 lines (145 loc) · 5.23 KB
/
board_printer.rb
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
class BoardPrinter
def initialize(board_spaces)
@board_spaces = board_spaces
@board_width = 97
@wide_space_width = 15
@narrow_space_width = 11
end
def to_s
row_1 = create_full_row(row_1_spaces)
row_2 = create_perimeter_row_with_blanks(row_2_spaces)
row_3 = create_spy_alley_embassy_row(row_3_spaces)
row_4 = create_spy_alley_row(row_4_spaces, top_border_embassy_row)
row_5 = create_spy_alley_row(row_5_spaces, top_border_spy_alley_row)
row_6 = create_spy_alley_row(row_6_spaces, top_border_spy_alley_row)
row_7 = create_spy_alley_row(row_7_spaces, top_border_spy_alley_row)
row_8 = create_full_row(row_8_spaces)
row_1 + row_2 + row_3 + row_4 + row_5 + row_6 + row_7 + row_8 + top_border
end
def create_full_row(row_spaces)
total_spaces = 6
buffer = '|' + (((' ' * @wide_space_width) + '|') * total_spaces) + "\n"
max = @wide_space_width - 1
spots = row_spaces.map do |space|
" #{"%-#{max}.#{max}s" % space["name"]}|"
end.join
top_border + buffer + '|' + spots + "\n" + buffer
end
def create_perimeter_row_with_blanks(row_spaces)
blanks_between_spaces = (' ' * 63) + '|'
buffer = '|' + buffer_wide + blanks_between_spaces + buffer_wide + "\n"
max = @wide_space_width - 1
spots = " #{"%-#{max}.#{max}s" % row_spaces.first["name"]}|" +
blanks_between_spaces +
" #{"%-#{max}.#{max}s" % row_spaces.last["name"]}|"
top_border + buffer + '|' + spots + "\n" + buffer
end
def create_spy_alley_embassy_row(row_spaces)
number_of_embassys = 4
buffer = ('|' + buffer_wide) + (buffer_narrow * number_of_embassys) + buffer_wide + buffer_wide + "\n"
max_wide = @wide_space_width - 1
max_narrow = @narrow_space_width - 1
spots = row_spaces.each_with_index.map do |space, i|
if i == 0
" #{"%-#{max_wide}.#{max_wide}s" % space["name"]}|"
elsif i == 5
"#{buffer_wide} #{"%-#{max_wide}.#{max_wide}s" % space["name"]}|"
else
" #{"%-#{max_narrow}.#{max_narrow}s" % space["name"]}|"
end
end.join
top_border_embassy_row + buffer + '|' + spots + "\n" + buffer
end
def create_spy_alley_row(row_spaces, top_border)
buffer = '|' + buffer_wide + spy_alley_buffer + buffer_narrow + buffer_wide + buffer_wide + "\n"
max = @wide_space_width - 1
max_narrow = @narrow_space_width - 1
spots = row_spaces.each_with_index.map do |space, i|
if i == 0
" #{"%-#{max}.#{max}s" % space["name"]}|"
elsif i == 1
spy_alley_buffer + " #{"%-#{max_narrow}.#{max_narrow}s" % space["name"]}|"
elsif i == 2
"#{buffer_wide} #{"%-#{max}.#{max}s" % space["name"]}|"
else
" #{"%-#{max}.#{max}s" % space["name"]}|"
end
end.join
top_border + buffer + '|' + spots + "\n" + buffer
end
def top_border
'-' * @board_width + "\n"
end
def top_border_embassy_row
('-' * 65) + (' ' * @wide_space_width) + top_border_wide + "\n"
end
def top_border_spy_alley_row
top_border_wide + (' ' * 35) + top_border_narrow + (' ' * @wide_space_width) + top_border_wide + "\n"
end
def top_border_wide
'-' * 17
end
def top_border_narrow
'-' * 13
end
def buffer_wide
(' ' * @wide_space_width) + '|'
end
def buffer_narrow
(' ' * @narrow_space_width) + '|'
end
def spy_alley_buffer
(' ' * 35) + '|'
end
def create_row_2
s24 = @board_spaces.select {|space| space["position" == 24]}
s24 = @board_spaces.select {|space| space["position" == 24]}
end
def row_1_spaces
positions = [1,2,3,4,5,6]
compose_full_perimeter_row(positions)
end
def row_2_spaces
positions = [24,7]
@board_spaces.select {|space| (positions.include? space["position"]) && (space["inSpyAlley"] == false)}
end
def row_3_spaces
perimeter_positions = [23,8]
spy_alley_positions = [8,7,6,5]
compose_spy_alley_row(perimeter_positions, spy_alley_positions)
end
def row_4_spaces
perimeter_positions = [22,9]
spy_alley_positions = [4]
compose_spy_alley_row(perimeter_positions, spy_alley_positions)
end
def row_5_spaces
perimeter_positions = [21,10]
spy_alley_positions = [3]
compose_spy_alley_row(perimeter_positions, spy_alley_positions)
end
def row_6_spaces
perimeter_positions = [20,11]
spy_alley_positions = [2]
compose_spy_alley_row(perimeter_positions, spy_alley_positions)
end
def row_7_spaces
perimeter_positions = [19,12]
spy_alley_positions = [1]
compose_spy_alley_row(perimeter_positions, spy_alley_positions)
end
def row_8_spaces
positions = [18,17,16,15,14,13]
compose_full_perimeter_row(positions).reverse
end
def compose_full_perimeter_row(positions)
@board_spaces.select {|space| (positions.include? space["position"]) && (space["inSpyAlley"] == false)}
end
def compose_spy_alley_row(perimeter_positions, spy_alley_positions)
perimeter = @board_spaces.select {|space| (perimeter_positions.include? space["position"]) &&
(space["inSpyAlley"] == false)}
spy_alley = @board_spaces.select {|space| (spy_alley_positions.include? space["position"]) &&
(space["inSpyAlley"] == true)}
perimeter.insert(1, spy_alley).flatten
end
end