การทำ​ข้อสอบแบบตัวเลือก 2

โดย ครูนก 11 สิงหาคม 2553

การทำ​ข้อสอบแบบตัวเลือก 2

จากบทความ “การทำ​ข้อสอบแบบตัวเลือก” ที่แล้ว คราวนี้เราจะได้ปรับปรุงให้สามารถเลือกทำข้อสอบแบบย้อนมาใส่คำตอบทีหลังได้ หรือจะไม่ใส่คำตอบก็ได้ และตัวข้อสอบทั้งหมดจะถูกใส่ไว้ใน 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(); //ใส่คำสั้งให้ปุ่มต่างๆ

การจับเวลา

โดย ครูนก 7 กุมภาพันธ์ 2552

การจับเวลา

มีผู้อ่านหัวข้อ “การทำ​ข้อสอบแบบตัวเลือก” แล้วตั้งคำถามในสมุดเยี่ยมว่า “…อยากทราบว่าการกำหนดเวลาของข้อสอบแบบตัวเลือก ทำไงค่ะ คือประมาณว่าให้เด็กทำข้อสอบข้อละ 1 นาทีค่ะ ถ้าหมดเวลาก็ไปข้อต่อไป…

ActionScript 2.0 มีคำสั่งเกี่ยวกับเวลาหลายคำสั่ง เช่น getTimer(), setInterval() เป็นต้น ในที่นี้เราจะนำคำสั่ง setInterval() มาใช้สร้างตัวจับเวลา เมื่อครบเวลาที่ตั้งไว้ ก็ให้เลื่อนไป frame ถัดไป

รูปแบบการใช้งานคือ
setInterVal (คำสั่ง ,เวลาหน่วยเป็น millisecond );
หมายถึงให้ทำคำสั่ง 1 ครั้ง ทุกๆ รอบเวลาที่กำหนด

มาลองสร้างตัวอย่างง่ายๆ กัน โดยจะกำหนดว่ามีข้อสอบ 3 ข้อ ให้เวลาทำข้อละ 10 วินาที (กำหนดไว้น้อยๆ ก่อน เวลาทดสอบจะได้ไม่ต้องรอนาน)

เริ่มต้นหน้าแรก frame 1 จะมีปุ่มกดเริ่มทำข้อสอบ กดปุ่มแล้วจะไป frame 2 เริ่มจับเวลา 10 วินาที เมื่อครบแล้วจะ เปลี่ยนไปข้อ 2 (frame 3) และ ข้อ 3(frame 4) และ จบ(frame 5)

frame 1 : สร้าง symbol แบบ button เพื่อใช้เป็นปุ่ม start ตั้งชื่อว่า bt_start เพิ่ม layer เพื่อใส่ actionscript ใส่คำสั่งดังนี้

สร้าง symbol แบบ button เพื่อใช้เป็นปุ่ม start ตั้งชื่อว่า bt_startvar mySeconds:Number = 0;
var timeLimit:Number = 10;
bt_start.onPress = function() {
nextFrame();
}
stop();

ความหมายคือ กำหนดตัวแปรชื่อ mySeconds เพื่อใช้เป็นตัวเก็บค่าเวลา เมื่อกดปุ่ม bt_start ก็ให้ไป frame ถัดไป

ตัวแปร timeLimit เอาไว้กำหนดเวลา ในที่นี้ตั้งค่าทดลองไว้ 10 วินาที คำสั่ง stop() บรรทัดสุดท้าย ให้หยุดรอการกดปุ่ม

frame 2 : แสดงข้อสอบ ข้อ 1 ในที่นี้จะแสดงให้ดูง่ายๆ เป็นเลข 1(สำรับข้อ 2, 3 ก็จะแสดงด้วยเลข 2,3)

เพิ่ม layer เพื่อใส่ตัวแสดงเวลาเป็นวินาทีสร้างด้วย text แบบ dynamic ตั้งชื่อว่า timetext

ใน layer ที่เขียน action script เพิ่ม blank keyframe (คลิกขวาที่ frame 2 แล้ว เลือก Insert Blank Keyframe) แล้วใส่ชุดคำสั่งดังนี้

ตัวแสดงเวลาเป็นวินาทีสร้างด้วย text แบบ dynamic ตั้งชื่อว่า timetext function wait() {
mySeconds++;
if (mySeconds == timeLimit) {
mySeconds = 0;
nextFrame();
}
timetext.text = mySeconds;
}
myTimer = setInterval(wait, 1000);

เราสร้างฟังก์ชัน wait ขึ้นมา เพื่อทำหน้าที่ เพิ่มค่าเวลา(mySeconds) ทีละ 1 (mySeconds++) ถ้าค่า mySecond เพิ่มขึ้นจนเท่ากับค่า timeLimit ที่กำหนดไว้ใน frame 1 ก็ให้เริ่มจับเวลาใหม่(mySeconds = 0) แล้วเลื่อนไป frame ถัดไป

ถ้ายังไม่ถึงครบ ก็จะนำค่า mySecond ไปแสดงในช่อง text ชื่อ timetext

คำสั่ง

myTimer = setInterval(wait, 1000);

คือการเรียกให้ ฟังก์ชัน wait ทำงานทุก 1000 milliseconds ( 1 วินาที) ซึ่งจะทำให้ค่า mySeconds เพิ่มขึ้น 1 ทุก 1 วินาที นั่นเอง

