..:: MX Studio Fóruns ::..: Jogo da memoria c/ pares diferentes flash AS2 [RESOLVIDO] - ..:: 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

Jogo da memoria c/ pares diferentes flash AS2 [RESOLVIDO]

#1 User is offline   Joildson 

  • Group: Membros
  • Posts: 7
  • Joined: 30-June 11

Posted 05 July 2011 - 12:45 PM

Bom dia pessoal sou novo aki, tmb sou 1 pouco leigo nesse assunto de AC, + estou precisando de 1 flash que tenha pares diferentes, preciso desse flash por conta q trab num colegio e aki precisa que tenha pares diferente EX.: em 1 par a foto de 1 cachorro e no outro o nome Cachorro p/ a criança associar.

Obrigado!
0

#2 User is offline   RONYTORRES 

  • Group: Moderadores
  • Posts: 385
  • Joined: 07-December 06

Posted 05 July 2011 - 03:19 PM

Oww Joildson, você tá querendo algo pronto, funcionando e na faixa?? kekekek ou você tá querendo aprender como faz isso?
Eu tenho vários disso que você tá querendo, mas entregar de bandeija, não é o nosso objetivo aqui no fórum, estamos aqui pra ajudar as pessoas a construírem seus projetos por conta própria e aí sim entra nossa função, ajudá-lo em alguma dúvida.
0

#3 User is offline   Joildson 

  • Group: Membros
  • Posts: 7
  • Joined: 30-June 11

Posted 05 July 2011 - 06:02 PM

ñ amigo eu num quero pronto quero 1 tuntorial!!
Se poder me ajuda estarei agradecido!!

Obrigado
0

#4 User is offline   RONYTORRES 

  • Group: Moderadores
  • Posts: 385
  • Joined: 07-December 06

Posted 06 July 2011 - 12:01 PM

Qual linguagem de AS você prefere?
0

#5 User is offline   Joildson 

  • Group: Membros
  • Posts: 7
  • Joined: 30-June 11

Posted 06 July 2011 - 12:58 PM

Rony, eu preferiria 2.0!

Obg.
0

#6 User is offline   RONYTORRES 

  • Group: Moderadores
  • Posts: 385
  • Joined: 07-December 06

Posted 07 July 2011 - 03:42 PM

Segue aí como você deve fazer isso.

Quote

A lógica seria +- assim:
Primeiro, você deve criar um movieClip com 3 camadas e 2 frames.
a ) na camada 1, crie um shape de fundo, pode ser uma imagem ou um movieClip pronto, seja lá o que você vai usar, e terá que ocupar os dois frames da camada 1. Preste atenção, para que esse shape ou imagem fique alinhado a partir do registro (x,y) = 0.
b ) na camada 2, no primeiro frame coloque a figura 1 e no frame 2 a figura 2, claro, que tenha a mesma referência com a figura 1.
c ) na camada 3, a partir do primeiro frame, crie um movieClip do mesmo tamanho com o que você criou o fundo que está na camada 1, ele vai servir para esconder a camada 2, pois quando carrega o filme, você não pode ver as imagens, somente essa capa, aí, quando o usuário clicar, então essa capa oculta-se para que a imagem seja exibida.

Pronto, esse deve ser a forma como deve criar todos os movieClips do seu jogo. Basta que os mesmos sejam duplicados na bliblioteca de
acordo a quantidade de pares que você irá precisar, e alterando as imagens que estão na camada 2 de cada um desses movieClips.
Exemplificando, se meu jogo vai ter no palco 10 cartas, para formar 5 pares, então devo ter 5 movieClips na biblioteca, cada movieClip, na camada 2, ter no frame 1 e 2 as imagens que são correspondentes para formar seus pares.

Feito isso, você deve ainda na biblioteca, criar o linkage para o AS2, clicando o botão direito do mouse sobre o primeiro movieClip, e
escolhendo Propriedades...., escolha Exportar para ActionScript e no campo Indentificador, digite, por exempo, "mc0", e confirme OK.
Repita os mesmo procedimento com os demais movieClips que estão na biblioteca, só modificando o número final (mc1, mc2, m3, mc4 etc),
esse número sequêncial vai facilitar pra você otimizar as linhas de código do seu projeto.

Agora vamos pro script do projeto, clique no primeiro frame da timeline e abra o painel ações e digite o seguinte código:



stop();

//Este exemplo, tem como objetivo colocar 10 cartas no palco para formar 5 pares correspondentes.

var cartas:Array = new Array(); //vetor para armazenar todas as cartas que serão colocadas no palco, esse vetor vai nos permitir randomizar as cartas no palco.
var cont:Number = 1; //variável que vai permitir saber se foi clicado em uma carta ou duas cartas, mesmo que seja na mesma carta.
var nome_carta1:String; //variável que vai guardar o nome da primeira carta clicada.
var nome_carta2:String; //variável que vai guardar o nome da segunda carta clicada.
var acertos:Number = 0; //variavel para marcar os acertos quando forma-se o par correto.

//laço para pegar as cartas que estão na biblioteca e trazê-las para o palco.
for (i=0; i<5; i++) {
	//Essa parte vai colocar no palco as 5 cartas, que mostram as figuras que você deixou no frame 1, dentro de cada movieclip;
	_root.attachMovie("mc"+i,"carta"+i,_root.getNextHighestDepth()); //cada vez que o laço roda, traz um movieClip ("mc"+numero), para o palco com o nome "carta"+numeros.
	_root["carta"+i].id = i; //crio uma propriedade, a guardo o número da carta, isso vai permitir comparar se o número da primeira carta clicada é igual ao número da segunda carta clicada.
	_root["carta"+i].gotoAndStop(1); //a carta fica posicionada no primeiro frame para exibir a imagem quando o usuário clicar na carta.
	_root["carta"+i]._xscale = _root["carta"+i]._yscale=80; //aqui deixo as carta um pouco menor com relação ao seu tamanho original que é 100%, ou seja, com 80%, fica a seu critério essa configuração.
	_root["carta"+i].status = true; //crio uma propriedade status, valendo "true", para que quando o par seja formado, ele valerá "false", isso significa que o usuário não terá mais como clicar nessas cartas.
	_root["carta"+i].onPress = function() {
		verificaPares(this._name); //ao clicar nas cartas, chama a função verificaPares, levando como parâmetro o nome do objeto clicado.
	};
	cartas.push(_root["carta"+i]); //adiciona o objeto no vetor.
	
	//Essa parte vai duplicar no palco cada uma das cartas acima, que irão mostrar as figuras correspondentes que você deixou no frame 2, dentro de cada movieClip;
	_root["carta"+i].duplicateMovieClip("copia_carta_"+i,_root.getNextHighestDepth()); //cada vez que o laço roda, duplica um movieClip acima ("carta"+numero), no palco com o nome "carta_copia_"+numero.
	_root["copia_carta_"+i].id = i; //crio uma propriedade, a guardo o número da carta, isso vai permitir comparar se o número da primeira carta clicada é igual ao número da segunda carta clicada.
	_root["copia_carta_"+i].gotoAndStop(2); //a carta fica posicionada no segundo frame para exibir a imagem quando o usuário clicar na carta.
	_root["copia_carta_"+i]._xscale = _root["copia_carta_"+i]._yscale=80; //aqui deixo as carta um pouco menor com relação ao seu tamanho original que é 100%, ou seja, com 80%, fica a seu critério essa configuração.
	_root["copia_carta_"+i].status = true; //crio uma propriedade status, valendo "true", para que quando o par seja formado, ele valerá "false", isso significa que o usuário não terá mais como clicar nessas cartas.
	_root["copia_carta_"+i].onPress = function() {
		verificaPares(this._name); //ao clicar nas cartas, chama a função verificaPares, levando como parâmetro o nome do objeto clicado.
	}
	cartas.push(_root["copia_carta_"+i]); //adiciona o objeto no vetor.
}

//Como o laço anterior, colocou 10 cartas no palo, então agora através de outro laço, vou fazer a randomização e posicionamento das cartas no cenário.
//Obervando que vou dispor as cartas em 2 fileiras de 5 cartas cada uma.
for (j=0; j<10; j++) {
	index = random(cartas.length); //variável guarda um valor sorteado de acordo o tamanho do vetor.
	cartaAtual = cartas[index]; // a variável cartaAtual, irá armazenar o nome da carta sorteada pela variável index no vetor cartas
	cartaAtual._x = (j%5)*(cartaAtual._width+10)+10; //cada vez que o laço roda posicio a carta atual começando a partir da posição _x= 10 no palco, e  elas vão se incrementando na posição _x através do módulo (i%5) e tendo uma distância de 10 pixel uma em relação a outra.
	cartaAtual._y = Math.floor(j/5)*(cartaAtual._height+10)+50; //a mesma coisa acontece quando uma fileira é preenchida com 5 cartas, elas passam para a próxima filha, incrementando a posição _y.
	cartas.splice(index,1); //remove do vetor cartas a carta que já foi posicionada no palco.
}

//Função que vai servir para bloquear as cartas quando o usuário clicar na segunda carta tentando formar o par. Isso é para que seja feita as verificações, ou seja, se os pares estão ou não corretos.
//essa função precisa de um parâmetro,e sempre será boleano (true ou false), var tratar de desabilitar todas as cartas quando a verificação estiver sendo feita e vai também habilitar somentes as cartas que ainda não formaram par, para que o usuário tenha a oportunidade de clicar nelas novamente tentando formar os pares.
function blockCartas(v:Boolean) {
	if (v) { //se o parâmetro for true, então
		for (i=0; i<5; i++) {
			if (_root["carta"+i].status) { //testa se os status de todas as cartas são verdadeiras, isso significa que elas não formaram ainda seus pares, então
				_root["carta"+i].enabled = v; // deixo elas habilitadas pelo parâmetro "v", que sendo true, valerá true.
				_root["carta"+i].capa._alpha = 100; //volto a capa para alpha 100%, escondendo as imagens.
			}
			//a mesma coisa se repete para as cartas duplicadas.
			if (_root["copia_carta_"+i].status) {
				_root["copia_carta_"+i].enabled = v;
				_root["copia_carta_"+i].capa._alpha = 100;
			}
		}
	} else { //se o parâmetro não for true, ou seja, será  false, isso significa que todas as cartas, sem exceção, deverão estar bloqueadas, isso porque, o usuário não pode clicar em nenhuma delas enquanto a verificação não estiver concluída, coisa que um temporizador vai controlar.
		for (i=0; i<5; i++) {
			_root["carta"+i].enabled = v;
			_root["copia_carta_"+i].enabled = v;
		}
	}
}

//Função para verificação dos pares, que é chamada sempre que uma carta é clicada, e tem como parâmetro seu próprio nome.
function verificaPares(nome:String) {
	this[nome].capa._alpha = 0; //quando clico na carta, a capa recebe um alpha de 0% para que a camada 2 do movieClip seja exibida.
	if (cont == 1) { //testo se a varíavel "cont" vale 1,  se valer 1, isso vai signigica que foi clicado na primeira de qualquer uma das 10 cartas dispostas no palco.
		cont++; //incremento a variável "cont", e ela vai valer 2 a partir daí.
		nome_carta1 = nome; //a variável "nome_carta1" recebe o nome da primeira carta clicada.
	} else if (cont == 2) { //testo se a variável "cont" vale 2, valendo 2, significa que uma segunda carta foi clicada.
		nome_carta2 = nome; //a variável "nome_carta2", recebe o nome dessa segunda carta clicada.
		cont = 1; //a variável "cont", retorna valer 1 novamente, para uma posterior verificação de cartas novamente.
		blockCartas(false); //como a sugunda carta foi clicada, então todas serao bloqueadas, através da função blockCarrtas, passando como parâmetro "false", conforme comentário na função acima.
		if (nome_carta1.length!=nome_carta2.length) { //testo se os tamanho dos nomes de cada carta que foram recebidos pelas variáveis "nome_carta1" e "nome_carta2", são diferentes, sendo, isso significa que eu clique numa das cópias das cartas, mas ainda preciso saber se a cópia tem o mesmo número;
			if (this[nome_carta1].id == this[nome_carta2].id) { //testo então se a carta e a cópia da carta, tem o mesmo id, que é um número recebido no primeiro laço acima, se forem iguais, então os pares estão corretos
				this[nome_carta1].status = false; //tanto a carta, como a cópia da carta, recebem a condição false, na propriedade status de ambas, isso vai permitir que quando eu desbloquear as cartas para o usuário clicar novamente tentando formar outros pares, somente as que o status for "true", será habilitadas.
				this[nome_carta2].status = false;
				acertos++; //incremento a variável acertos.
				trace("Pares iguais");
			} else {
				//aqui, quando o tamanho dos nomes são diferentes, mas o número não é igual, então, as pares correspondentes não estão corretos.
				trace("Os pares não são iguais");
			}
		} else {
			//aqui, quando o tamanho dos nomes das cartas são iguais, então, os pares também não estarão corretos, isso siginifica que o usuário clicou em 2 cartas, mas não em uma carta e em uma cópia dela ou outra.
			trace("Os pares não são iguais");
		}
		//tempo de 2000 milisegundos ( 2segundos), para desbloquear as cartas e testar se a variável acertos é igual a 5, ou seja, isso significa que os 5 pares foram formados e posso finalizar o projeto.
		var tempo = setTimeout(function () {
		blockCartas(true);
		if (acertos == 5) {
			trace("Parabéns, você foi muito bem.");
		}
		}, 2000);
	}
}

0

#7 User is offline   Joildson 

  • Group: Membros
  • Posts: 7
  • Joined: 30-June 11

Posted 18 July 2011 - 10:56 AM

Ola rony, o flash está funcionando bem so q tem 1 prob ele num ta ocutando a camada 3 ele aparece as mesnsagens de erro e de parabens so num couta a camada, isso num deixando agente v o q tem na 2!

obg...
0

#8 User is offline   RONYTORRES 

  • Group: Moderadores
  • Posts: 385
  • Joined: 07-December 06

Posted 18 July 2011 - 02:25 PM

Cara, é o seguinte, esse movieclip, que você colocou na camada 3, tem que ter um nome de instância, no exemplo, se você verificar eu dei o nome de capa, e perceba que a primeira linha da função "verificaPares", eu seto o alpha 0 para esse movieClip "capa", faça isso que você vai perceber que funciona certinho.
0

#9 User is offline   Joildson 

  • Group: Membros
  • Posts: 7
  • Joined: 30-June 11

Posted 19 July 2011 - 10:49 AM

Rony deu certo velho, fk show, muito obg pelo tutorial, se eu quisesse colocar + pares tipo 10 pares ou +, esse so tá até 5 pares!

obg..

eu fiz outro topico com o memo titulo e a mesma duvida vc teria como apagalo?
0

#10 User is offline   RONYTORRES 

  • Group: Moderadores
  • Posts: 385
  • Joined: 07-December 06

Posted 20 July 2011 - 02:38 PM

Cara, segue o tutorial que fiz pra você, é só ir duplicando os mc na biblioteca.
e pra ficar melhor cria duas variáveis, pra controlar isso melhor, assim:

var totalPares:Number = 10;
var totalCartas:Number = 20;


No primeiro laço onde você tem a condição "i<5", troque por "i<totalPares", e no segundo laço, onde você tem a condição "j<10", substitua por "j<totalCartas".
Acho que vai ficar mais organizado.

Obs. Não achei seu outro tópico, acho que devem ter removido já.
0

#11 User is offline   Joildson 

  • Group: Membros
  • Posts: 7
  • Joined: 30-June 11

Posted 21 July 2011 - 09:19 AM

Rony muito obg pelo tutorial quebrou 1 galhão!
0

#12 User is offline   wallyvianna 

  • Group: Membros
  • Posts: 1
  • Joined: 17-August 11

Posted 17 August 2011 - 12:55 AM

Seu codigo é muito bom, mas tenho de desenvolver um jogo de cartas que tem uma séria restrição: cada carta do baralho deve ser trocada por uma carta diferente da que foi trocada anteriormente. Ex.: se tenho uma sequência de cartas 1,2,3,4 e 5, na primeira troca de cartas a carta 2 deve ser substituída pela carta 3, depois pela 4, e assim por diante até retornar a carta 2 e reiniciar o processo.
Além disso as cartas imediatamente vizinhas de cada carta não devem ser iguais a carta trocada; por exemplo, se a carta 2 foi trocada pela 3, a carta ao lado esquerdo e direito não devem ser 3.
Imaginei uma solução "sem programação": cada vez que se clicasse num botão recarregando o filme Flash um novo baralho dentro duma sequência pré-estabelecida seria carregado com as cartas previamente trocadas, mas como tenho 40 cartas para trocar imagino que a programação deva resolver o meu drama em menos tempo (!).
Grato pela atenção,
wallace vianna, RJ
wallyvianna@gmail.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)