TÓM TẮT
- 1 Giới thiệu chung
- 2 1. Chuẩn bị môi trường làm việc
- 3 2. Các lệnh cơ bản của turtle
- 4 3. Vẽ các hình cơ bản
- 5 4. Kỹ thuật tạo mẫu phức tạp
- 6 5. Dự án thực tế: Vẽ một bức tranh “Cánh đồng hoa”
- 7 6. Tối ưu hoá và xử lý lỗi thường gặp
- 8 7. Mở rộng: Kết hợp với các thư viện khác
- 9 8. Các nguồn học thêm và cộng đồng
- 10 9. Kết luận
Giới thiệu chung
Rùa Kini, hay còn gọi là turtle graphics, là một trong những công cụ giáo dục lập trình phổ biến nhất hiện nay, đặc biệt được sử dụng trong môi trường học lập trình cho trẻ em và người mới bắt đầu. Được phát triển lần đầu bởi Seymour Papert và nhóm tại MIT trong dự án LOGO, rùa kini giúp người học hình dung các khái niệm lập trình thông qua việc điều khiển một “rùa” ảo di chuyển trên màn hình và vẽ các đường thẳng. Bài viết này sẽ hướng dẫn chi tiết cách vẽ rùa kini từ những kiến thức cơ bản nhất, bao gồm cài đặt môi trường, các lệnh cơ bản, cách tạo hình ảnh phức tạp, tối ưu hoá mã lệnh và một số mẹo hay để nâng cao kỹ năng.
Lưu ý: Bài viết được chia thành nhiều phần, mỗi phần sẽ có ví dụ cụ thể và giải thích chi tiết. Đọc hết toàn bộ để có thể tự tin tạo ra các bản vẽ rùa kini phong phú và sáng tạo.
1. Chuẩn bị môi trường làm việc
1.1. Lựa chọn ngôn ngữ lập trình
Mặc dù rùa kini ban đầu được triển khai trong LOGO, hiện nay có rất nhiều ngôn ngữ hỗ trợ turtle graphics, trong đó phổ biến nhất là:
| Ngôn ngữ | Thư viện rùa kini | Đặc điểm |
|---|---|---|
| Python | turtle (builtin) |
Dễ học, tài liệu phong phú |
| JavaScript | p5.js (mode “turtle”) |
Thích hợp cho web, tương tác realtime |
| Java | Processing (turtle mode) |
Mạnh mẽ, hỗ trợ đồ họa 2D/3D |
| C# | TurtleSharp |
Tích hợp trong .NET, hỗ trợ WPF |
| Scratch | “Pen” block (đồ họa dạng khối) | Dành cho trẻ em, không cần code |
Trong bài viết này, chúng ta sẽ tập trung vào Python vì tính đơn giản và tính phổ biến của thư viện turtle. Tuy nhiên, nguyên tắc và lệnh cơ bản sẽ tương tự trong các ngôn ngữ khác, vì vậy bạn có thể áp dụng kiến thức này cho bất kỳ môi trường nào.
1.2. Cài đặt Python và thư viện turtle
-
Cài đặt Python
Truy cập https://www.python.org/downloads/ và tải phiên bản mới nhất (đề nghị Python 3.10 trở lên). Đảm bảo tick vào “Add Python to PATH” khi cài đặt.
Cách Vẽ Rùa Kini Có thể bạn quan tâm: Cách Vẽ Ròng Rọc: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
-
Kiểm tra cài đặt
Mở Terminal (hoặc Command Prompt) và gõ:
bash python --version
Nếu hiển thị phiên bản, bạn đã cài đặt thành công. -
Thư viện
turtle
Thư việnturtleđã được tích hợp sẵn trong Python Standard Library, vì vậy không cần cài đặt thêm. Để kiểm tra, mở Python REPL và nhập:
python import turtle
Nếu không có lỗi, bạn đã sẵn sàng.
1.3. Cấu trúc thư mục dự án
/du-an-rùa-kini
│
├─ main.py # file chính chứa mã vẽ
├─ utils.py # các hàm hỗ trợ (nếu cần)
└─ README.md # mô tả dự án
Việc tách các hàm phụ vào utils.py giúp mã nguồn sạch sẽ và dễ bảo trì.
2. Các lệnh cơ bản của turtle
2.1. Khởi tạo và thiết lập cửa sổ
import turtle # Tạo cửa sổ
screen = turtle.Screen()
screen.title("Vẽ Rùa Kini - Demo")
screen.bgcolor("lightyellow") # màu nền
screen.setup(width=800, height=600) # kích thước cửa sổ
Screen()trả về một đối tượng cửa sổ.title()đặt tiêu đề.bgcolor()thay đổi màu nền.setup()xác định kích thước (pixel).
2.2. Tạo rùa (pen)
pen = turtle.Turtle()
pen.shape("turtle") # dạng hình rùa
pen.color("green") # màu bút
pen.pensize(3) # độ dày nét
pen.speed(5) # tốc độ di chuyển (1-10, 0 = nhanh nhất)
shape()có thể là"arrow","turtle","circle","square"…color()có thể truyền 2 đối số: màu bút và màu nền (pen.color("red", "yellow")).speed()giá trị 0-10, trong đó 0 là không có delay.
2.3. Di chuyển rùa
| Lệnh | Mô tả | Tham số |
|---|---|---|
forward(distance) / fd(distance) |
Di chuyển về phía trước | distance (pixel) |
backward(distance) / bk(distance) |
Di chuyển về phía sau | distance |
right(angle) / rt(angle) |
Quay phải | angle (độ) |
left(angle) / lt(angle) |
Quay trái | angle |
goto(x, y) |
Di chuyển tới tọa độ | x, y |
setheading(angle) |
Đặt hướng mới | angle |
penup() / pu() |
Nhấc bút lên (không vẽ) | — |
pendown() / pd() |
Hạ bút xuống (vẽ) | — |
circle(radius, extent=None, steps=None) |
Vẽ vòng tròn | radius, extent (độ), steps (số đoạn) |
Ví dụ di chuyển cơ bản:
pen.forward(100) # di chuyển 100 pixel về phía trước
pen.right(90) # quay phải 90 độ
pen.forward(50) # di chuyển tiếp
pen.left(45) # quay trái 45 độ
pen.back(30) # lùi lại 30 pixel
2.4. Kiểm soát màu và độ dày nét

Có thể bạn quan tâm: Cách Vẽ Rubik 3d: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
pen.pencolor("blue") # màu bút
pen.fillcolor("orange") # màu tô
pen.pensize(5) # độ dày
Khi muốn tô màu một hình, cần dùng begin_fill() và end_fill():
pen.begin_fill()
pen.circle(50)
pen.end_fill()
3. Vẽ các hình cơ bản
3.1. Vẽ hình vuông
def draw_square(side): for _ in range(4): pen.forward(side) pen.right(90) draw_square(150)
3.2. Vẽ hình tam giác đều
def draw_triangle(side): for _ in range(3): pen.forward(side) pen.left(120) draw_triangle(120)
3.3. Vẽ ngôi sao 5 cánh
def draw_star(size): for _ in range(5): pen.forward(size) pen.right(144) # 180 - 36 draw_star(200)
3.4. Vẽ hình tròn và cung tròn
pen.circle(80) # vòng tròn đầy đủ
pen.circle(80, 180) # cung 180 độ
3.5. Vẽ hình đa giác (n-gon)
import math def draw_polygon(sides, length): angle = 360 / sides for _ in range(sides): pen.forward(length) pen.left(angle) draw_polygon(7, 70) # heptagon
4. Kỹ thuật tạo mẫu phức tạp
4.1. Lặp lại (Loops) và hàm đệ quy

Có thể bạn quan tâm: Cách Vẽ Roronoa Zoro: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
4.1.1. Spiral (xoắn ốc)
def spiral(step, angle, iterations): for _ in range(iterations): pen.forward(step) pen.right(angle) step += 2 # tăng độ dài mỗi vòng spiral(5, 91, 100)
4.1.2. Đệ quy: Cây fractal
def fractal_tree(branch_len, t): if branch_len > 5: t.forward(branch_len) t.right(20) fractal_tree(branch_len - 15, t) t.left(40) fractal_tree(branch_len - 15, t) t.right(20) t.backward(branch_len) pen.left(90) # hướng lên trên
fractal_tree(100, pen)
4.2. Sử dụng tracer và update để tăng tốc
Khi vẽ nhiều hình (hàng nghìn), tốc độ mặc định có thể chậm. Sử dụng:
screen.tracer(0) # tắt auto-update
# ... vẽ nhiều hình ...
screen.update() # cập nhật một lần cuối
4.3. Tạo hiệu ứng màu gradient
import colorsys def gradient_square(side, steps): for i in range(steps): hue = i / steps r, g, b = colorsys.hsv_to_rgb(hue, 1, 1) pen.pencolor(r, g, b) pen.forward(side) pen.right(90) pen.speed(0)
pen.penup()
pen.goto(-100, -100)
pen.pendown()
gradient_square(200, 120)
4.4. Vẽ hình ảnh từ dữ liệu (Data-driven drawing)
Bạn có thể lưu các lệnh vẽ trong một danh sách và thực thi tuần tự:
commands = ("forward", 100), ("right", 90), ("forward", 100), ("right", 90), ("forward", 100), ("right", 90), ("forward", 100) for cmd, val in commands: getattr(pen, cmd)(val)
Điều này rất hữu ích khi muốn tái sử dụng hay đọc từ file.
5. Dự án thực tế: Vẽ một bức tranh “Cánh đồng hoa”
5.1. Phân tích yêu cầu
- Nền xanh (cỏ)
- Vẽ nhiều bông hoa ngẫu nhiên (hình tròn + cánh)
- Thêm một con rùa đang di chuyển trên cánh đồng
5.2. Các hàm hỗ trợ
import random def draw_grass(): pen.penup() pen.goto(-400, -200) pen.pendown() pen.color("forestgreen") pen.begin_fill() for _ in range(2): pen.forward(800) pen.left(90) pen.forward(400) pen.left(90) pen.end_fill() def draw_flower(x, y, size): pen.penup() pen.goto(x, y) pen.pendown() # thân hoa pen.setheading(90) pen.pencolor("green") pen.forward(size 2) # cánh hoa pen.pencolor("red") for _ in range(6): pen.begin_fill() pen.circle(size, 60) pen.left(120) pen.circle(size, 60) pen.end_fill() pen.right(60) def random_flowers(count): for _ in range(count): x = random.randint(-350, 350) y = random.randint(-150, 0) size = random.randint(5, 15) draw_flower(x, y, size) def draw_turtle_walk(): pen.shape("turtle") pen.color("darkblue") pen.penup() pen.goto(-300, -100) pen.pendown() for _ in range(20): pen.forward(random.randint(20, 50)) pen.right(random.randint(-90, 90))
5.3. Chạy dự án
screen.tracer(0) # tắt auto-update để tăng tốc
draw_grass()
random_flowers(30)
draw_turtle_walk()
screen.update() # hiển thị tất cả
turtle.done()
Kết quả là một bức tranh đơn giản nhưng sinh động, minh hoạ cách kết hợp các hàm để tạo ra một cảnh quan.

Có thể bạn quan tâm: Cách Vẽ Rong Rêu: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
6. Tối ưu hoá và xử lý lỗi thường gặp
6.1. Lỗi “TurtleGraphicsError: No screen found”
- Nguyên nhân: Chạy script trong môi trường không hỗ trợ GUI (VD: server không có X11).
- Giải pháp: Sử dụng
turtle.TurtleScreen()vớiCanvastrong Tkinter, hoặc chạy trên máy có giao diện đồ họa.
6.2. Tăng tốc khi vẽ hàng nghìn đối tượng
- Dùng
screen.tracer(0)+screen.update(). - Giảm
pen.speed()về 0 (tốc độ nhanh nhất) khi không cần hiển thị từng bước di chuyển.
6.3. Quản lý bộ nhớ
- Khi tạo nhiều đối tượng
Turtle, nên gọit.clear()hoặct.reset()sau khi hoàn thành để giải phóng tài nguyên.
6.4. Đặt giới hạn góc quay
right()vàleft()chấp nhận góc bất kỳ, nhưng để tránh lỗi vòng lặp vô hạn khi tính toán góc, luôn chuẩn hoá góc bằng% 360.
angle = (angle + 360) % 360
pen.right(angle)
7. Mở rộng: Kết hợp với các thư viện khác
7.1. Turtle + Pillow (PIL) để lưu ảnh
from PIL import Image canvas = screen.getcanvas()
canvas.postscript(file="drawing.eps")
img = Image.open("drawing.eps")
img.save("drawing.png")
7.2. Turtle + Tkinter GUI

Bạn có thể nhúng cửa sổ turtle vào một ứng dụng Tkinter để tạo giao diện người dùng tùy chỉnh:
import tkinter as tk root = tk.Tk()
root.title("Ứng dụng Turtle với GUI") canvas = tk.Canvas(root, width=800, height=600)
canvas.pack() screen = turtle.TurtleScreen(canvas)
pen = turtle.RawTurtle(screen) # Thêm các button để điều khiển rùa
def move_forward(): pen.forward(20) btn = tk.Button(root, text="Forward", command=move_forward)
btn.pack() root.mainloop()
7.3. Turtle + Pygame (cho game)
Nếu muốn tạo game 2D với rùa kini, bạn có thể vẽ lên bề mặt Pygame và sử dụng logic của turtle để điều khiển.
8. Các nguồn học thêm và cộng đồng
| Nguồn | Mô tả |
|---|---|
Trang chính Python Docs – turtle |
Tài liệu chi tiết, ví dụ đầy đủ |
| Codecademy – Python Turtle | Khóa học tương tác, phù hợp cho người mới |
| Project Euler – Turtle Challenges | Bộ bài tập nâng cao, tập trung vào thuật toán |
| Reddit r/learnpython | Cộng đồng hỗ trợ hỏi đáp |
| YouTube – “Coding with Turtle” | Video hướng dẫn thực hành |
Tham gia các diễn đàn và đóng góp mã nguồn mở trên GitHub sẽ giúp bạn học nhanh hơn và nhận feedback từ cộng đồng.
9. Kết luận
Việc học cách vẽ rùa kini không chỉ là học cách lập trình mà còn là hành trình khám phá tư duy thuật toán, hình học và sáng tạo. Từ những lệnh cơ bản như forward, right, penup tới các kỹ thuật nâng cao như đệ quy, gradient màu, hoặc tích hợp GUI, bạn đã có một bộ công cụ mạnh mẽ để biến ý tưởng thành hình ảnh động trên màn hình.
Hãy bắt đầu thực hành ngay hôm nay:
- Cài đặt Python và mở
main.py. - Thử các ví dụ cơ bản (vuông, tam giác, ngôi sao).
- Tạo dự án mini như “Cánh đồng hoa” hoặc “Cây fractal”.
- Khám phá các thư viện mở rộng để lưu ảnh hoặc tạo giao diện.
Nếu bạn gặp khó khăn, đừng ngần ngại tìm kiếm trên các nguồn tài liệu đã liệt kê hoặc đặt câu hỏi trên cộng đồng. Lập trình là một hành trình không ngừng học hỏi, và rùa kini chính là một trong những “bước đầu” tuyệt vời nhất.
Chúc bạn thành công và có những bức tranh rùa kini đầy màu sắc!
