..:: MX Studio Fóruns ::..: Array para Quiz com XML - ..:: MX Studio Fóruns ::..

Jump to content

Publicidade




ATENÇÃO

Para evitar posts desnecessários e que não influam para o andamento e desenvolvimento do fórum, clique aqui e leia todas as regras.
Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Array para Quiz com XML Segui um tuto para montar um quiz e quer incrementá-lo

#1 User is offline   rotavio 

  • Group: Membros
  • Posts: 7
  • Joined: 06-August 08

Posted 06 August 2008 - 03:20 PM

Preciso de uma ajuda.

Montei um quiz a partir de um tutorial (Flash e XML). Até aqui foi tudo bem. Porém agora quero incrementá-lo com duas funções novas.
A primeira consiste em misturar as perguntas. Neste ponto entendo que tenho que criar um array para fazê-lo (correto?)
E a segunda é escolher dentro do universo de 50 perguntas apenas 7 para exibição.

Segue o código abaixo:
//Importe a classe Alert, para exibir o resultado do quiz no final.
import mx.controls.Alert;
//Importe a classe checkbox.
var quiz:XML = new XML();
//Essa propriedade ignora os espaços em branco do XML.
quiz.ignoreWhite = true;
//O método load recebe como argumento a url do arquivo que será carregado
quiz.load("quiz.xml");
//Essa vai receber a quantidade de perguntas certas
var corretas:Number = 0;
// Mostra a pergunta atual do quiz
var perguntaAtual:Number= 0;
//Variável que vai receber o checkBox que for marcado;
var escolha;
//Quantidade total de perguntas do quiz
var totalPerguntas:Number;
//O evento onLoad da class Loadvars vai ser executado quando todos os dados tiverem sido recebidos.
quiz.onLoad = function(ok:Boolean):Void{
//Condicional if, para verificar se os dados foram recebidos com sucesso.
if(ok){
//Acesse e resgate a quantidade de nodes do XML, que é o valor da quantidade de perguntas
totalPerguntas = this.firstChild.childNodes.length;
//Execute a função montaQuiz, que será criada logo mais abaixo, e passe como argumento da função
//O primeiro node do XML contendo a primeira pergunta;
montaQuiz(this.firstChild.childNodes[0]);
};
};
/* array que ira guardar os dados do XML apos carregado */
var arrQuiz:Array = new Array();
/* cria um novo objeto para guardar o array*/
var obj:Object = new Object();
/* guarda a pergunta dentro do objeto */
obj.pergunta = node.attributes.texto
/* Array com as respostas*/
var arr:Array = new Array();
/* para cada resposta*/
for (var item:XMLNode = node.firstChild; item != null; item=item.nextSibling){
/* coloca os atributos dentro do array*/
arr.push(item.attributes);
}
/* coloca o array dentro do objeto*/
obj.resposta = arr;
/* coloca o objeto resposta dentro do array principal*/
arrquiz.push(obj);
/* Agora iremos iniciar a função para sortear a pergunta*/
function showquiz():Void {
/*se todas as perguntas já foram utilizadas*/
if (arrUsed.lenght == arrquiz.lenght); {
/* zera as usadas*/
arrUsed = new Array();
}
}
do {
/* sorteia uma pergunta*/
var item:Object = arrquiz[(Math.random()*arrquiz.lenght)];
}
/*Efetua o lopp enquanto esta pergunta não estiver na lista de usados*/
while (_usado(item.pergunta)==true);
/*coloca esta pergunta na lista de perguntas usadas*/
arrUsed.push(item.pergunta);
/*mostra a pergunta*/
pergunta.text=item.pergunta;

//Função montaQuiz, responsável por exibir a pergunta, e recebe como argumento um node do XML para
//preencher os componentes
//function montaQuiz(xmlNodes){
//Aqui irei usar a propriedade text, do campo de texto qtd, para exibir a quantidade de perguntas, e a pergunta atual
/*qtd.text = 'Peguntas: '+ parseInt(perguntaAtual+1) + " de "+ totalPerguntas;
//Exibe a pergunta no campo de texto
perg.text = xmlNodes.childNodes[0].childNodes;*/
//Loop for usado para preencher os componentes de checkbox
for(var i =1,x=xmlNodes.childNodes.length;i<x;i++){
//Aqui ele deixa deselecionado todas as vezes que ele executar a função
this['r'+i].selected = false;
//Atribua a propriedade label com os valores vindos do XML. O label é o que será exibido no radiobutton
this['r'+i].label = xmlNodes.childNodes[i].childNodes;
//A propriedade data é a que iremos usar para saber qual é a alternativa certa
this['r'+i].data = xmlNodes.childNodes[i].attributes.certa;
//o Evento clickHandler acontece quando você clica em qualquer dos radiobuttons
this['r'+i].clickHandler = function(){
//A variável escolha recebe o valor de this, que corresponde ao radiobutton clicado
escolha = this;
};
};

/*Função resposta é responsável por verificar a resposta à pergunta do quiz. Se estiver correta, ele incrementa a variável
corretas.
*/
function resposta(marcado):Void{
//Se o checkbox passado tiver a propriedade data diferente de undefined
if(marcado.data != undefined){
//Incremente a variável corretas.
corretas++;
};
};
//Função habilitaperguntas recebe como argumento da função um valor booleano, que vai definir se as
//alternativas e o botão de responder vão ficar ativas ou não
function habilitaperguntas(v:Boolean):Void{
//Loop for para setar a propriedade enabled dos componentes de checkbox, de acordo com o argumento recebido da função
for(var i =1;i<=5;i++){
eval('r'+i).enabled = v;
};
resp.enabled = v;
};
function mostraResultado(){
//chamando a função habilitaperguntas e passando true no argumento,
//os componentes de ckeckbox e o button ficarão habilitados para clicar
habilitaperguntas(false);
//Cálculo percentual dos acertos do quiz
var percentual = (corretas*100)/totalPerguntas;
//Variável t é o que será exibido no título da mensagem de alerta. Escrevi algumas palavras, e concatenei com as variáveis corretas e percentual

var t = "Você acertou " + corretas + " de " +totalPerguntas + " percentual de acerto: " +percentual + "% ";
//No método estático show, da classe Alert, vamos passar alguns argumentos. São eles:
/*
mensagem -> Vai receber a mensagem que será exibida na janela de alert
título -> Vamos passar o valor da variável t
label botão -> Vai receber o valor da propriedade okLabel, com isso podemos definir um novo valor para a variável okLabel e com isso mudar o texto do checkbox
escopo onde se encontra o objeto Alert que para o nosso caso é usei this
e por fim, a função de calback que ele vai executar quando o usuário clicar no botão do Alert
*/
Alert.show("Você deseja refazer o quiz?",t, Alert.okLabel = "Refazer", this,alertclik);
};
resp.clickHandler = function(){
//A condicional abaixo verifica se a peguntaAtual é menor que totalPerguntas menos 1. Caso seja verdadeiro, ele
//irá chamar a função resposta, incrementar a variável da pergunta atual, e chamar a função montaQuiz, com a próxima pergunta
//Executa a função resposta passando como argumento a variável escolha, que recebe o checkbox marcado
resposta(escolha);
//Zerando a variável escolha
escolha='';
if(perguntaAtual < totalPerguntas-1){

//incrementando a variável perguntaAtual, para passar para a próxima pergunta;
perguntaAtual++;
//Executa a função montaQuiz, para exibir a pergunta de acordo com a variável perguntaAtual
montaQuiz(quiz.firstChild.childNodes[perguntaAtual]);
}else{
//Executa a função mostraResultado.
mostraResultado();
};
};
//A função alertclik trata-se de um callback, que será executado quando o botão na mensagem de alerta for clicado
alertclik = function(){
//chamando a função habilitaperguntas e passando true no argumento,
//os componentes de checkbox e o button ficarão habilitados para clicar
habilitaperguntas(true);
//Zerando o valor da variável perguntaAtual, para reiniciar o quiz.
perguntaAtual = 0;
//Zerando o valor da variável corretas, para reiniciar o quiz.
corretas = 0;
//Chama a função monta quiz, informando o primeiro node do XML para ser exibida a primeira pergunta;
montaQuiz(quiz.firstChild.childNodes[perguntaAtual]);
};
0

#2 User is offline   Tiago Braga 

  • Group: Moderadores
  • Posts: 732
  • Joined: 15-May 07

Posted 06 August 2008 - 03:35 PM

QUOTE
A primeira consiste em misturar as perguntas. Neste ponto entendo que tenho que criar um array para fazê-lo (correto?)

Vc poderia fazer com a classe Math.random (número aleatórios)

QUOTE
E a segunda é escolher dentro do universo de 50 perguntas apenas 7 para exibição.

Vc poderia cria uma if falando se i (var qualquer) <8.

Não analisei seu código apenas respondi as suas perguntas. Se não conseguir posta denovo q te ajudo melhor tongue.gif

Até
0

#3 User is offline   rotavio 

  • Group: Membros
  • Posts: 7
  • Joined: 06-August 08

Posted 06 August 2008 - 03:54 PM

Agora surgiu mais 3 erros:

**Error** Scene=Scene 1, layer=Layer 3, frame=1:Line 53: There is no property with the name 'pergunta'.
do {

**Error** Scene=Scene 1, layer=Layer 3, frame=1:Line 60: There is no property with the name 'pergunta'.
arrUsed.push(item.pergunta);

**Error** Scene=Scene 1, layer=Layer 3, frame=1:Line 62: There is no property with the name 'pergunta'.
pergunta.text=item.pergunta;

Total ActionScript Errors: 3 Reported Errors: 3


0

#4 User is offline   Tiago Braga 

  • Group: Moderadores
  • Posts: 732
  • Joined: 15-May 07

Posted 06 August 2008 - 04:03 PM

Coloca o código da parte que vc atualizou <- SOMENTE DESTA PARTE QUE ATUALIZOU!

Até
0

#5 User is offline   rotavio 

  • Group: Membros
  • Posts: 7
  • Joined: 06-August 08

Posted 08 August 2008 - 02:54 AM

Quero incrementar algumas funções no quiz e estou com dificuldades. Sei mas ou menos o que preciso fazer ,mas não sei onde colocar. Tipo if ( i<=7<ii)...

No quiz (inclusive é um tutorial do Hugo), quero implementar as seguintes funções:

Limitar o número de perguntas (total de 30 aparecer apenas 7 e mostrar o resultado)
Apresentar o resultado em formato de Acertou 6 de 7 perguntas
Esse é para desafio. Tenho dois monitores e gostaria que a resposta do quiz aparecesse apenas em um monitor e não no outro. (Já procurei em n sites e no Help do Flash e não achei nada a respeito)

Segue o Código abaixo:

/* url do arquivo XML */
var urlXML:String ='quizz.xml';
/* objeto XML */
var xmlDoc:XML = new XML();
xmlDoc.ignoreWhite = true;
/* array que ira guardar os dados do XML apos carregado */
var arrQuizz:Array = new Array();
/* pergunta já feitas */
var arrUsed:Array = new Array();
/* deixa o opcao_mc invisivel */
opcao_mc._visible = false;
/* deixa a janela invisiveel */
janela_aviso._visible = false;
/* mensagem de resposta certa */
var msg_certo:String = 'Resposta correta!';
/* mensagem de resposta errada*/
var msg_errado:String = 'Resposta errada';
/* quando terminar de carregar o XML */
xmlDoc.onLoad = function():Void {
/* pega a primeira pergunta */
var node:XMLNode = this.firstChild.firstChild;
for (node; node != null; node=node.nextSibling) {
/* cria um novo objeto para colocar no array */
var obj:Object = new Object();
/* guarda a pergunta dentro dele */
obj.pergunta = node.attributes.texto;
/* array com as respostas */
var arr:Array = new Array();
/* para cada resposta dentro dele */
for (var item:XMLNode = node.firstChild; item != null; item=item.nextSibling) {
/* coloca os atributos dentro de um array */
arr.push(item.attributes);
}
/* coloca este array dentro do objeto */
obj.respostas = arr;
/* coloca este objeto dentro do array principal */
arrQuizz.push(obj);
}
/* chama a função que sorteia a pergunta e mostra para o usuário */
showQuizz();
};
function showQuizz():Void {
/* se todas as perguntas já foram utilizadas */
if (arrUsed.length == arrQuizz.length) {
//zera as usadas
arrUsed = new Array();
};
do {
/* sorteia uma pergunta */
var item:Object = arrQuizz[(Math.floor(Math.random()*arrQuizz.length))];
/* efetua o loop enquanto esta pergunta não estiver na lista de usadas */
} while (_usado(item.pergunta) == true);
/* coloca esta pergunta na lista de usadas */
arrUsed.push(item.pergunta);
/* mostra a pergunta */
pergunta.text = item.pergunta;
/* limpa os movieclip anteriores */
clearOptions();
/* para cada opção */
for (var i:Number = 0; i<item.respostas.length; i++) {
/* pega um novo_nivel */
var n:Number = this.getNextHighestDepth();
/* duplica o item de opções */
var it:MovieClip = opcao_mc.duplicateMovieClip('_opcao'+n, n);
/* coloca na posição certa */
it._y = opcao_mc._y + (i*it._height);
/* coloca o texto */
it.opcao.text = item.respostas[i].texto;
/* indica se é a resposta certa ou não */
it.certo = Number( item.respostas[i].verdadeiro );
/* quando a pessoa clicar */
it.onRelease = function():Void {
/* muda o level da janela */
janela_aviso.swapDepths( _root.getNextHighestDepth() );
/* exibe a janela */
janela_aviso._visible = true;
//se for a verdadeira
if(this.certo == 1) {
/* mostra a mensagem de certo */
janela_aviso.msg.text = msg_certo;
trace('certo');
} else {
/* do contrario, mostra a mensagem de errado */
janela_aviso.msg.text = msg_errado;
trace('Errado');
}
}
}
}
function _usado(per:String):Boolean {
for (var i:Number = 0; i<arrUsed.length; i++) {
if (per == arrUsed[i]) {
return true;
}
}
return false;
}
function clearOptions():Void {
for (var i in this) {
if (i.substr(0, 7) == '_opcao') {
this[i].removeMovieClip();
}
}
}
janela_aviso.fundo.onRelease=function():Void {};
janela_aviso.fundo.useHandCursor = false;
janela_aviso.btn_fecha.onRelease = function ():Void {
this._parent._visible = false;
showQuizz();
}
/* carrega o XML */
xmlDoc.load(urlXML);

____

Espero que possam me ajudar

Abraços,
0

#6 User is offline   rotavio 

  • Group: Membros
  • Posts: 7
  • Joined: 06-August 08

Posted 08 August 2008 - 03:25 PM

Evolui no código, mas não consegui fazer o que queria. Alguém pode ajudar ?

1 - Ao clicar em uma resposta errada, aparecer a correta
2 - Contar as resposta corretas e calcular o percentual
3 - Sortear 7 perguntas do total existente (linha 76), mas está dando erro, não em syntax)

