Hứng táo nâng cao: nhiều màn
Mục tiêu: Trò chơi Hứng táo nhiều màn: Menu, Màn 1, Màn 2, Thắng hoặc Thua; chuyển màn bằng thông báo.
Em sẽ học gì
- Nội dung trong bài: thiết kế các trạng thái của trò chơi: Menu, hai màn chơi, thắng hoặc thua.
- Chuyển màn bằng thông báo: phát thông báo màn 2, các nhân vật nhận được thì sang màn mới.
- Biến man giữ số màn: mỗi màn một phông nền, màn sau táo rơi nhanh hơn.

Ở cấp Cơ bản ta đã làm trò chơi Hứng táo một màn. Bài này nâng cấp nó: có Menu, hai màn chơi, thắng hoặc thua, chuyển màn bằng thông báo. Bài làm như sau. Trước hết là phông nền cho từng màn: chọn Sân khấu ở góc dưới bên phải,

mở thẻ Phông nền. Phông trắng này dùng làm màn hình Menu, chọn công cụ Văn bản, hình chữ T, bấm phía trên giữa sân khấu rồi gõ: Hứng táo, bấm nút để bắt đầu.

Quay về thẻ Code.

Phông nền Màn 1: bấm nút Chọn một Phông nền ở góc dưới bên phải, gõ Blue Sky, rồi chọn bầu trời xanh.

Phông nền Màn 2: lại bấm nút Chọn một Phông nền, gõ Stars, rồi chọn bầu trời sao. Đến các nhân vật. Chọn mèo, mèo là người chơi, đặt tên là Meo, kích thước 60 phần trăm.

Thêm quả táo: bấm nút Chọn một Nhân vật, gõ Apple vào ô tìm kiếm, rồi chọn quả táo. Đặt tên là Tao.

Thêm nút bắt đầu: lại bấm nút Chọn một Nhân vật, gõ Button2, rồi chọn cái nút. Đặt tên là Nut, Sân khấu rộng từ âm 240 đến 240 theo chiều ngang x, và từ âm 180 đến 180 theo chiều dọc y. Mèo đứng chính giữa, tại điểm x bằng 0, y bằng 0. đặt nút dưới dòng chữ Menu: x bằng 0, y bằng âm 40. Tạo biến: chọn nhóm Biến số, bấm Tạo một biến, đặt tên là man: số màn đang chơi. Tạo biến diem: số táo hứng được, và biến mang: số mạng còn lại, lúc đầu là 3. Trước khi viết khối lệnh, vẽ sơ đồ trạng thái. Trò chơi bắt đầu ở Menu, bấm nút thì sang Màn 1. Ở Màn 1, đủ 3 điểm thì sang Màn 2, táo rơi nhanh hơn. Đủ 6 điểm thì thắng. Hết mạng ở màn nào cũng thua. Mỗi mũi tên là một điều kiện để chuyển màn. Sân khấu sẽ điều khiển việc chuyển màn. Chọn lại Sân khấu.

Việc cần làm: bấm cờ xanh: phông Menu; man = 0, diem = 0, mang = 3.
Chọn nhóm Sự kiện, kéo khối Khi bấm vào cờ xanh,

Nhóm Hiển thị: gắn khối đổi phông nền thành, chọn backdrop1: phông Menu có dòng chữ.
Giải thích: Bấm cờ xanh thì trò chơi luôn bắt đầu ở trạng thái Menu: phông trắng có dòng chữ.

Nhóm Biến số: gắn khối đặt biến thành, chọn man, giữ số 0: Menu là màn số 0,

thêm khối đặt biến thành, chọn diem, giữ số 0,

thêm một khối nữa, chọn mang, gõ 3. Ta vừa làm: bấm cờ xanh thì hiện phông Menu, đặt man, diem về 0 và mang bằng 3.
Giải thích: Ba khối này đặt lại mọi biến: lần chơi nào cũng bắt đầu giống hệt lần đầu.

Đến cái nút. Chọn nhân vật Nut.

Việc cần làm: bấm cờ xanh thì hiện nút; bấm vào nút thì ẩn nút, phát thông báo màn 1.
Kéo khối Khi bấm vào cờ xanh,

gắn khối hiện, trong nhóm Hiển thị.
Giải thích: Ở Menu, nút hiện ra để người chơi bấm.

Kéo khối Khi bấm vào nhân vật này, trong nhóm Sự kiện, đặt bên dưới,

gắn khối ẩn: bấm xong thì nút biến mất,

rồi khối phát thông báo, trong nhóm Sự kiện, bấm vào ô thông báo, chọn Thông báo mới, đặt tên là màn 1. Ta vừa làm: bấm cờ xanh thì nút hiện ra; bấm vào nút thì nút ẩn đi và phát thông báo màn 1.
Giải thích: Khối phát thông báo màn 1 báo cho mọi nhân vật và sân khấu biết: chuyển sang Màn 1.

Chạy thử: bấm cờ xanh, Menu hiện ra cùng cái nút. Bấm vào nút: nút biến mất.

Ai nhận thông báo màn 1? Chọn lại Sân khấu.

Việc cần làm: nhận màn 1: man = 1, phông Blue Sky; đợi đến khi diem = 3; man tăng 1, phát màn 2.
Kéo khối Khi nhận thông báo, trong nhóm Sự kiện, chọn màn 1,
Giải thích: Khối Khi nhận thông báo chạy các khối bên dưới khi có ai đó phát thông báo màn 1.

gắn khối đặt biến thành, chọn man, gõ 1: đang ở Màn 1,

gắn khối đổi phông nền thành, trong nhóm Hiển thị, chọn Blue Sky.
Giải thích: Mỗi màn một phông nền, người chơi nhìn là biết đang ở màn nào.

Nhóm Điều khiển: gắn khối đợi đến khi,

điều kiện là phép so sánh bằng, bên phải gõ 3,

bên trái thả biến diem.
Giải thích: Khối đợi đến khi dừng ở đây cho tới khi diem bằng 3: đó là điều kiện chuyển sang Màn 2.

Rồi khối thay đổi biến một lượng, chọn man, giữ số 1: man thành 2,

và khối phát thông báo, trong nhóm Sự kiện, chọn Thông báo mới, đặt tên là màn 2. Ta vừa làm: nhận màn 1 thì man bằng 1, đổi phông. Đủ 3 điểm thì man tăng 1, phát thông báo màn 2.
Giải thích: man tăng thêm 1 thành 2, rồi phát thông báo màn 2 cho mọi nhân vật biết.

Việc cần làm: nhận màn 2: phông Stars; đợi đến khi diem = 6; phát thông báo thắng.
Kéo thêm một khối Khi nhận thông báo, chọn màn 2,

gắn khối đổi phông nền thành, chọn Stars.

Gắn khối đợi đến khi,

điều kiện là phép so sánh bằng, bên phải gõ 6,

bên trái thả biến diem.

Rồi khối phát thông báo, chọn Thông báo mới, đặt tên là thắng. Ta vừa làm: nhận màn 2 thì đổi sang phông bầu trời sao; đủ 6 điểm thì phát thông báo thắng.
Giải thích: Màn 2 làm giống Màn 1: đổi phông, đợi đủ 6 điểm, rồi phát thông báo thắng.

Việc cần làm: nhận màn 1: đợi đến khi mang < 1 thì phát thông báo thua.
Kéo thêm một khối Khi nhận thông báo, chọn màn 1,

gắn khối đợi đến khi,

điều kiện là phép so sánh nhỏ hơn, bên phải gõ 1,

bên trái thả biến mang.

Rồi khối phát thông báo, chọn Thông báo mới, đặt tên là thua. Ta vừa làm: từ Màn 1 trở đi, hết mạng thì phát thông báo thua.
Giải thích: Hai script cùng nhận màn 1 chạy song song: một script đợi đủ điểm, script này đợi hết mạng, màn nào cũng thế.

Chạy thử: bấm cờ xanh, rồi bấm nút: phông nền đổi sang Blue Sky, Màn 1 bắt đầu.

Đến người chơi. Chọn nhân vật Meo.

Việc cần làm: bấm cờ xanh thì ẩn; nhận màn 1: về giữa đáy, hiện, lặp mãi: x = x của chuột.
Kéo khối Khi bấm vào cờ xanh,

gắn khối ẩn: ở Menu chưa có mèo.

Kéo khối Khi nhận thông báo, đặt bên dưới, chọn màn 1,

gắn khối đi tới điểm x y, trong nhóm Chuyển động, x bằng 0, y bằng âm 130: giữa đáy sân khấu.

Gắn khối hiện,
Giải thích: Nhận thông báo màn 1 thì mèo về giữa đáy sân khấu và hiện ra: bắt đầu chơi.

rồi khối liên tục, trong nhóm Điều khiển,

bên trong, khối đặt x bằng, trong nhóm Chuyển động,

ô số thả khối toạ độ x con trỏ chuột, trong nhóm Cảm biến. Ta vừa làm: ở Menu mèo ẩn; nhận màn 1 thì mèo về giữa đáy, hiện ra và chạy theo chuột.
Giải thích: Vòng lặp mãi mãi: x của mèo luôn bằng x của con trỏ chuột, sang Màn 2 vẫn chạy tiếp.

Chạy thử: bấm cờ xanh, bấm nút, rồi di chuột: mèo hiện ra và chạy theo chuột.

Đến quả táo. Chọn nhân vật Tao.

Việc cần làm: cờ xanh: ẩn. Nhận màn 1: hiện ở mép trên, rơi theo man; hứng được: +1 điểm; rơi tới đáy: -1 mạng.
Kéo khối Khi bấm vào cờ xanh,

gắn khối ẩn.

Kéo khối Khi nhận thông báo, đặt bên dưới, chọn màn 1,

gắn khối đi tới vị trí ngẫu nhiên, trong nhóm Chuyển động,

khối đặt y bằng, gõ 170: táo ở mép trên, chỗ ngẫu nhiên,

rồi khối hiện.
Giải thích: Vị trí ngẫu nhiên rồi đặt y bằng 170: táo luôn ở mép trên, mỗi lần một chỗ khác.

Gắn khối liên tục, trong nhóm Điều khiển,

bên trong, khối thay đổi y một lượng,

ô số thả phép nhân, trong nhóm Các phép toán, bên trái gõ âm 4,

bên phải thả biến man.
Giải thích: Tốc độ rơi theo biến man: Màn 1 rơi 4 điểm ảnh mỗi lần, Màn 2 rơi 8. Không cần viết lại script cho Màn 2.

Gắn khối nếu dưới khối thay đổi y,

điều kiện là khối đang chạm, trong nhóm Cảm biến, chọn Meo: mèo hứng được táo,

thì khối thay đổi biến một lượng, chọn diem, giữ số 1,

khối đi tới vị trí ngẫu nhiên,

và khối đặt y bằng, gõ 170: quả táo mới rơi từ mép trên.
Giải thích: Mèo hứng được táo thì diem tăng 1, rồi quả táo quay về mép trên, rơi lại từ một chỗ mới.

Thêm một khối nếu nữa,

điều kiện là phép so sánh nhỏ hơn, bên phải gõ âm 170,

bên trái thả khối toạ độ y, trong nhóm Chuyển động: táo rơi tới đáy,

thì khối thay đổi biến một lượng, chọn mang, gõ âm 1: mất một mạng,

khối đi tới vị trí ngẫu nhiên,

và khối đặt y bằng, gõ 170. Ta vừa làm: táo rơi từ mép trên, nhanh theo biến man. Hứng được thì thêm điểm, rơi tới đáy thì mất mạng.
Giải thích: Táo rơi tới đáy mà mèo không hứng được thì mất một mạng, quả táo cũng quay về mép trên.

Chạy thử: bấm cờ xanh, bấm nút rồi hứng táo. Đủ 3 quả thì sang Màn 2: phông sao, táo rơi nhanh hơn.

Còn trạng thái thắng và thua. Chọn lại nhân vật Meo.

Việc cần làm: nhận thắng: nói Thắng rồi! rồi dừng tất cả. Nhận thua: nói Thua rồi! rồi dừng tất cả.
Kéo khối Khi nhận thông báo, chọn thắng,

gắn khối nói trong 2 giây, trong nhóm Hiển thị, gõ: Thắng rồi!

rồi khối dừng tất cả, trong nhóm Điều khiển.
Giải thích: Nói trong 2 giây rồi mới dừng tất cả, để người chơi kịp đọc. Dừng tất cả mà không đợi thì câu nói mất ngay.

Kéo thêm một khối Khi nhận thông báo, chọn thua,

gắn khối nói trong 2 giây, gõ: Thua rồi!

rồi khối dừng tất cả. Ta vừa làm: nhận thắng thì mèo nói Thắng rồi, nhận thua thì nói Thua rồi, rồi dừng tất cả.

Trong 2 giây mèo nói, táo vẫn rơi, điểm và mạng còn đổi. Chọn lại nhân vật Tao.

Việc cần làm: nhận thắng hoặc nhận thua thì táo đứng yên.
Kéo khối Khi nhận thông báo, chọn thắng,

gắn khối dừng lại, trong nhóm Điều khiển, chọn dòng other scripts in sprite: dừng các script khác của quả táo.
Giải thích: Khối này dừng script rơi của quả táo, nên điểm và mạng giữ nguyên trong lúc mèo nói.

Làm giống vậy cho thua: kéo thêm khối Khi nhận thông báo, chọn thua,

gắn khối dừng lại, chọn other scripts in sprite. Ta vừa làm: nhận thắng hoặc thua thì quả táo dừng rơi.

Xong rồi! Chơi thử một ván: hứng đủ 6 quả táo qua hai màn, mèo nói Thắng rồi và trò chơi dừng. Ván thứ hai, cố tình để táo rơi: mất 3 mạng thì mèo nói Thua rồi. Kiểm thử chơi lại: bấm cờ xanh. Về Menu, diem về 0, mang lại là 3: giống hệt lần đầu.

Các khối mới trong bài
- Bài làm đã hoàn thành. Các khối chính của bài:
- Khối khi nhận thông báo: mỗi trạng thái bắt đầu khi nhận thông báo của nó.
- Khối phát thông báo: chuyển sang trạng thái mới: báo cho mọi nhân vật cùng lúc.
- Khối đổi phông nền thành: mỗi màn một phông nền riêng.
Kỹ thuật lập trình đã học
- Về kỹ thuật lập trình, bài này ta học: sơ đồ trạng thái: vẽ trước các màn và điều kiện chuyển màn.
- Chuyển màn bằng thông báo: sân khấu phát thông báo, nhân vật nào cần thì nhận và làm việc của mình.
- Biến giữ trạng thái: man đổi thì tốc độ rơi của táo đổi theo.
- Đặt lại khi chơi lại: bấm cờ xanh thì điểm, mạng, phông nền và nhân vật đều như lần đầu.
Bài tập
Bài tập mở rộng: thêm Màn 3 có phông nền mới, táo rơi nhanh hơn nữa, và một biến lưu điểm cao nhất.