frame 3-4 : แทรก keyframe ที่ 3-4 ใน layer 2 แล้วใส่ข้อสอบข้อ 2-3 ตามลำดับ

frame 5: แทรก keyframe 5 เพื่อแสดงหน้าจบ ใน layer ของ actionscript ใส่คำสั่ง

clearInterval(myTimer);
stop();

การใช้คำสั่ง clearInterval เป็นการสั่งให้คำสั่ง setInterVal หยุดทำงาน

ตามตัวอย่าง สร้างไว้ 3 layer
layer 1 เป็น actionscropt, layer2 เนื้อหา, layer 3 แสดงเวลาlayer 1 สำหรับ actionscript จะเห็นว่ามี 3 keyframe คือ frame 1 หน้าเริ่มต้น frame 2-4 หน้าข้อสอบ ซึ่งจะมีการทำงานเหมือนกัน จึงแทรก frame ธรรมดา ไม่ต้องทำเป็น keyframe ส่วน frame สุดท้ายเป็น keyframe ใส่ เพื่อจบการทำงาน
layer 2 สำหรับเนื่อหาที่ต้องการแสดง(หน้าเริ่มต้น ข้อสอบ หน้าจบ)
layer 3 สำหรับแสดงเวลาขณะทำข้อสอบ (frame 2-4)

เสร็จแล้วได้หน้าตาแบบนี้ครับ

ากตัวอย่างที่แสดง คงพอให้แนวคิดสำหรับนำไปดัดแปลงใช้งานอื่นได้ต่อไปนะครับ

เรียนแฟลช: คลิกเมาส์ุ้เปลี่ยนสีวัตถุ

โดย ครูนก 3 กันยายน 2551

ไฟล์แฟลชกดปุ่มเปลี่ยนสีบทต่อไปสำหรับผู้ที่สนใจพัฒนาเทคนิคการผลิตสื่อการสอน ด้วยโปรแกรมมาโครมีเดียแฟลช ครั้งนี้จะเป็นการออกแบบสื่อให้ใช้เมาส์คลิ๊กเปลี่ยนสีวัตถุได้ เหมาะกับการทำเกมส์ระบายสีหรือคลิ๊ก  แสดงส่วนสำคัญ   มีขั้นตอนการผลิตสื่อที่ซับซ้อนนิดๆ แต่คงไม่เกินความสามารถนักหรอกครับ
ลองทำดูมั๊ยครับ

เรียนแฟลช : คำสั่ง Drag and Drop

โดย ครูนก 22 สิงหาคม 2551

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

เรียนแฟลช : ชื่อผู้ใช้(Login User)

โดย ครูนก 22 สิงหาคม 2551

เรียนแฟลช-ช่องป้อนชื่อผู้ใช้สื่อ
การทำสื่อการสอน(CAI) นิยมทำช่องให้ผู้ใช้สื่อ (User) ป้อนชื่อไว้ในบทเรียนสื่อคอมพิวเตอร์ช่วยสอน เพื่อให้ผู้ออกแบบสื่อเก็บค่าตัวแปร นำไปแสดงในหลายโอกาส …เนื้อหาบทนี้ จะเป็นการกล่าวถึงวิธีการทำ….อ่านเพิ่มเติม

CAI:สายวิวัฒนาการในอาณาจักรสัตว์

โดย ครูนก 22 สิงหาคม 2551

สายวิวัฒนาการในอาณาจักรสัตว์
สื่อคอมพิวเตอร์ช่วยสอน (CAI) ที่เพิ่งทำเสร็จครับ สำหรับวิชา ชีววิทยา : ว 40244 ในหนังสือชีววิทยาเล่มที่ 5 ม.6 หน้าที่ 208 เรื่อง สายวิวัฒนาการในอาณาจักรสัตว์ เป็นแบบทบทวนความรู้ เพื่อส่งเสริมความแม่นยำให้กับนักเรียน
ตามไปดู+โหลด

นาฬิกาจับเวลา

โดย ครูนก 29 กรกฎาคม 2551

นาฬิกาจับเวลา

คำแนะนำ-ตั้งเวลาเป็นนาที เมื่อครบเวลาจะมีเสียงเตือนแล้วเริ่มจับเวลาใหม่

ต้องทำกิจกรรมเป็นฐานเวียนให้นักเรียนบ่อยๆ  ไอ้นาฬิกาจับเวลาล่ะก็หายากเย็นเสียจริง   เสียงกริ่งหมดเวลาก็ต้องหาอีก   เกิดไอเดียเขียนแฟลชจับเวลาเปลี่ยนฐาน  ให้หมดเวลามีดนตรีแล้วมีเสียงบอก “หมดเวลา  ให้เปลี่ยนฐานได้”   คิดๆอยู่แล้วมืดมิดพอสมควร   งานนี้ webmaster เค้าลงมาลุยActionScriptเองเลย…อิอิ    กดปุ่มทดลองสัก 1 นาทีนะครับ

ดาวน์โหลดไปใช้กันดูนะครับ  โดยเฉพาะในห้องแลบนี่  เวิร์กนักเชียว

  • หน้า 1 / 2
  • 1
  • 2
  • »