Segue abaixo o código e o XML

/* Configura as fontes que serão utilizadas no Label*/
import mx.styles.CSSStyleDeclaration

pergunta.setStyle("fontFamily", "Helvetica 25 UltraLight");
pergunta.setStyle("color", 0x45668D);
pergunta.setStyle("fontSize", 18);
pergunata.setStyle("fontWeight",bold);

/* url do arquivo XML */
var urlXML:String ='quizz.xml';
/* objeto XML */
var xmlDoc:XML = new XML();
xmlDoc.ignoreWhite = true;
/* Recebe o numero de respostas corretas*/
var corretas:Number=0;
/* Variável que irá guardar o total de perguntas do quiz*/
var totalPerguntas:Number;
/* array que ira guardar os dados do XML apos carregado */
var arrQuizz:Array = new Array();
/* pergunta já feitas */
var arrUsed:Array = new Array();
/* deixa o opcao_mc invisivel */
opcao_mc._visible = false;
/* deixa a janela invisivel */
janela_aviso._visible = false;
/* mensagem de resposta certa */
var msg_certo:String = 'Resposta correta!';
/* mensagem de resposta errada*/
var msg_errado:String = 'Resposta errada';
/* Mostra a resposta correta*/
/*var msg_correta:XMLNode.childNodes[pergunta].childNodes[5].firstChild.nodeValue;
/* Acessa e resgata a quantidade de nodesXML, que é a quantidade de perguntas*/
totalPerguntas=this.firstChild.childNodes.lenght;
/* quando terminar de carregar o XML */
xmlDoc.onLoad = function():Void {
/* pega a primeira pergunta */
var node:XMLNode = this.firstChild.firstChild;
for (node; node != null; node=node.nextSibling) {
/* cria um novo objeto para colocar no array */
var obj:Object = new Object();
/* guarda a pergunta dentro dele */
obj.pergunta = node.attributes.texto;
/* array com as respostas */
var arr:Array = new Array();
/* para cada resposta dentro dele */
for (var item:XMLNode = node.firstChild; item != null; item=item.nextSibling) {
/* coloca os atributos dentro de um array */
arr.push(item.attributes);
}
/* coloca este array dentro do objeto */
obj.respostas = arr;
/* coloca este objeto dentro do array principal */
arrQuizz.push(obj);
}
/* chama a função que sorteia a pergunta e mostra para o usuário */
showQuizz();
};
function showQuizz():Void {
/* se todas as perguntas já foram utilizadas */
if (arrUsed.length == arrQuizz.length) {
//zera as usadas
arrUsed = new Array();
};
do {
/* sorteia uma pergunta */
var item:Object = arrQuizz[(Math.floor(Math.random()*arrQuizz.length))];
/* efetua o loop enquanto esta pergunta não estiver na lista de usadas */
} while (_usado(item.pergunta) == true);
/* coloca esta pergunta na lista de usadas */
arrUsed.push(item.pergunta);
/* mostra a pergunta */
pergunta.text = item.pergunta;
/* limpa os movieclip anteriores */
clearOptions();
/* para cada opção */
/*for (var i:Number = 0; i<item.respostas.length; i++) {*/
for (var i:Number = 0; i<=7; i++) {
/* pega um novo_nivel */
var n:Number = this.getNextHighestDepth();
/* duplica o item de opções */
var it:MovieClip = opcao_mc.duplicateMovieClip('_opcao'+n, n);
/* coloca na posição certa */
it._y = opcao_mc._y + (i*it._height);
/* Seleciona a opção que estiver com o cursor do mouse sobre a resposta*/
/*if(opcao.selected=true){
Event.mouseOver=*/
/* coloca o texto */
it.opcao.text = item.respostas[i].texto;
/* indica se é a resposta certa ou não */
it.certo = Number( item.respostas[i].verdadeiro );
/* quando a pessoa clicar */
it.onRelease = function():Void {
/* muda o level da janela */
janela_aviso.swapDepths( _root.getNextHighestDepth() );
/* exibe a janela */
janela_aviso._visible = true;
//se for a verdadeira
if(this.certo == 1) {
/* mostra a mensagem de certo */
janela_aviso.msg.text = msg_certo;
trace('certo');
} else {
/* do contrario, mostra a mensagem de errado */
janela_aviso.msg.text = msg_errado;
/* Apresenta a resposta correta*/
janela_aviso.msgcorreta.text = resposta.text= xmlNode.childNodes[pergunta].childNodes[5].firstChild.nodeValue;
trace('Errado');
}
}
}
}
/* Contabiliza as respostas corretas*/
function resposta(marcado):Void {
if(marcado.data !=0){
corretas ++;
};
};
function _usado(per:String):Boolean {
for (var i:Number = 0; i<arrUsed.length; i++) {
if (per == arrUsed[i]) {
return true;
}
}
return false;
}
function clearOptions():Void {
for (var i in this) {
if (i.substr(0, 5) == '_opcao') {
this[i].removeMovieClip();
}
}
}
janela_aviso.fundo.onRelease=function():Void {};
janela_aviso.fundo.useHandCursor = false;
janela_aviso.btn_fecha.onRelease = function ():Void {
this._parent._visible = false;
/* Mostra o resultado do quiz
A variável t é o que será exibido no título da mensagem no final do quiz*/
var t= "Você acertou"+corretas+"de"+totalPerguntas+"percentual de acertos"+percentual+"%";
showQuizz();
}
/* carrega o XML */
xmlDoc.load(urlXML);


____

XML

____

<?xml version="1.0" encoding="UTF-8" ?>
<flashquizz>
<pergunta texto="Qual o nome do filtro que cria uma sombra?">
<opcao texto="Shadow" verdadeiro="1" />
<opcao texto="Bevel" verdadeiro="0" />
<opcao texto="Glow" verdadeiro="0" />
<opcao texto="Glow" verdadeiro="0" />
<resposta> A resposta correta é Shadow</resposta>
</pergunta>

<pergunta texto="Qual é a cor do cavalo branco de Napoleão">
<opcao texto="Marrom" verdadeiro="0" />
<opcao texto="Malhado" verdadeiro="0" />
<opcao texto="Negro" verdadeiro="0" />
<opcao texto="Branco" verdadeiro="1" />
</pergunta>

<pergunta texto="Quantos animais haviam na arca de Moises">
<opcao texto="55" verdadeiro="0" />
<opcao texto="Nenhum" verdadeiro="1" />
<opcao texto="78" verdadeiro="0" />
<opcao texto="98" verdadeiro="0" />
</pergunta>

<pergunta texto="pergunta 4">
<opcao texto="opcao 1" verdadeiro="0" />
<opcao texto="opcao 2" verdadeiro="0" />
<opcao texto="opcao 3" verdadeiro="1" />
<opcao texto="opcao 4" verdadeiro="0" />
</pergunta>

<pergunta texto="pergunta 5">
<opcao texto="opcao 1" verdadeiro="0" />
<opcao texto="opcao 2" verdadeiro="0" />
<opcao texto="opcao 3" verdadeiro="1" />
<opcao texto="opcao 4" verdadeiro="0" />
</pergunta>

<pergunta texto="pergunta 6">
<opcao texto="opcao 1" verdadeiro="0" />
<opcao texto="opcao 2" verdadeiro="0" />
<opcao texto="opcao 3" verdadeiro="1" />
<opcao texto="opcao 4" verdadeiro="0" />
</pergunta>

<pergunta texto="pergunta 7">
<opcao texto="opcao 1" verdadeiro="0" />
<opcao texto="opcao 2" verdadeiro="0" />
<opcao texto="opcao 3" verdadeiro="1" />
<opcao texto="opcao 4" verdadeiro="0" />
</pergunta>

<pergunta texto="pergunta 8">
<opcao texto="opcao 1" verdadeiro="0" />
<opcao texto="opcao 2" verdadeiro="0" />
<opcao texto="opcao 3" verdadeiro="1" />
<opcao texto="opcao 4" verdadeiro="0" />
</pergunta>

<pergunta texto="pergunta 9">
<opcao texto="opcao 1" verdadeiro="0" />
<opcao texto="opcao 2" verdadeiro="0" />
<opcao texto="opcao 3" verdadeiro="1" />
<opcao texto="opcao 4" verdadeiro="0" />
</pergunta>

<pergunta texto="pergunta 10">
<opcao texto="opcao 1" verdadeiro="0" />
<opcao texto="opcao 2" verdadeiro="0" />
<opcao texto="opcao 3" verdadeiro="1" />
<opcao texto="opcao 4" verdadeiro="0" />
</pergunta>
</flashquizz>

_____

Agradeço a ajuda.

Rodrigo
0

#7 User is offline   eric seiji 

  • Group: Membros
  • Posts: 1
  • Joined: 10-May 09

Posted 10 May 2009 - 09:08 PM

QUOTE(rotavio @ 6/8/2008 14:08:40) <{POST_SNAPBACK}>
Preciso de uma ajuda.

Montei um quiz a partir de um tutorial (Flash e XML). Até aqui foi tudo bem. Porém agora quero incrementá-lo com duas funções novas.
A primeira consiste em misturar as perguntas. Neste ponto entendo que tenho que criar um array para fazê-lo (correto?)
E a segunda é escolher dentro do universo de 50 perguntas apenas 7 para exibição.

Segue o código abaixo:
//Importe a classe Alert, para exibir o resultado do quiz no final.
import mx.controls.Alert;
//Importe a classe checkbox.
var quiz:XML = new XML();
//Essa propriedade ignora os espaços em branco do XML.
quiz.ignoreWhite = true;
//O método load recebe como argumento a url do arquivo que será carregado
quiz.load("quiz.xml");
//Essa vai receber a quantidade de perguntas certas
var corretas:Number = 0;
// Mostra a pergunta atual do quiz
var perguntaAtual:Number= 0;
//Variável que vai receber o checkBox que for marcado;
var escolha;
//Quantidade total de perguntas do quiz
var totalPerguntas:Number;
//O evento onLoad da class Loadvars vai ser executado quando todos os dados tiverem sido recebidos.
quiz.onLoad = function(ok:Boolean):Void{
//Condicional if, para verificar se os dados foram recebidos com sucesso.
if(ok){
//Acesse e resgate a quantidade de nodes do XML, que é o valor da quantidade de perguntas
totalPerguntas = this.firstChild.childNodes.length;
//Execute a função montaQuiz, que será criada logo mais abaixo, e passe como argumento da função
//O primeiro node do XML contendo a primeira pergunta;
montaQuiz(this.firstChild.childNodes[0]);
};
};
/* array que ira guardar os dados do XML apos carregado */
var arrQuiz:Array = new Array();
/* cria um novo objeto para guardar o array*/
var obj:Object = new Object();
/* guarda a pergunta dentro do objeto */
obj.pergunta = node.attributes.texto
/* Array com as respostas*/
var arr:Array = new Array();
/* para cada resposta*/
for (var item:XMLNode = node.firstChild; item != null; item=item.nextSibling){
/* coloca os atributos dentro do array*/
arr.push(item.attributes);
}
/* coloca o array dentro do objeto*/
obj.resposta = arr;
/* coloca o objeto resposta dentro do array principal*/
arrquiz.push(obj);
/* Agora iremos iniciar a função para sortear a pergunta*/
function showquiz():Void {
/*se todas as perguntas já foram utilizadas*/
if (arrUsed.lenght == arrquiz.lenght); {
/* zera as usadas*/
arrUsed = new Array();
}
}
do {
/* sorteia uma pergunta*/
var item:Object = arrquiz[(Math.random()*arrquiz.lenght)];
}
/*Efetua o lopp enquanto esta pergunta não estiver na lista de usados*/
while (_usado(item.pergunta)==true);
/*coloca esta pergunta na lista de perguntas usadas*/
arrUsed.push(item.pergunta);
/*mostra a pergunta*/
pergunta.text=item.pergunta;

//Função montaQuiz, responsável por exibir a pergunta, e recebe como argumento um node do XML para
//preencher os componentes
//function montaQuiz(xmlNodes){
//Aqui irei usar a propriedade text, do campo de texto qtd, para exibir a quantidade de perguntas, e a pergunta atual
/*qtd.text = 'Peguntas: '+ parseInt(perguntaAtual+1) + " de "+ totalPerguntas;
//Exibe a pergunta no campo de texto
perg.text = xmlNodes.childNodes[0].childNodes;*/
//Loop for usado para preencher os componentes de checkbox
for(var i =1,x=xmlNodes.childNodes.length;i<x;i++){
//Aqui ele deixa deselecionado todas as vezes que ele executar a função
this['r'+i].selected = false;
//Atribua a propriedade label com os valores vindos do XML. O label é o que será exibido no radiobutton
this['r'+i].label = xmlNodes.childNodes[i].childNodes;
//A propriedade data é a que iremos usar para saber qual é a alternativa certa
this['r'+i].data = xmlNodes.childNodes[i].attributes.certa;
//o Evento clickHandler acontece quando você clica em qualquer dos radiobuttons
this['r'+i].clickHandler = function(){
//A variável escolha recebe o valor de this, que corresponde ao radiobutton clicado
escolha = this;
};
};

/*Função resposta é responsável por verificar a resposta à pergunta do quiz. Se estiver correta, ele incrementa a variável
corretas.
*/
function resposta(marcado):Void{
//Se o checkbox passado tiver a propriedade data diferente de undefined
if(marcado.data != undefined){
//Incremente a variável corretas.
corretas++;
};
};
//Função habilitaperguntas recebe como argumento da função um valor booleano, que vai definir se as
//alternativas e o botão de responder vão ficar ativas ou não
function habilitaperguntas(v:Boolean):Void{
//Loop for para setar a propriedade enabled dos componentes de checkbox, de acordo com o argumento recebido da função
for(var i =1;i<=5;i++){
eval('r'+i).enabled = v;
};
resp.enabled = v;
};
function mostraResultado(){
//chamando a função habilitaperguntas e passando true no argumento,
//os componentes de ckeckbox e o button ficarão habilitados para clicar
habilitaperguntas(false);
//Cálculo percentual dos acertos do quiz
var percentual = (corretas*100)/totalPerguntas;
//Variável t é o que será exibido no título da mensagem de alerta. Escrevi algumas palavras, e concatenei com as variáveis corretas e percentual

var t = "Você acertou " + corretas + " de " +totalPerguntas + " percentual de acerto: " +percentual + "% ";
//No método estático show, da classe Alert, vamos passar alguns argumentos. São eles:
/*
mensagem -> Vai receber a mensagem que será exibida na janela de alert
título -> Vamos passar o valor da variável t
label botão -> Vai receber o valor da propriedade okLabel, com isso podemos definir um novo valor para a variável okLabel e com isso mudar o texto do checkbox
escopo onde se encontra o objeto Alert que para o nosso caso é usei this
e por fim, a função de calback que ele vai executar quando o usuário clicar no botão do Alert
*/
Alert.show("Você deseja refazer o quiz?",t, Alert.okLabel = "Refazer", this,alertclik);
};
resp.clickHandler = function(){
//A condicional abaixo verifica se a peguntaAtual é menor que totalPerguntas menos 1. Caso seja verdadeiro, ele
//irá chamar a função resposta, incrementar a variável da pergunta atual, e chamar a função montaQuiz, com a próxima pergunta
//Executa a função resposta passando como argumento a variável escolha, que recebe o checkbox marcado
resposta(escolha);
//Zerando a variável escolha
escolha='';
if(perguntaAtual < totalPerguntas-1){

//incrementando a variável perguntaAtual, para passar para a próxima pergunta;
perguntaAtual++;
//Executa a função montaQuiz, para exibir a pergunta de acordo com a variável perguntaAtual
montaQuiz(quiz.firstChild.childNodes[perguntaAtual]);
}else{
//Executa a função mostraResultado.
mostraResultado();
};
};
//A função alertclik trata-se de um callback, que será executado quando o botão na mensagem de alerta for clicado
alertclik = function(){
//chamando a função habilitaperguntas e passando true no argumento,
//os componentes de checkbox e o button ficarão habilitados para clicar
habilitaperguntas(true);
//Zerando o valor da variável perguntaAtual, para reiniciar o quiz.
perguntaAtual = 0;
//Zerando o valor da variável corretas, para reiniciar o quiz.
corretas = 0;
//Chama a função monta quiz, informando o primeiro node do XML para ser exibida a primeira pergunta;
montaQuiz(quiz.firstChild.childNodes[perguntaAtual]);
};

Eai cara bo noite.
Preciso de uma ajuda eu li o seu forum sobre o quiz em flash.
Eu estou fazendo um,ja montei e também ja esta perfeito eu só quero colocar um sistema de random por que quando vc recomeça o quiz as perguntas estam na mesma ordem estou fazendo em xml. me da uma ajuda por favor meu e-mail é esse eric.planet@hotmail.com
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic



Publicidade




1 User(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)