Código
// Generar array de cartas: Cartas = []; Nro = 0; do { Nro++; Cartas[Cartas.length] = "P"+Nro; Cartas[Cartas.length] = "T"+Nro; Cartas[Cartas.length] = "C"+Nro; Cartas[Cartas.length] = "D"+Nro; } while (Nro<13); // // Ordenarlas al azar: Posicion1aReubicarse = Cartas.length-1; while (Posicion1aReubicarse>0) { Posicion2aReubicarse = random(Posicion1aReubicarse+1); // trace (Cartas[Posicion1aReubicarse]+" se intercambiará con "+Cartas[Posicion2aReubicarse]); SaveDeElemento1 = Cartas[Posicion1aReubicarse]; Cartas[Posicion1aReubicarse] = Cartas[Posicion2aReubicarse]; Cartas[Posicion2aReubicarse] = SaveDeElemento1; Posicion1aReubicarse--; } // // Dar 2 a jugadores: SiguienteNroDeCarta = 0; CartasDeHumano = []; // Para facilitar las sumas: NumerosDeHumano = []; CartasDeIA = []; do { CartasDeHumano[CartasDeHumano.length] = Cartas[SiguienteNroDeCarta]; NumerosDeHumano[NumerosDeHumano.length] = Number(Cartas[SiguienteNroDeCarta].substring(1, Cartas[SiguienteNroDeCarta].length)); CartasDeIA[CartasDeIA.length] = Cartas[SiguienteNroDeCarta+1]; SiguienteNroDeCarta = SiguienteNroDeCarta+2; } while (SiguienteNroDeCarta<4); Mensaje = "Has recibido "+CartasDeHumano[CartasDeHumano.length-2]+" y "+CartasDeHumano[CartasDeHumano.length-1]; // // Muestra las cartas del humano y las suma, // usado ahora y al tomar carta: function ActualizarDeHumano () { LargoDeEspacios = (512-100*CartasDeHumano.length)/(CartasDeHumano.length+1); SumaDeHumano = 0; // Marca si tiene algún 1: Uno = "No"; if (LargoDeEspacios>0) { trace ("LargoDeEspacios: "+LargoDeEspacios); NroDeCartaaMostrar = 0; do { NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMostrar]; attachMovie("sCarta", NombreDeCarta, NroDeCartaaMostrar); setProperty (NombreDeCarta, _x, LargoDeEspacios*(NroDeCartaaMostrar+1)+NroDeCartaaMostrar*100+50); trace (getProperty(NombreDeCarta, _x)); setProperty (NombreDeCarta, _y, 192); // Para el interior de la carta: AgregarSignos(); SumaDeHumano = SumaDeHumano+Math.min(10, NumerosDeHumano[NroDeCartaaMostrar]); if (NumerosDeHumano[NroDeCartaaMostrar] == 1) { Uno = "Sí"; } NroDeCartaaMostrar++; } while (NroDeCartaaMostrar<CartasDeHumano.length); } else { // La 1er carta irá en x 50 y la última en 512-50, // justo en los extremos de la pantalla, // así que un largo de 50 de un lado y del otro está ocupado, // por eso se recalcula LargoDeEspacios con espacio-100 y... // 2 cartas menos: LargoDeEspacios = 412/(CartasDeHumano.length-1); trace ("LargoDeEspacios: "+LargoDeEspacios); // Para las siguientes hasta la última (no incluida): NroDeCartaaMostrar = 0; do { NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMostrar]; attachMovie("sCarta", NombreDeCarta, NroDeCartaaMostrar); // setProperty (NombreDeCarta, _x, (NroDeCartaaMostrar+1)*LargoDeEspacios); setProperty (NombreDeCarta, _x, LargoDeEspacios*NroDeCartaaMostrar+50); trace (getProperty(NombreDeCarta, _x)); setProperty (NombreDeCarta, _y, 192); // Para el interior de la carta: AgregarSignos(); SumaDeHumano = SumaDeHumano+Math.min(10, NumerosDeHumano[NroDeCartaaMostrar]); if (NumerosDeHumano[NroDeCartaaMostrar] == 1) { Uno = "Sí"; } NroDeCartaaMostrar++; } while (NroDeCartaaMostrar<CartasDeHumano.length); } if (Uno == "Sí") { PosibleSumaDeHumano = SumaDeHumano+10; if (PosibleSumaDeHumano < 22) { SumaDeHumano = PosibleSumaDeHumano; } } Mensaje = Mensaje+". Tu suma es "+SumaDeHumano+". ¿Quieres otra carta?"; Mensaje = Mensaje+"\nIzquierda: No.\tDerecha: Sí."; } // // Usada por MostrarCartasDeHumano en diferentes casos: function AgregarSignos () { Tipo = CartasDeHumano[NroDeCartaaMostrar].charat(0); if (Tipo == "T") { Tipo = "Trébol"; AnchoInicialDeSigno = 56.2; AlturaInicialDeSigno = 57.3; } else if (Tipo == "D") { Tipo = "Diamante"; AnchoInicialDeSigno = 49.5; AlturaInicialDeSigno = 59.5; } else if (Tipo == "P") { Tipo = "Pica"; AnchoInicialDeSigno = 54.7; AlturaInicialDeSigno = 59.8; } else { Tipo = "Corazón"; AnchoInicialDeSigno = 58.9; AlturaInicialDeSigno = 57.4; } // En las cartas hay un objeto llamado Signo0, // en la esquina superior izquierda, // que muestra el número. // El nombre es para facilitar el chequeo de que... // las imágenes agregadas no tapen otras. // Asignarle el número que se mostrará: set (NombreDeCarta+".Signo0.Numero", NumerosDeHumano[NroDeCartaaMostrar]); // Para agregar signos: SignosAgregados = 0; AnchoDeSigno = AnchoInicialDeSigno; AlturaDeSigno = AlturaInicialDeSigno; Escala = 100; do { SignosAgregados++; NombreDeSigno = "Signo"+SignosAgregados; RutaDelSignoAgregado = NombreDeCarta+"."+NombreDeSigno; eval(NombreDeCarta).attachMovie("s"+Tipo, NombreDeSigno, SignosAgregados); setProperty (RutaDelSignoAgregado, _x, -50+Math.random()*(100-AnchoDeSigno)); setProperty (RutaDelSignoAgregado, _y, -75+Math.random()*(150-AlturaDeSigno)); setProperty (RutaDelSignoAgregado, _xscale, Escala); setProperty (RutaDelSignoAgregado, _yscale, Escala); setProperty (RutaDelSignoAgregado+".Fondo", _visible, false); // Se verá si toca alguno anterior: NroDelSignoaChequear = 0; 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 = Escala/1.001; AnchoDeSigno = AnchoInicialDeSigno*Escala/100; AlturaDeSigno = AlturaInicialDeSigno*Escala/100; NroDelSignoaChequear = SignosAgregados; } NroDelSignoaChequear++; } } while (SignosAgregados<NumerosDeHumano[NroDeCartaaMostrar]); } // ActualizarDeHumano(); // // Tomar carta sí o no. Un objeto en F2 repite esto: function TomarCartaSoN () { // Si se presiona izquierda: if (Key.isDown(37)) { Mensaje = "Tu suma es..... "+SumaDeHumano; Mensaje = Mensaje+"\nLa del rival es "+SumaDeIA; if (SumaDeHumano>21 or SumaDeHumano<SumaDeIA) { Mensaje = Mensaje+"\n¡Perdiste!"; } else if (SumaDeHumano>SumaDeIA) { Mensaje = Mensaje+"\n¡Ganaste!"; } else if (SumaDeHumano == SumaDeIA) { Mensaje = Mensaje+"\n¡Empate!"; } } else if (Key.isDown(39)) { SiguienteNroDeCarta++; CartasDeHumano[CartasDeHumano.length] = Cartas[SiguienteNroDeCarta]; NumerosDeHumano[NumerosDeHumano.length] = Number(Cartas[SiguienteNroDeCarta].substring(1, Cartas[SiguienteNroDeCarta].length)); Mensaje = "Has recibido "+CartasDeHumano[CartasDeHumano.length-1]; ActualizarDeHumano(); } } // // Calcular suma de IA: ValorDeCartaDeIA0 = Math.min(10, Number(CartasDeIA[0].substring(1, CartasDeIA[0].length))); ValorDeCartaDeIA1 = Math.min(10, Number(CartasDeIA[1].substring(1, CartasDeIA[1].length))); if (ValorDeCartaDeIA0 == 1) { SumaDeIA = 11+ValorDeCartaDeIA1; } else if (ValorDeCartaDeIA1 == 1) { SumaDeIA = ValorDeCartaDeIA0+11; } else { SumaDeIA = ValorDeCartaDeIA0+ValorDeCartaDeIA1; }
Lo que quiero mejorar es que cuando el jugador pide otra carta, se vuelven a agregar las cartas que ya estaban en pantalla (y se vuelven a agregar los signos al azar en ellas), cuando simplemente deberían moverse las cartas existentes (sus signos se moverían también al hacer eso, sin necesidad de reagregarlos) y agregarse una carta (y sus signos al azar).
Lo intenté pero me líe:
Código
(...) // Dar 2 a jugadores: SiguienteNroDeCarta = 0; CartasDeHumano = []; // Para facilitar las sumas: NumerosDeHumano = []; CartasDeIA = []; do { CartasDeHumano[CartasDeHumano.length] = Cartas[SiguienteNroDeCarta]; NumerosDeHumano[NumerosDeHumano.length] = Number(Cartas[SiguienteNroDeCarta].substring(1, Cartas[SiguienteNroDeCarta].length)); SiguienteNroDeCarta++; CartasDeIA[CartasDeIA.length] = Cartas[SiguienteNroDeCarta+1]; SiguienteNroDeCarta = SiguienteNroDeCarta+2; } while (SiguienteNroDeCarta<4); Mensaje = "Has recibido "+CartasDeHumano[CartasDeHumano.length-2]+" y "+CartasDeHumano[CartasDeHumano.length-1]; function HumanoObtieneCarta () { CartasDeHumano[CartasDeHumano.length] = Cartas[SiguienteNroDeCarta]; NumerosDeHumano[NumerosDeHumano.length] = Number(Cartas[SiguienteNroDeCarta].substring(1, Cartas[SiguienteNroDeCarta].length)); Mensaje = "Has recibido "+CartasDeHumano[CartasDeHumano.length-1]; NombreDeCarta = "CartaDeHumano"+CartasDeHumano[CartasDeHumano.length-1]; attachMovie("sCarta", NombreDeCarta, CartasDeHumano.length-1); setProperty (NombreDeCarta, _y, 192); // Para el interior de la carta: AgregarSignos(); SumaDeHumano = SumaDeHumano+Math.min(10, NumerosDeHumano[NumerosDeHumano.length-1]); if (NumerosDeHumano[NumerosDeHumano.length-1] == 1) { Uno = "Sí"; } ActualizarDeHumano(); DistribuirCartasDeHumano(); SiguienteNroDeCarta++; } function DistribuirCartasDeHumano () { LargoDeEspacios = (512-100*CartasDeHumano.length)/(CartasDeHumano.length+1); SumaDeHumano = 0; // Marca si tiene algún 1: Uno = "No"; if (LargoDeEspacios>0) { trace ("LargoDeEspacios: "+LargoDeEspacios); NroDeCartaaMover = 0; do { NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMover]; setProperty (NombreDeCarta, _x, LargoDeEspacios*(NroDeCartaaMover+1)+NroDeCartaaMover*100+50); NroDeCartaaMover++; } while (NroDeCartaaMover<CartasDeHumano.length); } else { // La 1er carta irá en x 50 y la última en 512-50, // justo en los extremos de la pantalla, // así que un largo de 50 de un lado y del otro está ocupado, // por eso se recalcula LargoDeEspacios con espacio-100 y... // 2 cartas menos: LargoDeEspacios = 412/(CartasDeHumano.length-1); trace ("LargoDeEspacios: "+LargoDeEspacios); // Para las siguientes hasta la última (no incluida): NroDeCartaaMover = 0; do { NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMover]; attachMovie("sCarta", NombreDeCarta, NroDeCartaaMover); // setProperty (NombreDeCarta, _x, (NroDeCartaaMover+1)*LargoDeEspacios); setProperty (NombreDeCarta, _x, LargoDeEspacios*NroDeCartaaMover+50); trace (getProperty(NombreDeCarta, _x)); setProperty (NombreDeCarta, _y, 192); // Para el interior de la carta: AgregarSignos(); SumaDeHumano = SumaDeHumano+Math.min(10, NumerosDeHumano[NroDeCartaaMover]); if (NumerosDeHumano[NroDeCartaaMover] == 1) { Uno = "Sí"; } NroDeCartaaMover++; } while (NroDeCartaaMover<CartasDeHumano.length); } if (Uno == "Sí") { PosibleSumaDeHumano = SumaDeHumano+10; if (PosibleSumaDeHumano < 22) { SumaDeHumano = PosibleSumaDeHumano; } } Mensaje = Mensaje+". Tu suma es "+SumaDeHumano+". ¿Quieres otra carta?"; Mensaje = Mensaje+"\nIzquierda: No.\tDerecha: Sí."; } // (...) // Tomar carta sí o no. Un objeto en F2 repite esto: function TomarCartaSoN () { // Si se presiona izquierda: if (Key.isDown(37)) { Mensaje = "Tu suma es..... "+SumaDeHumano; Mensaje = Mensaje+"\nLa del rival es "+SumaDeIA; if (SumaDeHumano>21 or SumaDeHumano<SumaDeIA) { Mensaje = Mensaje+"\n¡Perdiste!"; } else if (SumaDeHumano>SumaDeIA) { Mensaje = Mensaje+"\n¡Ganaste!"; } else if (SumaDeHumano == SumaDeIA) { Mensaje = Mensaje+"\n¡Empate!"; } } else if (Key.isDown(39)) { } }
Seguiré intentando...
Edit:
Se me ocurrió empezar a modificar desde el final, ya que es lo que menos modificaría: Modificar el final no modifica lo anterior pero modificar algo anterior modifica eso y lo posterior.
Logré que se inserten cartas con una función independiente...
Los nombres de las cartas eran como CartaDeHumanoT3, los simplifiqué a CartaDeHumano0, 1, etc.
Voy bien, creo, estas son cosas que debo hacer:
- Continuar separando Actualizar. Las cartas ya se insertan, sobra el x, debe acomodarse el y. Ahora deben distribuirse todas.
- Ver que la suma esté bien.
- Lo que sucede al tomar carta debe suceder al inicio cuando se dan.





Autor



En línea
