Ignoren el hecho de que hay picas en vez de tréboles y corazones, eso lo intento arreglar luego.

Explico qué pasa, hasta donde entiendo:
En cada carta, que mide 100x150 pixeles, se deben colocar una cantidad al azar de signos. En la imagen fue 7 y 10.
Se quiere que los signos dejen un margen de al menos 1/4 de su ancho y alto, o sea, que no estén demasiado arriba, ni demasiado a la izquierda, etc.
Un signo se coloca al azar para cumplir eso.
Luego se coloca otro, y se chequea si quedó tocando algún anterior, en cuyo caso su tamaño se reducirá y se colocará en otro lado, y este proceso se repetirá hasta que todo signo necesario haya sido colocado y no haya quedado tocando a otro.
Algo matemático me está fallando en esa parte, los signos se colocan, sin que queden tocándose, pero se colocan fuera de las cartas

Lo relevante del código supongo que está desde que dice SignosAgregados = 0;
y probablemente el error esté en esto
setProperty (RutaDelSignoAgregado, _x, -50+CuartoAnchoDeSigno+Math.random()*(100-AnchoDeSigno-CuartoAnchoDeSigno*2));
setProperty (RutaDelSignoAgregado, _y, -75+CuartaAlturaDeSigno+Math.random()*(150-AlturaDeSigno-CuartaAlturaDeSigno*2));
La coordenada 0, 0 en cada carta está en su centro, así que -50, -75 es su esquina superior izquierda.
O sea, cada carta es como un espacio propio, con coordenadas propias.
function MostrarCartasDeHumano () {
NroDeCartaaMostrar = 0;
if (CartasDeHumano.length % 2 == 0) {
PosicionDe0 = 256 - CartasDeHumano.length-1 * 50 - 25;
} else {
PosicionDe0 = 256 - CartasDeHumano.length * 50;
}
do {
NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMostrar];
attachMovie ("sCarta", NombreDeCarta, NroDeCartaaMostrar);
setProperty (NombreDeCarta, _x, PosicionDe0+(NroDeCartaaMostrar)*150);
setProperty (NombreDeCarta, _y, 192);
// Para el interior de la carta:
Tipo = CartasDeHumano[NroDeCartaaMostrar].charat(0);
if (Tipo == "T") {
Tipo = "tréboles";
} else if (Tipo == "D") {
Tipo = "diamantes";
} else if (Tipo == "P") {
Tipo = "picas";
} else {
Tipo = "corazones";
}
set (NombreDeCarta+".Text", NumerosDeHumano[NroDeCartaaMostrar]+"\n"+Tipo);
SignosAgregados = 0;
Escala = 100;
AnchoDeSigno = 36.5;
AlturaDeSigno = 41.5;
CuartoAnchoDeSigno = AnchoDeSigno/4;
CuartaAlturaDeSigno = AlturaDeSigno/4;
do {
SignosAgregados++;
NombreDeSigno = "Signo"+SignosAgregados;
RutaDelSignoAgregado = NombreDeCarta+"."+NombreDeSigno;
eval(NombreDeCarta).attachMovie ("sPica", NombreDeSigno, SignosAgregados);
setProperty (RutaDelSignoAgregado, _x, -50+CuartoAnchoDeSigno+Math.random()*(100-AnchoDeSigno-CuartoAnchoDeSigno*2));
setProperty (RutaDelSignoAgregado, _y, -75+CuartaAlturaDeSigno+Math.random()*(150-AlturaDeSigno-CuartaAlturaDeSigno*2));
// Se verá si toca alguno anterior:
NroDelSignoaChequear = 1;
ParteDeRutaaChequear = NombreDeCarta+".Signo";
while (NroDelSignoaChequear < SignosAgregados) {
if (eval(RutaDelSignoAgregado).hitTest(eval(ParteDeRutaaChequear+NroDelSignoaChequear)) == true) {
trace("CONTACTO");
// Toca uno, se recolocará, más chico:
SignosAgregados--;
Escala--;
AnchoDeSigno = 36.5*Escala/100;
AlturaDeSigno = 41.5*Escala/100;
CuartoAnchoDeSigno = AnchoDeSigno/4;
CuartaAlturaDeSigno = AlturaDeSigno/4;
NroDelSignoaChequear = SignosAgregados;
}
NroDelSignoaChequear++;
}
} while (SignosAgregados < NumerosDeHumano[NroDeCartaaMostrar]);
NroDeCartaaMostrar++;
} while (NroDeCartaaMostrar < CartasDeHumano.length);
}El 1er signo se coloca en
setProperty (RutaDelSignoAgregado, _x, -50+CuartoAnchoDeSigno+Math.random()*(100-AnchoDeSigno-CuartoAnchoDeSigno*2));
setProperty (RutaDelSignoAgregado, _y, -75+CuartaAlturaDeSigno+Math.random()*(150-AlturaDeSigno-CuartaAlturaDeSigno*2));
O sea, su coordenada X es
Mínimo: -50+CuartoAnchoDeSigno+0*(100-AnchoDeSigno-CuartoAnchoDeSigno*2);
Significa: En el extremo izquierdo de la carta (-50), pero le sumamos 1/4 del ancho del signo, entonces queda con un poco de márgen.
Supongamos que el ancho del signo es 36:
-50+9 = -41
La coordenada 0, 0 del signo está en su esquina superior izquierda, así que está dejando un márgen de 9.
Máximo: -50+9+1*(100-36-9*2);
-41+1*(100-36-18);
-41+1*(100-54);
-41+1*(46);
4
Esto parece un error, el máximo debería ser 100-36-9 creo...
Intentaré corregir esa fórmula, pero no entiendo qué hace que los signos se coloquen fuera. Si dependiera sólo de esa fórmula, difícil que se colocaran muy a la derecha del centro.
Edit: Me di cuenta que me faltaba escalar, pensé que las imágenes no se estaban reduciendo porque no tenían necesidad de reducirse tanto, lo dudé y me di cuenta.

Me faltaba esto:
setProperty (RutaDelSignoAgregado, _xscale, Escala);
setProperty (RutaDelSignoAgregado, _yscale, Escala);
Ahora mi duda es:
¿Por qué al hacer esta cuenta me dió 4?
-50+9+1*(100-36-9*2);
¿hice mal la cuenta?
¿cual sería la fórmula correcta para que el mínimo sea -50+CuartoAnchoDeSigno
y el máximo 100-CuartoAnchoDeSigno-AnchoDeSigno?
¿es así como debe ser, no?
Edit2: Creo que ya entendí, me confundió ese 100, pero la coordenada en el extremo derecho de la carta es 50, así que el máximo debe ser 50-36-9, que es... 50-45, y había sumado 1 a 41 pero nada que ver, el 1 estaba multiplicando.