elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ¿Cómo lo hago en partes para no entreverarme?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cómo lo hago en partes para no entreverarme?  (Leído 967 veces)
Tachikomaia


Conectado Conectado

Mensajes: 1.743


Hackentifiko!


Ver Perfil
¿Cómo lo hago en partes para no entreverarme?
« en: 19 Marzo 2026, 05:50 am »

Tengo esto que funciona bien:
Código
  1. // Generar array de cartas:
  2. Cartas = [];
  3. Nro = 0;
  4. do {
  5. Nro++;
  6. Cartas[Cartas.length] = "P"+Nro;
  7. Cartas[Cartas.length] = "T"+Nro;
  8. Cartas[Cartas.length] = "C"+Nro;
  9. Cartas[Cartas.length] = "D"+Nro;
  10. } while (Nro<13);
  11. //
  12. // Ordenarlas al azar:
  13. Posicion1aReubicarse = Cartas.length-1;
  14. while (Posicion1aReubicarse>0) {
  15. Posicion2aReubicarse = random(Posicion1aReubicarse+1);
  16. // trace (Cartas[Posicion1aReubicarse]+" se intercambiará con "+Cartas[Posicion2aReubicarse]);
  17. SaveDeElemento1 = Cartas[Posicion1aReubicarse];
  18. Cartas[Posicion1aReubicarse] = Cartas[Posicion2aReubicarse];
  19. Cartas[Posicion2aReubicarse] = SaveDeElemento1;
  20. Posicion1aReubicarse--;
  21. }
  22. //
  23. // Dar 2 a jugadores:
  24. SiguienteNroDeCarta = 0;
  25. CartasDeHumano = [];
  26. // Para facilitar las sumas:
  27. NumerosDeHumano = [];
  28. CartasDeIA = [];
  29. do {
  30. CartasDeHumano[CartasDeHumano.length] = Cartas[SiguienteNroDeCarta];
  31. NumerosDeHumano[NumerosDeHumano.length] = Number(Cartas[SiguienteNroDeCarta].substring(1, Cartas[SiguienteNroDeCarta].length));
  32. CartasDeIA[CartasDeIA.length] = Cartas[SiguienteNroDeCarta+1];
  33. SiguienteNroDeCarta = SiguienteNroDeCarta+2;
  34. } while (SiguienteNroDeCarta<4);
  35. Mensaje = "Has recibido "+CartasDeHumano[CartasDeHumano.length-2]+" y "+CartasDeHumano[CartasDeHumano.length-1];
  36. //
  37. // Muestra las cartas del humano y las suma,
  38. // usado ahora y al tomar carta:
  39. function ActualizarDeHumano () {
  40. LargoDeEspacios = (512-100*CartasDeHumano.length)/(CartasDeHumano.length+1);
  41. SumaDeHumano = 0;
  42. // Marca si tiene algún 1:
  43. Uno = "No";
  44. if (LargoDeEspacios>0) {
  45. trace ("LargoDeEspacios: "+LargoDeEspacios);
  46. NroDeCartaaMostrar = 0;
  47. do {
  48. NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMostrar];
  49. attachMovie("sCarta", NombreDeCarta, NroDeCartaaMostrar);
  50. setProperty (NombreDeCarta, _x, LargoDeEspacios*(NroDeCartaaMostrar+1)+NroDeCartaaMostrar*100+50);
  51. trace (getProperty(NombreDeCarta, _x));
  52. setProperty (NombreDeCarta, _y, 192);
  53. // Para el interior de la carta:
  54. AgregarSignos();
  55. SumaDeHumano = SumaDeHumano+Math.min(10, NumerosDeHumano[NroDeCartaaMostrar]);
  56. if (NumerosDeHumano[NroDeCartaaMostrar] == 1) {
  57. Uno = "Sí";
  58. }
  59. NroDeCartaaMostrar++;
  60. } while (NroDeCartaaMostrar<CartasDeHumano.length);
  61. } else {
  62. // La 1er carta irá en x 50 y la última en 512-50,
  63. // justo en los extremos de la pantalla,
  64. // así que un largo de 50 de un lado y del otro está ocupado,
  65. // por eso se recalcula LargoDeEspacios con espacio-100 y...
  66. // 2 cartas menos:
  67. LargoDeEspacios = 412/(CartasDeHumano.length-1);
  68. trace ("LargoDeEspacios: "+LargoDeEspacios);
  69. // Para las siguientes hasta la última (no incluida):
  70. NroDeCartaaMostrar = 0;
  71. do {
  72. NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMostrar];
  73. attachMovie("sCarta", NombreDeCarta, NroDeCartaaMostrar);
  74. // setProperty (NombreDeCarta, _x, (NroDeCartaaMostrar+1)*LargoDeEspacios);
  75. setProperty (NombreDeCarta, _x, LargoDeEspacios*NroDeCartaaMostrar+50);
  76. trace (getProperty(NombreDeCarta, _x));
  77. setProperty (NombreDeCarta, _y, 192);
  78. // Para el interior de la carta:
  79. AgregarSignos();
  80. SumaDeHumano = SumaDeHumano+Math.min(10, NumerosDeHumano[NroDeCartaaMostrar]);
  81. if (NumerosDeHumano[NroDeCartaaMostrar] == 1) {
  82. Uno = "Sí";
  83. }
  84. NroDeCartaaMostrar++;
  85. } while (NroDeCartaaMostrar<CartasDeHumano.length);
  86. }
  87. if (Uno == "Sí") {
  88. PosibleSumaDeHumano = SumaDeHumano+10;
  89. if (PosibleSumaDeHumano < 22) {
  90. SumaDeHumano = PosibleSumaDeHumano;
  91. }
  92. }
  93. Mensaje = Mensaje+". Tu suma es "+SumaDeHumano+". ¿Quieres otra carta?";
  94. Mensaje = Mensaje+"\nIzquierda: No.\tDerecha: Sí.";
  95. }
  96. //
  97. // Usada por MostrarCartasDeHumano en diferentes casos:
  98. function AgregarSignos () {
  99. Tipo = CartasDeHumano[NroDeCartaaMostrar].charat(0);
  100. if (Tipo == "T") {
  101. Tipo = "Trébol";
  102. AnchoInicialDeSigno = 56.2;
  103. AlturaInicialDeSigno = 57.3;
  104. } else if (Tipo == "D") {
  105. Tipo = "Diamante";
  106. AnchoInicialDeSigno = 49.5;
  107. AlturaInicialDeSigno = 59.5;
  108. } else if (Tipo == "P") {
  109. Tipo = "Pica";
  110. AnchoInicialDeSigno = 54.7;
  111. AlturaInicialDeSigno = 59.8;
  112. } else {
  113. Tipo = "Corazón";
  114. AnchoInicialDeSigno = 58.9;
  115. AlturaInicialDeSigno = 57.4;
  116. }
  117. // En las cartas hay un objeto llamado Signo0,
  118. // en la esquina superior izquierda,
  119. // que muestra el número.
  120. // El nombre es para facilitar el chequeo de que...
  121. // las imágenes agregadas no tapen otras.
  122. // Asignarle el número que se mostrará:
  123. set (NombreDeCarta+".Signo0.Numero", NumerosDeHumano[NroDeCartaaMostrar]);
  124. // Para agregar signos:
  125. SignosAgregados = 0;
  126. AnchoDeSigno = AnchoInicialDeSigno;
  127. AlturaDeSigno = AlturaInicialDeSigno;
  128. Escala = 100;
  129. do {
  130. SignosAgregados++;
  131. NombreDeSigno = "Signo"+SignosAgregados;
  132. RutaDelSignoAgregado = NombreDeCarta+"."+NombreDeSigno;
  133. eval(NombreDeCarta).attachMovie("s"+Tipo, NombreDeSigno, SignosAgregados);
  134. setProperty (RutaDelSignoAgregado, _x, -50+Math.random()*(100-AnchoDeSigno));
  135. setProperty (RutaDelSignoAgregado, _y, -75+Math.random()*(150-AlturaDeSigno));
  136. setProperty (RutaDelSignoAgregado, _xscale, Escala);
  137. setProperty (RutaDelSignoAgregado, _yscale, Escala);
  138. setProperty (RutaDelSignoAgregado+".Fondo", _visible, false);
  139. // Se verá si toca alguno anterior:
  140. NroDelSignoaChequear = 0;
  141. ParteDeRutaaChequear = NombreDeCarta+".Signo";
  142. while (NroDelSignoaChequear<SignosAgregados) {
  143. if (eval(RutaDelSignoAgregado).hitTest(eval(ParteDeRutaaChequear+NroDelSignoaChequear)) == true) {
  144. // trace("CONTACTO");
  145. // Toca uno, se recolocará, más chico:
  146. SignosAgregados--;
  147. Escala = Escala/1.001;
  148. AnchoDeSigno = AnchoInicialDeSigno*Escala/100;
  149. AlturaDeSigno = AlturaInicialDeSigno*Escala/100;
  150. NroDelSignoaChequear = SignosAgregados;
  151. }
  152. NroDelSignoaChequear++;
  153. }
  154. } while (SignosAgregados<NumerosDeHumano[NroDeCartaaMostrar]);
  155. }
  156. //
  157. ActualizarDeHumano();
  158. //
  159. // Tomar carta sí o no. Un objeto en F2 repite esto:
  160. function TomarCartaSoN () {
  161. // Si se presiona izquierda:
  162. if (Key.isDown(37)) {
  163. Mensaje = "Tu suma es..... "+SumaDeHumano;
  164. Mensaje = Mensaje+"\nLa del rival es "+SumaDeIA;
  165. if (SumaDeHumano>21 or SumaDeHumano<SumaDeIA) {
  166. Mensaje = Mensaje+"\n¡Perdiste!";
  167. } else if (SumaDeHumano>SumaDeIA) {
  168. Mensaje = Mensaje+"\n¡Ganaste!";
  169. } else if (SumaDeHumano == SumaDeIA) {
  170. Mensaje = Mensaje+"\n¡Empate!";
  171. }
  172. } else if (Key.isDown(39)) {
  173. SiguienteNroDeCarta++;
  174. CartasDeHumano[CartasDeHumano.length] = Cartas[SiguienteNroDeCarta];
  175. NumerosDeHumano[NumerosDeHumano.length] = Number(Cartas[SiguienteNroDeCarta].substring(1, Cartas[SiguienteNroDeCarta].length));
  176. Mensaje = "Has recibido "+CartasDeHumano[CartasDeHumano.length-1];
  177. ActualizarDeHumano();
  178. }
  179. }
  180. //
  181. // Calcular suma de IA:
  182. ValorDeCartaDeIA0 = Math.min(10, Number(CartasDeIA[0].substring(1, CartasDeIA[0].length)));
  183. ValorDeCartaDeIA1 = Math.min(10, Number(CartasDeIA[1].substring(1, CartasDeIA[1].length)));
  184. if (ValorDeCartaDeIA0 == 1) {
  185. SumaDeIA = 11+ValorDeCartaDeIA1;
  186. } else if (ValorDeCartaDeIA1 == 1) {
  187. SumaDeIA = ValorDeCartaDeIA0+11;
  188. } else {
  189. SumaDeIA = ValorDeCartaDeIA0+ValorDeCartaDeIA1;
  190. }

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
  1. (...)
  2. // Dar 2 a jugadores:
  3. SiguienteNroDeCarta = 0;
  4. CartasDeHumano = [];
  5. // Para facilitar las sumas:
  6. NumerosDeHumano = [];
  7. CartasDeIA = [];
  8. do {
  9. CartasDeHumano[CartasDeHumano.length] = Cartas[SiguienteNroDeCarta];
  10. NumerosDeHumano[NumerosDeHumano.length] = Number(Cartas[SiguienteNroDeCarta].substring(1, Cartas[SiguienteNroDeCarta].length));
  11. SiguienteNroDeCarta++;
  12.  
  13. CartasDeIA[CartasDeIA.length] = Cartas[SiguienteNroDeCarta+1];
  14. SiguienteNroDeCarta = SiguienteNroDeCarta+2;
  15. } while (SiguienteNroDeCarta<4);
  16. Mensaje = "Has recibido "+CartasDeHumano[CartasDeHumano.length-2]+" y "+CartasDeHumano[CartasDeHumano.length-1];
  17.  
  18. function HumanoObtieneCarta () {
  19. CartasDeHumano[CartasDeHumano.length] = Cartas[SiguienteNroDeCarta];
  20. NumerosDeHumano[NumerosDeHumano.length] = Number(Cartas[SiguienteNroDeCarta].substring(1, Cartas[SiguienteNroDeCarta].length));
  21. Mensaje = "Has recibido "+CartasDeHumano[CartasDeHumano.length-1];
  22.  
  23. NombreDeCarta = "CartaDeHumano"+CartasDeHumano[CartasDeHumano.length-1];
  24. attachMovie("sCarta", NombreDeCarta, CartasDeHumano.length-1);
  25. setProperty (NombreDeCarta, _y, 192);
  26. // Para el interior de la carta:
  27. AgregarSignos();
  28. SumaDeHumano = SumaDeHumano+Math.min(10, NumerosDeHumano[NumerosDeHumano.length-1]);
  29. if (NumerosDeHumano[NumerosDeHumano.length-1] == 1) {
  30. Uno = "Sí";
  31. }
  32. ActualizarDeHumano();
  33.  
  34. DistribuirCartasDeHumano();
  35. SiguienteNroDeCarta++;
  36.  
  37. }
  38.  
  39. function DistribuirCartasDeHumano () {
  40. LargoDeEspacios = (512-100*CartasDeHumano.length)/(CartasDeHumano.length+1);
  41. SumaDeHumano = 0;
  42. // Marca si tiene algún 1:
  43. Uno = "No";
  44. if (LargoDeEspacios>0) {
  45. trace ("LargoDeEspacios: "+LargoDeEspacios);
  46. NroDeCartaaMover = 0;
  47. do {
  48. NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMover];
  49. setProperty (NombreDeCarta, _x, LargoDeEspacios*(NroDeCartaaMover+1)+NroDeCartaaMover*100+50);
  50. NroDeCartaaMover++;
  51. } while (NroDeCartaaMover<CartasDeHumano.length);
  52. } else {
  53. // La 1er carta irá en x 50 y la última en 512-50,
  54. // justo en los extremos de la pantalla,
  55. // así que un largo de 50 de un lado y del otro está ocupado,
  56. // por eso se recalcula LargoDeEspacios con espacio-100 y...
  57. // 2 cartas menos:
  58. LargoDeEspacios = 412/(CartasDeHumano.length-1);
  59. trace ("LargoDeEspacios: "+LargoDeEspacios);
  60. // Para las siguientes hasta la última (no incluida):
  61. NroDeCartaaMover = 0;
  62. do {
  63. NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMover];
  64. attachMovie("sCarta", NombreDeCarta, NroDeCartaaMover);
  65. // setProperty (NombreDeCarta, _x, (NroDeCartaaMover+1)*LargoDeEspacios);
  66. setProperty (NombreDeCarta, _x, LargoDeEspacios*NroDeCartaaMover+50);
  67. trace (getProperty(NombreDeCarta, _x));
  68. setProperty (NombreDeCarta, _y, 192);
  69. // Para el interior de la carta:
  70. AgregarSignos();
  71. SumaDeHumano = SumaDeHumano+Math.min(10, NumerosDeHumano[NroDeCartaaMover]);
  72. if (NumerosDeHumano[NroDeCartaaMover] == 1) {
  73. Uno = "Sí";
  74. }
  75. NroDeCartaaMover++;
  76. } while (NroDeCartaaMover<CartasDeHumano.length);
  77. }
  78. if (Uno == "Sí") {
  79. PosibleSumaDeHumano = SumaDeHumano+10;
  80. if (PosibleSumaDeHumano < 22) {
  81. SumaDeHumano = PosibleSumaDeHumano;
  82. }
  83. }
  84. Mensaje = Mensaje+". Tu suma es "+SumaDeHumano+". ¿Quieres otra carta?";
  85. Mensaje = Mensaje+"\nIzquierda: No.\tDerecha: Sí.";
  86. }
  87. //
  88. (...)
  89. // Tomar carta sí o no. Un objeto en F2 repite esto:
  90. function TomarCartaSoN () {
  91. // Si se presiona izquierda:
  92. if (Key.isDown(37)) {
  93. Mensaje = "Tu suma es..... "+SumaDeHumano;
  94. Mensaje = Mensaje+"\nLa del rival es "+SumaDeIA;
  95. if (SumaDeHumano>21 or SumaDeHumano<SumaDeIA) {
  96. Mensaje = Mensaje+"\n¡Perdiste!";
  97. } else if (SumaDeHumano>SumaDeIA) {
  98. Mensaje = Mensaje+"\n¡Ganaste!";
  99. } else if (SumaDeHumano == SumaDeIA) {
  100. Mensaje = Mensaje+"\n¡Empate!";
  101. }
  102. } else if (Key.isDown(39)) {
  103. }
  104. }

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.


« Última modificación: 19 Marzo 2026, 07:00 am por Tachikomaia » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines