Gisa_iagami 0 Denunciar post Postado Setembro 26, 2006 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
Antoniosp 2 Denunciar post Postado Setembro 26, 2006 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
Gisa_iagami 0 Denunciar post Postado Setembro 27, 2006 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
Antoniosp 2 Denunciar post Postado Setembro 27, 2006 É, 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
Gisa_iagami 0 Denunciar post Postado Setembro 27, 2006 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
Antoniosp 2 Denunciar post Postado Setembro 27, 2006 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
Gisa_iagami 0 Denunciar post Postado Setembro 27, 2006 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
Antoniosp 2 Denunciar post Postado Setembro 27, 2006 Ops, falha minha agora http://forum.imasters.com.br/public/style_emoticons/default/blush.gif Escrevi lenght ao invés de length dentro do if... http://forum.imasters.com.br/public/style_emoticons/default/ninja.gif Compartilhar este post Link para o post Compartilhar em outros sites
Gisa_iagami 0 Denunciar post Postado Setembro 28, 2006 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