Game Bóng bàn hai người chơi
Mục tiêu: Trò chơi Pong hai người: hai vợt, bóng nảy, tính điểm, ai được 5 điểm trước thì thắng.
Em sẽ học gì
- Nội dung trong bài: trò chơi hai người, mỗi người một vợt, điều khiển bằng hai bộ phím khác nhau.
- Bóng nảy lại khi chạm vợt và chạm cạnh trên, cạnh dưới.
- Tính điểm cho mỗi người, ai được năm điểm trước thì thắng.

Bài làm như sau. Trước hết, viết dòng hướng dẫn chơi ở đáy sân khấu: chọn Sân khấu ở góc dưới bên phải,

mở thẻ Phông nền, chọn công cụ Văn bản, hình chữ T, để nhập hướng dẫn người chơi bấm gần mép dưới rồi gõ: Người chơi A: A, Z. Người chơi B: mũi tên lên, mũi tên xuống.

Quay về thẻ Code. Dòng chữ nằm trên phông nền, nên lúc chơi luôn hiện ở đáy sân khấu. Trò chơi này không cần mèo: bấm chuột phải vào mèo, chọn xoá.

Thêm vợt thứ nhất: bấm nút Chọn một Nhân vật ở góc dưới bên phải, gõ Paddle vào ô tìm kiếm, rồi chọn cái vợt. Đặt tên là VotA: vợt của người chơi A, 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 ở mép trái: x bằng âm 210, y bằng 0, hướng bằng 0 để vợt dựng đứng.

Thêm vợt thứ hai: lại bấm nút Chọn một Nhân vật, gõ Paddle, chọn cái vợt. Đặt tên là VotB: vợt của người chơi B, đặt ở mép phải: x bằng 210, y bằng 0, hướng cũng bằng 0.

Cuối cùng là quả bóng: bấm nút Chọn một Nhân vật, gõ Ball, rồi chọn quả bóng. Đặt tên là Bong, đặt ở giữa sân: x bằng 0, y bằng 0, kích thước 50 phần trăm cho bóng nhỏ lại. Tạo biến: chọn nhóm Biến số, bấm Tạo một biến, đặt tên là diemA: điểm của người chơi A, dùng chung cho mọi nhân vật. Tạo thêm biến diemB: điểm của người chơi B. Hai ô điểm hiện ở góc sân khấu.

Bây giờ viết khối lệnh. Chọn nhân vật VotA.

Việc cần làm: về mép trái; lặp mãi: phím A thì đi lên, phím Z thì đi xuống.
Sơ đồ thuật toán của vợt A: bấm cờ xanh: vợt về giữa mép trái. Rồi lặp mãi: phím A đang bấm thì y tăng 10, phím Z đang bấm thì y giảm 10, rồi lại kiểm tra từ đầu.

Chọn nhóm Sự kiện, kéo khối: Khi bấm vào cờ xanh,
Giải thích: Khối Khi bấm vào cờ xanh: bấm cờ xanh thì các khối gắn bên dưới bắt đầu chạy.

gắn khối đi tới điểm x y, x bằng âm 210, y bằng 0: vợt về giữa mép sân.
Giải thích: Khối đi tới điểm x y đưa vợt về giữa mép trái mỗi khi bắt đầu ván.

Thêm khối liên tục,
Giải thích: Khối liên tục lặp mãi các khối bên trong. Vì kiểm tra phím trong vòng lặp, nên giữ phím thì vợt đi mượt, và hai người bấm phím cùng lúc vẫn được.

bên trong, khối nếu,

điều kiện là khối phím được bấm, trong nhóm Cảm biến, chọn phím A,

thì khối thay đổi y một lượng, gõ 10: vợt đi lên.
Giải thích: Khối nếu chỉ chạy khối bên trong khi điều kiện đúng: phím A đang được bấm thì y tăng 10, vợt đi lên.

Thêm khối nếu thứ hai, gắn dưới khối nếu thứ nhất,

điều kiện: khối phím được bấm, chọn phím Z,

thì khối thay đổi y một lượng, gõ âm 10: vợt đi xuống. Ta vừa làm: vợt A về mép trái, rồi lặp mãi: phím A thì lên, phím Z thì xuống.
Giải thích: Khối nếu thứ hai: phím Z đang được bấm thì y giảm 10, vợt đi xuống.

Chạy thử: bấm cờ xanh, giữ phím A rồi phím Z: vợt A đi lên, đi xuống.

Vợt B làm tương tự. Chọn nhân vật VotB.

Việc cần làm: về mép phải; lặp mãi: mũi tên lên thì đi lên, mũi tên xuống thì đi xuống.
Kéo khối Khi bấm vào cờ xanh,

gắn khối đi tới điểm x y, x bằng 210, y bằng 0: vợt về giữa mép sân.

Thêm khối liên tục,

bên trong, khối nếu,

điều kiện là khối phím được bấm, trong nhóm Cảm biến, chọn mũi tên lên,

thì khối thay đổi y một lượng, gõ 10: vợt đi lên.

Thêm khối nếu thứ hai, gắn dưới khối nếu thứ nhất,

điều kiện: khối phím được bấm, chọn mũi tên xuống,

thì khối thay đổi y một lượng, gõ âm 10: vợt đi xuống. Ta vừa làm: vợt B về mép phải, mũi tên lên thì lên, mũi tên xuống thì xuống.
Giải thích: Script này giống hệt vợt A, chỉ khác hai chỗ: vợt ở mép phải, và dùng phím mũi tên lên, mũi tên xuống.

Chạy thử: bấm cờ xanh, hai người cùng giữ phím: hai vợt chạy cùng lúc, không ảnh hưởng nhau.

Đến quả bóng, phần chính của trò chơi. Chọn nhân vật Bong.

Việc cần làm: điểm về 0; bóng về giữa, chọn hướng ngẫu nhiên; lặp mãi: bay, chạm vợt thì bật lại, lọt qua mép thì tính điểm.
Sơ đồ thuật toán của quả bóng. Bấm cờ xanh: hai điểm về 0, bóng về giữa với hướng ngẫu nhiên, đợi 1 giây. Rồi lặp mãi: đi 8 bước. Chạm vợt thì quay ngược lại. Lọt qua mép phải thì A được điểm, lọt qua mép trái thì B được điểm. Chạm cạnh thì bật lại.

Kéo khối Khi bấm vào cờ xanh,

gắn khối đặt biến thành, trong nhóm Biến số, chọn diemA, giữ số 0,

thêm một khối đặt biến thành, chọn diemB, cũng giữ số 0: ván mới bắt đầu từ 0 điểm.

Thêm khối đi tới điểm x y, x bằng 0, y bằng 0: bóng ở giữa sân.
Giải thích: Khối đặt biến thành gán giá trị cho biến: mỗi ván mới, điểm của hai người về 0. Rồi bóng đi tới điểm không, không, là giữa sân khấu.

Thêm khối đặt hướng bằng,

thả khối lấy ngẫu nhiên, trong nhóm Các phép toán, từ 45, đến 135: bóng bay sang phải, chếch lên hoặc chếch xuống.
Giải thích: Hướng 90 độ là sang phải. Lấy ngẫu nhiên từ 45 đến 135 độ, nên bóng bay sang phải, chếch lên hoặc chếch xuống, mỗi ván một kiểu.

Thêm khối đợi 1 giây cho hai người chơi chuẩn bị.

Thêm khối liên tục,

bên trong, khối di chuyển, gõ 8 bước: tốc độ của bóng.

Thêm khối nếu chạm cạnh, bật lại: bóng nảy ở cạnh trên và cạnh dưới. Ta vừa làm: điểm về 0, bóng về giữa, chọn hướng ngẫu nhiên, rồi bay liên tục và nảy ở các cạnh.

Chạy thử: bấm cờ xanh, bóng bay chéo và nảy ở các cạnh, nhưng đi xuyên qua vợt. Ta làm tiếp phần chạm vợt.

Thêm khối nếu, gắn dưới khối di chuyển,

Lấy khối hoặc, trong nhóm Các phép toán, đặt ra chỗ trống, thả khối đang chạm, trong nhóm Cảm biến, vào ô bên trái, chọn VotA, thả thêm một khối đang chạm vào ô bên phải, chọn VotB: bóng chạm vợt A hoặc vợt B. Kéo cả khối hoặc vào ô điều kiện của khối nếu.

Khi đó, khối đặt hướng bằng,

thả phép trừ, ô bên trái gõ 0,

ô bên phải thả khối hướng, trong nhóm Chuyển động: bóng quay ngược lại.

Thêm khối di chuyển, gõ 8: bóng ra khỏi vợt ngay, không bị dính lại.
Giải thích: Khối hoặc đúng khi chạm một trong hai vợt. Khi đó hướng mới bằng 0 trừ hướng cũ: bóng quay ngược lại, giữ nguyên độ chếch. Đi thêm tám bước để bóng thoát khỏi vợt, không bị quay đầu lần nữa.
Giải thích: Trong khối liên tục, mỗi lần lặp bóng đi 8 bước, nên bóng bay mãi; số bước càng lớn thì bóng càng nhanh. Khối nếu chạm cạnh, bật lại làm bóng nảy ngược lại khi chạm cạnh sân khấu.

Tính điểm: thêm khối nếu, gắn dưới khối nếu vừa làm,

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

bên trái thả khối hoành độ x: bóng lọt qua mép phải, vợt B để lọt bóng,

thì khối thay đổi biến một lượng, chọn diemA, giữ số 1: người chơi A được một điểm,

rồi khối đi tới điểm x y, x bằng 0, y bằng 0: bóng về giữa sân.

Bên mép trái làm tương tự: thêm khối nếu,

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

bên trái thả khối hoành độ x: bóng lọt qua mép trái,

khối thay đổi biến một lượng, chọn diemB: người chơi B được một điểm,

rồi khối đi tới điểm x y, cũng gõ 0, và 0: bóng về giữa sân. Ta vừa làm: chạm vợt thì bóng quay ngược lại, lọt qua mép phải thì A được điểm, lọt qua mép trái thì B được điểm.
Giải thích: Hoành độ x lớn hơn 200: bóng đã lọt qua vợt B ở mép phải, nên người chơi A được một điểm, rồi bóng về giữa sân.
Giải thích: Hoành độ x nhỏ hơn âm 200: bóng lọt qua vợt A ở mép trái, người chơi B được một điểm.

Chạy thử: bấm cờ xanh và chơi: bóng bật lại khi chạm vợt, để lọt bóng thì đối thủ được điểm.

Còn phần thắng thua. Chọn lại VotA. Sơ đồ thuật toán phần thắng thua: đợi đến khi diemA bằng 5, nói Người chơi A thắng, rồi phát thông báo hết ván. Quả bóng nhận thông báo thì dừng.

Việc cần làm: đợi đến khi diemA = 5 thì báo A thắng, dừng trò chơi.
Kéo thêm một khối Khi bấm vào cờ xanh,

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

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

bên trái thả biến diemA.
Giải thích: Vợt có thêm script thứ hai, cũng bắt đầu khi bấm cờ xanh. Hai script của cùng một nhân vật chạy song song, cùng một lúc.

Rồi khối nói, trong nhóm Hiển thị, gõ: Người chơi A thắng!
Giải thích: Khối nói hiện câu trong bong bóng và giữ mãi, khác với khối nói trong mấy giây tự tắt.

Cuối cùng khối phát thông báo, trong nhóm Sự kiện: báo cho quả bóng biết đã hết ván. Bấm vào ô thông báo, chọn Thông báo mới, đặt tên là hết ván.
Giải thích: Khối đợi đến khi dừng script ở đây cho tới khi điều kiện đúng, tức là A được đủ năm điểm.
Giải thích: Khối phát thông báo gửi lời nhắn hết ván tới mọi nhân vật; quả bóng nhận được thì dừng lại.

Làm tương tự cho VotB.

Việc cần làm: đợi đến khi diemB = 5 thì báo B thắng, dừng trò chơi.
Kéo thêm một khối Khi bấm vào cờ xanh,

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

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

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

Rồi khối nói, trong nhóm Hiển thị, gõ: Người chơi B thắng!

Cuối cùng khối phát thông báo, trong nhóm Sự kiện: báo cho quả bóng biết đã hết ván. Chọn thông báo hết ván đã tạo. Ta vừa làm: mỗi vợt đợi điểm của mình đủ năm thì nói thắng và phát thông báo hết ván.
Giải thích: Giống vợt A: đợi đến khi diemB bằng năm thì nói thắng và phát thông báo hết ván. Thông báo đã tạo rồi, chỉ cần chọn lại.

Quả bóng phải nghe thông báo đó. Chọn lại nhân vật Bong.

Việc cần làm: khi nhận thông báo hết ván thì bóng dừng lại.
Kéo khối Khi nhận được thông báo, trong nhóm Sự kiện, chọn hết ván,
Giải thích: Khối Khi nhận được thông báo chạy các khối bên dưới khi có nhân vật phát thông báo hết ván.

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 kịch bản khác của nhân vật, quả bóng đứng yên. Ta vừa làm: vợt đủ năm điểm thì nói thắng và phát thông báo, quả bóng nhận thông báo thì dừng lại.
Giải thích: Khối này chỉ dừng các script khác của quả bóng, nên câu thắng của vợt vẫn hiện trên sân. Khối dừng tất cả thì xoá luôn câu nói.

Xong rồi! Chơi thử một ván.

Bấm cờ xanh, hai người chơi cùng điều khiển vợt. Ai được năm điểm trước thì thắng, quả bóng dừng lại.

Các khối mới trong bài
- Khối đặt hướng bằng (0 − hướng): quay bóng ngược lại theo chiều ngang, giữ độ chếch.
- Khối nếu chạm cạnh, bật lại: nhân vật chạm cạnh sân khấu thì nảy ngược lại.
- Khối hoặc: đúng khi một trong hai điều kiện đúng.
- Khối đợi đến khi: dừng lại cho tới khi điều kiện đúng thì mới chạy tiếp.
- Khối phát thông báo: gửi một lời nhắn tới mọi nhân vật.
- Khối khi nhận được thông báo: chạy các khối bên dưới khi nghe thấy thông báo đã chọn.
- Khối dừng lại (các kịch bản khác): dừng các script khác của chính nhân vật này.
Kỹ thuật lập trình đã học
- Về kỹ thuật lập trình, bài này ta học: song song: hai vợt và quả bóng cùng chạy một lúc, mỗi nhân vật một script riêng.
- Phản xạ: hướng mới bằng 0 trừ hướng cũ, bóng quay ngược lại.
- Biến dùng chung: bóng tăng điểm, còn vợt đợi điểm đủ năm thì báo thắng.
- Và kiểm thử: bóng nảy đủ các góc, không kẹt trong vợt, điểm tính đúng.
Bài tập
Bài tập mở rộng: cho bóng nhanh dần sau mỗi lần chạm vợt, bằng một biến tốc độ tăng thêm 1 mỗi lần chạm.