Ir para conteúdo

Arquivado

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

Daniel o rei

[Resolvido] organizar array

Recommended Posts

Quero organizar um array com cartas.

As cartas são representadas por strings.

exemplo, P10: 10 de paus

 

Quero organizar da seguinte forma:

 

Primeiro todas as cartas de paus.

Depois ouro

depois espadas

depois copas

 

As cartas estão contidas no array minhasCartas

 

 

 

 

var o_paus:Array = new Array();			
		var o_ouro:Array = new Array();
		var o_copas:Array = new Array();
		var o_espadas:Array = new Array();
		var o_naipe:String = new String();
					var o_paus_f:Array = new Array();			
		var o_ouro_f:Array = new Array();
		var o_copas_f:Array = new Array();
		var o_espadas_f:Array = new Array();
function organizar_mao(){

		for each(var o_carta01:String in minhasCartas){
			o_naipe= o_carta01.substring(0,1);
			switch(o_naipe){
				case "P":
				o_paus.push(o_carta01);
				break;
				case "O":
				o_ouro.push(o_carta01);
				break;
				case "C":
				o_copas.push(o_carta01);
				break;
				case "E":
				o_espadas.push(o_carta01);
				break;
				}





		}




		var o_f:Function = function (item:* , index:* , ar:Array):void{
			trace("no o_f"+item);

			o_naipe = item.substring(0,1);
			trace("o_naipe"+o_naipe);
			switch(o_naipe){
				case "P":
				o_paus_f[item] = valorCarta(item);
				trace("P"+item);
				break;
				case "O":
				o_ouro_f[item] = valorCarta(item);
				trace("O"+item);
				break;
				case "C":
				o_copas_f[item] = valorCarta(item);
				trace("C"+item);
				break;
				case "E":
				o_espadas_f[item] = valorCarta(item);
				trace("E"+item);
				break;
				}

		};
		//trace("x1x1"+o_copas_f)

		/*o_paus:Array = new Array();			
		var o_ouro:Array = new Array();
		var o_copas:Array = new Array();
		var o_espadas:Array = new Array();*/
		o_paus.forEach(o_f);
		o_ouro.forEach(o_f);
		o_copas.forEach(o_f);
		o_espadas.forEach(o_f);

		o_paus_f.sort() ;			
		o_ouro_f.sort() ;
		o_copas_f.sort() ;
		o_espadas_f.sort();
		trace("o_copas_f"+o_copas_f.length);//o_copas_f0
		trace(o_copas_f);//nada
		trace("o_paus_f"+o_paus_f.length);//o_paus_f0
		trace("o_paus_f");//o_paus_f
		trace("PA" + o_paus_f["PA"]);//PA100

		trace("line 1322:" + o_paus_f + " " + o_ouro_f + " " + o_copas_f + " " + o_espadas_f );

		o_paus = [];
		o_ouro = [];
		o_copas= [];
		o_espadas=[];
		var o_f02:Function = function (item:* , index:* , ar:Array){
			switch(index){
				case "P":
				o_paus.push(item);
				break;
				case "O":
				o_ouro.push(item);
				break;
				case "C":
				o_copas.push(item);
				break;
				case "E":
				o_espadas.push(item);
				break;
				}
		}
		o_paus_f.forEach(o_f02);	
		o_ouro_f.forEach(o_f02);
		o_copas_f.forEach(o_f02);
		o_espadas_f.forEach(o_f02);

		minhasCartas = [];
		trace(o_copas + "AA");
		trace(o_paus + "AA2");
		trace(o_ouro + "AA3");
		trace(o_espadas + "A4A");

		for each(var carta_02:String in o_copas){
			minhasCartas.push(carta_02);
			trace(1);
		}
		for each(var carta_03:String in o_paus){
			minhasCartas.push(carta_03);
			trace(2);
		}
		for each(var carta_04:String in o_ouro){
			minhasCartas.push(carta_04);
			trace(3);
		}
		for each(var carta_05:String in o_espadas){
			minhasCartas.push(carta_05);
			trace(4);
		}
		trace(minhasCartas + "@@");

	}

 

eu fiz essa função para funcionar da seguinte maneira:

 

Pega todas as cartas e joga para naipes diferente.

 

Depois cada atravéz de um foreach joga para outro array, e pega item como indice e valorCarta(item) como valor.

 

Eu fiz isso para poder organizar com o sort()

 

Depois com uma função coloca os arrays no formato certo.

 

Depois com 4 for each coloca os valores dos 4 arrays

 

 

 

Só que não funciona, essa função só zera minhasCartas

 

 

 

Tem algo que eu possa modificar no script ou fazer de um geito melhor?

 

não entendeu?

 

 

Eu quero que isso aconteça:

 

trace(minhasCartas);//C3,O5,P2,PA,E3,C7,EK
organizar_mao();
trace(minhasCartas);//O5,P2,PA,C3,C7,E3,EK

Eu quero que o array esteja organizado pelos naipes de forma que tenha um contraste(cartas de um naipe vermelho, preto,vermelho, preto)

E em ordem crescente.

 

Eu não sei se posso fazer pelo sort()

 

, depois atravéz de uma função(que ta funcionando) organiza as imagens das cartas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode personalizar a função sort, passando uma outra função que vai fazer a comparação

 

 

var minhasCartas:Array = [C3,O5,P2,PA,E3,C7,EK];
function organizar_mao(cartaA, cartaB):int {
 var peso = {};
 peso['P'] = 1;
 peso['O'] = 2;
 peso['E'] = 3;
 peso['C'] = 4;

 var naipeA = cartaA.substring(0,1);
 var naipeB = cartaB.substring(0,1);

   if (peso[naipeA] < peso[naipeB]){ 
       return -1; 
   }  else if (peso[naipeA] > peso[naipeB]){ 
       return 1; 
   } else  { 
       return 0; 
   }   

}
minhasCartas.sort(organizar_mao)
trace(minhasCartas);

 

 

eu fui escrevendo e não testei ela, mas a logica seria essa ai

 

 

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

function embaralhar(cartaA, cartaB):int{
var n:Number = Math.random();
var n2:Number = 3*n;
n2 -= 1;
n2 = Math.round(n2);
return n2;	
}
var cartas:Array = new Array();
//espadas
cartas.push("EA", "E2", "E3" , "E4" , "E5" , "E6" , "E7" , "E8" , "E9" , "E10" , "EJ", "EQ", "EK");
//paus
cartas.push("PA", "P2", "P3", "P4", "P5", "P6", "P7", "P8", "P9", "P10", "PJ", "PQ", "PK");
//copas
cartas.push("CA", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "C10", "CJ", "CQ", "CK");
//ouros
cartas.push("OA", "O2", "O3", "O4", "O5", "O6", "O7", "O8", "O9", "O10", "OJ", "OQ", "OK");
//embaralha cartas:
cartas.sort(embaralhar);
var minhasCartas:Array = ['C3','O5','P2','PA','E3','C7','EK'];
minhasCartas = cartas ;
trace(minhasCartas);
function organizar_mao(cartaA, cartaB):int {
 var peso = {};
 peso['P'] = 1;
 peso['O'] = 2;
 peso['E'] = 3;
 peso['C'] = 4;

 peso['2'] = 2;
 peso['3'] = 3;
 peso['4'] = 4;
 peso['5'] = 5;
 peso['6'] = 6;
 peso['7'] = 7;
 peso['8'] = 8;
 peso['9'] = 9;
 peso['10']=10;
 peso['J'] =11;
 peso['Q'] =12;
 peso['K'] =13;
 peso['A'] =14;

 var naipeA = cartaA.substring(0,1);
 var naipeB = cartaB.substring(0,1);
 var valorA = cartaA.substring(1,cartaA.length);
 var valorB = cartaB.substring(1,cartaB.length);

if (peso[naipeA] < peso[naipeB]){ 
   	return -1; 
}  else if (peso[naipeA] > peso[naipeB]){ 
   	return 1; 

} else  {
	if(peso[valorA] < peso[valorB]){			
		return -1
	}else if(peso[valorA] > peso[valorB]){
		return 1;			
	}else {
		return 0;
	}
}   

}
minhasCartas.sort(organizar_mao)
trace(minhasCartas);

O script tava certo, só faltava aspas na primeira linha.

 

Eu só modifiquei para ficar também em ordem crescente.

 

 

Eu vi nos exemplos da adobe usando expressões regulares não entendi nada...

 

E também fiz uma função para embaralhar( retorna um inteiro(-1, 0 ou 1))

 

O2,C3,O5,E4,O7,CK,E2,E8,E3,EK,P4,EQ,O4,E10,P2,C7,CA,P7,P6,P5,P10,PK,EA,C2,PQ,P9,PA,O8,E7,PJ,OK,C6,CJ,C8,E6,O6,P8,C10,EJ,OA,E9,O3,C5,C9,CQ,E5,OJ,O9,O10,OQ,C4,P3

P2,P3,P4,P5,P6,P7,P8,P9,P10,PJ,PQ,PK,PA,O2,O3,O4,O5,O6,O7,O8,O9,O10,OJ,OQ,OK,OA,E2,E3,E4,E5,E6,E7,E8,E9,E10,EJ,EQ,EK,EA,C2,C3,C4,C5,C6,C7,C8,C9,C10,CJ,CQ,CK,CA

 

 

 

Deu certo, obrigado.

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.