Python-turtle画出皮卡丘(有趣小游戏)
一、效果图
二、Python代码
import turtledef getPosition ( x, y) : turtle. setx( x) turtle. sety( y) print ( x, y) class Pikachu : def __init__ ( self) : self. t = turtle. Turtle( ) t = self. tt. pensize( 3 ) t. speed( 9 ) t. ondrag( getPosition) def noTrace_goto ( self, x, y) : self. t. penup( ) self. t. goto( x, y) self. t. pendown( ) def leftEye ( self, x, y) : self. noTrace_goto( x, y) t = self. tt. seth( 0 ) t. fillcolor( '#333333' ) t. begin_fill( ) t. circle( 22 ) t. end_fill( ) self. noTrace_goto( x, y + 10 ) t. fillcolor( '#000000' ) t. begin_fill( ) t. circle( 10 ) t. end_fill( ) self. noTrace_goto( x + 6 , y + 22 ) t. fillcolor( '#ffffff' ) t. begin_fill( ) t. circle( 10 ) t. end_fill( ) def rightEye ( self, x, y) : self. noTrace_goto( x, y) t = self. tt. seth( 0 ) t. fillcolor( '#333333' ) t. begin_fill( ) t. circle( 22 ) t. end_fill( ) self. noTrace_goto( x, y + 10 ) t. fillcolor( '#000000' ) t. begin_fill( ) t. circle( 10 ) t. end_fill( ) self. noTrace_goto( x - 6 , y + 22 ) t. fillcolor( '#ffffff' ) t. begin_fill( ) t. circle( 10 ) t. end_fill( ) def mouth ( self, x, y) : self. noTrace_goto( x, y) t = self. tt. fillcolor( '#88141D' ) t. begin_fill( ) l1 = [ ] l2 = [ ] t. seth( 190 ) a = 0.7 for i in range ( 28 ) : a += 0.1 t. right( 3 ) t. fd( a) l1. append( t. position( ) ) self. noTrace_goto( x, y) t. seth( 10 ) a = 0.7 for i in range ( 28 ) : a += 0.1 t. left( 3 ) t. fd( a) l2. append( t. position( ) ) t. seth( 10 ) t. circle( 50 , 15 ) t. left( 180 ) t. circle( - 50 , 15 ) t. circle( - 50 , 40 ) t. seth( 233 ) t. circle( - 50 , 55 ) t. left( 180 ) t. circle( 50 , 12.1 ) t. end_fill( ) self. noTrace_goto( 17 , 54 ) t. fillcolor( '#DD716F' ) t. begin_fill( ) t. seth( 145 ) t. circle( 40 , 86 ) t. penup( ) for pos in reversed ( l1[ : 20 ] ) : t. goto( pos[ 0 ] , pos[ 1 ] + 1.5 ) for pos in l2[ : 20 ] : t. goto( pos[ 0 ] , pos[ 1 ] + 1.5 ) t. pendown( ) t. end_fill( ) self. noTrace_goto( - 17 , 94 ) t. seth( 8 ) t. fd( 4 ) t. back( 8 ) def leftCheek ( self, x, y) : turtle. tracer( False ) t = self. tself. noTrace_goto( x, y) t. seth( 300 ) t. fillcolor( '#DD4D28' ) t. begin_fill( ) a = 2.3 for i in range ( 120 ) : if 0 <= i < 30 or 60 <= i < 90 : a -= 0.05 t. lt( 3 ) t. fd( a) else : a += 0.05 t. lt( 3 ) t. fd( a) t. end_fill( ) turtle. tracer( True ) def rightCheek ( self, x, y) : t = self. tturtle. tracer( False ) self. noTrace_goto( x, y) t. seth( 60 ) t. fillcolor( '#DD4D28' ) t. begin_fill( ) a = 2.3 for i in range ( 120 ) : if 0 <= i < 30 or 60 <= i < 90 : a -= 0.05 t. lt( 3 ) t. fd( a) else : a += 0.05 t. lt( 3 ) t. fd( a) t. end_fill( ) turtle. tracer( True ) def colorLeftEar ( self, x, y) : t = self. tself. noTrace_goto( x, y) t. fillcolor( '#000000' ) t. begin_fill( ) t. seth( 330 ) t. circle( 100 , 35 ) t. seth( 219 ) t. circle( - 300 , 19 ) t. seth( 110 ) t. circle( - 30 , 50 ) t. circle( - 300 , 10 ) t. end_fill( ) def colorRightEar ( self, x, y) : t = self. tself. noTrace_goto( x, y) t. fillcolor( '#000000' ) t. begin_fill( ) t. seth( 300 ) t. circle( - 100 , 30 ) t. seth( 35 ) t. circle( 300 , 15 ) t. circle( 30 , 50 ) t. seth( 190 ) t. circle( 300 , 17 ) t. end_fill( ) def body ( self) : t = self. tt. fillcolor( '#F6D02F' ) t. begin_fill( ) t. penup( ) t. circle( 130 , 40 ) t. pendown( ) t. circle( 100 , 105 ) t. left( 180 ) t. circle( - 100 , 5 ) t. seth( 20 ) t. circle( 300 , 30 ) t. circle( 30 , 50 ) t. seth( 190 ) t. circle( 300 , 36 ) t. seth( 150 ) t. circle( 150 , 70 ) t. seth( 200 ) t. circle( 300 , 40 ) t. circle( 30 , 50 ) t. seth( 20 ) t. circle( 300 , 35 ) t. seth( 240 ) t. circle( 105 , 95 ) t. left( 180 ) t. circle( - 105 , 5 ) t. seth( 210 ) t. circle( 500 , 18 ) t. seth( 200 ) t. fd( 10 ) t. seth( 280 ) t. fd( 7 ) t. seth( 210 ) t. fd( 10 ) t. seth( 300 ) t. circle( 10 , 80 ) t. seth( 220 ) t. fd( 10 ) t. seth( 300 ) t. circle( 10 , 80 ) t. seth( 240 ) t. fd( 12 ) t. seth( 0 ) t. fd( 13 ) t. seth( 240 ) t. circle( 10 , 70 ) t. seth( 10 ) t. circle( 10 , 70 ) t. seth( 10 ) t. circle( 300 , 18 ) t. seth( 75 ) t. circle( 500 , 8 ) t. left( 180 ) t. circle( - 500 , 15 ) t. seth( 250 ) t. circle( 100 , 65 ) t. seth( 320 ) t. circle( 100 , 5 ) t. left( 180 ) t. circle( - 100 , 5 ) t. seth( 220 ) t. circle( 200 , 20 ) t. circle( 20 , 70 ) t. seth( 60 ) t. circle( - 100 , 20 ) t. left( 180 ) t. circle( 100 , 20 ) t. seth( 300 ) t. circle( 10 , 70 ) t. seth( 60 ) t. circle( - 100 , 20 ) t. left( 180 ) t. circle( 100 , 20 ) t. seth( 10 ) t. circle( 100 , 60 ) t. seth( 180 ) t. circle( - 100 , 10 ) t. left( 180 ) t. circle( 100 , 10 ) t. seth( 5 ) t. circle( 100 , 10 ) t. circle( - 100 , 40 ) t. circle( 100 , 35 ) t. left( 180 ) t. circle( - 100 , 10 ) t. seth( 290 ) t. circle( 100 , 55 ) t. circle( 10 , 50 ) t. seth( 120 ) t. circle( 100 , 20 ) t. left( 180 ) t. circle( - 100 , 20 ) t. seth( 0 ) t. circle( 10 , 50 ) t. seth( 110 ) t. circle( 100 , 20 ) t. left( 180 ) t. circle( - 100 , 20 ) t. seth( 30 ) t. circle( 20 , 50 ) t. seth( 100 ) t. circle( 100 , 40 ) t. seth( 200 ) t. circle( - 100 , 5 ) t. left( 180 ) t. circle( 100 , 5 ) t. left( 30 ) t. circle( 100 , 75 ) t. right( 15 ) t. circle( - 300 , 21 ) t. left( 180 ) t. circle( 300 , 3 ) t. seth( 43 ) t. circle( 200 , 60 ) t. right( 10 ) t. fd( 10 ) t. circle( 5 , 160 ) t. seth( 90 ) t. circle( 5 , 160 ) t. seth( 90 ) t. fd( 10 ) t. seth( 90 ) t. circle( 5 , 180 ) t. fd( 10 ) t. left( 180 ) t. left( 20 ) t. fd( 10 ) t. circle( 5 , 170 ) t. fd( 10 ) t. seth( 240 ) t. circle( 50 , 30 ) t. end_fill( ) self. noTrace_goto( 130 , 125 ) t. seth( - 20 ) t. fd( 5 ) t. circle( - 5 , 160 ) t. fd( 5 ) self. noTrace_goto( 166 , 130 ) t. seth( - 90 ) t. fd( 3 ) t. circle( - 4 , 180 ) t. fd( 3 ) t. seth( - 90 ) t. fd( 3 ) t. circle( - 4 , 180 ) t. fd( 3 ) self. noTrace_goto( 168 , 134 ) t. fillcolor( '#F6D02F' ) t. begin_fill( ) t. seth( 40 ) t. fd( 200 ) t. seth( - 80 ) t. fd( 150 ) t. seth( 210 ) t. fd( 150 ) t. left( 90 ) t. fd( 100 ) t. right( 95 ) t. fd( 100 ) t. left( 110 ) t. fd( 70 ) t. right( 110 ) t. fd( 80 ) t. left( 110 ) t. fd( 30 ) t. right( 110 ) t. fd( 32 ) t. right( 106 ) t. circle( 100 , 25 ) t. right( 15 ) t. circle( - 300 , 2 ) t. seth( 30 ) t. fd( 40 ) t. left( 100 ) t. fd( 70 ) t. right( 100 ) t. fd( 80 ) t. left( 100 ) t. fd( 46 ) t. seth( 66 ) t. circle( 200 , 38 ) t. right( 10 ) t. fd( 10 ) t. end_fill( ) t. fillcolor( '#923E24' ) self. noTrace_goto( 126.82 , - 156.84 ) t. begin_fill( ) t. seth( 30 ) t. fd( 40 ) t. left( 100 ) t. fd( 40 ) t. pencolor( '#923e24' ) t. seth( - 30 ) t. fd( 30 ) t. left( 140 ) t. fd( 20 ) t. right( 150 ) t. fd( 20 ) t. left( 150 ) t. fd( 20 ) t. right( 150 ) t. fd( 20 ) t. left( 130 ) t. fd( 18 ) t. pencolor( '#000000' ) t. seth( - 45 ) t. fd( 67 ) t. right( 110 ) t. fd( 80 ) t. left( 110 ) t. fd( 30 ) t. right( 110 ) t. fd( 32 ) t. right( 106 ) t. circle( 100 , 25 ) t. right( 15 ) t. circle( - 300 , 2 ) t. end_fill( ) self. cap( - 134.07 , 147.81 ) self. mouth( - 5 , 25 ) self. leftCheek( - 126 , 32 ) self. rightCheek( 107 , 63 ) self. colorLeftEar( - 250 , 100 ) self. colorRightEar( 140 , 270 ) self. leftEye( - 85 , 90 ) self. rightEye( 50 , 110 ) t. hideturtle( ) def cap ( self, x, y) : self. noTrace_goto( x, y) t = self. tt. fillcolor( '#CD0000' ) t. begin_fill( ) t. seth( 200 ) t. circle( 400 , 7 ) t. left( 180 ) t. circle( - 400 , 30 ) t. circle( 30 , 60 ) t. fd( 50 ) t. circle( 30 , 45 ) t. fd( 60 ) t. left( 5 ) t. circle( 30 , 70 ) t. right( 20 ) t. circle( 200 , 70 ) t. circle( 30 , 60 ) t. fd( 70 ) t. right( 35 ) t. fd( 50 ) t. circle( 8 , 100 ) t. end_fill( ) self. noTrace_goto( - 168.47 , 185.52 ) t. seth( 36 ) t. circle( - 270 , 54 ) t. left( 180 ) t. circle( 270 , 27 ) t. circle( - 80 , 98 ) t. fillcolor( '#444444' ) t. begin_fill( ) t. left( 180 ) t. circle( 80 , 197 ) t. left( 58 ) t. circle( 200 , 45 ) t. end_fill( ) self. noTrace_goto( - 58 , 270 ) t. pencolor( '#228B22' ) t. dot( 35 ) self. noTrace_goto( - 30 , 280 ) t. fillcolor( '#228B22' ) t. begin_fill( ) t. seth( 100 ) t. circle( 30 , 180 ) t. seth( 190 ) t. fd( 15 ) t. seth( 100 ) t. circle( - 45 , 180 ) t. right( 90 ) t. fd( 15 ) t. end_fill( ) t. pencolor( '#000000' ) def start ( self) : self. body( ) def main ( ) : print ( 'Painting the Pikachu... ' ) turtle. screensize( 800 , 600 ) turtle. title( 'Pikaqiu' ) pikachu = Pikachu( ) pikachu. start( ) turtle. mainloop( ) if __name__ == '__main__' : main( )