你不知道的python内置绘图库turtle高级例子
1说明
1。1turtle库:海龟库,是python3的内置库。
1。2我已经做了初步介绍:
《Turtle海龟库:python3内置简单却很强大的绘图库》
1。3今天来介绍几个高级例子,顺带学习turtle绘图相关知识和python的相关知识,代码讲解清楚,注释仔细,小白秒懂,干货满满,适合收藏。
2内容
2。1转动的太极
2。2贪食蛇
2。3国画:
2。4国际象棋棋盘
3转动太极的代码文章来源https:blog。csdn。netskywallearticledetails107572141旋转的太极importturtleastt。bgcolor(gray)t。title(转动的太极)radius可以看作半径,extent是角度fc是填充的颜色,默认为白色。每次画完圆之后都会回到原点。定义函数圆defyuan(radius,extentNone,fcwhite):setheading是保证当次循环是同一朝向。t。setheading(dd)t。forward(radius)t。left(90)t。down()t。fillcolor(fc)t。beginfill()t。circle(radius,extent)t。endfill()t。up()t。right(90)t。back(radius)a8dda隐藏笔头t。hideturtle()whileTrue:t。goto(0,0)t。tracer(0,0)画个黑半圆,yuan(200,extent180,fcblack)画个白半圆。yuan(200,extent180)向前100,画个黑半圆。t。forward(100)yuan(100,extent180,fcblack)向后200,画个白半圆。t。back(200)yuan(100,extent180)顺便画个小黑圆,比白圆大点是因为白圆还有边框,显得大。yuan(33,fcblack)向后200,画个小白圆。要问我为什么不是向前200,因为我试出来的233333t。back(200)yuan(30)延时10毫秒,不加这句的话,因为tracer(0,0)是画完才显示,会导致一直啥都画不出来。t。tracer(1,10)然后下次循环的goto在tracer(0,0)之前这个很有讲究。这相当于是tracerddaifdd360:dd360
4贪食蛇的代码文章来源https:blog。csdn。netweixin44647326articledetails97466872fromturtleimportimporttimeimportrandomtracer(10000000,0)正方形框大小与蛇大小、水果大小绑定size1000蛇的速度snakeSpeed5stepNum20stepSizesizestepNumpoints0direction0snakeLen4snake0,01,02,03,0fruit〔1,1〕getFruitFalsesleepTime1snakeSpeed窗口大小设置setup(1200,1200)defgetSnake(barNum):barCount0STRx0;y0foriinrange(len(snake)):ifbarCountbarNum:jiwhilesnake〔j〕!,:STRsnake〔j〕j1xint(STR)j1STRwhilesnake〔j〕!:STRsnake〔j〕j1yint(STR)breakifsnake〔i〕:barCount1return〔x,y〕defmove():newSnakeifdirection0:readReturngetSnake(0)newSnakestr(readReturn〔0〕1);newSnake,;newSnakestr(readReturn〔1〕);newSnakeforiinrange(snakeLen1):readReturngetSnake(i)newSnakestr(readReturn〔0〕);newSnake,;newSnakestr(readReturn〔1〕);newSnakeifdirection1:readReturngetSnake(0)newSnakestr(readReturn〔0〕);newSnake,;newSnakestr(readReturn〔1〕1);newSnakeforiinrange(snakeLen1):readReturngetSnake(i)newSnakestr(readReturn〔0〕);newSnake,;newSnakestr(readReturn〔1〕);newSnakeifdirection2:readReturngetSnake(0)newSnakestr(readReturn〔0〕1);newSnake,;newSnakestr(readReturn〔1〕);newSnakeforiinrange(snakeLen1):readReturngetSnake(i)newSnakestr(readReturn〔0〕);newSnake,;newSnakestr(readReturn〔1〕);newSnakeifdirection3:readReturngetSnake(0)newSnakestr(readReturn〔0〕);newSnake,;newSnakestr(readReturn〔1〕1);newSnakeforiinrange(snakeLen1):readReturngetSnake(i)newSnakestr(readReturn〔0〕);newSnake,;newSnakestr(readReturn〔1〕);newSnakeifgetFruitTrue:readReturngetSnake(snakeLen2)newSnakestr(readReturn〔0〕);newSnake,;newSnakestr(readReturn〔1〕);newSnakereturnnewSnakedefdrawSnake(clr):pensize(stepSize2)readReturngetSnake(0)penup()goto(readReturn〔0〕stepSize,readReturn〔1〕stepSize,)pendown()foriinrange(snakeLen):readReturngetSnake(i)goto(readReturn〔0〕stepSize,readReturn〔1〕stepSize,)penup()defcheck():readReturngetSnake(0)globalgetFruitgetFruitFalsesnklsnakeLenforiinrange(snakeLen1):readReturn1getSnake(i1)ifreadReturn〔0〕readReturn1〔0〕andreadReturn〔1〕readReturn1〔1〕:hitselftime。sleep(2)bye()ifreadReturn〔0〕stepNum2orreadReturn〔1〕stepNum2orreadReturn〔0〕stepNum2orreadReturn〔1〕stepNum2:hitwalltime。sleep(2)bye()ifreadReturn〔0〕fruit〔0〕andreadReturn〔1〕fruit〔1〕:drawFruit()getFruitTruesnklsnakeLen1returnsnkldefdrawFruit():pensize(stepSize5)goto((fruit〔0〕)stepSize,fruit〔1〕stepSize)color(white)pendown()goto((fruit〔0〕0。01)stepSize,fruit〔1〕stepSize)a0whilea!snakeLen:fruit〔0〕random。randint(stepNum2,stepNum2)fruit〔1〕random。randint(stepNum2,stepNum2)a0foriinrange(snakeLen):readReturngetSnake(i)iffruit〔0〕!readReturn〔0〕orfruit〔1〕!readReturn〔1〕:a1penup()goto((fruit〔0〕)stepSize,fruit〔1〕stepSize)color(red)pendown()goto((fruit〔0〕0。01)stepSize,fruit〔1〕stepSize)pensize(1)color(black)penup()goto(size2stepSize2,size2stepSize2)pendown()goto(size2stepSize2,size2stepSize2)goto(size2stepSize2,size2stepSize2)goto(size2stepSize2,size2stepSize2)goto(size2stepSize2,size2stepSize2)penup()方向功能函数定义defkeyD():globaldirectionifdirection!2:direction0defkeyS():globaldirectionifdirection!3:direction1defkeyA():globaldirectionifdirection!0:direction2defkeyW():globaldirectionifdirection!1:direction3hideturtle()penup()pensize(sizestepNum1)drawFruit()drawSnake(False)键盘功能绑定方向键盘绑定onkeypress(keyW,Up)onkeypress(keyA,Left)onkeypress(keyS,Down)onkeypress(keyD,Right)字母按钮绑定onkeypress(keyW,w)onkeypress(keyA,a)onkeypress(keyS,s)onkeypress(keyD,d)listen()while1:time。sleep(sleepTime)color(white)drawSnake(True)snakemove()color(235689)drawSnake(True)snakeLencheck()update()窗口标题名title(计分:str(snakeLen4))
5国画的代码author:魏振东data:2019。10。25func:绘制创意图形画梅花诗画fromturtleimportfromrandomimporttitle(国画)画雪花defdrawSnow():hideturtle()pensize(2)foriinrange(20):pencolor(white)penup()setx(randint(640,640))sety(randint(400,400))pendown()densrandint(8,12)snowsizerandint(10,14)forjinrange(dens):forward(snowsize)backward(snowsize)right(360dens)位移函数defgotopos(x,y):up()goto(x,y)down()ht()defapplyrules(path,rules):L〔forinpath〕foriinrange(len(L)):symbolL〔i〕ifsymbolF:L〔i〕rules〔symbol〕ifsymbolX:L〔i〕rules〔symbol〕path。join(L)returnpathdefdrawpath(path):posList,angleList〔〕,〔〕forsymbolinpath:ifsymbolF:forward(length)elifsymbol:left(angle)elifsymbol:rt(angle)elifsymbol〔:posList。append(pos())angleList。append(heading())elifsymbola:pensize(3)color(black)elifsymbolb:pensize(2)color(black)elifsymbolc:pensize(2)color(black)elifsymbol〕:up()home()goto(posList。pop())left(angleList。pop())down()写字defwritez(x,y,str,size16,fontArial):gotopos(x,y)write(str,font(font,size))画布setup(1280,800)speed(5)bgcolor(Silver)题字color(black)writez(213,210,梅,16)writez(50,100,宋)writez(80,20,王)writez(33,30,安,16)writez(18,95,石,16)写诗color(black)s1墙角数枝梅s2凌寒独自开s3遥知不是雪s4为有暗香来foriinrange(len(s1)):writez(560,350i50,s1〔i〕,16)foriinrange(len(s2)):writez(510,320i50,s2〔i〕,16)foriinrange(len(s3)):writez(460,290i50,s3〔i〕,16)foriinrange(len(s4)):writez(410,260i50,s4〔i〕,16)画雪drawSnow()画梅gotopos(249,26)speed(0)gotopos(650,100)length6pathFangle27rules{F:aFF〔bFF〕〔cFF〕cFF,X:aFF〔bF〕〔cF〕}forinrange(4):pathapplyrules(path,rules)drawpath(path)done()
6国际象棋棋盘绘制的代码国际象棋棋盘importturtleastcubeline50t。pu()t。goto(200,200)t。pd()foriinrange(8):一共有八列forjinrange(8):每一行有八个格t。forward(cubeline)ifj20:判断是否为第奇数个格(是否画黑色格)ifi20:判断是否为奇数行(调整画黑色正方形时小海龟的转向)t。beginfill()开始填充forsinrange(4):画正方形t。left(90)t。forward(cubeline)t。endfill()结束填充else:如果为偶数行,则小海龟画正方形时不断向右转向t。beginfill()forsinrange(4):t。right(90)t。forward(cubeline)t。endfill()ifi20:一行画完之后,判断小海龟该向哪个方向转向,从而画下一行t。left(90)t。forward(cubeline)t。left(90)else:t。right(90)t。forward(cubeline)t。right(90)t。forward(8cubeline)画完最后一行时,补齐上方边线,8条边t。done()
7代码来源网络,仅供学习,如有侵权请联系,定删。