@@ -8,8 +8,8 @@ mod board;
8
8
9
9
use std:: f64:: consts:: PI ;
10
10
11
- use turtle:: { Turtle , Event , Color } ;
12
- use turtle:: event:: { MouseButton } ;
11
+ use turtle:: { Drawing , Turtle , Point , Color , Event } ;
12
+ use turtle:: event:: { MouseButton , PressedState } ;
13
13
14
14
use board:: { Board , Piece } ;
15
15
@@ -24,11 +24,12 @@ struct Dimensions {
24
24
}
25
25
26
26
fn main ( ) {
27
- let mut turtle = Turtle :: new ( ) ;
28
- turtle. drawing_mut ( ) . set_background_color ( "#B3E5FC" ) ;
27
+ let mut drawing = Drawing :: new ( ) ;
28
+ let mut turtle = drawing. add_turtle ( ) ;
29
+ drawing. set_background_color ( "#B3E5FC" ) ;
29
30
turtle. set_pen_color ( "#757575" ) ;
30
31
turtle. set_pen_size ( 2.0 ) ;
31
- turtle. set_speed ( 8 ) ;
32
+ turtle. set_speed ( 23 ) ;
32
33
33
34
let width = 580.0 ;
34
35
let height = 580.0 ;
@@ -59,9 +60,9 @@ fn main() {
59
60
draw_valid_moves ( & mut turtle, & board, & dim) ;
60
61
61
62
// Get rid of any events that may have accumulated while drawing
62
- drain_events ( & mut turtle ) ;
63
+ drain_events ( & mut drawing ) ;
63
64
64
- play_game ( & mut turtle, board, & dim) ;
65
+ play_game ( & mut drawing , & mut turtle, board, & dim) ;
65
66
}
66
67
67
68
fn draw_board ( turtle : & mut Turtle , dim : & Dimensions ) {
@@ -99,21 +100,20 @@ fn draw_board_pieces(turtle: &mut Turtle, board: &Board, dim: &Dimensions) {
99
100
}
100
101
}
101
102
102
- fn play_game ( turtle : & mut Turtle , mut board : Board , dim : & Dimensions ) {
103
+ fn play_game ( drawing : & mut Drawing , turtle : & mut Turtle , mut board : Board , dim : & Dimensions ) {
103
104
println ! ( "Click on a tile to make a move." ) ;
104
105
println ! ( "Current Player: {}" , board. current( ) . name( ) ) ;
105
- turtle. set_speed ( 9 ) ;
106
106
107
- let mut mouse = [ 0.0 , 0.0 ] ;
107
+ let mut mouse = Point :: origin ( ) ;
108
108
loop {
109
- let event = turtle . drawing_mut ( ) . poll_event ( ) ;
109
+ let event = drawing . poll_event ( ) ;
110
110
// Sometimes it is more convenient to use `if let` instead of `match`. In this case, it's
111
111
// really up to your personal preference. We chose to demonstrate what `if let` would look
112
112
// like if used for this code.
113
- if let Some ( Event :: MouseMove { x , y } ) = event {
114
- mouse = [ x , y ] ;
113
+ if let Some ( Event :: MouseMove ( mouse_pos ) ) = event {
114
+ mouse = mouse_pos ;
115
115
}
116
- else if let Some ( Event :: MouseButtonReleased ( MouseButton :: Left ) ) = event {
116
+ else if let Some ( Event :: MouseButton ( MouseButton :: LeftButton , PressedState :: Released ) ) = event {
117
117
// Figure out which row and column was clicked
118
118
// If these formulas seem unclear, try some example values to see what you get
119
119
let row = ( ( 1.0 - ( mouse[ 1 ] + dim. height /2.0 ) / dim. height ) * dim. rows as f64 ) . floor ( ) as isize ;
@@ -124,15 +124,15 @@ fn play_game(turtle: &mut Turtle, mut board: Board, dim: &Dimensions) {
124
124
&& board. is_valid_move ( & ( row as usize , col as usize ) ) {
125
125
let row = row as usize ;
126
126
let col = col as usize ;
127
- erase_valid_moves ( turtle, & board, dim) ;
127
+ erase_valid_moves ( drawing , turtle, & board, dim) ;
128
128
129
129
let current = board. current ( ) ;
130
130
let flipped = board. play_piece ( ( row, col) ) ;
131
131
132
132
move_to_tile ( turtle, ( row, col) , & dim) ;
133
133
draw_piece ( turtle, current, & dim) ;
134
134
135
- let background = turtle . drawing ( ) . background_color ( ) ;
135
+ let background = drawing. background_color ( ) ;
136
136
draw_tile_circles ( turtle, 0.9 , background, dim, flipped. iter ( ) ) ;
137
137
draw_tile_circles ( turtle, 0.8 , current. color ( ) , dim, flipped. iter ( ) ) ;
138
138
@@ -141,7 +141,7 @@ fn play_game(turtle: &mut Turtle, mut board: Board, dim: &Dimensions) {
141
141
println ! ( "Current Player: {}" , board. current( ) . name( ) ) ;
142
142
143
143
// Get rid of any events that may have accumulated while drawing
144
- drain_events ( turtle ) ;
144
+ drain_events ( drawing ) ;
145
145
}
146
146
}
147
147
}
@@ -161,8 +161,8 @@ fn move_to_tile(turtle: &mut Turtle, (row, col): (usize, usize), dim: &Dimension
161
161
turtle. pen_down ( ) ;
162
162
}
163
163
164
- fn erase_valid_moves ( turtle : & mut Turtle , board : & Board , dim : & Dimensions ) {
165
- let background = turtle . drawing ( ) . background_color ( ) ;
164
+ fn erase_valid_moves ( drawing : & Drawing , turtle : & mut Turtle , board : & Board , dim : & Dimensions ) {
165
+ let background = drawing. background_color ( ) ;
166
166
draw_tile_circles (
167
167
turtle,
168
168
0.5 ,
@@ -214,13 +214,14 @@ fn tile_circle(turtle: &mut Turtle, relative_size: f64, fill: Color, dim: &Dimen
214
214
fn filled_circle ( turtle : & mut Turtle , radius : f64 , fill : Color ) {
215
215
turtle. set_fill_color ( fill) ;
216
216
turtle. pen_up ( ) ;
217
- turtle. begin_fill ( ) ;
218
217
219
218
turtle. forward ( radius) ;
220
219
turtle. right ( 90.0 ) ;
221
- circle ( turtle, radius) ;
222
220
221
+ turtle. begin_fill ( ) ;
222
+ circle ( turtle, radius) ;
223
223
turtle. end_fill ( ) ;
224
+
224
225
turtle. pen_down ( ) ;
225
226
}
226
227
@@ -238,6 +239,6 @@ fn circle(turtle: &mut Turtle, radius: f64) {
238
239
}
239
240
240
241
/// Clear out all events that may have accumulated
241
- fn drain_events ( turtle : & mut Turtle ) {
242
- while let Some ( _) = turtle . drawing_mut ( ) . poll_event ( ) { }
242
+ fn drain_events ( drawing : & mut Drawing ) {
243
+ while let Some ( _) = drawing . poll_event ( ) { }
243
244
}
0 commit comments