@@ -8,7 +8,7 @@ mod board;
8
8
9
9
use std:: f64:: consts:: PI ;
10
10
11
- use turtle:: { Turtle , Event } ;
11
+ use turtle:: { Turtle , Event , Color } ;
12
12
use turtle:: event:: { MouseButton } ;
13
13
14
14
use board:: { Board , Piece } ;
@@ -56,6 +56,8 @@ fn main() {
56
56
println ! ( "Drawing the board...\n " ) ;
57
57
draw_board ( & mut turtle, & dim) ;
58
58
draw_board_pieces ( & mut turtle, & board, & dim) ;
59
+ draw_valid_moves ( & mut turtle, & board, & dim) ;
60
+
59
61
// Get rid of any events that may have accumulated while drawing
60
62
drain_events ( & mut turtle) ;
61
63
@@ -117,16 +119,18 @@ fn play_game(turtle: &mut Turtle, mut board: Board, dim: &Dimensions) {
117
119
let row = ( ( 1.0 - ( mouse[ 1 ] + dim. height /2.0 ) / dim. height ) * dim. rows as f64 ) . floor ( ) as isize ;
118
120
let col = ( ( mouse[ 0 ] + dim. width /2.0 ) / dim. width * dim. cols as f64 ) . floor ( ) as isize ;
119
121
120
- println ! ( "Play {:?}" , ( row, col) ) ;
121
122
if row >= 0 && row < dim. rows as isize
122
123
&& col >= 0 && col < dim. cols as isize
123
124
&& board. is_valid_move ( & ( row as usize , col as usize ) ) {
124
125
let row = row as usize ;
125
126
let col = col as usize ;
127
+ erase_valid_moves ( turtle, & board, dim) ;
128
+
126
129
board. play_piece ( ( row, col) ) ;
127
130
128
131
move_to_tile ( turtle, ( row, col) , & dim) ;
129
132
draw_piece ( turtle, board. current ( ) , & dim) ;
133
+ draw_valid_moves ( turtle, & board, dim) ;
130
134
131
135
println ! ( "Current Player: {}" , board. current( ) . name( ) ) ;
132
136
@@ -151,11 +155,58 @@ fn move_to_tile(turtle: &mut Turtle, (row, col): (usize, usize), dim: &Dimension
151
155
turtle. pen_down ( ) ;
152
156
}
153
157
158
+ fn erase_valid_moves ( turtle : & mut Turtle , board : & Board , dim : & Dimensions ) {
159
+ let background = turtle. background_color ( ) ;
160
+ draw_tile_circles (
161
+ turtle,
162
+ 0.5 ,
163
+ background,
164
+ dim,
165
+ board. valid_moves ( ) . iter ( ) ,
166
+ ) ;
167
+ }
168
+
169
+ fn draw_valid_moves ( turtle : & mut Turtle , board : & Board , dim : & Dimensions ) {
170
+ draw_tile_circles (
171
+ turtle,
172
+ 0.2 ,
173
+ board. current ( ) . color ( ) . with_alpha ( 0.8 ) ,
174
+ dim,
175
+ board. valid_moves ( ) . iter ( ) ,
176
+ ) ;
177
+ }
178
+
179
+ fn draw_tile_circles < ' a , T : Iterator < Item = & ' a ( usize , usize ) > > (
180
+ turtle : & mut Turtle ,
181
+ relative_size : f64 ,
182
+ fill : Color ,
183
+ dim : & Dimensions ,
184
+ tiles : T ,
185
+ ) {
186
+ let speed = turtle. speed ( ) ;
187
+ turtle. set_speed ( "instant" ) ;
188
+ for pos in tiles {
189
+ move_to_tile ( turtle, * pos, & dim) ;
190
+ tile_circle ( turtle, relative_size, fill, dim) ;
191
+ }
192
+ turtle. set_speed ( speed) ;
193
+ }
194
+
154
195
/// Draws the given piece
155
196
fn draw_piece ( turtle : & mut Turtle , piece : Piece , dim : & Dimensions ) {
156
- let radius = dim. tile_width . min ( dim. tile_height ) / 2.0 * 0.9 ;
197
+ turtle. show ( ) ;
198
+ tile_circle ( turtle, 0.8 , piece. color ( ) , dim) ;
199
+ turtle. hide ( ) ;
200
+ }
201
+
202
+ fn tile_circle ( turtle : & mut Turtle , relative_size : f64 , fill : Color , dim : & Dimensions ) {
203
+ let radius = dim. tile_width . min ( dim. tile_height ) / 2.0 * relative_size;
204
+
205
+ filled_circle ( turtle, radius, fill) ;
206
+ }
157
207
158
- turtle. set_fill_color ( piece. color ( ) ) ;
208
+ fn filled_circle ( turtle : & mut Turtle , radius : f64 , fill : Color ) {
209
+ turtle. set_fill_color ( fill) ;
159
210
turtle. pen_up ( ) ;
160
211
turtle. begin_fill ( ) ;
161
212
0 commit comments