--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

Lập trình Scratch (16) - Tạo lời thoại 2

Bài trước: Lập trình Scratch (15) - Tạo lời thoại 1
-----
16. Tạo lời thoại 2

Ở bài học trước, bạn đã biết 2 cách để lập trình cho 2 nhân vật nói chuyện với nhau: cách 1 là dùng lệnh wait, cách 2 là dùng Bộ đếm thời gian (timer).

Trong phần này, chúng ta sẽ học thêm một số kỹ thuật khác để lập trình cho 2 nhân vật nói chuyện với nhau.

16.1 Sử dụng danh sách

Sử dụng danh sách (list) để lưu các lời thoại, rồi cho các nhân vật nói các lời thoại trong danh sách.

Ưu điểm của phương pháp này là bạn có thể thay đổi nội dung toàn bộ cuộc hội thoại một cách nhanh chóng, bằng cách thay đổi các phần tử trong danh sách mà không cần sửa lại các khối lệnh lập trình.

Để bắt đầu, bạn cần chuẩn bị hai thành phần sau:

[1] Một danh sách, đặt tên là LoiThoai để chứa các câu nói

[2] Một biến, đặt tên là i để làm "chỉ số" giúp máy tính biết đang đọc đến dòng thứ mấy

Cách thức hoạt động:

Chúng ta sẽ cho biến i chạy từ 1 và tăng dần. Quá trình này lặp lại cho đến khi i lớn hơn độ dài của danh sách (khi không còn câu thoại nào để đọc nữa).

Kỹ thuật phân chia lời thoại cho hai nhân vật:

Để hai nhân vật (ví dụ: Mèo và Cá Gobo) tự động biết khi nào đến lượt mình nói mà không cần dùng lệnh wait thủ công, chúng ta sử dụng phép toán mod (phép chia lấy dư) cho 2.

- Nếu i mod 2 = 1: Có nghĩa là i là số lẻ (1, 3, 5...). Đây là lượt nói của nhân vật thứ nhất

- Nếu i mod 2 = 0: Có nghĩa là i là số chẵn (2, 4, 6...). Đây là lượt nói của nhân vật thứ hai

16.2 Thực hành

Giả sử bạn có kịch bản đối thoại như sau:

1. Mèo: Cá ơi, bạn có biết tại sao nước biển lại mặn không?

2. Cá: Vì loài cá chúng tôi hay khóc mỗi khi bị mẹ mắng đó!

3. Mèo: Thật à? Tôi tưởng vì người ta làm rơi lọ muối xuống biển chứ?

4. Cá: Bạn xem phim hoạt hình ít thôi Mèo!

5. Mèo: Vậy bạn có biết tại sao tôi không bao giờ xuống nước chơi với bạn không?

6. Cá: Vì bạn sợ nước chứ gì?

7. Mèo: Không, vì tôi sợ ướt chứ không sợ nước!

8. Cá: Ôi trời, suýt chút nữa là tôi sặc nước vì lý do của bạn đấy!

9. Mèo: Thôi mà, hay là tí nữa tôi cho cậu ít bánh quy nha?

10. Cá: Đồng ý! Nhưng đừng câu tôi là được!

Bước 1: Chuẩn bị danh sách và biến đếm

- Vào mục Variables, chọn Make a List để tạo một danh sách, đặt tên là LoiThoai

- Nhấn dấu + ở góc danh sách LoiThoai trên sân khấu để nhập lần lượt 10 câu thoại trên vào

- Tạo một biến, đặt tên là i (dùng cho tất cả nhân vật)

Bước 2: Lập trình cho nhân vật Mèo

Mã lệnh (Scratch)

Giải thích mã lệnh

when green flag clicked

Kích hoạt đoạn mã ngay khi người dùng nhấn vào lá cờ xanh để chạy chương trình

set [i] to (1)

Đặt giá trị ban đầu của biến i là 1 (bắt đầu từ câu thoại đầu tiên)

repeat until (i > length of [LoiThoai])

Liên tục thực hiện các lệnh bên trong cho đến khi biến i vượt quá số lượng câu có trong danh sách

wait until ((i mod 2) = 1)

Nhân vật sẽ dừng lại đợi cho đến khi [i] là số lẻ (1, 3, 5...). Đây là cách để "nhường" lượt cho nhân vật số chẵn (Cá)

say (item [i] of LoiThoai) for 2 seconds

Lấy nội dung văn bản tại vị trí thứ i trong danh sách LoiThoai và hiển thị lời nói trong 2 giây

change [i] by (1)

Tăng giá trị của i lên 1 đơn vị để hệ thống hiểu rằng câu thoại hiện tại đã xong và chuyển sang câu kế tiếp


Bước 3: Lập trình cho nhân vật Cá Gobo

Dưới đây là các lệnh lập trình cho Cá:

Mã lệnh (Scratch)

Giải thích mã lệnh

when green flag clicked

Kích hoạt đoạn mã ngay khi người dùng nhấn vào lá cờ xanh để chạy chương trình

set [i] to (1)

Đặt giá trị ban đầu của biến i là 1 (bắt đầu từ câu thoại đầu tiên)

repeat until (i > length of [LoiThoai])

Liên tục thực hiện các lệnh bên trong cho đến khi biến i vượt quá số lượng câu có trong danh sách

wait until ((i mod 2) = 0)

Nhân vật sẽ dừng lại đợi cho đến khi [i] là số chẵn (2, 4, 6...). Đây là cách để "nhường" lượt cho nhân vật số lẻ (Mèo)

say (item [i] of LoiThoai) for 2 seconds

Lấy nội dung văn bản tại vị trí thứ i trong danh sách LoiThoai và hiển thị lời nói trong 2 giây

change [i] by (1)

Tăng giá trị của i lên 1 đơn vị để hệ thống hiểu rằng câu thoại hiện tại đã xong và chuyển sang câu kế tiếp


Bạn chạy thử xem Mèo và Cá đã đối thoại (trong im lặng) với nhau được chưa?

Bước 4: Lập trình cho nhân vật Mèo đi lại khi nói chuyện

Khối lệnh (Scratch)

Giải thích chi tiết

when [green flag] clicked

Bắt đầu chương trình khi nhấn vào lá cờ xanh

go to x: (-164) y: (-111)

Thiết lập vị trí ban đầu: Đưa nhân vật về tọa độ cụ thể trên sân khấu để bắt đầu

point in direction (90)

Đặt hướng nhìn: Cho nhân vật hướng về phía bên phải (hướng 90 độ)

set rotation style [left-right]

Kiểu xoay: Chỉ cho phép nhân vật quay mặt sang trái hoặc phải, tránh việc nhân vật bị lộn ngược khi chạm biên

repeat until <(i) > (length of [dialog])>

Vòng lặp điều kiện: Tiếp tục thực hiện các hành động bên trong cho đến khi biến i lớn hơn số lượng câu thoại trong danh sách LoiThoai

    move (25) steps

Di chuyển: Nhân vật bước tới một khoảng bằng 25 bước

    next costume

Thay đổi ngoại hình: Chuyển sang trang phục kế tiếp để tạo hiệu ứng nhân vật đang bước đi (hoạt họa)

    if on edge, bounce

Xử lý va chạm biên: Nếu nhân vật chạm vào cạnh của sân khấu, nó sẽ tự động bật ngược trở lại

    wait (.4) seconds

Tạo độ trễ: Dừng lại 0.4 giây trước khi thực hiện bước tiếp theo để hành động không quá nhanh, giúp người xem kịp quan sát

end

Kết thúc vòng lặp khi điều kiện dừng được thỏa mãn.

16. Use a list for dialog

If you have a lot of dialog, it’s best to use a list.

It’s easy to change the dialog. Just change the list items.

To start with, you need to create

- a list dialog to contain the dialog items

- a variable i to be used as list index

We iterate until the list index i is larger than the list length.

The mod operator returns the rest of the division by 2.

- i mod 2 = 1 means i is odd

- i mod 2 = 0 means i is even

-----
Bài sau: