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

22/11/2013 16:17

Nếu đã tạo ra trò chơi trắc nghiệm với những câu đố vui cho cả nhà, có lẽ bạn sẽ nghĩ đến ngay việc dùng trò chơi như vậy để rèn luyện ngoại ngữ, tiếng Anh chẳng hạn. Muốn vậy, ta nên sửa đổi một chút.

Muốn dùng trò chơi trắc nghiệm để rèn luyện tiếng Anh, trước hết, bạn nên sửa các dòng chữ tiếng Việt trong trò chơi thành tiếng Anh. Trong chương trình Flash, bạn mở tập tin Test.fla, chọn công cụ Text Tool (hoặc gõ phím T), bấm vào dòng chữ Điểm:, sửa thành Score:.

Trong cửa sổ "dòng thời gian" phía trên sân khấu, bạn bấm vào ô tương ứng với số 1 (ở đó có chữ a để báo rằng có những câu lệnh ActionScript tại đấy) và gõ phím F9 để mở cửa sổ Actions - Frame. Bạn sửa câu lệnh ở dòng 17 và 18, thay "Trò chơi trắc nghiệm" bằng "English Test", thay "Bấm vào đây để bắt đầu" bằng "Click here to begin". Bạn sửa câu lệnh ở dòng 62, thay "Trò chơi kết thúc" bằng "Test completed".

Ngoài ra, có lẽ bạn nên giúp các bé biết mình trả lời sai những câu nào. Để thực hiện dự định này, bạn cần ghi nhớ số thứ tự câu hỏi của những trường hợp trả lời sai và hiển thị các số ấy khi chương trình kết thúc. Ta hình dung có một hàm gọi là getWrongResponse để ghi nhớ số thứ tự của câu hỏi ứng bị trả lời sai vào một dãy mang tên wrongResponses. Bạn viết ở dòng 58 và 59 như trong hình sau để gọi hàm getResponse khi bé trả lời sai. Bạn viết thêm ở dòng 71 và 72 như trong hình để hiển thị các câu trả lời sai (nếu có) từ dãy wrongResponse.

Ở cuối chương trình, ta tạo ra dãy wrongResponse và định nghĩa hàm getWrongResponse (các dòng 82 - 87). Giả sử mỗi câu hỏi đều có số thứ tự, được ghi bằng một số, kèm theo dấu chấm, ở đầu câu hỏi. Hàm wrongResponse có nhiệm vụ đọc số thứ tự trong câu hỏi và "nhét" số thứ tự ấy vào một dãy có tên là wrongResponses. Nếu trong câu hỏi không có số thứ tự được ghi theo quy cách đã định, hàm getWrongResponse sẽ hoạt động sai.

Trong trường hợp muốn dùng trò chơi trắc nghiệm để rèn luyện kỹ năng nghe tiếng Anh, bạn dùng câu hỏi là loại câu chừa trống một từ và cho phát giọng đọc câu hoàn chỉnh. Bé phải lắng nghe và chọn từ thích hợp trong các từ a, b, c, d được nêu ra bên dưới.



Để phát âm khi hiển thị câu hỏi, bạn viết câu lệnh gọi hàm playSound ở dòng 30 như trong hình sau và định nghĩa hàm playSound ở cuối chương trình (dòng 89 - 94).

Giả sử ứng với câu hỏi số 1, bạn có tập tin âm thanh 1.mp3 trong cùng thư mục chứa tập tin Test.xml. Ứng với câu hỏi số 2, bạn có tập tin 2.mp3,... Trong hàm playSound, hai câu lệnh ở dòng 90 và 91 có nhiệm vụ đọc số thứ tự trong câu hỏi và tạo ra tên tập tin MP3 tương ứng. Câu lệnh ở dòng 92 đọc tập tin MP3 có tên đã cho. Ở dòng 93, ta ra lệnh phát âm thanh từ dữ liệu âm thanh đã nhận.

Bạn chú ý, nếu đặt tên các tập tin âm thanh MP3 không theo đúng quy ước nêu trên, hàm playSound sẽ hoạt động sai.

Dưới đây là toàn bộ chương trình trong cửa sổ Actions – Frame để bạn tham khảo.

var loader:URLLoader = new URLLoader();

loader.addEventListener(Event.COMPLETE, readXML);

loader.load(new URLRequest("Test.xml"));

var list:XMLList;

function readXML(evt:Event):void {

list = XML(evt.target.data).children();

showQuestion();

}

var n = 0;

var s = 0;

var q:XMLList;

var hello = true;

var timer = new Timer(30000);

timer.addEventListener(TimerEvent.TIMER, nextQuestion);

function showQuestion():void {

if(hello) {

question.text = "English Test";

a.text = "Click here to begin";

return;

}

if(n == list.length())

return;

q = list[n].children();

question.text = q[0];

a.text = "a. " + q[1];

b.text = "b. " + q[2];

c.text = "c. " + q[3];

d.text = "d. " + q[4];

score.text = s + " / " + list.length();

playSound();

timer.start();

}

a.addEventListener(MouseEvent.CLICK, fa);

b.addEventListener(MouseEvent.CLICK, fb);

c.addEventListener(MouseEvent.CLICK, fc);

d.addEventListener(MouseEvent.CLICK, fd);

function fa(evt:MouseEvent) {

check("a");

}

function fb(evt:MouseEvent) {

check("b");

}

function fc(evt:MouseEvent) {

check("c");

}

function fd(evt:MouseEvent) {

check("d");

}

function check(answer:String) {

if(hello) {

hello = false;

showQuestion();

return;

}

timer.stop();

if(n < list.length()) {

if(q[5].toString() == answer)

score.text = ++s;

else

getWrongResponse();

n++;

showQuestion();

}

if(n == list.length()) {

question.text = "Test completed";

a.text = "";

b.text = "";

c.text = "";

d.text = "";

var pts:Number = (s*10)/list.length();

score.text = s + " / " + list.length() + " = " + pts.toFixed(1) + " / 10";

if(wrongResponses.length > 0)

question.text = "Test completed - Wrong response(s):\n" + wrongResponses.toString();

}

}

function nextQuestion(event:TimerEvent):void {

n++;

if(n == list.length())

check("");

else

showQuestion();

}

var wrongResponses:Array = new Array();

function getWrongResponse():void {

var ndx:int = question.text.indexOf(".");

if(ndx == -1) return;

wrongResponses.push(question.text.substring(0, ndx));

}

function playSound():void {

var ndx:int = question.text.indexOf(".");

var mp3:String = question.text.substring(0, ndx) + ".mp3";

var snd:Sound = new Sound(new URLRequest(mp3));

snd.play();

}

Để giúp các bé rèn luyện tiếng Anh, bạn nên tạo nhiều thư mục, mỗi thư mục có tập tin chương trình Test.swf, tập tin câu hỏi Test.xml và các tập tin âm thanh tương ứng 1.mp3, 2.mp3, 3.mp3,.. Tập tin Test.swf dùng trong các thư mục khác nhau là các bản sao từ một tập tin duy nhất.

NGỌC GIAO


Bài liên quan:
Ý kiến bạn đọc (0)
Tên   Email

Lên đầu trang