Trò chơi trắc nghiệm (bài 3)

08/09/2013 21:51

(e-CHÍP Online) Để có trò chơi trắc nghiệm, bạn đã tạo ra các khung chữ dùng để hiển thị câu hỏi, bốn lựa chọn và điểm số đạt được. Ta cần viết thêm những câu lệnh để lấy câu hỏi từ nội dung XML, đưa vào các khung chữ.


Các khung chữ mà bạn đã tạo ra trên sân khấu của Flash gọi là "khung chữ động" (dynamic text) vì nội dung của nó có thể thay đổi linh hoạt bởi câu lệnh ActionScript. Trong sân khấu chỉ có một "khung chữ tĩnh" (static text) có dòng chữ Điểm :, dùng để giới thiệu khung chữ hiển thị điểm đi theo sau. Ta dùng khung chữ tĩnh như vậy vì nội dung của nó không thay đổi trong màn trình diễn.

Ta hãy viết thêm những câu lệnh ActionScript để lấy câu hỏi từ nội dung XML, đưa vào các khung chữ. Bạn bấm vào ô biểu thị khung hình số 1 trong cửa sổ thời tuyến (timeline) ngay dưới thanh trình đơn, gõ phím F9 để mở cửa sổ Actions – Frame, xem lại những câu lệnh ActionScript đã viết. Ở dòng 7, bạn hãy xóa câu lệnh trace(list); và viết câu lệnh showQuestion(); nhằm gọi hàm showQuestion. Từ dòng 9 trở xuống ta viết ra định nghĩa các biến cần thiết và định nghĩa hàm showQuestion dùng để hiển thị câu hỏi như hình sau.

Bạn có thể hình dung biến là hộp chứa, dùng để lưu giữ trị nào đó. Trị của biến có thể thay đổi tùy theo nhu cầu. Khi làm cho biến có trị mới, ta gọi là "gán trị cho biến".

Câu lệnh var n = 0; (dòng 9) là câu lệnh định nghĩa biến mới mang tên n và gán trị số 0 cho biến đó. Ta dùng biến n để ghi nhớ số thứ tự của câu hỏi. Tương tự, câu lệnh var s = 0; (dòng 10) định nghĩa biến s và gán trị ban đầu là 0. Ta dùng biến n để ghi nhớ số thứ tự của câu hỏi và biến s để ghi nhớ điểm số đạt được. Trong nội dung XML, số thứ tự của câu hỏi bắt đầu từ 0, chứ không phải từ 1. Câu lệnh var q:XMLList; (dòng 11) định nghĩa biến q chuyên dùng để chứa đối tượng thuộc loại XMLList.

Các dòng từ 12 đến 22 là định nghĩa hàm showQuestion. Ở dòng 12, bạn thấy có ghi void sau tên hàm và dấu hai chấm. Điều đó ngụ ý rằng hàm showQuestion làm những việc cần thiết nhưng cuối cùng không "trả về" một trị nào. Ở đầu hàm showQuestion, câu lệnh ở hai dòng 13 và 14 quy định rằng nếu trị của n bằng với số câu hỏi thì hàm kết thúc ngay, không làm gì nữa.

Bạn nhớ rằng ta đã có đối tượng list chứa danh sách câu hỏi lấy từ tập tin XML. Ở phần đầu hàm showQuestion, ta viết câu lệnh if(n == list.length()) return; (dòng 13 và 14) nhằm nói rằng nếu số thứ tự câu hỏi bằng số câu hỏi trong danh sách list thì kết thúc hàm ngay lập tức. Biểu thức list.length() nhằm gọi hàm length của đối tượng list, cho ta số câu hỏi trong danh sách list. Nếu list chứa 50 câu hỏi, list.length() cho ta trị 50. Theo quy ước của ActionScript, số thứ tự câu hỏi bắt đầu từ trị 0, chứ không phải trị 1. Khi có 50 câu hỏi, câu hỏi cuối cùng có số thứ tự là 49.

Muốn lấy câu hỏi thứ n của list (nút thứ n của danh sách), ta viết: list[n]. Câu lệnh q = list[n].children(); (dòng 15) nhằm lấy nút thứ n của danh sách, rồi gọi hàm children của nút thứ n để lấy danh sách các nút con của nút thứ n và lưu danh sách ấy vào biến q. Theo cấu trúc tập tin Test.xml mà bạn đã biết, các nút con trong một câu hỏi bao gồm: bản thân câu hỏi (nút con 0), bốn lựa chọn (các nút con 1, 2, 3, 4) và lựa chọn đúng (nút con 5).

Câu lệnh question.text = q[0]; (dòng 16) nhằm đưa nút con 0, tức q[0], vào khung chữ mang tên question. Bạn chú ý, muốn nói đến nội dung của khung chữ question, ta phải viết question.text.

Các câu lệnh ở các dòng từ 17 đến 20 nhằm hiển thị các lựa chọn. Trước mỗi lựa chọn cần có thêm chữ a, b, c hoặc d, kèm theo dấu chấm. Vì vậy, ta viết các câu lệnh hơi dài thay vì viết đơn giản:

a.text = q[1];

b.text = q[2];

c.text = q[3];

d.text = q[4];

Câu lệnh dòng 21 thể hiện trị của biến s trong khung chữ score.

Ấn Ctrl+Enter để Flash biên dịch tập tin FLA thành tập tin SWF và chạy chương trình, bạn thấy ngay hiệu lực của hàm showQuestion: câu hỏi đầu tiên (trong tập tin Test.xml) cùng các lựa chọn (a, b, c, d) tương ứng xuất hiện trong các khung chữ động.

NGỌC GIAO


Ý kiến bạn đọc (0)
Tên   Email

Lên đầu trang