การทำข้อสอบแบบตัวเลือก 2
โดย ครูนก 11 สิงหาคม 2553จากบทความ “การทำข้อสอบแบบตัวเลือก” ที่แล้ว คราวนี้เราจะได้ปรับปรุงให้สามารถเลือกทำข้อสอบแบบย้อนมาใส่คำตอบทีหลังได้ หรือจะไม่ใส่คำตอบก็ได้ และตัวข้อสอบทั้งหมดจะถูกใส่ไว้ใน script โดยการทำงานจะใช้เพียง 2 frame คือ frame 1 แสดงข้อสอบ และ frame 2 แสดงผลคะแนน
เริ่มต้น frame ที่ 1 สร้างวัตถุต่างๆ มาวางใน stage ตามรูป

ตั้งชื่อวัตถุตามในรูปนะครับ จะได้ตรงกับ script ส่วนจะตกแต่งให้มีสีสันหน้าตาอย่างไรก็ตามสะดวก
MovieClip ชื่อ pict เป็นตัวเก็บภาพประกอบแต่ละข้อ ก็สร้างง่ายๆ สั่ง new symbol แล้ว insert blank keyframe ไปตามจำนวนข้อสอบ ข้อไหนมีรูปประกอบก็ import รูปเข้ามาใน library แล้วเอามาวางใน frame นั้น จากนั้นสร้างอีก layer เปล่าอีกอัน สั่ง insert frame ไปยาวเท่ากับ layer แรก ใส่ script ว่า stop();
ส่วน frame 2 ไว้แสดงผลคะแนน สร้าง text field แบบ dynamic ตั้งชื่อว่า scoretext
ใส่ Script ตามนี้
Frame 1
/*
n เลขประจำข้อ เริ่มนับจาก 0
score คะแนน
bt เก็บปุ่มของตัวเลือก 4 ปุ่ม
answ_sheet เก็บคำตอบ
correct_ans เฉลย
question เก็บโจทย์และตัวเลือก ทุกข้อ
choice เก็บข้อสอบ 1 ข้อ ที่ดึงมาจาก question เพื่อแสดงผล
*/
var n:Number = 0;
var score:Number = 0;
var bt:Array = new Array(b0, b1, b2, b3);
var choices:Array = new Array(t0, t1, t2, t3, t4);
var answ_sheet:Array = new Array();
var correct_ans:Array = new Array(1, 2, 3, 2);
var question:Array = new Array(
new Array("คำถามข้อ 1", "ตัวเลือก 1.1", "ตัวเลือก 1.2", "ตัวเลือก 1.3", "ตัวเลือก 1.4"),
new Array("คำถามข้อ 2", "ตัวเลือก 2.1", "ตัวเลือก 2.2", "ตัวเลือก 2.3", "ตัวเลือก 2.4"),
new Array("คำถามข้อ 3", "ตัวเลือก 3.1", "ตัวเลือก 3.2", "ตัวเลือก 3.3", "ตัวเลือก 3.4"),
new Array("คำถามข้อ 4", "ตัวเลือก 4.1", "ตัวเลือก 4.2", "ตัวเลือก 4.3", "ตัวเลือก 4.4")
);
//ใส่คำสั่งให้ปุ่มต่างๆ
function initButton() {
select._visible = false;
backw._visible = false;
//ปุ่มย้อนกลับ
backw.onRelease = function() {
n--;
if (n > -1) {
newQuestion(n);
checkSelect(n);
forw._visible = true;
}
if (n == 0) {
backw._visible = false;
}
};
//ปุ่มเดินหน้า
forw.onRelease = function() {
n++;
if (n < question.length) {
newQuestion(n);
checkSelect(n);
backw._visible = true;
}
if (n == question.length - 1) {
forw._visible = false;
}
};
//ปุ่มตัวเลือกทั้ง 4
for (i = 0; i <= bt.length - 1; i++) {
bt[i].onRelease = function() {
answ_sheet[n] = parseInt(this._name.substr(1, 1));
checkSelect(n);
};
}
}
//ตรวจสอบว่าข้อไหนทำแล้ว ให้แสดงตัวที่เลือกไว้
function checkSelect(sl:Number) {
if (answ_sheet[sl] == null) {
select._visible = false;
}
else {
select._visible = true;//แสดงจุดสีแดงตรงปุ่มที่เลือก
select._x = bt[answ_sheet[sl]]._x;
select._y = bt[answ_sheet[sl]]._y;
}
}
//แสดงข้อสอบ 1 ข้อ ตัวเลือก 4 ข้อ และภาพประกอบ
function newQuestion(qno:Number) {
qn.text = String(qno + 1);
pict.gotoAndStop(qno + 1);
for (i = 0; i < choices.length; i++) {
choices[i].text = question[qno][i];
}
}
//ปุ่มส่งคำตอบ ตรวจให้คะแนน แล้วไปแสดงผลคะแนนหน้าถัดไป
checkAnswer.onPress = function() {
for (i = 0; i < question.length; i++) {
if ((answ_sheet[i] + 1) == correct_ans[i]) {
score++;
}
}
nextFrame();
};
stop();
newQuestion(n);//แสดงข้อสอบข้อแรก
initButton();//ใส่คำสั้งให้ปุ่มต่างๆ
Frame 2
//แปลงตัวเลขเป็น text เพื่อแสดงผล scoretext.text = String(score) + " / " + String(question.length); stop();
หากต้องการเพิ่มจำนวนข้อสอบ ก็พิมพ์เพิ่มไปใน Array question ทั้งโจทย์และตัวเลือกได้เลย โดยให้มีรูปแบบเหมือนที่แสดงใน script ใส่คำตอบแต่ละข้อไว้ใน correct_ans ส่วนภาพประกอบ ก็เพิ่ม frame แล้วแทรกรูปเข้าไปใน MovieClip pict ข้อไหนไม่มีภาพประกอบก็ใส่เป็น blank keyframe ไว้
n เลขประจำข้อ เริ่มนับจาก 0
score คะแนน
bt เก็บปุ่มของตัวเลือก 4 ปุ่ม
answ_sheet เก็บคำตอบ
correct_ans เฉลย
question เก็บโจทย์และตัวเลือก ทุกข้อ
choice เก็บข้อสอบ 1 ข้อ ที่ดึงมาจาก question เพื่อแสดงผล
*/
var n:Number = 0;
var score:Number = 0;
var bt:Array = new Array(b0,b1, b2, b3);
var choices:Array = new Array(t0,t1,t2,t3,t4);
var answ_sheet:Array = new Array();
var correct_ans:Array = new Array(1,2,3,2);
var question:Array = new Array( new Array(
“คำถามข้อ 1″,
“ตัวเลือก 1.1″,
“ตัวเลือก 1.2″,
“ตัวเลือก 1.3″,
“ตัวเลือก 1.4″
,new Array(
“คำถามข้อ 2″,
“ตัวเลือก 2.1″,
“ตัวเลือก 2.2″,
“ตัวเลือก 2.3″,
“ตัวเลือก 2.4″
,new Array(
“คำถามข้อ 3″,
“ตัวเลือก 3.1″,
“ตัวเลือก 3.2″,
“ตัวเลือก 3.3″,
“ตัวเลือก 3.4″
,new Array(
“คำถามข้อ 4″,
“ตัวเลือก 4.1″,
“ตัวเลือก 4.2″,
“ตัวเลือก 4.3″,
“ตัวเลือก 4.4″

);
//ใส่คำสั่งให้ปุ่มต่างๆ
function initButton() {
select._visible = false;
backw._visible = false;
//ปุ่มย้อนกลับ
backw.onRelease = function() {
n–;
if (n> -1) {
newQuestion(n);
checkSelect(n);
forw._visible = true;
}
if (n == 0) {
backw._visible = false;
}
}
//ปุ่มเดินหน้า
forw.onRelease = function() {
n++;
if (n< question.length ) {
newQuestion(n);
checkSelect(n);
backw._visible = true;
}
if (n == question.length-1) {
forw._visible = false;
}
}
//ปุ่มตัวเลือกทั้ง 4
for (i = 0; i <= bt.length – 1; i++) {
bt[i].onRelease = function() {
answ_sheet[n] = parseInt(this._name.substr(1,1));
checkSelect(n);
}
}
}
//ตรวจสอบว่าข้อไหนทำแล้ว ให้แสดงตัวที่เลือกไว้
function checkSelect(sl:Number) {
if (answ_sheet[sl] == null) {
select._visible = false;
} else {
select._visible = true; //แสดงจุดสีแดงตรงปุ่มที่เลือก
select._x = bt[answ_sheet[sl]]._x;
select._y = bt[answ_sheet[sl]]._y;
}
}
//แสดงข้อสอบ 1 ข้อ ตัวเลือก 4 ข้อ และภาพประกอบ
function newQuestion(qno:Number) {
qn.text = String(qno+1);
pict.gotoAndStop(qno+1);
for (i = 0; i
choices[i].text = question[qno][i];
}
}
//ปุ่มส่งคำตอบ ตรวจให้ตะแนน แล้วไปแสดงผลคะแนนหน้าถัดไป
checkAnswer.onPress = function() {
for (i = 0 ; i
if ((answ_sheet[i]+1) == correct_ans[i]){
score ++;
}
}
nextFrame();
}
stop();
newQuestion(n); //แสดงข้อสอบข้อแรก
initButton(); //ใส่คำสั้งให้ปุ่มต่างๆ
| Tagged: 

layer 1 สำหรับ actionscript จะเห็นว่ามี 3 keyframe คือ frame 1 หน้าเริ่มต้น frame 2-4 หน้าข้อสอบ ซึ่งจะมีการทำงานเหมือนกัน จึงแทรก frame ธรรมดา ไม่ต้องทำเป็น keyframe ส่วน frame สุดท้ายเป็น keyframe ใส่ เพื่อจบการทำงาน
การใช้คำสั่ง Action Script ในชุด Drag and Drop ไปประยุกต์ทำแบบทดสอบจับคู่กันบ้าง โดยมีลักษณะการทำงานแบบลากวัตถุไปวางที่อีกด้านหนึ่งของคำตอบ ….คงจะเหมาะกับการทำเกมส์จับคู่เล็กๆ หรือไปทำอะไรๆเล่นกับเด็กนักเรียนเพื่อใช้ทบทวนหรือทดสอบ…

