Ir para conteúdo

Arquivado

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

marcos.cardoso

[Resolvido] Algoritmo

Recommended Posts

Bom dia,

 

seguinte, estou quebrando a cabeça aqui para fazer alguns objetos se posicionarem de forma aleatória no stage. No entanto, eles não podem ficar em qualquer lugar do palco. Existem posições definidas para eles.

Esses objetos são numerados. Então eu tenho dez objetos (de 1 a 10), cada um em sua posição. A função que vai redistribuí-los pelo palco deve colocar cada um no lugar de outro, ficando estes em linha.

Preciso fazer um algoritmo que faça isso pra mim, ou não (se alguém tiver outra sugestão).

O código que to usando é o seguinte:

// vetor que vai armazenar os números gerados aleatóriamente
var arr:Array = new Array();
while (arr.length <= 10) {
        // laço para preencher o vetor
	for (i = 0; i <= 10; i++) {
		aux = random(10);
                // laço para verificar se o número aleatório está no vetor
		for (j = 0; j <= arr.length; j++) {
			if (aux != arr[j]) {
                                // caso o numero não esteja no vetor, inserí-lo
				arr.push(aux);
			}
		}
	}
	trace("Array: " + arr);
}

Se alguém puder dar um dica... agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Melhorei um pouco essa logica e já to quase conseguindo. Se alguém puder ajudar

 

var arr:Array = new Array();
randomiza();
function randomiza() {
	for (i = 0; i <= 4; i++) {
		aux = random(6);
		trace("Aux: "+aux);
		if (aux == 0) {
			i -= 1;
		} else {
			if (arr.length == 0) {
				trace("arr.length == 0. " + aux + " inserido");
				arr.push(aux);
			} else {
				number = verifica(aux);
				//trace("Number: " + number + " Aux: " + aux);
				arr.push(number);
			}
		}
	}
	trace("Array: " + arr);
}

function verifica(num:Number):Number {
	var ver:Boolean;
	for (j = 0; j <= arr.length; j++) {
		if (arr[j] == num) {
			ver = true;
		} else {
			ver = false;
		}
	}
	if (ver == true) {
		trace(num + " repetido");
	} else if (ver == false) {
		return(num);
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora sim, consegui fazer

var arr:Array = new Array();
randomiza();
// funcao que gera números aleatórios e insere em vetor
function randomiza() {
	
	for (i = 0; i <= 29; i++) {
		aux = random(31);
		if (aux == 0) {
			i -= 1;
		} else {
			if (arr.length == 0) {
				arr.push(aux);
			} else {
				number = verifica(aux);
				if (number == undefined) {
					i -= 1;
				} else {
					arr.push(number);
				}
			}
		}
	}
	trace("Array: " + arr);
}
// funcao que verifica se o numero já está no vetor
function verifica(num:Number):Number {
	
	var ver:Boolean;
	
	for (j = 0; j <= arr.length; j++) {
		if (arr[j] == num) {
			ver = true;
			return;
		} else {
			ver = false;
		}
	}
	
	if (ver == false) {
		return(num);
	}
}

Mas agora eu preciso adaptar essa logica de forma que ela se relacione com as posições x e y dos objetos que tenho no palco.

 

Pensei no seguinte: criar um vetor com o nome dos objetos do palco e um vetor com as posições que quero e então criar uma função que percorra esse vetor e enquanto isso também percorre o vetor com os meus números no outro vetor. Assim atribou à posição x do vetor de objetos a mesma posição do vetor com as posições relacionado com o vetor dos números aleatórios que criei.

Acho q assim da certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, consegui também, mas agora surgiu um problema. Eu só consigo chamar essa função um vez, porque a partir da segunda trava tudo, acho que é coisa de memória.

 

a função que atribui as posições é a seguinte:

 

function sort() {
	for (i = 0; i <= 29; i++) {
		xis = arr[i];
		numero[i]._x = positionx[xis];
		numero[i]._y = positiony[xis];
	}
	arr = null;
}
se alguem tiver alguma idéia sobre esse travamento...

obrigado, desde já

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.