actions for fotograma 1
function InsertarNodoyFlecha () {
// Insertar Nodo:
Imagenes = Imagenes+1;
Nodos = Nodos+1;
Grafo.attachMovie("mNodo", "Nodo"+Nodos, Imagenes);
// Especificar la situación que representa:
set ("Grafo.Nodo"+Nodos+".EnHP", EnHP);
// Insertar flecha:
Imagenes = Imagenes+1;
Grafo.attachMovie("mFlecha", "Flecha"+Nodos, Imagenes);
// Especificar el sitio donde se insertan:
PosicionY = PadrePosicionY+33;
setProperty ("Grafo.Nodo"+Nodos, _y, PosicionY);
setProperty ("Grafo.Flecha"+Nodos, _x, PadrePosicionX);
setProperty ("Grafo.Flecha"+Nodos, _y, PadrePosicionY+6.5);
Hijos = Hijos+1;
// Como por ahora casi todo padre tiene 1 hijo, este if agiliza el proceso creo:
if (Hijos == 1) {
PosicionX = PadrePosicionX;
setProperty ("Grafo.Nodo"+Nodos, _x, PosicionX);
} else {
Hijo = 0;
MinPosicionX = PadrePosicionX-16.5*(Hijos-1);
SAquedebeActualizarse = SAs-Hijos;
do {
Hijo = Hijo+1;
PosicionX = (Hijo-1)*33+MinPosicionX;
setProperty ("Grafo.Nodo"+(Nodos-Hijos+Hijo), _x, PosicionX);
// Actualizar datos de las posiciones guardadas:
SAquedebeActualizarse = SAquedebeActualizarse+1;
set ("SA"+SAquedebeActualizarse+"PosicionX", PosicionX);
// Establecer rotación 0 a la flecha para que su altura de se modifique bien:
setProperty ("Grafo.Flecha"+(Nodos-Hijos+Hijo), _rotation, 0);
// Especificar rotación y tamaño de flecha:
DistanciaXPadreHijo = Math.abs(Math.abs(PadrePosicionX)-Math.abs(PosicionX));
setProperty ("Grafo.Flecha"+(Nodos-Hijos+Hijo), _height, Math.sqrt(DistanciaXPadreHijo*DistanciaXPadreHijo+20*20));
Rotacion = 180/Math.PI*Math.atan(DistanciaXPadreHijo/20*-1);
// Si el hijo está a la izquierda del padre, invertir la rotación:
if (PosicionX<PadrePosicionX) {
Rotacion = Rotacion*-1;
}
setProperty ("Grafo.Flecha"+(Nodos-Hijos+Hijo), _rotation, Rotacion);
} while (Hijo<Hijos);
}
}
Respuesta = "Vencer al enemigo mediante acciones, el enemigo tiene 11 HP. Se recomienda la serie... ";
// Situación inicial:
// HP inicial del enemigo:
EnBaseHP = 33;
trace ("EnBaseHP: "+EnBaseHP);
// Guardar situación y cómo se produjo:
// Parte inicial del nombre de los datos (en este caso S11):
SitID = "S"+EnBaseHP;
// Acción realizada en la situación anterior (en este caso ninguna):
set (SitID+"ActionAnterior", "Ninguna");
// En este caso la variable es S11Action y su valor es "Ninguna".
// Posición X e Y del nodo que representa la situación desde la cual se originó la que será representada por otro nodo...
// ...pero en este caso es la posición del 1er nodo.
PadrePosicionX = 0;
PadrePosicionY = 0;
// Cantidad de imágenes insertadas:
Imagenes = 1;
// Cantidad de nodos del grafo a mostrar:
Nodos = 1;
// Insertar nodo inicial:
Grafo.attachMovie("mNodo", "Nodo1", 1);
// Especificar la situación que representa:
Grafo.Nodo1.EnHP = EnBaseHP;
// Hijos del nodo de la situación que se está analizando:
Hijos = 0;
// Acción que será usada 1ero:
Action = 1;
// Variables sobre situaciones anotadas:
// Total de situaciones anotadas:
SAs = 0;
// Situación anotada que será investigada 1ero:
SiguienteSAaInvestigar = 0;
actions for fotograma 2
trace ("Reset de la situación, aplicación de la acción, la situación ahora es:");
EnHP = EnBaseHP-Action;
trace ("EnHP: "+EnHP);
// ¿Se logró el objetivo?
if (EnHP<=0) {
trace ("Solución hallada, iniciando proceso para mostrar cómo causarla.");
Serie = Action;
InsertarNodoyFlecha();
gotoAndPlay (5);
} else {
trace ("No se logró el objetivo.");
// ¿La situación producida está anotada?
if (eval("S"+EnHP+"ActionAnterior") == undefined) {
trace ("La situación producida no está anotada.");
trace ("Se anotará y cómo se logró.");
SitID = "S"+EnHP;
set (SitID+"EnHPAnterior", EnBaseHP);
set (SitID+"ActionAnterior", Action);
trace ("Ahora está anotada: "+SitID);
trace ("Su antecedente fue ("+SitID+"EnHPAnterior): "+EnBaseHP);
trace ("y la acción fue ("+SitID+"ActionAnterior): "+Action);
// También se agrega como situación a investigar y se anota en qué consiste:
SAs = SAs+1;
SitID = "SA"+SAs;
set (SitID+"EnHP", EnHP);
trace ("Situaciones anotadas: "+SAs);
trace ("La última consiste en (EnHP): "+eval(SitID+"EnHP"));
// Se inserta el nodo que la representa y se guarda su posición:
InsertarNodoyFlecha();
set (SitID+"PosicionX", PosicionX);
trace (SitID+"PosicionX: "+PosicionX);
set (SitID+"PosicionY", PosicionY);
} else {
trace ("La situación producida ya está anotada.");
}
}
actions for fotograma 3
// ¿Modificar acción es posible?
if (Action<7) {
trace ("Es posible modificar acción.");
Action = Action+1;
trace ("Action fue modificada, es: "+Action);
gotoAndPlay (2);
} else {
trace ("No es posible modificar la acción.");
if (SiguienteSAaInvestigar<SAs) {
// Aún hay situaciones anotadas sin investigar, investigar una (probablemente lo ideal sería investigar la más diferente a las investigadas, pero me es difícil programar eso):
trace ("Aún hay situaciones anotadas sin investigar.");
SiguienteSAaInvestigar = SiguienteSAaInvestigar+1;
EnBaseHP = eval("SA"+SiguienteSAaInvestigar+"EnHP");
trace ("Se investigará la situación anotada nro: "+SiguienteSAaInvestigar);
trace ("Consiste en EnBaseHP: "+EnBaseHP);
// Guardar su posición para saber dónde poner a sus posibles hijos:
PadrePosicionX = eval("SA"+SiguienteSAaInvestigar+"PosicionX");
trace ("Nuevo PadrePosicionX: "+PadrePosicionX);
PadrePosicionY = eval("SA"+SiguienteSAaInvestigar+"PosicionY");
Hijos = 0;
// Reset de la acción a usar:
Action = 1;
trace ("Reset de la acción a usar, es: "+Action);
gotoAndPlay (2);
} else {
trace ("No hay situaciones anotadas sin investigar ni es posible lograr el objetivo.");
Respuesta = "No es posible lograr el objetivo.";
}
}
actions for fotograma 5
// Obtener acción anterior:
ActionAnterior = eval("S"+EnBaseHP+"ActionAnterior");
trace ("La acción anterior fue: "+ActionAnterior);
// ¿Hubo?
if (ActionAnterior != "Ninguna") {
// Sí, agregarla en la lista:
Serie = ActionAnterior+" "+Serie;
trace ("Acción agregada en la serie.");
// Averiguar cual fue la situación anterior:
EnBaseHP = eval("S"+EnBaseHP+"EnHPAnterior");
trace ("Se realizó en la situación: S"+EnBaseHP);
// Repetir este frame.
gotoAndPlay (4);
} else {
// No hubo una acción anterior, mostrar la serie:
trace (Respuesta+Serie);
stop ();
}