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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  No atacar a enemigos ko.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No atacar a enemigos ko.  (Leído 2,038 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 524



Ver Perfil
No atacar a enemigos ko.
« en: 23 Agosto 2021, 09:46 am »

Esto es lo que tengo por ahora:
Código:
  actions for fotograma 1
      function Action1 () {
         trace ("Player attacks with 1 to Enemy1!"
         En1HP = BaseEn1HP-1;
      }
      function Action2 () {
         trace ("Player attacks with 2 to Enemy1!"
         En1HP = BaseEn1HP-2;
      }
      function Action3 () {
         trace ("Player attacks with 1 to Enemy2!"
         En2HP = BaseEn2HP-1;
      }
      function Action4 () {
         trace ("Player attacks with 2 to Enemy2!"
         En2HP = BaseEn2HP-2;
      }
      Action = 1;
   actions for fotograma 2
      // player attacks
      eval("Action"+Action) ();
      Si Enemy1 is ok
         Enemy1 attack Player
      Si Player is ok
         Si Enemy2 is ok
            Enemy2 attack Player
         sino si Enemy1 is ko
            // player wins
      sino
         // game over
   actions for fotograma 3
      // variar ataque salteando los que afectan a un enemigo ko

El jugador, que es una IA o parecido, tiene 4 posibles acciones. Dichas acciones varían en cuánto daño hace y a qué enemigo.
No he definido ciertas variables, lo haré cuando resuelva los problemas que tengo.

En el fotograma 2 hay una llamada a una función según el valor de una variable. Quizá está mal escrito, lo analizaré cuando resuelva los problemas que tengo. Lo demás puede que esté mal pero trata simplemente de que los enemigos no ataquen si están ko, de cuando hay victoria y derrota.

La cuestión está en el fotograma 3. Lo normal sería hacer Action++ y volver al fotograma 2, pero quiero evitar que se hagan ataques a enemigos ko. ¿Alguna idea de cómo? Pueden proponer distintos códigos, no sé, yo imaginé el que leyeron pero puede haber mejores. De hecho tengo pensado que pueda haber cualquier cantidad de enemigos, así que la parte de los "si" puede que necesite un arreglo.

Gracias.


« Última modificación: 23 Agosto 2021, 10:22 am por Tachikomaia » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 4.988


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: No atacar a enemigos ko.
« Respuesta #1 en: 23 Agosto 2021, 15:36 pm »

Hola!

Hace siglos que programaba en AS (AS2 en aquellos días), y no recuerdo casi nada, pero cuando hice jueguitos para pasar el tiempo, creaba objetos. Osea, cada movie que ponía en pantalla tenía propiedades que me permitían saber algo de cada instancia. Podría hacer lo mismo y tener dichas propiedades como por ej. la vida de dicha instancia al momento de "preguntarle". Si está KO, entonces su vida sería de 0 (o puedes usar un flag si dicho valor no se relaciona con esa propiedad).

Es una idea de cómo podrías resolverlo.

Saludos!


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Tachikomaia


Desconectado Desconectado

Mensajes: 524



Ver Perfil
Re: No atacar a enemigos ko.
« Respuesta #2 en: 2 Septiembre 2021, 18:30 pm »

Creo que por fin lo resolví:
Código
  1. Escena 1
  2.   actions for fotograma 1
  3.      // "En" es una abreviación de Enemigo.
  4.      // "HP" es una abreviación de Health Points, o puntos de vida.
  5.      // Acciones posibles de la IA.
  6.      function Action1 () {
  7.         if (0<En1HP) {
  8.            // Si el En1 está ok, se lo ataca.
  9.            En1HP = En1HP-1;
  10.            trace ("IA attacks with 1 to Enemy1! Queda con "+En1HP);
  11.         } else {
  12.            // sino, ver si el En2 está ok.
  13.            Action = 3;
  14.            trace ("En1 is ko; ver En2");
  15.            eval("Action"+Action)();
  16.         }
  17.      }
  18.      function Action2 () {
  19.         if (0<En1HP) {
  20.            // Si el En1 está ok, se lo ataca.
  21.            En1HP = En1HP-2;
  22.            trace ("IA attacks with 2 to Enemy1! Queda con "+En1HP);
  23.         } else {
  24.            // sino, ver si el En2 está ok.
  25.            Action = 3;
  26.            trace ("En1 is ko; ver En2");
  27.            eval("Action"+Action)();
  28.         }
  29.      }
  30.      function Action3 () {
  31.         if (0<En2HP) {
  32.            // Si el En2 está ok, se lo ataca.
  33.            En2HP = En2HP-1;
  34.            trace ("IA attacks with 1 to Enemy2! Queda con "+En2HP);
  35.         } else {
  36.            // sino, load unsolved sit.
  37.            Action = 4;
  38.         }
  39.      }
  40.      function Action4 () {
  41.         if (0<En2HP) {
  42.            // Si el En2 está ok, se lo ataca.
  43.            En2HP = En2HP-2;
  44.            trace ("IA attacks with 2 to Enemy2! Queda con "+En2HP);
  45.         } else {
  46.            // sino, load unsolved sit.
  47.            Action = 4;
  48.         }
  49.      }
  50.      // Nro de acción que se usará en el fotograma 2.
  51.      Action = 1;
  52.      // Situación inicial.
  53.      IAHP = 10;
  54.      BaseEn1HP = 5;
  55.      BaseEn2HP = 5;
  56.      // Guardar Situación inicial.
  57.      SitID = "S"+BaseEn1HP+"_"+BaseEn2HP;
  58.      set (SitID+"En1HP", BaseEn1HP);
  59.      set (SitID+"En2HP", BaseEn2HP);
  60.      set (SitID+"Action", "Ninguno");
  61.      // ID de la Unsolved situación que será analizada (luego de sumarle 1).
  62.      U = 0;
  63.      // Cantidad de Unsolved situaciones.
  64.      Us = 0;
  65.   actions for fotograma 2
  66.      // Sit reseteada
  67.      En1HP = BaseEn1HP;
  68.      En2HP = BaseEn2HP;
  69.      trace ("Sitreset; queda en "+En1HP+" y "+En2HP);
  70.      // IA attacks
  71.      eval("Action"+Action)();
  72.      if (En1HP<=0 && En2HP<=0) {
  73.         // Todo Enemigo fue derrotado: Solución, iniciar mostrar Lista de Acciones usadas.
  74.         trace ("Solución hallada, ir al F4");
  75.         List = Action;
  76.         gotoAndPlay (4);
  77.      } else {
  78.         if (0<En1HP) {
  79.            // Si En1 está ok, él attacks IA.
  80.            trace ("En1 attacks IA");
  81.         }
  82.         if (0<IAHP) {
  83.            // Si IA está ok, ver si En2 está ok.
  84.            if (0<En2HP) {
  85.               // Si En2 está ok, él attacks IA.
  86.               trace ("En2 attacks IA");
  87.            }
  88.         }
  89.         if (0<IAHP) {
  90.            // Si IA está ok, ver si la situación está anotada.
  91.            if (eval("S"+En1HP+"_"+En2HP+"En1HP") == undefined) {
  92.               // No. Anotarla.
  93.               trace ("Nueva Sit hallada; grabando.");
  94.               SitID = "S"+En1HP+"_"+En2HP;
  95.               set (SitID+"En1HP", BaseEn1HP);
  96.               set (SitID+"En2HP", BaseEn2HP);
  97.               set (SitID+"Action", Action);
  98.               Us = Us+1;
  99.               SitID = "U"+Us;
  100.               set (SitID+"En1HP", En1HP);
  101.               set (SitID+"En2HP", En2HP);
  102.            }
  103.         } else {
  104.            // Game over, ver si hay más acciones posibles.
  105.            trace ("Gameover; ver si hay otras acciones");
  106.         }
  107.      }
  108.   actions for fotograma 3
  109.      // La situación existe. ¿Modificar candidato es posible?
  110.      if (Action<4) {
  111.         // Modificación de candidato.
  112.         Action = Action+1;
  113.         gotoAndPlay (2);
  114.      } else if (U<Us) {
  115.         // Usar Unsolveds.
  116.         U = U+1;
  117.         BaseEn1HP = eval("U"+U+"En1HP");
  118.         BaseEn2HP = eval("U"+U+"En2HP");
  119.         Action = 1;
  120.         gotoAndPlay (2);
  121.      } else {
  122.         // No hay Solución.
  123.         List = "No hay sol";
  124.         stop ();
  125.      }
  126.   actions for fotograma 5
  127.      SitID = eval("S"+BaseEn1HP+"_"+BaseEn2HP+"Action");
  128.      BaseEn1HP = eval("S"+BaseEn1HP+"_"+BaseEn2HP+"En1HP");
  129.      BaseEn2HP = eval("S"+BaseEn1HP+"_"+BaseEn2HP+"En2HP");
  130.      if (SitID != "Ninguno") {
  131.         List = SitID+" "+List;
  132.         gotoAndPlay (4);
  133.      } else {
  134.         stop ();
  135.      }
  136.  

Se menciona que los enemigos atacan pero por ahora no estoy aplicando eso, antes de aplicarlo quería resolver el problema que tenía.
« Última modificación: 2 Septiembre 2021, 18:33 pm por Tachikomaia » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 2.800


Ver Perfil
Re: No atacar a enemigos ko.
« Respuesta #3 en: 2 Septiembre 2021, 23:31 pm »

Deberías aprender a generar una tabla de estados, para simplificar la lógica y sobretodo  para poder escribir el código de corrido y sin tanta fatiga mental y tiempo que le dedicas.

Por otro lado no es buena idea hacer abreviaturas del tipo:
Citar
// "En" es una abreviación de Enemigo.
// "HP" es una abreviación de Health Points, o puntos de vida.
Por lo menos no hoy día, en los 80 estaba justificado primero por la limitación de memoria disponible en el equipo y antes de los 80 incluso por la limitación de los lenguajes en materia de manejo de strings, hoy día todo eso no tiene validez alguna... escribe:
Citar
Ennemy1HelpPoints = Ennemy1HelpPoints -1
sin preocupación... además cuando pasen los años, y vuelvas al código seguirá estando claro, si no tendrás que tirar de comentarios cuando el propio nombre usado es autoentendible.
En la medida que tengas que usar 2 o 3 docenas de variables ya tendrás ahí un código espagueti enmarañado difícil de leer y más de seguir y modificar.
En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 524



Ver Perfil
Re: No atacar a enemigos ko.
« Respuesta #4 en: 3 Septiembre 2021, 05:43 am »

Deberías aprender a generar una tabla de estados, para simplificar la lógica y sobretodo  para poder escribir el código de corrido y sin tanta fatiga mental y tiempo que le dedicas.
No sé cómo notaste lo de fatiga mental, pero acertaste, me sentí hecho polvo cuando lo terminé xD
¿Algún link que explique qué es una tabla de estados y cómo se hace/usa?

Citar
Por otro lado no es buena idea hacer abreviaturas del tipo
Las uso porque así leo y comprendo más rápido. Me sale naturalmente, además HP es muy conocido en el mundo de los videojuegos.

Citar
además cuando pasen los años, y vuelvas al código seguirá estando claro, si no tendrás que tirar de comentarios cuando el propio nombre usado es autoentendible.
Puede ser, pero por ahora me resulta más cómodo así. A sabiendas de que el código es para resolver batallas tipo RPG (role play game, juego de rol) no olvidaré lo que es "En", y menos lo que es HP, tanto así que esos comentarios que citaste los escribí para los lectores no para mí. Pero si les "molesta" leer abreviaciones, para la próxima escribiré todo completo.

Citar
En la medida que tengas que usar 2 o 3 docenas de variables ya tendrás ahí un código espagueti enmarañado difícil de leer y más de seguir y modificar.
Probablemente, por ahora son 2 enemigos con 1 stat (estadística, medida de una característica), pero la idea es agregar más enemigos y stats.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Los nuevos enemigos de los hackers.. « 1 2 ... 5 6 »
Hacking
acidphreak 54 15,409 Último mensaje 25 Marzo 2015, 04:54 am
por simorg
enemigos DOOM 3
Juegos y Consolas
wer 0 2,311 Último mensaje 11 Septiembre 2010, 18:33 pm
por wer
FallOut New Vegas - Enemigos Desaparecen a lo lejos
Juegos y Consolas
alejov14 0 2,677 Último mensaje 12 Enero 2011, 19:05 pm
por alejov14
Se publica la lista de los “Enemigos de Internet”
Noticias
wolfbcn 0 990 Último mensaje 12 Marzo 2012, 17:42 pm
por wolfbcn
Enemigos de Internet: Siria, China, Irán...
Noticias
wolfbcn 0 676 Último mensaje 12 Marzo 2013, 13:16 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines