Câu lệnh vẽ hình trong python

Python được sử dụng trong đồ họa thông qua các gói như Tkinter, Canvas. Và trong bài viết này mình sẽ hướng dẫn các bạn sử dụng thư viện Turtle trên Python.

Turtle Graphics là một chương trình con có sẵn trong Python khi bạn đã cài Python lên máy bạn. Turtle (con rùa) đây chỉ là hình ảnh tưởng tượng, nó cầm cây bút để vẽ, di chuyển đến đâu là nó vẽ đường thẳng đến đó. Nó vẽ bằng những cái chấm (dots-pixels) trên màn hình.

Muốn sử dụng chương trình nhỏ turtle graphics của Python thì phải import nó vào từ “thư viện” của Python trong đó còn rất nhiều những chương trình nhỏ do Python soạn sẵn. Cần cái nào là phải nhập (gọi, call) chúng vào chương trình của mình bằng lệnh import. Ở đây ta cần gọi chương trình nhỏ turtle để vẽ nên ta dùng lệnh import turtle.

def rectangle(hor,ver,col):
    t.pendown() #tạo con trỏ
    t.pensize(1) #kích cỡ
    t.color(col)
    t.begin_fill()
    for counter in range(1,3): #đây là một vòng lặp (loop)
        t.forward(hor)
        t.right(90)
        t.forward(ver)
        t.right(90)
    t.end_fill()
    t.penup()

Có bốn hướng có thể di chuyển vào:

  • Ở đằng trước
  • Phía sau
  • Trái
  • Đúng

Con trỏ di chuyển .forward()hoặc .backward()theo hướng mà nó phải đối mặt. Bạn có thể thay đổi hướng này bằng cách xoay nó .left()hoặc .right()theo một mức độ nhất định. Bạn có thể thử từng lệnh như vậy:

>>> t.right(90)
>>> t.forward(100)
>>> t.left(90)
>>> t.backward(100)

3. Thiết lập con trỏ vẽ

t.penup()
t.speed('slow') #Tốc độ vẽ của con trỏ
t.bgcolor('Dodger blue')
ti.sleep(10)
t.hideturtle()

4. Code vẽ từng bộ phận

#Vẽ bàn chân

t.goto(-100,-150)
rectangle(50,20,'blue')
t.goto(-30,-150)
rectangle(50,20,'blue')

#Vẽ chân

t.goto(-25,-50)
rectangle(15,100,'grey')
t.goto(-55,-50)
rectangle(-15,100,'grey')

#Vẽ thân

t.goto(-90,100)
rectangle(100,150,'red')

#Vẽ tay

t.goto(-150,70)
rectangle(60,15,'grey')
t.goto(-150,110)
rectangle(15,40,'grey')
t.goto(10,70)
rectangle(60,15,'grey')
t.goto(55,110)
rectangle(15,40,'grey')

#Vẽ cổ

t.goto(-50,120)
rectangle(15,20,'grey')

#Vẽ đầu

t.goto(-85,170)
rectangle(80,50,'red')
t.goto(-60,160)

#Vẽ mắt miệng:
rectangle(30,10,'white')
t.goto(-60,160)
rectangle(5,5,'black')
t.goto(-45,155)
rectangle(5,5,'black')
t.goto(-65,135)
t.right(5)
rectangle(40,5,'black')

#Vẽ bàn tay:

t.goto(-155,130)
rectangle(25,25,'green')
t.goto(-147,130)
rectangle(10,15,t.bgcolor())
t.goto(50,130)
rectangle(25,25,'green')
t.goto(58,130)
rectangle(10,15,t.bgcolor())

Code đầy đủ:

import turtle as t
import time as ti

def rectangle(hor,ver,col):
    t.pendown() #tạo con trỏ
    t.pensize(1)
    t.color(col)
    t.begin_fill()
    for counter in range(1,3):
        t.forward(hor)
        t.right(90)
        t.forward(ver)
        t.right(90)
    t.end_fill()
    t.penup()
t.penup()
t.speed('slow')
t.bgcolor('Dodger blue')

t.goto(-100,-150)
rectangle(50,20,'blue')
t.goto(-30,-150)
rectangle(50,20,'blue')

t.goto(-25,-50)
rectangle(15,100,'grey')
t.goto(-55,-50)
rectangle(-15,100,'grey')

t.goto(-90,100)
rectangle(100,150,'red')

t.goto(-150,70)
rectangle(60,15,'grey')
t.goto(-150,110)
rectangle(15,40,'grey')
t.goto(10,70)
rectangle(60,15,'grey')
t.goto(55,110)
rectangle(15,40,'grey')

t.goto(-50,120)
rectangle(15,20,'grey')
t.goto(-85,170)
rectangle(80,50,'red')
t.goto(-60,160)
rectangle(30,10,'white')
t.goto(-60,160)
rectangle(5,5,'black')
t.goto(-45,155)
rectangle(5,5,'black')
t.goto(-65,135)
t.right(5)
rectangle(40,5,'black')
t.goto(-155,130)
rectangle(25,25,'green')
t.goto(-147,130)
rectangle(10,15,t.bgcolor())
t.goto(50,130)
rectangle(25,25,'green')
t.goto(58,130)
rectangle(10,15,t.bgcolor())
t.hideturtle()
ti.sleep(10)
t.hideturtle()

Thành quả:

Câu lệnh vẽ hình trong python

Your kids can do this with Python!

Điều kiện học:

  • Phụ huynh phải biết sử dụng Windows 10 VÀ Internet nếu trẻ chưa biết.
  • Dành cho các máy PC.
  • Dùng Google Chrome
  • Một ít tiếng Anh về điện toán
  • Có bộ gõ tiếng Việt càng tốt (VNI, VPS…)

Turtle Graphics là một chương trình con có sẵn trong Python khi bạn đã cài (install) Python lên máy bạn. Turtle (con rùa) đây chỉ là hình ảnh tưởng tượng, nó cầm cây bút để vẽ, di chuyển đến đâu là nó vẽ đường thẳng đến đó. Nó vẽ bằng những cái chấm (dots-pixels) trên màn hình.

Câu lệnh vẽ hình trong python
The turtle (“con rùa”) tưởng tượng, chỉ là hình một mũi tên (arrow mà thôi)

Bây giờ bạn click IDLE để gõ chương trình sau đây, gõ y chang như vậy, kẻo bị syntax error (sai văn phạm của Python) rồi chúng ta sẽ tìm hiểu từng dòng một.

# SquareSpiral1.py  - để vẽ một hình vuông xoắn ốc (square spiral)
import turtle
t = turtle.Pen() for x in range(100) : t.forward(x) t.left(90)

Xong bạn cho save nó lên máy bạn (trong một ngăn hồ sơ folder nào đó trên diã)  với tên XoanocVuong.py rồi cho Run thử (Save và Run bạn đã biết làm ở chương I rồi) , bạn sẽ thấy “con ruà” của bạn (chỉ là một mũi tên) nó vẽ một hình vuông xoắn ốc như sau:

Câu lệnh vẽ hình trong python
Hình 2-1

GIẢI THÍCH TỪNG DÒNG MỘT CỦA CHƯƠNG TRÌNH

  1. Dòng 1: # SquareSpiral1,py – để vẽ một hình vuông xoắn ốc. Dòng này chỉ là dòng chú thích (comments), có dấu # , máy không thi hành những dòng này khi Run. Có thể thêm ghi chú của người viết về mục đích của chương trình.
  2. Dòng 2: import turtle: Muốn sử dụng chương trình nhỏ turtle graphics của Python thì phải “nhập cảng” (import) nó vào từ “thư viện” của Python trong đó còn rất nhiều những chương trình nhỏ do Python soạn sẵn. Cần cái nào là phải nhập khẩu (gọi, call) chúng vào chương trình của mình bằng lệnh import. Ở đây ta cần gọi chương trình nhỏ turtle để vẽ nên ta dùng lệnh import turtle.
  3. Dòng 3: t = turtle.Pen() có nghiã là ta dùng t thay thế cho turtle.Pen() vì mỗi khi gọi chương trình con này của turtle thì cái tên ấy dài quá không gọn.
  4. Dòng 4: for x in range(100): đây là một vòng lặp (loop). Với biến số (variable) x đi từ 0 đến 99 thì những lệnh bên trong vòng lặp này sẽ được lặp đi lằp lại 100 lần (range 100 – phạm vi 100).

KHẢO SÁT XEM MÁY THI HÀNH CHƯƠNG TRÌNH NÀY THẾ NÀO?

Không cần khảo sát các dòng 1, 2, 3 vì dễ hiểu rối . Chỉ cần khảo sát vòng lặp ở dòng 4: for x in range(100) và những lệnh nằm bên trong vòng lặp ấy. Những lệnh này cần gõ thụt vào bên trong phiá dưới và qua phải của lệnh for x in range(100). Đầu tiên là lệnh t.forward(x). Lệnh này khiến cái bút của con ruà (cái mũi tên) nhích tới x dots. Với x=0 (lần đầu tiên) thì cây bút của con ruà chẳng nhúc nhích chi cả. Lệnh kế tiếp t.left(90) bắt “con ruà” quẹo trái 1 góc 90 độ. Thế là xong 1 vòng. Vòng lặp lại với x=1, rồi 2, 3, …đến 99 (tức là đủ 100 vòng) thì bạn sẽ có hình như 2-1.

CHO “CON RÙA” CUỐN (ROLL)

Bây giờ bạn thử đổi chương trình XoanocVuong nói trên một chút như sau:

# SquareSpiral2.py  - để vẽ một hình xoắn ốc cuốn
import turtle
t = turtle.Pen() for x in range(100) : t.forward(x) t.left(91)

Dòng comment không quan trọng. Bạn muốn chú thích thế nào tuỳ ý. Bạn chỉ đổi t.left(90) thành t.left(91) tức là mỗi khi con ruà tiến tới vẽ được x dots xong nó sẽ quẹo trái 91 độ. Vòng lặp cũng lặp đi lặp lại 100 lần với x đi từ 0 đến 99 bạn sẽ có một hình vẽ như sau:

Câu lệnh vẽ hình trong python
Hình 2-2

CHO “CON RÙA” XOẮN TRÒN

Thay vì dùng lệnh t.forward(x) để vẽ đường thẳng ta sửa chương trình trên để vẽ vòng tròn bằng lệnh t.circle(x) trong đó biến số x là bán kính của vòng tròn.

# CircleSpiral1.py  - để vẽ một hình xoắn ốc cuốn tròn
import turtle
t = turtle.Pen() for x in range(100) : t.circle(x) t.left(91)

Câu lệnh vẽ hình trong python
Hình 2-3

Bài tập: Bạn thử đổi chương trình: thay lệnh t.left(91) bằng lệnh t.right(91) sẽ thấy con ruà quay qua phải mỗi khi vẽ xong một vòng tròn. right() cũng là một lệnh viết sẵn nằm trong thư viện của Python. Hoặc bạn cho trẻ thử thay range(100) thành range(200) xem sao.

CHO MỘT ÍT MÀU MÈ (COLOR)

Bây giờ bạn lấy lại chương trình XoanocVuong,py , sửa đổi lại như sau:

# SquareSpiral3.py  - để vẽ một hình vuông xoắn ốc (square spiral) tô màu
import turtle
t = turtle.Pen()
t.pencolor("red")
for x in range(100):
    t.forward(x)
    t.left(91)

pencolor (“ “) là lệnh của Python để con ruà vẽ màu. Màu gì sẽ để trong ngoặc đôi. Khi cho Run Module bạn sẽ có hình xoắn ốc vuông màu đỏ.

Câu lệnh vẽ hình trong python
Hình 2-4

Bài tập:

Bạn cho trẻ đổi color thành blue, hay yellow, hay brown xem sao.

HÌNH XOẮN ỐC 4 MÀU

Muốn vậy ta sẽ sửa chương trình trên lại như sau rồi lưu nó lên diã với tên XoanocVuongBonMauLthực ra bạn muốn đặt tên gì tuỳ thích)

 # ColorSquareSpiral - Để vẽ hình xoắn ốc vuông có 4 màu
import turtle
t = turtle.Pen()
colors = ["red", "yellow", "blue", "green"]
for x in range(100):
    t.pencolor(colors[x%4])
    t.forward(x)
    t.left(91)

  • Lệnh colors = [“red”, “yellow”, “blue”, “green”] cho ta một danh sách (list) 4 màu: đỏ, vàng, xanh dương, và xanh lá cây.
  • Lệnh t.pencolor(colors[x%4]). Ký hiệu %modulo (mô đun) . Biến (variable) x thì cũng như trước, biến thiên từ 0 đến 99 vì range là 100. Còn [x%4] là cho Python biết mình dùng 4 màu đầu tiên trong danh sách màu (color list) đánh số từ 0 đến 3 và rồi xoay vòng (rotate) trở lại suốt danh sách ấy mỗi khi x thay đổi.

Sau khi Save và Run Module chương trình này bạn sẽ có một hình xoắn ốc vuông với 4 màu red, yellow, blue, green như sau:

Câu lệnh vẽ hình trong python
Hình 2-5

THAY ĐỔI MÀU NỀN (BACKGROUND COLOR)

Thí dụ 1– Giả sử bạn muốn có xoắn ốc vòng tròn có 4 màu đỏ, vàng, xanh dương, xanh lá cây. Bạn viết lại chương trình như sau; 

# ColorCircleSpiral  - vẽ xoắn ốc tròn 4 màu nền đen
import turtle
t = turtle.Pen()
turtle.bgcolor("black")
colors = ["red", "yellow", "blue", "green"]
for x in range(100):
    t.pencolor(colors[x%4])
    t.circle(x)
    t.left(91)

Câu lệnh vẽ hình trong python
Hình 2-6

Lệnh turtle.bgcolor(“black”) cho ta màu nền đen. Sở dĩ đôi khi ta cần đổi màu

đen ở đây là để cho hình vẽ nổi bật không tiệp màu với màu nền.

Thí dụ 2: Giả sử bạn muốn có hình xoắn ốc vuông, có 4 màu và nền đen với range(200):

# ColorSquareSpiral - Để vẽ hình xoắn ốc vuông có 4 màu, nền đen
import turtle
t = turtle.Pen()
turtle.bgcolor("black")
colors = ["red", "yellow", "blue", "green"]
for x in range(200):
    t.pencolor(colors[x%4])
    t.forward(x)
    t.left(91)

Kết quả sau khi Run->Run Module

Câu lệnh vẽ hình trong python
Hình 2-7

HẾT CHƯƠNG II

CHÚC CÁC BẠN TRẺ THÀNH CÔNG