文 | 潮汐
来源:Python 技术「ID: pythonall」
今天是周六,祝大家周末愉快,昨天晚上小表弟来家里玩,给他看了皮卡丘动画片,突发奇想给他用 Python 画一个皮卡丘,也让他提前感受 Python 技术的强大与好玩之处,于是就有了今天的文章。
import turtle as t def face(x, y): """画脸""" t.begin_fill() t.penup() # 将海龟移动到指定的坐标 t.goto(x, y) t.pendown() # 设置海龟的方向 t.setheading(40) t.circle(-150, 69) t.fillcolor("#FBD624") # 将海龟移动到指定的坐标 t.penup() t.goto(53.14, 113.29) t.pendown() t.setheading(300) t.circle(-150, 30) t.setheading(295) t.circle(-140, 20) print(t.position()) t.forward(5) t.setheading(260) t.circle(-80, 70) print(t.position()) t.penup() t.goto(-74.43, -79.09) t.pendown() t.penup() # 将海龟移动到指定的坐标 t.goto(-144, 103) t.pendown() t.setheading(242) t.circle(110, 35) t.right(10) t.forward(10) t.setheading(250) t.circle(80, 115) print(t.position()) t.penup() t.goto(-74.43, -79.09) t.pendown() t.setheading(10) t.penup() t.goto(-144, 103) t.pendown() t.penup() t.goto(x, y) t.pendown() t.end_fill() # 下巴 t.penup() t.goto(-50, -82.09) t.pendown() t.pencolor("#DDA120") t.fillcolor("#DDA120") t.begin_fill() t.setheading(-12) t.circle(120, 25) t.setheading(-145) t.forward(30) t.setheading(180) t.circle(-20, 20) t.setheading(143) t.forward(30) t.end_fill() # penup() # # 将海龟移动到指定的坐标 # goto(0, 0) # pendown() def eye(): """画眼睛""" # 左眼 t.color("black", "black") t.penup() t.goto(-110, 27) t.pendown() t.begin_fill() t.setheading(0) t.circle(24) t.end_fill() # 左眼仁 t.color("white", "white") t.penup() t.goto(-105, 51) t.pendown() t.begin_fill() t.setheading(0) t.circle(10) t.end_fill() # 右眼 t.color("black", "black") t.penup() t.goto(25, 40) t.pendown() t.begin_fill() t.setheading(0) t.circle(24) t.end_fill() # 右眼仁 t.color("white", "white") t.penup() t.goto(17, 62) t.pendown() t.begin_fill() t.setheading(0) t.circle(10) t.end_fill() def cheek(): """画脸颊""" # 右边 t.color("#9E4406", "#FE2C21") t.penup() t.goto(-130, -50) t.pendown() t.begin_fill() t.setheading(0) t.circle(27) t.end_fill() # 左边 t.color("#9E4406", "#FE2C21") t.penup() t.goto(53, -20) t.pendown() t.begin_fill() t.setheading(0) t.circle(27) t.end_fill() def nose(): """画鼻子""" t.color("black", "black") t.penup() t.goto(-40, 38) t.pendown() t.begin_fill() t.circle(7, steps=3) t.end_fill() def mouth(): """画嘴""" t.color("black", "#F35590") # 嘴唇 t.penup() t.goto(-10, 22) t.pendown() t.begin_fill() t.setheading(260) t.forward(60) t.circle(-11, 150) t.forward(55) print(t.position()) t.penup() t.goto(-38.46, 21.97) t.pendown() t.end_fill() # 舌头 t.color("#6A070D", "#6A070D") t.begin_fill() t.penup() t.goto(-10.00, 22.00) t.pendown() t.penup() t.goto(-14.29, -1.7) t.pendown() t.penup() t.goto(-52, -5) t.pendown() t.penup() t.goto(-60.40, 12.74) t.pendown() t.penup() t.goto(-38.46, 21.97) t.pendown() t.penup() t.goto(-10.00, 22.00) t.pendown() t.end_fill() t.color("black", "#FFD624") t.penup() t.goto(-78, 15) t.pendown() t.begin_fill() t.setheading(-25) for i in range(2): t.setheading(-25) t.circle(35, 70) t.end_fill() t.color("#AB1945", "#AB1945") t.penup() t.goto(-52, -5) t.pendown() t.begin_fill() t.setheading(40) t.circle(-33, 70) t.goto(-16, -1.7) t.penup() t.goto(-18, -17) t.pendown() t.setheading(155) t.circle(25, 70) t.end_fill() def ear(): """画耳朵""" # 左耳 t.color("black", "#FFD624") t.penup() t.goto(-145, 93) t.pendown() t.begin_fill() t.setheading(165) t.circle(-248, 50) t.right(120) t.circle(-248, 50) t.end_fill() t.color("black", "black") t.penup() t.goto(-240, 143) t.pendown() t.begin_fill() t.setheading(107) t.circle(-170, 25) t.left(80) t.circle(229, 15) t.left(120) t.circle(300, 15) t.end_fill() # 右耳 t.color("black", "#FFD624") t.penup() t.goto(30, 136) t.pendown() t.begin_fill() t.setheading(64) t.circle(-248, 50) t.right(120) t.circle(-248, 50) t.end_fill() t.color("black", "black") t.penup() t.goto(160, 200) t.pendown() t.begin_fill() t.setheading(52) t.circle(170, 25) t.left(116) t.circle(229, 15) t.left(71) t.circle(-300, 15) t.end_fill() def setting(): """设置参数""" t.pensize(2) # 隐藏海龟 t.hideturtle() t.speed(10) def main(): """主函数""" setting() face(-132, 115) eye() cheek() nose() mouth() ear() t.done() if __name__ == '__main__': main()
输出效果如下:
Python 画皮卡丘2import turtle def getPosition(x,y): turtle.setx(x) turtle.sety(y) print(x,y) class Pikachu: def __init__(self): self.t = turtle.Turtle() t = self.t t.pensize(3) # 画笔大小 t.speed(9) #画笔速度 t.ondrag(getPosition) def onTrace_goto(self,x,y): self.t.penup() self.t.goto(x,y) self.t.pendown() def leftEye(self,x,y): self.onTrace_goto(x,y) t = self.t t.seth(0) t.fillcolor('#333333') t.begin_fill() t.circle(22) t.end_fill() self.onTrace_goto(x,y+10) t.fillcolor('#000000') t.begin_fill() t.circle(10) t.end_fill() self.onTrace_goto(x+6,y+22) t.fillcolor('#ffffff') t.begin_fill() t.circle(10) t.end_fill() def rightEye(self,x,y): self.onTrace_goto(x,y) t = self.t t.seth(0) t.fillcolor('#333333') t.begin_fill() t.circle(22) t.end_fill() self.onTrace_goto(x,y+10) t.fillcolor('#000000') t.begin_fill() t.circle(10) t.end_fill() self.onTrace_goto(x-6,y+22) t.fillcolor('#ffffff') t.begin_fill() t.circle(10) t.end_fill() def mouth(self,x,y): self.onTrace_goto(x,y) t = self.t t.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.onTrace_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.onTrace_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.onTrace_goto(-17,94) t.seth(8) t.fd(4) t.back(8) # 红脸颊 def leftCheck(self,x,y): turtle.tracer(False) t = self.t self.onTrace_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 rightCheck(self,x,y): t = self.t turtle.tracer(False) self.onTrace_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.t self.onTrace_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.t self.onTrace_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.t t.fillcolor('#F6D02F') # 右脸轮廓 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.seth(300) t.circle(10,80) t.seth(220) t.seth(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(110,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.onTrace_goto(130,125) t.seth(-20) t.fd(5) t.circle(-5,160) t.fd(5) # 手指纹 self.onTrace_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.onTrace_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.end_fill() # 尾巴花纹 t.fillcolor('#923E24') self.onTrace_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.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(30) t.left(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.leftCheck(-126,32) self.rightCheck(107,63) self.colorLeftEar(-250,100) self.colorRightEar(150,270) self.leftEye(-85,90) self.rightEye(50,110) t.hideturtle() def cap(self,x,y): self.onTrace_goto(x,y) t = self.t t.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(60) 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.right(35) t.fd(50) t.circle(8,100) t.end_fill() self.onTrace_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.onTrace_goto(-58,270) t.pencolor('#228B22') t.dot(35) self.onTrace_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.fillcolor('#228B22') def start(self): self.body() def main(): print(" Painting the Pikachu....") turtle.screensize(800,600) turtle.title("Pickachu") pickachu = Pikachu() pickachu.start() turtle.mainloop() # running if __name__ =='__main__': main()
输出效果如下:
总结希望小表弟以后能成为一个优秀的新生代农民工,愿他健康茁壮成长。大家感兴趣的可以一试。
参考https://www.cnblogs.com/zeroing0/p/13703631.html
https://www.jb51.net/article/174748.htm
PS:公号内回复「Python」即可进入Python 新手学习交流群,一起 100 天计划!
老规矩,兄弟们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!
【代码获取方式】
识别文末二维码,回复:潮汐
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)