歡迎光臨
每天分享高質量文章

不用20秒可以畫完哆啦A夢、小豬佩奇、皮卡丘,程式猿的手法是你想不到的獨特

(點選上方快速關註並設定為星標,一起學Python)

 

今天就是六一兒童節了,先祝願大家節日快樂。

 

《哆啦A夢:大熊的月球探險家》在兒童節上映,相信有孩子的程式猿已經陪伴孩子去遊玩看電影了,那麼沒有孩子的程式猿可以用什麼獨特的方式度過六一兒童節呢?

 

那就用Python來學習畫一個多啦A夢吧。

 

先看效果圖:

 

這就是用Python繪製多啦A夢的效果圖,是不是很有趣?

 

是透過什麼技術實現的呢?這是使用Python的turtle繪圖,即海龜繪圖來實現的。在海龜作圖中,我們可以編寫指令讓一個虛擬的(想象中的)海龜在螢幕上來回移動。這個海龜帶著一隻鋼筆,我們可以讓海龜無論移動到哪都使用這隻鋼筆來繪製線條。透過編寫程式碼,以各種很酷的樣式移動海龜,我們可以繪製出令人驚奇的圖片。

 

使用海龜繪圖還能繪製小豬佩奇、皮卡丘等圖,效果圖如下:

 

小豬佩奇

 

皮卡丘

 

有沒有想嘗試一把?

 

講了這麼多了,上多啦A夢程式碼(因篇幅關係,只給出了多啦A夢頭部的程式碼,完整程式碼及小豬佩奇和皮卡丘程式碼獲取方式見文末):

 

程式碼來源:

https://github.com/PerpetualSmile/Python-Painting-Doraemon

# !/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author: dong
# @Date: 2018-07-05 19:37:42
# @Env: python 3.6
# @Github: https://github.com/PerpetualSmile
from turtle import *
# 無軌跡跳躍
def my_goto(x, y):
    penup()
    goto(x, y)
    pendown()

# 眼睛
def eyes():
    fillcolor("#ffffff")
    begin_fill()

    tracer(False)
    a = 2.5
    for i in range(120):
        if 0 <= i < 30 or 60 <= i < 90:
            a -= 0.05
            lt(3)
            fd(a)
        else:
            a += 0.05
            lt(3)
            fd(a)
    tracer(True)
    end_fill()

# 鬍鬚
def beard():
    my_goto(-32, 135)
    seth(165)
    fd(60)

    my_goto(-32, 125)
    seth(180)
    fd(60)

    my_goto(-32, 115)
    seth(193)
    fd(60)

    my_goto(37, 135)
    seth(15)
    fd(60)

    my_goto(37, 125)
    seth(0)
    fd(60)

    my_goto(37, 115)
    seth(-13)
    fd(60)

# 嘴巴
def mouth():
    my_goto(5, 148)
    seth(270)
    fd(100)
    seth(0)
    circle(120, 50)
    seth(230)
    circle(-120, 100)

# 圍巾
def scarf():
    fillcolor('#e70010')
    begin_fill()
    seth(0)
    fd(200)
    circle(-5, 90)
    fd(10)
    circle(-5, 90)
    fd(207)
    circle(-5, 90)
    fd(10)
    circle(-5, 90)
    end_fill()

# 鼻子
def nose():
    my_goto(-10, 158)
    seth(315)
    fillcolor('#e70010')
    begin_fill()
    circle(20)
    end_fill()

# 黑眼睛
def black_eyes():
    seth(0)
    my_goto(-20, 195)
    fillcolor('#000000')
    begin_fill()
    circle(13)
    end_fill()

    pensize(6)
    my_goto(20, 205)
    seth(75)
    circle(-10, 150)
    pensize(3)

    my_goto(-17, 200)
    seth(0)
    fillcolor('#ffffff')
    begin_fill()
    circle(5)
    end_fill()
    my_goto(0, 0)

# 臉
def face():
    fd(183)
    lt(45)
    fillcolor('#ffffff')
    begin_fill()
    circle(120, 100)
    seth(180)
    # print(pos())
    fd(121)
    pendown()
    seth(215)
    circle(120, 100)
    end_fill()
    my_goto(63.56,218.24)
    seth(90)
    eyes()
    seth(180)
    penup()
    fd(60)
    pendown()
    seth(90)
    eyes()
    penup()
    seth(180)
    fd(64)

# 頭型
def head():
    penup()
    circle(150, 40)
    pendown()
    fillcolor('#00a0de')
    begin_fill()
    circle(150, 280)
    end_fill()

# 畫哆啦A夢
def Doraemon():
    # 頭部
    head()

    # 圍脖
    scarf()

    # 臉
    face()

    # 紅鼻子
    nose()

    # 嘴巴
    mouth()

    # 鬍鬚
    beard()

    # 畫眼睛
    black_eyes()

if __name__ == '__main__':
    screensize(800,600, "#f0f0f0")
    pensize(3)  # 畫筆寬度
    speed(9)    # 畫筆速度
    Doraemon()
    my_goto(100, -300)
    write('by dongdong', font=("Bradley Hand ITC", 30, "bold"))
    mainloop()
贊(0)

分享創造快樂