PDA

View Full Version : Flash 8 Quiz Guru Needed: Make link appear for next test only if test taker passes.


stevenjs
05-09-2007, 07:40 PM
Greeings, all,

Flash 8 has quiz templates which are coded for multiple choice, true/false, text statement, and matching types of questions, along with hotspots and probably anoher type I am forgetting. The test taker makes their selection(s) or answers, and clicks a "check answer" button. They then get a feedback statements depending on whether they have answered correctly or not. Many questions involve multiple selections to be correct, but all must click on the "check answer" button to advance to the next question.

The point is that all of this functionality is coded in the component(s) which make the template so versatile. A copy of my .fla shouldn't actually be needed (I am guessing here), because the component code is what I believe needs tweaking, at least the part where the final percentage of correct answers is calculated at the end of the test, and that percentage is compared to a user-defined passing percentage score.

I think this requires a Flash Quiz Guru, who knows just how to connect the pass or fail result to a new button or a "go to" redirect. I don't know whether the same effect could be accomplished by frame scripting, but I expect tweaking the component(s) code would seem a more direct approach.

I cannot fill in the blanks for any idea that is just an idea. If anyone can code this, make it work and test it, and direct me to where the snippets must be placed, I would be deeply grateful. This is about education, not a game or commercial razz-ma-tazz.

Are there any Flash Quiz Guru's who can help me out with this? You can grab the zip at http://www.mywebniche.com/ifPassThenGoTo.zip.


Thank you.

stevenjs
05-09-2007, 07:42 PM
Hello again,

Here's a copy of the Flash 8 Quiz Component called "QuizGlobalClass" in the template library, prior to any of the quiz parameters being set in the component interface (hence some items are "undefined" :

**************************

#initclip 1

/*--------------VERSION CONTROL INFORMATION----------------------

Quiz Template Global Toolbox Class
Developed by Dan Carr
Quality Assurance by Andrew Chemey
Last Modified for Flash 2004: July 6, 2003
Copyright 2003 Macromedia Inc. All rights reserved.

------------------END VERSION CONTROL--------------------------
*/


// SECTION 1: BUILD THE QUIZ CLASS FOR EVENT HANDLING

// 1-1: Set the contructor function for the Quiz Class

_global.Quiz = function (){

this.total_correct = 0;
this.total_wrong = 0;
this.percent_correct = 0;
this.percent_display = undefined;

this.quest_to_ask = 0;
this.randomize = undefined;
this.login_file = undefined;
this.activity_ID = undefined;
this.activity_name = undefined;
this.results_page = undefined;

this.level = undefined;

this.Quest_Frames = new Array();
this.quest_num = 0;
this.page_num = undefined;
this.endFlag = false;
}

_global.Quiz.prototype = new Object();

Object.registerClass("QuizSuperClass",Quiz);

// 1-2: Initialize Quiz tracking session

Quiz.prototype.initStartQuiz = function (){

this.start_time = Math.round(getTimer()/1000);
var start_param = this.login_file+";"+this.activity_ID+";"+this.acti vity_name;

fscommand("CMIInitialize" ;
fscommand("MM_cmiSetLessonStatus", "i" ;
fscommand("MM_StartSession", start_param);
}


// 1-3: Initialize a new quiz page

Quiz.prototype.initNewPage = function(num){

fscommand("CMISetLocation", num);
}


// 1-4: Conclude the Quiz session and submit score

Quiz.prototype.initSubmitScore = function(){

this.stop_time = Math.round(getTimer()/1000);
this.elapsed_time = this.getLatency(this.stop_time - this.start_time);
this.percent_correct = Math.round(this.total_correct/(this.total_correct+this.total_wrong)*100);

fscommand("MM_cmiSetLessonStatus", "c" ;
fscommand("CMISetTime", this.elapsed_time);
fscommand("CMISetScore", this.percent_correct);
fscommand("CMIFinish" ;
fscommand("CMIExitAU" ;
}


// 1-5: Format Latency for correct tracking

Quiz.prototype.getLatency = function (timeInSec){

var l_seconds, l_minutes, l_hours, timeInHours;

if (timeInSec <= 9) {
l_seconds = "0"+timeInSec;
l_minutes = "00";
l_hours = "00";
} else {
l_seconds = timeInSec;
l_minutes = "00";
l_hours = "00";
}
if (l_seconds > 59) {
l_minutes = int(l_seconds / 60);
l_minutes = this.formatNum(l_minutes);
l_seconds = l_seconds - (l_minutes * 60);
l_seconds = this.formatNum(l_seconds);
l_hours = "00";
}
if (l_minutes > 59) {
l_hours = int(l_minutes/ 60);
l_hours = this.formatNum(l_hours);
l_minutes = l_minutes - (l_hours * 60);
l_minutes = this.formatNum(l_minutes);
}
timeInHours = l_hours+":"+l_minutes+":"+l_seconds;
return timeInHours;
}


// 1-6: Return formatted number - convert from single digit to double digit

Quiz.prototype.formatNum = function (num) {

if (num <= 9) {
num = "0"+num;
}
return num;
}


// 1-7: Set the pooling number and build an array of page numbers

Quiz.prototype.setQuestArray = function(){

this.pooling_array = new Array();
this.start_page;
this.end_page;

for (var i = 0; i < _root._totalframes; i++) {
this.pooling_array = i+1;
}
this.start_page = this.pooling_array.shift();
this.end_page = this.pooling_array.pop();

if (this.randomize == true) {
this.setRandomArray(this.pooling_array);
}

if (this.quest_to_ask > this.pooling_array.length || this.quest_to_ask < 1) {
this.quest_to_ask = this.pooling_array.length;
} else {
this.quest_to_ask = int(this.quest_to_ask);
}

for (var i = 0; i < this.quest_to_ask; i++) {
this.Quest_Frames = this.pooling_array;
}
}


// 1-8: Randomize the array of page numbers if requested

Quiz.prototype.setRandomArray = function(array){

for (var i=0 ; i < array.length; i++) {
newLoc = Math.round(Math.random() * (array.length-1));
currLoc = array;
array = array[newLoc];
array[newLoc] = currLoc;
}
}


// 1-9: Set the navigation to the next page in the array

Quiz.prototype.setNewPage = function() {

if (this.endFlag == false){

this.page_num = this.Quest_Frames[this.quest_num];
this.quest_num++;

this.initNewPage(this.page_num);
_root.gotoAndStop(this.page_num);

} else if (this.endFlag == true) {
this.percent_format = this.percent_correct+"%";
_root.gotoAndStop(_root._totalframes);
}
}


// 1-10: Catch the result variables from the interactions

Quiz.prototype.countScore = function (weightNum){

if (weightNum < 0) {
this.total_wrong += Math.abs(weightNum);
} else {
this.total_correct += Number(weightNum);
}

this.quest_to_ask--;

if(this.quest_to_ask > 0){
_root.nav.nextBtn.gotoAndStop(1);

} else if (this.quest_to_ask == 0) {
this.initSubmitScore();
this.endFlag = true;

if(this.results_page == true){
_root.nav.nextBtn.gotoAndStop(1);
} else {
_root.nav.nextBtn.gotoAndStop(2);
}
}
}

#endinitclip 1
*************************************

Although I am guessing, it seems what's needed is a conditional statement, perhaps using "this.percent_display = undefined;" (once defined). When the percentage of correct answers is at or greater than a given passing grade percentage, the test taker is redirected to a more advanced quiz. When the percentage of correct answers is lower than passing, the test taker is invited to retake the test.

Please, anyone?

regards,

stevenjs
__________________________
--Stranger in a Strange Land

stevenjs
05-09-2007, 07:43 PM
Greetings,

Let me summarize the user experience, which should go like this:

(1) User takes test and reaches result page
(2) User clicks "Check Result" button
(3) User sees grade as a percentage of corrrect answers, along with other info on template "results page."
(4) If the grade on the results page is passing, a "next test" button appears present (along with some language of congratulations, and perhaps an instruction to print out the page to show the teacher. Don't worry about wording, I'll figure out what to say.) and opens the next test in a new window.
or
(5) If the grade on the results page is failing, a "retake test" button appears present along with some alternate language, the URL is the same as the existing test, refreshing the page so the test can be taken over.

The students who will be taking this test really need hand holding, nothing can be left for them to "figure out" as far as what is happening on the page, and they need to see their score as a percentage, not just text and/or button telling them they have passed or failed. In other words, the template results fields are essential. There needs to appear a different button on the results page depending on the user's score.

Guess it's not as simple as it seemed at first, or am I missing something?

I look forward to a productive reply.

Regards,

stevenjs
____________________________
"I am but an egg."