IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 用 Python 给小表弟画皮卡丘! -> 正文阅读

[Python知识库]用 Python 给小表弟画皮卡丘!

7a9312c74ce44900ead4a74fcb8d5a84.png

文 |?潮汐

来源:Python 技术「ID: pythonall」

ac62263aecbbff7a42fef1a705bc65e7.png

今天是周六,祝大家周末愉快,昨天晚上小表弟来家里玩,给他看了皮卡丘动画片,突发奇想给他用 Python 画一个皮卡丘,也让他提前感受 Python 技术的强大与好玩之处,于是就有了今天的文章。

Python 画皮卡丘1

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()

输出效果如下:33e9f3f66b77b6fcd41e4383b67228e1.png

Python 画皮卡丘2

import?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()

输出效果如下:16ee105b39ddd78fee79d199f9c1bb2b.png

总结

希望小表弟以后能成为一个优秀的新生代农民工,愿他健康茁壮成长。大家感兴趣的可以一试。

参考

https://www.cnblogs.com/zeroing0/p/13703631.html

https://www.jb51.net/article/174748.htm

PS:公号内回复「Python」即可进入Python 新手学习交流群,一起 100 天计划!

老规矩,兄弟们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

f066f2f02b00e735a8105573091113bb.gif

代码获取方式

识别文末二维码,回复:潮汐

8266b34e3087bd17e4910c6d11e92abe.png

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-23 12:25:47  更:2021-10-23 12:25:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:59:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码