@@ -139,7 +139,7 @@ def __repr__(self):
139
139
140
140
class turtle (object ):
141
141
"""A Turtle that can be given commands to draw."""
142
-
142
+ # pylint:disable=too-many-statements
143
143
def __init__ (self , display = None , scale = 1 ):
144
144
145
145
if display :
@@ -224,6 +224,7 @@ def __init__(self, display=None, scale=1):
224
224
self ._splash .append (self ._turtle_group )
225
225
self ._penstate = False
226
226
self ._pensize = 1
227
+ self ._pencolor = 1
227
228
self .pencolor (Color .WHITE )
228
229
self ._bg_pic = None
229
230
self ._turtle_pic = None
@@ -233,8 +234,10 @@ def __init__(self, display=None, scale=1):
233
234
self ._stamps = {}
234
235
self ._turtle_odb_use = 0
235
236
self ._turtle_odb_file = None
237
+ self ._odb_tilegrid = None
236
238
gc .collect ()
237
239
self ._display .show (self ._splash )
240
+ # pylint:enable=too-many-statements
238
241
239
242
def _drawturtle (self ):
240
243
if self ._turtle_pic is None :
@@ -257,8 +260,6 @@ def forward(self, distance):
257
260
:param distance: how far to move (integer or float)
258
261
"""
259
262
p = self .pos ()
260
- # works only for degrees.
261
- # TODO implement for radians
262
263
x1 = p [0 ] + math .sin (math .radians ((self ._angleOffset + self ._angleOrient * self ._heading ) % self ._fullcircle )) * distance
263
264
y1 = p [1 ] + math .cos (math .radians ((self ._angleOffset + self ._angleOrient * self ._heading ) % self ._fullcircle )) * distance
264
265
self .goto (x1 , y1 )
@@ -301,7 +302,7 @@ def left(self, angle):
301
302
self ._turn (angle )
302
303
lt = left
303
304
304
- #pylint:disable=too-many-branches,too-many-statements
305
+ # pylint:disable=too-many-branches,too-many-statements
305
306
def goto (self , x1 , y1 = None ):
306
307
"""If y1 is None, x1 must be a pair of coordinates or an (x, y) tuple
307
308
@@ -363,7 +364,7 @@ def goto(self, x1, y1=None):
363
364
self ._x = x0
364
365
self ._y = y0
365
366
if self ._speed > 0 :
366
- if step >= self ._speed :
367
+ if step >= self ._speed :
367
368
# mark the step
368
369
step = 1
369
370
self ._drawturtle ()
@@ -381,6 +382,7 @@ def goto(self, x1, y1=None):
381
382
self ._drawturtle ()
382
383
setpos = goto
383
384
setposition = goto
385
+ # pylint:enable=too-many-branches,too-many-statements
384
386
385
387
def setx (self , x ):
386
388
"""Set the turtle's first coordinate to x, leave second coordinate
@@ -424,6 +426,7 @@ def home(self):
424
426
self .setheading (90 )
425
427
self .goto (0 , 0 )
426
428
429
+ # pylint:disable=too-many-locals
427
430
def _plot (self , x , y , c ):
428
431
if self ._pensize == 1 :
429
432
try :
@@ -498,6 +501,7 @@ def _plot(self, x, y, c):
498
501
x0 -= 1
499
502
else :
500
503
x0 += 1
504
+ # pylint:enable=too-many-locals
501
505
502
506
def circle (self , radius , extent = None , steps = None ):
503
507
"""Draw a circle with given radius. The center is radius units left of
@@ -542,6 +546,7 @@ def circle(self, radius, extent=None, steps=None):
542
546
self .goto (pos )
543
547
self .setheading (h )
544
548
549
+ # pylint:disable=inconsistent-return-statements
545
550
def speed (self , speed = None ):
546
551
"""
547
552
@@ -571,6 +576,7 @@ def speed(self, speed=None):
571
576
self ._speed = 0
572
577
else :
573
578
self ._speed = speed
579
+ # pylint:enable=inconsistent-return-statements
574
580
575
581
def dot (self , size = None , color = None ):
576
582
"""Draw a circular dot with diameter size, using color.
@@ -605,6 +611,7 @@ def dot(self, size=None, color=None):
605
611
self ._plot (self ._x , self ._y , color )
606
612
self ._pensize = pensize
607
613
614
+
608
615
def stamp (self , bitmap = None , palette = None ):
609
616
"""
610
617
Stamp a copy of the turtle shape onto the canvas at the current
@@ -613,7 +620,7 @@ def stamp(self, bitmap=None, palette=None):
613
620
"""
614
621
if len (self ._fg_addon_group ) >= 6 :
615
622
print ("Addon group full" )
616
- return
623
+ return - 1
617
624
s_id = len (self ._stamps )
618
625
if self ._turtle_pic is None :
619
626
# easy.
@@ -629,9 +636,9 @@ def stamp(self, bitmap=None, palette=None):
629
636
y = int (self ._y - self ._turtle_odb .height // 2 ))
630
637
self ._turtle_odb_use += 1
631
638
else :
632
- if bitmap == None :
639
+ if bitmap is None :
633
640
raise RuntimeError ("a bitmap must be provided" )
634
- if palette == None :
641
+ if palette is None :
635
642
raise RuntimeError ("a palette must be provided" )
636
643
new_stamp = displayio .TileGrid (bitmap , pixel_shader = palette ,
637
644
x = int (self ._x - bitmap .width // 2 ),
@@ -711,13 +718,9 @@ def towards(self, x1, y1=None):
711
718
result = math .degrees (math .atan2 (x1 - x0 , y1 - y0 ))
712
719
result /= self ._degreesPerAU
713
720
return (self ._angleOffset + self ._angleOrient * result ) % self ._fullcircle
714
- if self ._logomode :
715
- print ("logo mode" )
721
+ if self ._logomode :
716
722
return (math .degrees (math .atan2 (x0 - x1 , y0 - y1 )))
717
- else :
718
- # not used yet
719
- print ("standard mode" )
720
- return (math .degrees (math .atan2 (y0 - y1 , x0 - x1 )))
723
+ return (math .degrees (math .atan2 (y0 - y1 , x0 - x1 )))
721
724
722
725
def xcor (self ):
723
726
"""Return the turtle's x coordinate."""
@@ -755,7 +758,7 @@ def _setDegreesPerAU(self, fullcircle):
755
758
"""Helper function for degrees() and radians()"""
756
759
self ._fullcircle = fullcircle
757
760
self ._degreesPerAU = 360 / fullcircle
758
- if self ._mode == "logo" :
761
+ if self ._logomode :
759
762
self ._angleOffset = 0
760
763
else :
761
764
self ._angleOffset = - fullcircle / 4
@@ -846,10 +849,11 @@ def pensize(self, width=None):
846
849
###########################################################################
847
850
# Color control
848
851
849
- # pylint:disable=no-self-use
852
+ # pylint:disable=no-self-use
850
853
851
854
def _color_to_pencolor (self , c ):
852
855
return Color .colors .index (c )
856
+ # pylint:enable=no-self-use
853
857
854
858
def pencolor (self , c = None ):
855
859
"""
@@ -908,8 +912,9 @@ def bgcolor(self, c=None):
908
912
self ._turtle_palette .make_opaque (1 )
909
913
for h in range (self ._h ):
910
914
for w in range (self ._w ):
911
- if self ._fg_bitmap [w , h ] == old_color :
915
+ if self ._fg_bitmap [w , h ] == old_color :
912
916
self ._fg_bitmap [w , h ] = self ._bg_color
917
+ return Color .colors [self ._bg_color ]
913
918
914
919
def set_bgpic (self , file ):
915
920
"""
@@ -976,33 +981,28 @@ def clear(self):
976
981
def showturtle (self ):
977
982
"""
978
983
Make the turtle visible."""
979
- if len ( self ._turtle_group ) == 1 :
984
+ if self ._turtle_group :
980
985
return
986
+ if self ._turtle_pic is None :
987
+ self ._turtle_group .append (self ._turtle_sprite )
981
988
else :
982
- if self ._turtle_pic is None :
983
- self ._turtle_group .append (self ._turtle_sprite )
984
- else :
985
- self ._turtle_group .append (self ._turtle_alt_sprite )
986
- return
989
+ self ._turtle_group .append (self ._turtle_alt_sprite )
987
990
st = showturtle
988
991
989
992
def hideturtle (self ):
990
993
"""
991
994
Make the turtle invisible."""
992
- if len (self ._turtle_group ) == 0 :
993
- return
994
- else :
995
- self ._turtle_group .pop ()
995
+ if not self ._turtle_group :
996
996
return
997
+ self ._turtle_group .pop ()
997
998
ht = hideturtle
998
999
999
1000
def isvisible (self ):
1000
1001
"""
1001
1002
Return True if the Turtle is shown, False if it's hidden."""
1002
- if len (self ._turtle_group ) == 0 :
1003
- return False
1004
- else :
1003
+ if self ._turtle_group :
1005
1004
return True
1005
+ return False
1006
1006
1007
1007
def changeturtle (self , source = None , dimensions = (12 , 12 )):
1008
1008
"""
@@ -1015,14 +1015,14 @@ def changeturtle(self, source=None, dimensions=(12, 12)):
1015
1015
if self ._turtle_pic is None :
1016
1016
return
1017
1017
else :
1018
- if len ( self ._turtle_group ) == 1 :
1018
+ if self ._turtle_group :
1019
1019
self ._turtle_group .remove (self ._turtle_alt_sprite )
1020
1020
self ._turtle_group .append (self ._turtle_sprite )
1021
1021
self ._turtle_alt_sprite = None
1022
1022
if self ._turtle_odb is not None :
1023
1023
self ._turtle_odb_use -= 1
1024
1024
self ._turtle_odb = None
1025
- if self ._turtle_odb_file is not None :
1025
+ if self ._turtle_odb_file is not None :
1026
1026
if self ._turtle_odb_use == 0 :
1027
1027
self ._turtle_odb_file .close ()
1028
1028
self ._turtle_odb_file = None
@@ -1032,7 +1032,7 @@ def changeturtle(self, source=None, dimensions=(12, 12)):
1032
1032
elif isinstance (source , str ):
1033
1033
visible = self .isvisible ()
1034
1034
if self ._turtle_pic is not None :
1035
- if len ( self ._turtle_group ) == 1 :
1035
+ if self ._turtle_group :
1036
1036
self ._turtle_group .remove (self ._turtle_alt_sprite )
1037
1037
self ._turtle_alt_sprite = None
1038
1038
self ._turtle_odb = None
@@ -1055,7 +1055,7 @@ def changeturtle(self, source=None, dimensions=(12, 12)):
1055
1055
self ._turtle_pic = True
1056
1056
self ._turtle_alt_sprite = displayio .TileGrid (self ._turtle_odb , pixel_shader = displayio .ColorConverter ())
1057
1057
1058
- if len ( self ._turtle_group ) == 1 :
1058
+ if self ._turtle_group :
1059
1059
self ._turtle_group .pop ()
1060
1060
if visible :
1061
1061
self ._turtle_group .append (self ._turtle_alt_sprite )
@@ -1068,7 +1068,7 @@ def changeturtle(self, source=None, dimensions=(12, 12)):
1068
1068
self ._turtle_odb_file .close ()
1069
1069
self ._turtle_pic = dimensions
1070
1070
self ._turtle_alt_sprite = source
1071
- if len ( self ._turtle_group ) == 1 :
1071
+ if self ._turtle_group :
1072
1072
self ._turtle_group .pop ()
1073
1073
self ._turtle_group .append (self ._turtle_alt_sprite )
1074
1074
self ._drawturtle ()
@@ -1110,13 +1110,13 @@ def _turn(self, angle):
1110
1110
steps += abs (angle - steps * d_angle ) // abs (d_angle )
1111
1111
1112
1112
self ._plot (self ._x , self ._y , self ._pencolor )
1113
- for i in range (steps ):
1113
+ for _ in range (steps ):
1114
1114
self ._heading += d_angle
1115
1115
self ._heading %= self ._fullcircle # wrap
1116
1116
self ._plot (self ._x , self ._y , self ._pencolor )
1117
1117
1118
1118
# error correction
1119
- if self ._heading != (start_angle + angle ) % self ._fullcircle :
1119
+ if self ._heading != (start_angle + angle ) % self ._fullcircle :
1120
1120
self ._heading = start_angle + angle
1121
1121
self ._heading %= self ._fullcircle
1122
1122
self ._plot (self ._x , self ._y , self ._pencolor )
@@ -1129,4 +1129,3 @@ def _GCD(self, a, b):
1129
1129
else :
1130
1130
r = a % b
1131
1131
return self ._GCD (b , r )
1132
-
0 commit comments