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


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Un código de TERROR...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Un código de TERROR...  (Leído 145 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.844


Hackentifiko!


Ver Perfil
Un código de TERROR...
« en: Hoy a las 11:57 »

Comentando unas cosas se me acaba de ocurrir este chiste, aunque Halloween ya pasó.

Básicamente el frame 3 que usaba para el modo IA vs IA ahora lo uso para la IA en nivel 1, así que se me liaron los goto y estoy poniendo traces (prints) a ver en qué frame está el programa en diferentes momentos, para intentar entender en qué casos falla.
Código
  1.   actions for fotograma 1
  2.      CasillerosPorFila = 9;
  3.      JuntosRequeridos = 3;
  4.      MarcadorDeX = "Humano";
  5.      MarcadorDe0 = "IA";
  6.      // Determina a qué frames va:
  7.      Jugadores = "HumanoIA";
  8.      NivelDeIA = 1;
  9.      // Usado en el botón de quién marca con X:
  10.      function CambiarMarcadorDeX () {
  11.         if (MarcadorDeX == "Humano") {
  12.            MarcadorDeX = "IA";
  13.         } else {
  14.            MarcadorDeX = "Humano";
  15.         }
  16.         Jugadores = MarcadorDeX+MarcadorDe0;
  17.         HacerTablero();
  18.      }
  19.      // Usado en el botón de quién marca con 0:
  20.      function CambiarMarcadorDe0 () {
  21.         if (MarcadorDe0 == "IA") {
  22.            MarcadorDe0 = "Humano";
  23.         } else {
  24.            MarcadorDe0 = "IA";
  25.         }
  26.         Jugadores = MarcadorDeX+MarcadorDe0;
  27.         HacerTablero();
  28.      }
  29.      // Usado ahora y en general cuando se cambia la configuración de la partida:
  30.      function HacerTablero () {
  31.         trace ("HacerTablero");
  32.         // Para que no pueda haber más de 1 mensaje en pantalla:
  33.         removeMovieClip ("Mensaje");
  34.         // Esto se irá especificando en el próximo while:
  35.         Situacion = [];
  36.         PosiblesAcciones = [];
  37.         // Los casilleros se cuentan desde 0:
  38.         MaxCasillero = CasillerosPorFila*CasillerosPorFila-1;
  39.         // Las columnas también. Esto es para no repetir restas por ahí:
  40.         MaxColumna = CasillerosPorFila-1;
  41.         LargoDeCasilleros = 384/CasillerosPorFila;
  42.         NroDeCasilleroaColocar = -1;
  43.         // Sus columnas y filas se cuentan desde 0,
  44.         // sirven para posicionarlos más fácil:
  45.         Columna = 0;
  46.         Fila = 0;
  47.         do {
  48.            NroDeCasilleroaColocar++;
  49.            // v es vacío:
  50.            Situacion.push("v");
  51.            PosiblesAcciones.push(NroDeCasilleroaColocar);
  52.            CasilleroaColocar = "Casillero"+NroDeCasilleroaColocar;
  53.            // set ("SignoEn"+CasilleroaColocar, "v");
  54.            // sCasillero tiene código:
  55.            attachMovie("sCasillero", CasilleroaColocar, NroDeCasilleroaColocar);
  56.            setProperty (CasilleroaColocar, _x, LargoDeCasilleros*Columna);
  57.            setProperty (CasilleroaColocar, _y, LargoDeCasilleros*Fila);
  58.            setProperty (CasilleroaColocar, _width, LargoDeCasilleros);
  59.            setProperty (CasilleroaColocar, _height, LargoDeCasilleros);
  60.            Columna++;
  61.            if (Columna == CasillerosPorFila) {
  62.               Columna = 0;
  63.               Fila++;
  64.            }
  65.            // Para que al presionar el botón se sepa qué modificar:
  66.            set (CasilleroaColocar+".CasilleroAsociado", NroDeCasilleroaColocar);
  67.            // trace("Colocado el "+NroDeCasilleroaColocar);
  68.         } while (NroDeCasilleroaColocar<MaxCasillero);
  69.         // Para que no muestre el mensaje de victoria:
  70.         Win = "No";
  71.         SignoDeTurno = "X";
  72.         if (Jugadores == "HumanoIA") {
  73.            trace ("HacerTablero: "+Jugadores+" va a f2");
  74.            gotoAndStop (2);
  75.         } else if (Jugadores == "IAHumano") {
  76.            trace ("HacerTablero: "+Jugadores+" va a...");
  77.            TurnoDeIA();
  78.            if (Win == "No") {
  79.               // OJO QUE SI HAY EMPATE NO DEBE IR AL F2, O NO ES NEC
  80.               trace ("HacerTablero: IA no ganó, va a f2");
  81.               gotoAndStop (2);
  82.            }
  83.         } else if (Jugadores == "HumanoHumano") {
  84.            trace ("HacerTablero: "+Jugadores+" va a f2");
  85.            gotoAndStop (2);
  86.         } else {
  87.            // IA VS IA:
  88.            trace ("HacerTablero: "+Jugadores+" va a f3");
  89.            InutilizarBotones();
  90.            gotoAndStop (3);
  91.         }
  92.      }
  93.      HacerTablero();
  94.      // Usada cuando el humano marca en un casillero:
  95.      function HumanoHaMarcado () {
  96.         // trace("PosiblesAcciones.length: "+PosiblesAcciones.length);
  97.         trace ("Humano ha marcado");
  98.         // Inutilizar botón del casillero marcado:
  99.         setProperty (eval("Casillero"+CasilleroMarcado+".Boton"), _visible, false);
  100.         // Agregar signo:
  101.         // SignosColocados++;
  102.         eval("Casillero"+CasilleroMarcado).attachMovie("s"+SignoDeTurno, "Signo", 1);
  103.         Situacion[CasilleroMarcado] = SignoDeTurno;
  104.         // set ("SignoEnCasillero"+CasilleroMarcado, "X");
  105.         // ¿Gana?
  106.         // Si esta función dice que no, usa otras:
  107.         ChequearVertical();
  108.         if (Win == "Sí") {
  109.            // Sí, inutilizar botones del tablero
  110.            // (debería ser sólo los activos):
  111.            InutilizarBotones();
  112.            // Mostrar mensaje de victoria:
  113.            attachMovie("sGano"+SignoDeTurno, "Mensaje", NroDeCasilleroaColocar+1);
  114.            UbicarMensaje();
  115.         } else if (PosiblesAcciones.length>=2) {
  116.            // Sino, si aún hay >=2 acciones posibles
  117.            // (la que usó aún no se quitó):
  118.            // Quitar su acción de las posibles acciones:
  119.            // Se busca en qué posición del array está:
  120.            AccionRevisandose = -1;
  121.            do {
  122.               AccionRevisandose++;
  123.               if (PosiblesAcciones[AccionRevisandose] == CasilleroMarcado) {
  124.                  // Se elimina la acción de la lista de posibles:
  125.                  PosiblesAcciones.splice(AccionRevisandose, 1);
  126.                  // trace (PosiblesAcciones.join(""));
  127.                  break;
  128.               }
  129.            } while (true);
  130.            CambiarSigno();
  131.            if (Jugadores == "HumanoIA" or Jugadores == "IAHumano") {
  132.               trace ("Humano ha marcado: en f2 turno de IA");
  133.               TurnoDeIA();
  134.            }
  135.         } else {
  136.            // (sólo queda 1 acción en la lista,
  137.            // pero es la que acaba de usar,
  138.            // que debe borrarse, así que no quedan)
  139.            trace ("Empate luego de que marcó el humano");
  140.            // trace("PosiblesAcciones.length: "+PosiblesAcciones.length);
  141.            Empate();
  142.         }
  143.      }
  144.      // Usada en ChequeoHorizontal y requerida en otros casos:
  145.      function ObtenerColumnayFilaDelMarcado () {
  146.         ColumnaDelMarcado = CasilleroMarcado%CasillerosPorFila;
  147.         // trace ("Su Columna según el cálculo es: "+ColumnaDelMarcado);
  148.         FilaDelMarcado = Math.floor(CasilleroMarcado/CasillerosPorFila);
  149.         // trace ("Su Fila: "+FilaDelMarcado);
  150.      }
  151.      // Usada para saber si hubo victoria cuando alguien marca:
  152.      function ChequearVertical () {
  153.         // the code here is large, so I dont show it, but seems ok.
  154.      }
  155.      // Usada luego de ChequearVertical si no se halló victoria:
  156.      function ChequearHorizontal () {
  157.         // idem
  158.      }
  159.      // Usada luego de ChequearHorizontal si no se halló victoria:
  160.      // La diagonal así \
  161.      function ChequearDesdeUpIzq () {
  162.         // idem
  163.      }
  164.      // Usada luego de ChequearDesdeUpIzq si no se halló victoria:
  165.      // La diagonal así /
  166.      function ChequearDesdeDownIzq () {
  167.         // idem
  168.      }
  169.      // Usada cuando alguien gana o en HacerTablero si es IA VS IA:
  170.      function InutilizarBotones () {
  171.         BotonesInutilizados = -1;
  172.         do {
  173.            BotonesInutilizados++;
  174.            setProperty ("Casillero"+BotonesInutilizados+".Boton", _visible, false);
  175.         } while (BotonesInutilizados<MaxCasillero);
  176.      }
  177.      // Usada cuando hay que ubicar un mensaje, duh:
  178.      function UbicarMensaje () {
  179.         setProperty (Mensaje, _x, 192.4);
  180.         setProperty (Mensaje, _y, 192);
  181.         // gotoAndStop (3);
  182.      }
  183.      // En caso de empate:
  184.      function Empate () {
  185.         attachMovie("sEmpate", "Mensaje", NroDeCasilleroaColocar+1);
  186.         UbicarMensaje();
  187.         // Para que en el modo IA VS IA, la IA no juegue más:
  188.         Win = "Sí";
  189.         trace ("Empate");
  190.      }
  191.      function CambiarSigno () {
  192.         if (SignoDeTurno == "X") {
  193.            SignoDeTurno = 0;
  194.         } else {
  195.            SignoDeTurno = "X";
  196.         }
  197.      }
  198.      function TurnoDeIA () {
  199.         trace ("TurnoDeIA");
  200.         if (NivelDeIA == 0) {
  201.            trace ("TurnoDeIA: IA nivel 0, no cambia de f");
  202.            // Elegir una acción al azar:
  203.            NroDeAccionElegida = random(PosiblesAcciones.length);
  204.            AccionElegida = PosiblesAcciones[NroDeAccionElegida];
  205.            trace ("IA ha marcado: "+AccionElegida);
  206.            // Eliminar la que está en el nro elegido:
  207.            PosiblesAcciones.splice(NroDeAccionElegida, 1);
  208.            trace (PosiblesAcciones.join(""));
  209.            eval("Casillero"+AccionElegida).attachMovie("s"+SignoDeTurno, "Signo", 0);
  210.            Situacion[AccionElegida] = SignoDeTurno;
  211.            // Inutilizar el botón de ahí:
  212.            setProperty (eval("Casillero"+AccionElegida+".Boton"), _visible, false);
  213.            // Ver si IA ganó:
  214.            CasilleroMarcado = AccionElegida;
  215.            // trace ("JuntosRequeridos: "+JuntosRequeridos);
  216.            ChequearVertical();
  217.            // trace("PosiblesAcciones.length: "+PosiblesAcciones.length);
  218.            if (Win == "Sí") {
  219.               // Sí, inutilizar botones del tablero
  220.               // (debería ser sólo los activos):
  221.               InutilizarBotones();
  222.               // Mostrar mensaje de victoria:
  223.               attachMovie("sGano"+SignoDeTurno, "Mensaje", NroDeCasilleroaColocar+1);
  224.               UbicarMensaje();
  225.            } else if (PosiblesAcciones.length == 0) {
  226.               trace ("Empate luego de que marcó la IA");
  227.               // trace("PosiblesAcciones.length: "+PosiblesAcciones.length);
  228.               Empate();
  229.            } else {
  230.               CambiarSigno();
  231.            }
  232.         } else {
  233.            trace ("TurnoDeIA: IA nivel 1, va al f3");
  234.            gotoAndStop (3);
  235.         }
  236.      }
  237.   actions for fotograma 2
  238.      // Aquí el/los humano/s puede/n marcar.
  239.      stop ();
  240.   actions for fotograma 3
  241.      // IA de nivel 1, averigua las consecuencias de cada acción
  242.      // (pero no a partir de sus consecuencias),
  243.      // guardando la que tenga mejores consecuencias:
  244.      BestResult = "None";
  245.      // Se crea una copia de la situación porque los resultados de las acciones...
  246.      // se evalúan con las funciones chequeo, que usan Situacion, pero se...
  247.      // necesitará recuperar su estado original:
  248.      CopiaDeSituacion = Situacion.slice();
  249.      AccionaProbar = 0;
  250.      do {
  251.         // Averiguar cual es:
  252.         CasilleroMarcado = PosiblesAcciones[AccionaProbar];
  253.         // Aplicarla:
  254.         Situacion[CasilleroMarcado] = SignoDeTurno;
  255.         // ¿Ganó?
  256.         // Si no se detecta victoria vertical,
  257.         // revisa de otros modos (ver las funciones Chequear):
  258.         ChequearVertical();
  259.         if (Win == "Sí") {
  260.            // Se aplicará la acción:
  261.            break;
  262.         } else if (PosiblesAcciones.length == 1) {
  263.            // Se aplicará la acción:
  264.            break;
  265.         } else if (BestResult == "None") {
  266.            BestResult = "Unknown";
  267.            // Esto para saber cual eliminar de la lista PosiblesAcciones:
  268.            BestAction = AccionaProbar;
  269.            BestCasillero = CasilleroMarcado;
  270.         }
  271.         AccionaProbar++;
  272.         // Resetear situación:
  273.         Situacion = CopiaDeSituacion.slice();
  274.      } while (AccionaProbar<PosiblesAcciones.length);
  275.      if (Win == "Sí") {
  276.         eval("Casillero"+CasilleroMarcado).attachMovie("s"+SignoDeTurno, "Signo", 0);
  277.         InutilizarBotones();
  278.         // Mostrar mensaje de victoria:
  279.         attachMovie("sGano"+SignoDeTurno, "Mensaje", NroDeCasilleroaColocar+1);
  280.         UbicarMensaje();
  281.      } else if (PosiblesAcciones.length == 1) {
  282.         eval("Casillero"+CasilleroMarcado).attachMovie("s"+SignoDeTurno, "Signo", 0);
  283.         trace ("Empate luego de que marcó la IA");
  284.         Empate();
  285.      } else {
  286.         // Eliminar acción que está en el nro elegido:
  287.         PosiblesAcciones.splice(BestAction, 1);
  288.         eval("Casillero"+BestCasillero).attachMovie("s"+SignoDeTurno, "Signo", 0);
  289.         Situacion[BestCasillero] = SignoDeTurno;
  290.         // Inutilizar el botón de ahí:
  291.         setProperty (eval("Casillero"+BestCasillero+".Boton"), _visible, false);
  292.         CambiarSigno();
  293.         trace ("en f3 IA hizo su jugada, va a f2");
  294.         gotoAndStop (2);
  295.      }
  296.   actions for Botón Reset
  297.      on (release) {
  298.         HacerTablero();
  299.      }

Modo IA vs IA en un objeto en un frame mucho más adelante:
Código
  1. onClipEvent (enterFrame) {
  2. trace("SignoDeTurno: "+_level0.SignoDeTurno);
  3. _level0.TurnoDeIA();
  4. trace("Win: "+_level0.Win);
  5. if (_level0.Win == "No") {
  6. trace("SignoDeTurno: "+_level0.SignoDeTurno);
  7. _level0.TurnoDeIA();
  8. }
  9. trace("Win: "+_level0.Win);
  10. // No va un else, esto es que si la IA ganó en su 1er turno o...
  11. // en su 2ndo (ejecutado dentro del if), frana:
  12. if (_level0.Win == "Sí") {
  13. trace("Va al frame 2");
  14. _root.gotoAndStop (2);
  15. }
  16. }

Uso gotos en parte porque si un proceso es largo en un mismo frame Flash manda un cartel.

Bueno ¿conoces algún otro código que te dé miedo?  :laugh:


En línea

Mr.Byte


Desconectado Desconectado

Mensajes: 486



Ver Perfil
Re: Un código de TERROR...
« Respuesta #1 en: Hoy a las 16:28 »

Conozco un virus, que lleva causando estragos desde hace mas de 20 años. Es el primer virus gallego .
Gallego serie el termino equivalente en uruguay, como departamento; algo asi como "los canarios" - Canelones
 :silbar: :silbar: :silbar: :silbar:
POR TU HONOR .No lo abras, no respondo de las consecuencias....


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Midnight Nowhere (Aventura-Terror)
Juegos y Consolas
AciDarK 0 3,231 Último mensaje 21 Febrero 2004, 15:26 pm
por AciDarK
Que juego de terror me recomiendan????? « 1 2 3 »
Juegos y Consolas
4rkn63l 24 14,565 Último mensaje 18 Mayo 2008, 04:00 am
por Alamasy
40 tutoriales de terror ;) « 1 2 »
Diseño Gráfico
Darioxhcx 18 17,335 Último mensaje 7 Febrero 2009, 20:45 pm
por Banker25
¿adictos al terror? « 1 2 »
Foro Libre
flacc 15 10,008 Último mensaje 13 Agosto 2011, 21:45 pm
por scr21
El terror es un juego
Noticias
wolfbcn 0 1,995 Último mensaje 16 Diciembre 2014, 21:28 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines