• 技术文章 >Python技术 >Python基础教程

    如何使用python画皮卡丘?

    小妮浅浅小妮浅浅2021-04-09 14:59:23原创9571

    作为童年时代比较受大家欢迎的卡通人物,皮卡丘肯定是榜上有名的。我们在学习了python后,也可以使用相关的代码画出一只可爱的皮卡丘。

    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 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.t
            t.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.t
            t.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.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.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.t
            self.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.t
            turtle.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.t
            self.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.t
            self.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.t
     
            t.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)
            # print(t.pos())
     
            # 左脸轮廓
            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)
            ##############
            # print(t.pos())
            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.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(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)
            # print(t.pos())
            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('Pikachu')
        pikachu = Pikachu()
        pikachu.start()
        turtle.mainloop()
     
     
    if __name__ == '__main__':
    main()

    以上就是使用python画皮卡丘的方法,希望对大家有所帮助。更多Python学习指路:python基础教程

    专题推荐:python
    上一篇:python如何绘制多拉A梦? 下一篇:python异常处理关键字

    相关文章推荐

    • Python浮点数的使用注意• python删除元素的使用条件• python列表排序的两种方式• python for…in循环的使用• python处理数字列表的函数• python切片如何进行索引• python中用切片复制列表• python字典中键值对的操作• python使用items()遍历键值对• python函数如何指定默认值• python函数中返回值的作用• python在函数中传递实参• python使用import导入导出• python中怎样画小猪佩奇?• python如何绘制多拉A梦?

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网