Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gisa_iagami

randomizando flash + xml

Recommended Posts

Galera...depois do game quizz pronto o cliente me pediu pra fazer a

escolha randomica

Ja tenho o codigo e o game esta pronto

Como adaptar?

Meu codigo ta assim:

============================================

quiz.onLoad = function(ok:Boolean):Void {//Condicional if, para verificar se os dados foram recebidos com sucesso.if (ok) {_global.dados = quiz;//Acesse e resgate a quantidade de nodes do XML, que é o valor daquantidade de perguntas//totalPerguntas = this.firstChild.childNodes.length;totalPerguntas = 10;//Execute a função montaQuiz, que será criada logo mais abaixo, epasse como argumento da função//O primeiro node do XML contendo a primeira pergunta;montaQuiz(this.firstChild.childNodes[0]);limpaCampos();}};//Função montaQuiz, responsável por exibir a pergunta, e recebe comoargumento um node do XML para//preencher os componentesfunction montaQuiz(xmlNodes) {//Aqui irei usar a propriedade text, do campo de texto qtd, paraexibir a quantidade de perguntas, e a pergunta atualqtd.text = ' '+parseInt(perguntaAtual+1)+" / "+totalPerguntas;//Exibe a pergunta no campo de textoperg.text = xmlNodes.childNodes[0].childNodes;_root.onEnterFrame = function() {tempo++;if (tempo == 25) {delete _root.onEnterFrame;tempo = 0;for (var i = 1, x = xmlNodes.childNodes.length; i<x; i++) {//Aqui ele deixa deselecionado todas as vezes que ele executar a funçãothis['r'+i].visible = true;this['r'+i].selected = false;this['t'+i].text = xmlNodes.childNodes[i].childNodes;//theme do radiobuttonthis['r'+i].setStyle("themeColor", "cvmtheme");//this['r'+i].move(5, 100);//muda a fonte do radiobuttonthis['r'+i].setStyle("fontFamily", "verdana");//muda o tamanho da fontethis['r'+i].setStyle("fontSize", "11");//justifica o textothis['r'+i].setStyle("textAlign", "justify");//A propriedade data é a que iremos usar para saber qual é aalternativa certathis['r'+i].data = xmlNodes.childNodes[i].attributes.certa;//o Evento clickHandler acontece quando você clica em qualquer dosradiobuttonsthis['r'+i].clickHandler = function() {//A variável escolha recebe o valor de this, que corresponde aoradiobutton clicadoescolha = this;};barradotempo.play();}}};}===============================================
Teria como fazer um aleatorio em cima disso?

Puts...pra entregar amanha >.<

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então. Primeiro a gente cria uma array que vai conter as perguntas já respondidas. Depois a gente sorteia a nova pergunta e verifica se a sorteada já foi respondida. Se ela já foi, sorteia de novo; caso contrário pode montar o quiz e armazena essa nova pergunta na array de perguntas feitas.

 

Saca só:

//Função que verificará se há um elemento existente na arrayArray.prototype.procurar = function(value) {	for (var i:Number = 0; i < this.length; i++) {		if (this[i] == value) {			return true;		}	}	return false;};quiz.onLoad = function(ok:Boolean):Void  {	//Condicional if, para verificar se os dados foram recebidos com sucesso.	if (ok) {		_global.dados = quiz;		//Acesse e resgate a quantidade de nodes do XML, que é o valor da quantidade de perguntas		//totalPerguntas = this.firstChild.childNodes.length;		totalPerguntas = 10;		//Criando a array que conterá as perguntas utilizadas		perguntasRespondidas = Array();		//Sorteando uma pergunta		do {			var sorteio:Number = Math.floor(Math.random()*totalPerguntas);//sorteia de 0 a 9, no caso de 10 perguntas		} while (perguntasRespondidas.procurar(sorteio));		//Montando a pergunta		montaQuiz(this.firstChild.childNodes[sorteio]);		//Adicionando a pergunta já feita na array		perguntasRespondidas.push(sorteio);		limpaCampos();	}};//Função montaQuiz, responsável por exibir a pergunta, e recebe como argumento um node do XML para//preencher os componentesfunction 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 = ' ' + parseInt(perguntaAtual + 1) + " / " + totalPerguntas;	//Exibe a pergunta no campo de texto	perg.text = xmlNodes.childNodes[0].childNodes;	_root.onEnterFrame = function() {		tempo++;		if (tempo == 25) {			delete _root.onEnterFrame;			tempo = 0;			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].visible = true;				this['r' + i].selected = false;				this['t' + i].text = xmlNodes.childNodes[i].childNodes;				//theme do radiobutton				this['r' + i].setStyle("themeColor", "cvmtheme");				//this['r'+i].move(5, 100);				//muda a fonte do radiobutton				this['r' + i].setStyle("fontFamily", "verdana");				//muda o tamanho da fonte				this['r' + i].setStyle("fontSize", "11");				//justifica o texto				this['r' + i].setStyle("textAlign", "justify");				//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;				};				barradotempo.play();			}		}	};}
Depois é só repetir aquele procedimento de sorteio e de quardar na array para quando for chamar a próxima pergunta.

 

Flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi caro antonio

você deu um salvo na minha vida ^^

Agora to com o seguinte problema

TEnho a função:

resultado = function () {	//Zerando a variável escolha	escolha = '';	if (perguntaAtual<totalPerguntas-1) {		//incrementando a variável perguntaAtual, para passar para a próxima pergunta;		perguntaAtual++;		montaQuiz(this.firstChild.childNodes[perguntaAtual]);	} else {		//Executa a função mostraResultado.		mostraResultado();	}};
Eu coloquei a mesma função ficando assim:

resultado = function () {	//Zerando a variável escolha	escolha = '';	if (perguntaAtual<totalPerguntas-1) {		//incrementando a variável perguntaAtual, para passar para a próxima pergunta;		//perguntaAtual++;		//Criando a array que conterá as perguntas utilizadas		perguntasRespondidas = Array();		//Sorteando uma pergunta		do {		  var sorteio:Number = Math.floor(Math.random()*totalPerguntas);//sorteia de 0 a 9, no caso de 10 perguntas		} while (perguntasRespondidas.procurar(sorteio));		//Executa a função montaQuiz, para exibir a pergunta de acordo com a variável perguntaAtual		montaQuiz(this.firstChild.childNodes[sorteio]);	} else {		//Executa a função mostraResultado.		mostraResultado();	}};
Mas deu indefinida na segunda questão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, você acabou por misturar os dois sistemas de perguntas (sequenciado e aleatório). Tirando o sistema sequenciado e deixando só o aleatório ficaria assim:

 

resultado = function () {	//Zerando a variável escolha	escolha = '';	//Verificando quantas perguntas já foram feitas	if (perguntasRespondidas.lenght<totalPerguntas) {		//Sorteando uma pergunta		do {		  var sorteio:Number = Math.floor(Math.random()*totalPerguntas);//sorteia de 0 a 9, no caso de 10 perguntas		} while (perguntasRespondidas.procurar(sorteio));		//Executa a função montaQuiz, para exibir a pergunta de acordo com a variável sorteio		montaQuiz(this.firstChild.childNodes[sorteio]);		//Adicionando a pergunta já feita na array		perguntasRespondidas.push(sorteio);	} else {		//Executa a função mostraResultado.		mostraResultado();	}};//ps: a linha que cria a array de perguntas respondidas não pode ser criada de novo, se não nunca todas as perguntas serão respondidas :Þ

Tudo bem? :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá antonio

Novamente agradecida por demais

Fiz o q você falou mas agora ele pergunta uma apenas e segue para o final do desafio sem ler as 10 perguntas.

Explicando melhor:

Eu no xml tenho mais do q 10 perguntas

Cada xml é diferente: ex: 1 tem 18 questoes, outro 20

E isso vai variar pq vao trocar as questoes de 3 em 3 meses

Pra facilitar inves de criar 3 scenes eu defino qual xml ele importa dependendo do botao clicado

E a ação é a mesma.

Acho q por conta de alguma variável de perguntatotal e pergunta atual =/

Segue meu script completo pra ficar mais fácil

Eu tb to tentando aqui

stop();//importa alertaimport 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á carregadoquiz.load(arquivo_xml);certo = false;show = false;//Essa vai receber a quantidade de perguntas certasvar corretas:Number = 0;// Mostra a pergunta atual do quizvar perguntaAtual:Number = 0;//Variável que vai receber o checkBox que for marcado;var escolha;//Quantidade total de perguntas do quizvar totalPerguntas:Number;//array para pegar as perguntas q ele erra_global.minhasRespostasErradas = new Array([], [], [], [], [], [], [], [], [], []);//intervalo entre perguntas e respostas.var intervalo:Number;//intervalo de tempo.var tempo:Number = 0;//Função que verificará se há um elemento existente na arrayArray.prototype.procurar = function(value) {	for (var i:Number = 0; i < this.length; i++) {		if (this[i] == value) {			return true;		}	}	return false;};//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) {		_global.dados = quiz;		//Acesse e resgate a quantidade de nodes do XML, que é o valor da quantidade de perguntas		//totalPerguntas = this.firstChild.childNodes.length;		totalPerguntas=10;		//Criando a array que conterá as perguntas utilizadas		perguntasRespondidas = Array();		//Sorteando uma pergunta		do {			var sorteio:Number = Math.floor(Math.random()*totalPerguntas);//sorteia de 0 a 9, no caso de 10 perguntas		} while (perguntasRespondidas.procurar(sorteio));		//Montando a pergunta		montaQuiz(this.firstChild.childNodes[sorteio]);		//Adicionando a pergunta já feita na array		perguntasRespondidas.push(sorteio);		limpaCampos();	}};//Função montaQuiz, responsável por exibir a pergunta, e recebe como argumento um node do XML para//preencher os componentesfunction 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 = ' ' + parseInt(perguntaAtual + 1) + " / " + totalPerguntas;	//Exibe a pergunta no campo de texto	perg.text = xmlNodes.childNodes[0].childNodes;	_root.onEnterFrame = function() {		tempo++;		if (tempo == 25) {			delete _root.onEnterFrame;			tempo = 0;			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].visible = true;				this['r' + i].selected = false;				this['t' + i].text = xmlNodes.childNodes[i].childNodes;				//theme do radiobutton				this['r' + i].setStyle("themeColor", "cvmtheme");				//this['r'+i].move(5, 100);				//muda a fonte do radiobutton				this['r' + i].setStyle("fontFamily", "verdana");				//muda o tamanho da fonte				this['r' + i].setStyle("fontSize", "11");				//justifica o texto				this['r' + i].setStyle("textAlign", "justify");				//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;				};				barradotempo.play();			}		}	};}/*Função resposta é responsável por verificar a resposta à pergunta do quiz. Se estiver correta, ele incrementa a variável corretas.*/resultado = function () {	//Zerando a variável escolha	escolha = '';	//Verificando quantas perguntas já foram feitas	if (perguntasRespondidas.lenght<totalPerguntas) {		//Sorteando uma pergunta		do {		  var sorteio:Number = Math.floor(Math.random()*totalPerguntas);//sorteia de 0 a 9, no caso de 10 perguntas		} while (perguntasRespondidas.procurar(sorteio));		//Executa a função montaQuiz, para exibir a pergunta de acordo com a variável sorteio		montaQuiz(this.firstChild.childNodes[sorteio]);	} else {		//Executa a função mostraResultado.		mostraResultado();	}};//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<=4; i++) {		eval('r'+i).enabled = v;	}	resp.enabled = v;}function mostraResultado() {	//leva para o frame 12 mostrando o resultado final.	gotoAndPlay(12);}resp.onPress = 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	if (!show) {		//define a resposta		resposta(escolha);		//chama explicação		chamaexplicacao.play();		barradotempo.stop();	}};limpaCampos = function () {	t1.text = " ";	t2.text = " ";	t3.text = " ";	r1.selected = false;	r2.selected = false;	r3.selected = false;	r1.visible = false;	r2.visible = false;	r3.visible = false;};

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, eu vi que ficou faltando adicionar a pergunta já feita na array de perguntas respondidas... dá uma olhada na função resultado();Até

Compartilhar este post


Link para o post
Compartilhar em outros sites

você fala assim:

resultado = function () {	//Zerando a variável escolha	escolha = '';	//Verificando quantas perguntas já foram feitas	if (perguntasRespondidas.lenght<totalPerguntas) {		//Sorteando uma pergunta		do {		  var sorteio:Number = Math.floor(Math.random()*totalPerguntas);//sorteia de 0 a 9, no caso de 10 perguntas		} while (perguntasRespondidas.procurar(sorteio));		perguntasRespondidas.push(sorteio);		//Executa a função montaQuiz, para exibir a pergunta de acordo com a variável sorteio		montaQuiz(this.firstChild.childNodes[sorteio]);	} else {		//Executa a função mostraResultado.		mostraResultado();	}};

Estranho q agora so le uma pergunta e passa direto

Compartilhar este post


Link para o post
Compartilhar em outros sites

caro colega, mudei e a situação piorou

Ele le a primeira pergunta e apos isso da undefined

segue o codigo de resposta:

resultado = function () {	//Zerando a variável escolha	escolha = '';	//Verificando quantas perguntas já foram feitas	if (perguntasRespondidas.length<totalPerguntas) {		//Sorteando uma pergunta		do {		  var sorteio:Number = Math.floor(Math.random()*totalPerguntas);//sorteia de 0 a 9, no caso de 10 perguntas		} while (perguntasRespondidas.procurar(sorteio));				//Executa a função montaQuiz, para exibir a pergunta de acordo com a variável sorteio		montaQuiz(this.firstChild.childNodes[sorteio]);	} else {		//Executa a função mostraResultado.		mostraResultado();	}};

http://forum.imasters.com.br/public/style_emoticons/default/cry.gif http://forum.imasters.com.br/public/style_emoticons/default/cry.gif http://forum.imasters.com.br/public/style_emoticons/default/cry.gif http://forum.imasters.com.br/public/style_emoticons/default/cry.gif http://forum.imasters.com.br/public/style_emoticons/default/cry.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.