Autor
|
Tema: No atacar a enemigos ko. (Leído 6,243 veces)
|
Tachikomaia
Desconectado
Mensajes: 1.420
Hackentifiko!
|
Esto es lo que tengo por ahora: 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
|
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
Mensajes: 1.420
Hackentifiko!
|
Creo que por fin lo resolví: Escena 1 actions for fotograma 1 // "En" es una abreviación de Enemigo. // "HP" es una abreviación de Health Points, o puntos de vida. // Acciones posibles de la IA. function Action1 () { if (0<En1HP) { // Si el En1 está ok, se lo ataca. En1HP = En1HP-1; trace ("IA attacks with 1 to Enemy1! Queda con "+En1HP); } else { // sino, ver si el En2 está ok. Action = 3; trace ("En1 is ko; ver En2"); eval("Action"+Action)(); } } function Action2 () { if (0<En1HP) { // Si el En1 está ok, se lo ataca. En1HP = En1HP-2; trace ("IA attacks with 2 to Enemy1! Queda con "+En1HP); } else { // sino, ver si el En2 está ok. Action = 3; trace ("En1 is ko; ver En2"); eval("Action"+Action)(); } } function Action3 () { if (0<En2HP) { // Si el En2 está ok, se lo ataca. En2HP = En2HP-1; trace ("IA attacks with 1 to Enemy2! Queda con "+En2HP); } else { // sino, load unsolved sit. Action = 4; } } function Action4 () { if (0<En2HP) { // Si el En2 está ok, se lo ataca. En2HP = En2HP-2; trace ("IA attacks with 2 to Enemy2! Queda con "+En2HP); } else { // sino, load unsolved sit. Action = 4; } } // Nro de acción que se usará en el fotograma 2. Action = 1; // Situación inicial. IAHP = 10; BaseEn1HP = 5; BaseEn2HP = 5; // Guardar Situación inicial. SitID = "S"+BaseEn1HP+"_"+BaseEn2HP; set (SitID+"En1HP", BaseEn1HP); set (SitID+"En2HP", BaseEn2HP); set (SitID+"Action", "Ninguno"); // ID de la Unsolved situación que será analizada (luego de sumarle 1). U = 0; // Cantidad de Unsolved situaciones. Us = 0; actions for fotograma 2 // Sit reseteada En1HP = BaseEn1HP; En2HP = BaseEn2HP; trace ("Sitreset; queda en "+En1HP+" y "+En2HP); // IA attacks eval("Action"+Action)(); if (En1HP<=0 && En2HP<=0) { // Todo Enemigo fue derrotado: Solución, iniciar mostrar Lista de Acciones usadas. trace ("Solución hallada, ir al F4"); List = Action; gotoAndPlay (4); } else { if (0<En1HP) { // Si En1 está ok, él attacks IA. trace ("En1 attacks IA"); } if (0<IAHP) { // Si IA está ok, ver si En2 está ok. if (0<En2HP) { // Si En2 está ok, él attacks IA. trace ("En2 attacks IA"); } } if (0<IAHP) { // Si IA está ok, ver si la situación está anotada. if (eval("S"+En1HP+"_"+En2HP+"En1HP") == undefined) { // No. Anotarla. trace ("Nueva Sit hallada; grabando."); SitID = "S"+En1HP+"_"+En2HP; set (SitID+"En1HP", BaseEn1HP); set (SitID+"En2HP", BaseEn2HP); set (SitID+"Action", Action); Us = Us+1; SitID = "U"+Us; set (SitID+"En1HP", En1HP); set (SitID+"En2HP", En2HP); } } else { // Game over, ver si hay más acciones posibles. trace ("Gameover; ver si hay otras acciones"); } } actions for fotograma 3 // La situación existe. ¿Modificar candidato es posible? if (Action<4) { // Modificación de candidato. Action = Action+1; gotoAndPlay (2); } else if (U<Us) { // Usar Unsolveds. U = U+1; BaseEn1HP = eval("U"+U+"En1HP"); BaseEn2HP = eval("U"+U+"En2HP"); Action = 1; gotoAndPlay (2); } else { // No hay Solución. List = "No hay sol"; stop (); } actions for fotograma 5 SitID = eval("S"+BaseEn1HP+"_"+BaseEn2HP+"Action"); BaseEn1HP = eval("S"+BaseEn1HP+"_"+BaseEn2HP+"En1HP"); BaseEn2HP = eval("S"+BaseEn1HP+"_"+BaseEn2HP+"En2HP"); if (SitID != "Ninguno") { List = SitID+" "+List; gotoAndPlay (4); } else { stop (); }
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
|
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: // "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: 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
Mensajes: 1.420
Hackentifiko!
|
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? 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. 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. 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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Los nuevos enemigos de los hackers..
« 1 2 ... 5 6 »
Hacking
|
acidphreak
|
54
|
23,630
|
25 Marzo 2015, 04:54 am
por simorg
|
|
|
enemigos DOOM 3
Juegos y Consolas
|
wer
|
0
|
3,216
|
11 Septiembre 2010, 18:33 pm
por wer
|
|
|
FallOut New Vegas - Enemigos Desaparecen a lo lejos
Juegos y Consolas
|
alejov14
|
0
|
3,589
|
12 Enero 2011, 19:05 pm
por alejov14
|
|
|
Se publica la lista de los “Enemigos de Internet”
Noticias
|
wolfbcn
|
0
|
1,575
|
12 Marzo 2012, 17:42 pm
por wolfbcn
|
|
|
Enemigos de Internet: Siria, China, Irán...
Noticias
|
wolfbcn
|
0
|
1,330
|
12 Marzo 2013, 13:16 pm
por wolfbcn
|
|