Có thể bạn quan tâm: Cách Vẽ Tháp Eiffel 3d: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
TÓM TẮT
- 1 Giới thiệu chung về MSWLogo và lý do chọn vẽ tháp
- 2 1. Cài đặt và khởi động MSWLogo
- 3 2. Vẽ một tháp cơ bản: cấu trúc hình chữ nhật
- 4 3. Thêm chi tiết: cửa sổ, cửa ra vào và họa tiết
- 5 4. Vẽ tháp nhiều tầng (tầng 2, 3, …)
- 6 5. Vẽ tháp 3D (đơn giản) bằng kỹ thuật “isometric”
- 7 6. Tùy biến màu sắc và độ dày bút
- 8 7. Thực hành nâng cao: Tháp có họa tiết “cây cầu” và “cột trụ”
- 9 8. Tối ưu hoá mã nguồn và các mẹo hay
- 10 9. Tổng kết và hướng phát triển tiếp theo
Giới thiệu chung về MSWLogo và lý do chọn vẽ tháp
MSWLogo (thường được gọi tắt là Logo) là một môi trường lập trình giáo dục, được thiết kế để giúp người mới bắt đầu làm quen với khái niệm lập trình thông qua việc điều khiển một “rùa” (turtle) vẽ các hình ảnh trên màn hình. Một trong những bài tập phổ biến và rất hữu ích cho việc rèn luyện tư duy logic, khả năng tính toán và sáng tạo là vẽ các công trình kiến trúc đơn giản như tháp.
Tháp không chỉ là một hình khối đơn giản mà còn là biểu tượng của cấu trúc, sự ổn định và khả năng mở rộng. Khi học cách vẽ tháp trong MSWLogo, bạn sẽ:
- Hiểu rõ về các lệnh di chuyển và quay của rùa (forward, back, right, left).
- Làm quen với các vòng lặp (repeat) và điều kiện (if, ifelse) để tạo ra các phần lặp lại một cách hiệu quả.
- Sử dụng các hàm tùy chỉnh (procedure) để tái sử dụng mã nguồn, giúp chương trình gọn gàng, dễ bảo trì.
- Áp dụng kiến thức về hình học (độ dài, góc, tỉ lệ) để tạo ra các hình tháp có độ chính xác cao.
- Phát triển tư duy sáng tạo bằng cách thay đổi các tham số (chiều cao, chiều rộng, màu sắc) để tạo ra các kiểu tháp đa dạng.
Trong bài viết này, chúng ta sẽ đi từ cơ bản (vẽ một tháp đơn giản) tới nâng cao (vẽ tháp nhiều tầng, tháp 3D, tháp có họa tiết). Mỗi phần sẽ có giải thích chi tiết về lý thuyết, mã nguồn mẫu, và các lưu ý quan trọng để bạn có thể tự tin thực hiện và tùy biến.
Có thể bạn quan tâm: Cách Vẽ Tháp Chăm Pa: Hướng Dẫn Chi Tiết Từ A Đến Z
1. Cài đặt và khởi động MSWLogo
1.1. Tải và cài đặt
- Truy cập trang web chính thức của MSWLogo (http://www.softronix.com/logo.html) hoặc các nguồn tải uy tín.
- Chọn phiên bản phù hợp với hệ điều hành (Windows, macOS qua Wine, hoặc bản Linux thông qua gói
logo). - Cài đặt theo hướng dẫn, sau khi cài đặt mở chương trình.
1.2. Giao diện cơ bản
- Command Window: nơi nhập các lệnh.
- Drawing Area: vùng hiển thị kết quả vẽ.
- Toolbar: các nút tắt/mở, reset, speed, v.v.
- Variables Window: hiển thị các biến toàn cục.
1.3. Các lệnh nền tảng
| Lệnh | Mô tả |
|---|---|
FORWARD n hoặc FD n |
Di chuyển rùa về phía trước n bước |
BACK n hoặc BK n |
Di chuyển rùa lùi lại n bước |
RIGHT a hoặc RT a |
Quay rùa sang phải a độ |
LEFT a hoặc LT a |
Quay rùa sang trái a độ |
PENUP hoặc PU |
Nhấc bút lên (không vẽ) |
PENDOWN hoặc PD |
Hạ bút xuống (vẽ) |
SETPC r g b |
Đặt màu bút (RGB) |
REPEAT n ... |
Lặp lại khối lệnh n lần |
TO name :params ... END |
Định nghĩa hàm (procedure) |
Có thể bạn quan tâm: Cách Vẽ Tháo Dân Só: Hướng Dẫn Từng Bước Để Tạo Ra Những Bức Tranh Độc Đáo Và Sống Động
2. Vẽ một tháp cơ bản: cấu trúc hình chữ nhật
2.1. Ý tưởng thiết kế
Một tháp đơn giản thường có đáy hình chữ nhật và cột thẳng đứng. Để minh hoạ, chúng ta sẽ vẽ:
- Đáy: hình chữ nhật có chiều rộng
wvà chiều sâud. - Cột: một đoạn thẳng đứng có chiều cao
h. - Đầu tháp: một hình chữ nhật nhỏ hơn (đỉnh) để tạo cảm giác “mái”.
2.2. Thuật toán cơ bản
- Đặt vị trí bắt đầu (x0, y0) bằng
PUvàSETXY. - Vẽ đáy: dùng
REPEAT 2để vẽ hai cạnh dàiw, hai cạnh ngắnd. - Di chuyển lên độ cao
h(điểm trên cùng của cột). - Vẽ đỉnh (một hình chữ nhật nhỏ hơn).
- Kết thúc, quay lại vị trí ban đầu nếu muốn vẽ thêm.
2.3. Mã nguồn mẫu
;------------------------------
; Vẽ một tháp đơn giản
; Tham số:
; :w - chiều rộng đáy
; :d - chiều sâu đáy
; :h - chiều cao cột
; :wtop - chiều rộng đỉnh
; :dtop - chiều sâu đỉnh
;------------------------------ TO THAP :w :d :h :wtop :dtop ; Đặt màu bút (màu nâu cho đáy) SETPC 139 69 19 ; RGB: nâu đất ; Vẽ đáy PU SETXY 0 0 PD REPEAT 2 FORWARD :w RIGHT 90 FORWARD :d RIGHT 90 ; Vẽ cột PU FORWARD :w/2 RIGHT 90 FORWARD :d/2 PD ; Đặt rùa vào trung tâm đáy LEFT 90 FORWARD :h ; Vẽ đỉnh (mái) SETPC 205 133 63 ; Màu vàng nhạt RIGHT 90 FORWARD (:wtop/2) RIGHT 90 FORWARD (:dtop/2) RIGHT 90 REPEAT 2 FORWARD :wtop RIGHT 90 FORWARD :dtop RIGHT 90 ; Quay lại vị trí trung tâm đỉnh RIGHT 90 FORWARD (:wtop/2) RIGHT 90 FORWARD (:dtop/2)
END
Giải thích các dòng quan trọng:
SETPC 139 69 19đặt màu bút. Bạn có thể thay đổi RGB để có màu sắc khác.PU SETXY 0 0 PDdi chuyển rùa tới gốc tọa độ (0,0) mà không vẽ.FORWARD :w/2 RIGHT 90 FORWARD :d/2đưa rùa tới trung tâm đáy, giúp cột đứng thẳng đứng.LEFT 90để rùa hướng lên trên (độ 90° từ hướng hiện tại).- Đối với đỉnh, chúng ta giảm kích thước để tạo cảm giác “mái nhà”.
2.4. Kiểm tra và chạy
- Nhập
THAP 200 100 300 120 60trong cửa sổ lệnh. - Bạn sẽ thấy một tháp có đáy 200×100, cột cao 300, và đỉnh 120×60.
- Thay đổi các tham số để quan sát sự khác nhau.
3. Thêm chi tiết: cửa sổ, cửa ra vào và họa tiết
3.1. Vẽ cửa sổ
Cửa sổ là các hình chữ nhật nhỏ trên mặt cột. Chúng ta sẽ tạo một hàm phụ CUA_SO.
TO CUA_SO :x :y :w :h PU SETXY :x :y PD REPEAT 2 FORWARD :w RIGHT 90 FORWARD :h RIGHT 90 END
Cách gọi: CUA_SO 20 150 30 40 (vẽ cửa sổ tại tọa độ (20,150) với kích thước 30×40).
3.2. Vẽ cửa ra vào
Cửa ra vào thường rộng hơn, đặt ở trung tâm đáy.
TO CUA_RA_VAO :x :y :w :h PU SETXY :x :y PD SETPC 160 82 45 ; Màu nâu đậm REPEAT 2 FORWARD :w RIGHT 90 FORWARD :h RIGHT 90 END
3.3. Tích hợp vào hàm THAP
Cập nhật hàm THAP để vẽ cửa sổ và cửa ra vào:
TO THAP :w :d :h :wtop :dtop ; Đáy SETPC 139 69 19 PU SETXY 0 0 PD REPEAT 2 FORWARD :w RIGHT 90 FORWARD :d RIGHT 90 ; Cửa ra vào CUA_RA_VAO (-:w/2 + 20) (-:d/2) (:w - 40) 80 ; Cột PU FORWARD :w/2 RIGHT 90 FORWARD :d/2 PD LEFT 90 FORWARD :h ; Cửa sổ (hai bên) CUA_SO (-:w/4) (:h/2) 30 40 CUA_SO (:w/4 - 30) (:h/2) 30 40 ; Đỉnh SETPC 205 133 63 RIGHT 90 FORWARD (:wtop/2) RIGHT 90 FORWARD (:dtop/2) RIGHT 90 REPEAT 2 FORWARD :wtop RIGHT 90 FORWARD :dtop RIGHT 90 RIGHT 90 FORWARD (:wtop/2) RIGHT 90 FORWARD (:dtop/2)
END
Lưu ý: Khi dùng
SETXY, các giá trị dương di chuyển sang phải (x) và lên trên (y). Nếu muốn di chuyển xuống, dùng giá trị âm.
3.4. Kết quả
Sau khi chạy THAP 250 150 350 140 70, tháp sẽ có:
- Đáy 250×150.
- Cửa ra vào ở giữa đáy, cao 80.
- Hai cửa sổ ở mỗi bên cột, ở độ cao giữa.
- Đỉnh 140×70.
Bạn có thể thay đổi vị trí và kích thước cửa sổ bằng cách thay các tham số trong lệnh CUA_SO.
4. Vẽ tháp nhiều tầng (tầng 2, 3, …)
4.1. Khái niệm tầng
Một tháp nhiều tầng là việc lặp lại cấu trúc “đáy + cột + đỉnh” nhiều lần, mỗi tầng có thể có kích thước giảm dần để tạo cảm giác thu hẹp lên trên.

Có thể bạn quan tâm: Cách Vẽ Tháp Pari 3d: Hướng Dẫn Chi Tiết Từng Bước Để Tạo Nên Kiệt Tác Nghệ Thuật
4.2. Thuật toán
- Định nghĩa một hàm
TANGchịu trách nhiệm vẽ một tầng. - Sử dụng vòng lặp
REPEATđể vẽ nhiều tầng, mỗi lần giảm kích thước theo tỉ lệscale. - Cập nhật vị trí y cho mỗi tầng mới (cộng chiều cao của tầng hiện tại).
4.3. Mã nguồn hàm TANG
; TANG: vẽ một tầng của tháp
; :w, :d - kích thước đáy của tầng
; :h - chiều cao cột của tầng
; :wtop, :dtop - kích thước đỉnh của tầng
; :y0 - tọa độ y của đáy tầng (để ghép nối các tầng)
TO TANG :w :d :h :wtop :dtop :y0 ; Vẽ đáy tại y = :y0 PU SETXY (-:w/2) :y0 PD SETPC 139 69 19 REPEAT 2 FORWARD :w RIGHT 90 FORWARD :d RIGHT 90 ; Vẽ cột lên trên PU FORWARD :w/2 RIGHT 90 FORWARD :d/2 PD LEFT 90 FORWARD :h ; Vẽ đỉnh SETPC 205 133 63 RIGHT 90 FORWARD (:wtop/2) RIGHT 90 FORWARD (:dtop/2) RIGHT 90 REPEAT 2 FORWARD :wtop RIGHT 90 FORWARD :dtop RIGHT 90 ; Quay lại vị trí trung tâm đỉnh RIGHT 90 FORWARD (:wtop/2) RIGHT 90 FORWARD (:dtop/2)
END
4.4. Hàm THAP_NHIEU_TANG
; THAP_NHIEU_TANG: vẽ tháp nhiều tầng
; :n - số tầng
; :w0, :d0, :h0 - kích thước của tầng đầu
; :scale - tỉ lệ giảm kích thước mỗi tầng (ví dụ 0.8)
TO THAP_NHIEU_TANG :n :w0 :d0 :h0 :scale MAKE "y 0 ; vị trí y hiện tại MAKE "w :w0 MAKE "d :d0 MAKE "h :h0 REPEAT :n ; Tính kích thước đỉnh (có thể là 80% của đáy) MAKE "wtop :w 0.6 MAKE "dtop :d 0.6 ; Vẽ tầng hiện tại TANG :w :d :h :wtop :dtop :y ; Cập nhật vị trí y cho tầng tiếp theo (cộng chiều cao + độ cao đỉnh) MAKE "y :y + :h + (:wtop 0.5) ; 0.5 là 1/2 chiều rộng đỉnh để đặt đúng ; Giảm kích thước cho tầng kế MAKE "w :w :scale MAKE "d :d :scale MAKE "h :h :scale END
4.5. Thử nghiệm
THAP_NHIEU_TANG 4 200 120 150 0.75
Kết quả: Tháp 4 tầng, mỗi tầng giảm 25% so với tầng trước, tạo hình tháp kim tự tháp hiện đại.
5. Vẽ tháp 3D (đơn giản) bằng kỹ thuật “isometric”
5.1. Nguyên lý isometric
Trong đồ họa isometric, các trục X, Y, Z đều tạo góc 120° với nhau, cho cảm giác 3 chiều mà không cần tính toán chi tiết về phối cảnh. Đối với Logo, chúng ta có thể mô phỏng bằng cách:
- Vẽ mặt bên trái (đường chéo sang trái, góc 30°).
- Vẽ mặt trước (đường thẳng đứng).
- Vẽ mặt trên (đường chéo sang phải, góc 30°).
5.2. Hàm vẽ khối lập phương isometric
; Vẽ một khối lập phương isometric
; :l - độ dài cạnh
; :x, :y - vị trí gốc (góc dưới bên trái)
TO ISO_CUBE :l :x :y PU SETXY :x :y PD ; Mặt trước SETPC 139 69 19 REPEAT 2 FORWARD :l RIGHT 90 FORWARD :l RIGHT 90 ; Mặt trái (đường chéo 30 độ) PU FORWARD :l RIGHT 30 PD REPEAT 2 FORWARD :l RIGHT 120 FORWARD :l RIGHT 120 ; Mặt trên (đường chéo ngược) PU BACK :l LEFT 30 PD REPEAT 2 FORWARD :l RIGHT 30 FORWARD :l RIGHT 150
END
Lưu ý: Logo không có lệnh quay góc tùy ý (chỉ multiples of 90). Để vẽ góc 30°, chúng ta cần thay đổi hướng bằng cách dùng
SETHEADINGhoặc chuyển đổi hệ tọa độ. Tuy nhiên, trong phiên bản chuẩn MSWLogo, chúng ta có thể mô phỏng bằng việc thay đổi góc quayRIGHT/LEFTtới 30° (được hỗ trợ). Nếu không, bạn có thể dùngSETHEADINGđể thiết lập hướng tuyệt đối.
5.3. Xây dựng tháp 3D
Kết hợp ISO_CUBE với vòng lặp để xếp các khối lên nhau, mỗi khối có độ cao giảm dần.
TO THAP_3D :n :l0 :scale MAKE "l :l0 REPEAT :n ISO_CUBE :l 0 0 ; Di chuyển lên trên và sang phải một chút để xếp khối tiếp theo PU SETXY ( ( :l 0.5 ) ) ( ( :l 0.75 ) ) PD MAKE "l :l :scale END
Ví dụ: THAP_3D 5 120 0.8 sẽ tạo tháp 5 khối, mỗi khối giảm 20% kích thước, tạo hiệu ứng tháp 3D.
6. Tùy biến màu sắc và độ dày bút
6.1. Màu sắc động
Bạn có thể tạo một danh sách màu và thay đổi màu mỗi tầng:
MAKE "MANG_MAU 139 69 19 205 133 63 160 82 45 210 180 140 TO SET_MAU :i ; Lấy màu i trong mảng, nếu vượt quá độ dài thì quay lại MAKE "idx ( ( :i - 1 ) MOD COUNT :MANG_MAU ) + 1 SETPC ITEM :idx :MANG_MAU
END
Trong vòng lặp vẽ tầng, gọi SET_MAU :i để đổi màu.
6.2. Độ dày bút
Sử dụng lệnh SETWIDTH n để thay đổi độ dày:
SETWIDTH 3 ; bút dày 3 pixel
Bạn có thể giảm độ dày khi vẽ các tầng cao hơn để tạo cảm giác xa.
7. Thực hành nâng cao: Tháp có họa tiết “cây cầu” và “cột trụ”
7.1. Vẽ cây cầu nối giữa các tầng
Cây cầu là một hình chữ nhật dài, đặt giữa hai cột của các tầng liền kề.
TO CAY_CAU :x :y :len :h PU SETXY :x :y PD SETPC 105 105 105 ; Màu xám REPEAT 2 FORWARD :len RIGHT 90 FORWARD :h RIGHT 90
END
Khi vẽ các tầng, sau khi vẽ tầng i và i+1, bạn có thể gọi CAY_CAU để nối chúng.
7.2. Vẽ cột trụ (cột tròn)
TO COT_TRU :x :y :r PU SETXY :x :y PD SETPC 100 149 237 ; Màu xanh nhạt REPEAT 360 FORWARD (2 3.14159 :r / 360) RIGHT 1
END
Bạn có thể đặt cột trụ ở góc hoặc trung tâm đáy để tăng tính thẩm mỹ.
8. Tối ưu hoá mã nguồn và các mẹo hay
- Sử dụng biến toàn cục (
MAKE) để lưu trữ các tham số chung (màu, độ dày, tỉ lệ). Điều này giúp thay đổi nhanh chóng mà không cần sửa nhiều dòng. - Hàm phụ (procedure) ngắn gọn: Mỗi hàm chỉ thực hiện một nhiệm vụ (vẽ cửa, vẽ tầng). Đảm bảo tính tái sử dụng.
- Kiểm tra lỗi: Khi thay đổi tham số, nếu giá trị âm hoặc quá lớn, rùa có thể vẽ ra ngoài khung. Hãy luôn dùng
IFđể kiểm tra:
logo IF :w < 0 OUTPUT - Sử dụng
CLEARSCREENtrước mỗi lần vẽ mới để làm sạch màn hình. - Lưu file: Khi hàm đã ổn, lưu lại file
.lgođể tái sử dụng. Bạn có thể import lại bằngLOAD "tenfile.lgo".
9. Tổng kết và hướng phát triển tiếp theo
Trong bài viết này, chúng ta đã:
- Hiểu rõ môi trường MSWLogo và các lệnh cơ bản.
- Xây dựng hàm vẽ tháp đơn giản, sau đó bổ sung chi tiết như cửa sổ, cửa ra vào.
- Mở rộng thành tháp nhiều tầng, áp dụng vòng lặp và tỉ lệ giảm kích thước.
- Thử nghiệm vẽ tháp 3D bằng kỹ thuật isometric, giúp tạo cảm giác chiều sâu.
- Tùy biến màu sắc, độ dày bút để tháp trở nên sinh động hơn.
- Thêm các họa tiết phụ như cây cầu và cột trụ, nâng cao tính thẩm mỹ.
- Đưa ra các mẹo tối ưu hoá để viết code sạch, dễ bảo trì.
9.1. Ý tưởng dự án tiếp theo
- Tháp có hoạt ảnh: Sử dụng
REPEATvàWAITđể tạo hiệu ứng “đang xây dựng” (rùa vẽ dần dần). - Tháp tương tác: Nhận tham số từ người dùng (sử dụng
READLISThoặcINPUT) để tạo tháp theo yêu cầu. - Tháp phong cách lịch sử: Thêm các họa tiết đặc trưng như cột Doric, mái ngói, hoặc tháp đồng hồ.
- Kết hợp âm thanh: Khi rùa hoàn thành mỗi tầng, phát âm thanh (nếu môi trường hỗ trợ
SOUND).
9.2. Tham khảo tài liệu
- Sách “Logo Programming for Beginners” – Chương 4: Vẽ hình học.
- Trang chủ MSWLogo – Tài liệu API chính thức.
- Video tutorial “Advanced Turtle Graphics” trên YouTube – Hướng dẫn vẽ 3D và hiệu ứng.
Hy vọng bài viết đã cung cấp cho bạn một cẩm nang toàn diện để tự tin vẽ tháp trong MSWLogo, từ những bước đầu đơn giản tới các dự án phức tạp hơn. Hãy thử nghiệm, sáng tạo và chia sẻ những tác phẩm của mình nhé!
