Había olvidado varios detalles de este problema, pero luego de mucho pude hacer una buena base para la investigación:
Escena 1
actions for fotograma 1
// Ítems.
Item1 = "WispG";
Item2 = "ShadeG";
Item3 = "DryadG";
Item4 = "AuraG";
Item5 = "SalaG";
Item6 = "GnomeG";
Item7 = "JinnG";
Item8 = "UndineG";
Item9 = "WispS";
Item10 = "ShadeS";
Item11 = "DryadS";
Item12 = "AuraS";
Item13 = "SalaS";
Item14 = "GnomeS";
Item15 = "JinnS";
Item16 = "UndineS";
Item17 = "FireC";
Item18 = "EarthC";
Item19 = "WindC";
Item20 = "WaterC";
Item21 = "SunC";
Item22 = "MoonC";
Item23 = "GlowC";
Item24 = "ChaosC";
Item25 = "RoundS";
Item26 = "OblongS";
Item27 = "CroakedS";
Item28 = "BigS";
Item29 = "SmallS";
Item30 = "LongS";
Item31 = "FlatS";
Item32 = "SpinyS";
Item33 = "Bellgrapes";
Item34 = "DiceB";
Item35 = "LShoes";
Item36 = "PShoes";
Item37 = "Squalphin";
Item38 = "Citrisquid";
Item39 = "Springanana";
Item40 = "PeachP";
Item41 = "Apricat";
Item42 = "Whalamata";
Item43 = "POclock";
Item44 = "FishyF";
Item45 = "Boarmelon";
Item46 = "Rhinoloupe";
Item47 = "Orcaplant";
Item48 = "Garlicrown";
Item49 = "HoneyO";
Item50 = "SMoai";
Item51 = "SCarrot";
Item52 = "Conchurnip";
Item53 = "CornF";
Item54 = "Cabadilllo";
Item55 = "Needletuce";
Item56 = "CherryB";
Item57 = "MPotato";
Item58 = "Lilipods";
Item59 = "Bumpkin";
Item60 = "HearhM";
Item61 = "SpadeB";
Item62 = "Mushroom";
Item63 = "AnimalM";
Item64 = "BugM";
Item65 = "LizardM";
Item66 = "FishM";
Item67 = "BirdM";
Item68 = "MorphM";
Item69 = "DemonM";
Item70 = "DragonS";
Item71 = "OddM";
Item72 = "MagicM";
Item73 = "RottenM";
Item74 = "SharpC";
Item75 = "PoisonC";
Item76 = "Scisors";
Item77 = "HealingC";
Item78 = "ZombieC";
Item79 = "VampireF";
Item80 = "LittleE";
Item81 = "SleeptyE";
Item82 = "SillyE";
Item83 = "DangerousE";
Item84 = "AngryE";
Item85 = "BlankE";
Item86 = "CreepyE";
Item87 = "WickedE";
Item88 = "AngelF";
Item89 = "RavenF";
Item90 = "CFeather";
Item91 = "MothW";
Item92 = "FlamingQ";
Item93 = "WhiteF";
Item94 = "AromaO";
Item95 = "DBlood";
Item96 = "Acid";
Item97 = "HolyW";
Item98 = "Ether";
Item99 = "Mercury";
Item100 = "StinkyB";
Item101 = "GhostH";
Item102 = "DBreath";
Item103 = "VirginS";
Item104 = "Electr";
Item105 = "Moss";
Item106 = "EarW";
Item107 = "BBat";
Item108 = "Sulpher";
Item109 = "PoisonP";
Item110 = "SleepP";
Item111 = "KnockD";
Item112 = "Rust";
Item113 = "GraveD";
Item114 = "Ash";
Item115 = "Hairball";
Item116 = "Needle";
Item117 = "Mirror";
Item118 = "WadW";
Item119 = "MessyS";
Item120 = "GreenballB";
Item121 = "TakoB";
// Parte 1 del experimento de largo 1.
L1P1 = 0;
// Último experimento de largo 1 que se hará.
LastL1 = "TakoB ";
// Último ítem usado.
RecentItem = 1;
// Relativo al largo de los experimentos...
// ...del método clásico.
ClasicMinL = 1;
ClasicActualL = 1;
ClasicMaxL = 1;
ClasicMaxLReached = 1;
// Largo del método creativo.
CreativeL = 1;
// Experimentos antes de hacer uno del método creativo.
TimeforCreative = 1;
// Valor de TimeforCreative cuando debe recargarse.
ChargedTimeforCreative = 1;
// Mayor largo alcanzado por cualquier método.
AnyMaxL = 1;
Info = "";
function Concatenarytrace () {
// Concatena las partes de los experimentos.
Print = "";
Cursor = 0;
do {
Cursor = Cursor+1;
Print = Print+eval("Item"+eval("L"+ClasicActualL+"P"+Cursor))+" ";
} while (Cursor<ClasicActualL);
trace (Print);
Info = "Func dice exp: "+Print+"\n"+Info;
}
actions for fotograma 2
// Cursor indicará la parte última de un experimento.
Cursor = ClasicActualL;
Info = "F2: Cursor está en la última P de un exp, "+ClasicActualL+"\n"+Info;
actions for fotograma 3
if (eval("L"+ClasicActualL+"P"+Cursor)<6) {
// Si el char es aumentable, aumenta.
set ("L"+ClasicActualL+"P"+Cursor, eval("L"+ClasicActualL+"P"+Cursor)+1);
Concatenarytrace();
Info = "F3: Exp del método clásico creado fácil: "+Print+"\n"+Info;
gotoAndPlay (6);
}
actions for fotograma 4
// El char no es aumentable, ergo se resetea.
set ("L"+ClasicActualL+"P"+Cursor, 1);
if (1<Cursor) {
// Si Cursor puede bajar, baja.
Cursor = Cursor-1;
} else {
// Sino, se muestra el reseteado.
Concatenarytrace();
gotoAndPlay (6);
}
actions for fotograma 5
if (eval("L"+ClasicActualL+"P"+Cursor)<6) {
// Si el char es aumentable, aumenta.
set ("L"+ClasicActualL+"P"+Cursor, eval("L"+ClasicActualL+"P"+Cursor)+1);
Concatenarytrace();
gotoAndPlay (6);
} else {
// Sino, se resetea y reinicia un proceso.
gotoAndPlay (4);
}
actions for fotograma 6
// Esto es aftertrace de clasic.
if (Print == eval("LastL"+ClasicActualL)) {
// Si el experimento mostrado es igual al grabado como último...
// ...no se hacen más experimentos con ese largo.
Info = "F6: Exps de largo "+ClasicMinL+" completados.\n"+Info;
ClasicMinL = ClasicMinL+1;
}
if (CreativeL<=ClasicActualL && ClasicMaxL-1<=ClasicActualL) {
// Si el largo del último experimento del método creativo...
// ...es menor o igual al largo de este experimento clásico...
// ...y ese es igual o mayor al máximo-1 que puede ser...
// ..., Recentitem cambia.
RecentItem = eval("L"+ClasicActualL+"P"+ClasicActualL);
Info = "F6: RecentItem cambiado a "+RecentItem+"\n"+Info;
}
if (ClasicActualL<ClasicMaxL) {
// Si el largo es aumentable, aumenta.
ClasicActualL = ClasicActualL+1;
Info = "F6: El siguiente exp de clasic será de Largo "+ClasicActualL+"\n"+Info;
} else {
// Sino, quedará al mínimo pero el máximo aumenta.
ClasicMaxLReached = ClasicMaxL;
Info = "F6: Clasic alcanzó su máximo L: "+ClasicMaxL+"\n"+Info;
if (ClasicMaxL<7) {
// Ese if es sólo para pruebas del code.
ClasicMaxL = ClasicMaxL+1;
Info = "F6: Clasic aumentó su máximo L a "+ClasicMaxL+"\n"+Info;
if (CreativeL<ClasicMaxL) {
// Si el método creativo no creó un experimento...
// ...del largo alcanzado por el método clásico...
// ..., crearlo (no se usará aún) y marcar que será...
// ...el último experimento de ese largo.
Info = "F6: Clasic llegó a un L mayor que creative: "+ClasicMaxL+" > "+CreativeL+"\n"+Info;
set ("LastL"+ClasicMaxL, "");
Cursor = 1;
// Cálculo del ítem más recientemente usado.
NextRecentItem = eval("L"+ClasicActualL+"P"+ClasicActualL);
do {
NextRecentItem = NextRecentItem+1;
if (6<NextRecentItem) {
// Si resulta un ítem inexistente, arreglarlo.
NextRecentItem = NextRecentItem-((Math.floor(NextRecentItem/6))*6);
}
set ("L"+ClasicMaxL+"P"+Cursor, NextRecentItem);
set ("LastL"+ClasicMaxL, eval("LastL"+ClasicMaxL)+eval("Item"+NextRecentItem)+" ");
Cursor = Cursor+1;
} while (Cursor<ClasicMaxL);
set ("L"+ClasicMaxL+"P"+Cursor, NextRecentItem);
set ("LastL"+ClasicMaxL, eval("LastL"+ClasicMaxL)+eval("Item"+NextRecentItem)+" ");
}
}
ClasicActualL = ClasicMinL;
Info = "F6: El siguiente exp de clasic será de Largo "+ClasicMinL+"\n"+Info;
Info = "F6: Está listo el exp de máx L: "+eval("LastL"+ClasicMaxL)+"\n"+Info;
}
actions for fotograma 7
TimeforCreative = TimeforCreative-1;
if (TimeforCreative<=0) {
// Elección creativa.
if (CreativeL<7) {
// Ese if es sólo para pruebas del code.
CreativeL = CreativeL+1;
if (CreativeL<ClasicMaxLReached) {
// Si el método creativo no creó un...
// ...experimento de largo mayor al...
// ...del método clásico, aumentarlo.
CreativeL = ClasicMaxLReached+1;
}
Info = "F7: Elección creativa de largo "+CreativeL+"\n"+Info;
set ("LastL"+CreativeL, "");
Cursor = 1;
Print = "";
do {
RecentItem = RecentItem+1;
if (6<RecentItem) {
// Si resulta un ítem inexistente, arreglarlo.
RecentItem = RecentItem-((Math.floor(RecentItem/6))*6);
}
set ("L"+CreativeL+"P"+Cursor, RecentItem);
set ("LastL"+CreativeL, eval("LastL"+CreativeL)+eval("Item"+RecentItem)+" ");
Cursor = Cursor+1;
} while (Cursor<CreativeL);
Print = eval("LastL"+CreativeL);
set ("LastL"+CreativeL, eval("LastL"+CreativeL)+eval("Item"+RecentItem)+" ");
Info = "F7: Last creado: "+eval("LastL"+CreativeL)+"\n"+Info;
RecentItem = RecentItem+1;
if (6<RecentItem) {
// Si resulta un ítem inexistente, arreglarlo.
RecentItem = RecentItem-((Math.floor(RecentItem/6))*6);
}
set ("L"+CreativeL+"P"+Cursor, RecentItem);
Print = Print+eval("Item"+RecentItem)+" ";
trace ("Creativo:\t"+Print);
Info = "F7: Método creativo creó exp "+Print+"\n"+Info;
Info = "F7: RecentItem es "+RecentItem+".\n"+Info;
} else {
gotoAndPlay (2);
Info = "F7: Método creativo alcanzó el máximo.\n"+Info;
}
} else {
Info = "F7: Para la elección creativa falta "+TimeforCreative+"\n"+Info;
gotoAndPlay (2);
}
actions for fotograma 8
stop ();
actions for Símbolo 1
on (release, keyPress "<Left>") {
ChargedTimeforCreative = 1;
TimeforCreative = ChargedTimeforCreative;
gotoAndPlay (2);
}
actions for Símbolo 2
on (release, keyPress "<Right>") {
ChargedTimeforCreative = ChargedTimeforCreative+1;
TimeforCreative = ChargedTimeforCreative;
gotoAndPlay (2);
}
Aunque son más de 100 ítems, lo limité a 6 para ver mejor que el "reset" (ver abajo) funcione bien. Parecido en cuanto al largo, está limitado a 7. En el frame 8 hay un par de botones, nombrados en el código al final como Símbolo 1 y 2. El programa pide que en el juego se pruebe el ítem 1. Luego el 2 y 3. Luego pregunta si eso fue mejor que lo anterior (para eso los botones). O sea, intercala 2 métodos. A uno le llamo Clasic y es:
1
2
34
3
35
612
etc
Al otro le llamo Creative y sería así:
1
23
356
1234
etc
Cuando se produce un largo no alcanzado, se compone de los siguientes ítems al más elevado. Cuando es 6, cambia a 1. Los métodos, al intercalarse forman esto:
WispG
Creativo: ShadeG DryadG
ShadeG
Creativo: AuraG SalaG GnomeG
ShadeG AuraG
Creativo: WispG ShadeG DryadG AuraG
DryadG
Creativo: SalaG GnomeG WispG ShadeG DryadG
ShadeG SalaG
Creativo: AuraG SalaG GnomeG WispG ShadeG DryadG
AuraG GnomeG WispG
Creativo: AuraG SalaG GnomeG WispG ShadeG DryadG AuraG
AuraG
ShadeG GnomeG
AuraG GnomeG ShadeG
WispG ShadeG DryadG SalaG
SalaG
DryadG WispG
AuraG GnomeG DryadG
WispG ShadeG DryadG GnomeG
SalaG GnomeG WispG ShadeG AuraG
GnomeG
DryadG ShadeG
AuraG GnomeG AuraG
WispG ShadeG AuraG WispG
SalaG GnomeG WispG ShadeG SalaG
AuraG SalaG GnomeG WispG ShadeG AuraG
WispG
El programa no muestra números sino ítems, pero es lo mismo. Por algún motivo esto no se está aplicando:
if (Print == eval("LastL"+ClasicActualL)) {
// Si el experimento mostrado es igual al grabado como último...
// ...no se hacen más experimentos con ese largo.
Info = "F6: Exps de largo "+ClasicMinL+" completados.\n"+Info;
ClasicMinL = ClasicMinL+1;
}
Por eso repitió "WispG". Sinceramente, no sé cuántos errores puede haber, y el método no es perfecto (por ejemplo en
"Creativo: AuraG SalaG GnomeG WispG ShadeG DryadG
AuraG GnomeG WispG
Creativo: AuraG SalaG GnomeG WispG ShadeG DryadG AuraG"
El submétodo creativo produce 2 resultados casi iguales...
...aunque creo que eso se arreglará cuando le ponga un contador de resets y los contiguos se elijan basados en él. Sería por ejemplo:
"Creativo: AuraG SalaG GnomeG WispG ShadeG DryadG
AuraG GnomeG WispG
Creativo: AuraG GnomeG ShadeG AuraG GnomeG ShadeG AuraG"
Eeen fin, lo importante es que se diría todo experimento, en un orden interesante, variado. De hecho, la pregunta de si el submétodo creativo fue efectivo hace que la lista pueda variar. Si la respuesta es sí, el submétodo se ejecutará en su lugar correspondiente, sino se salteará 1 vez, y en la próxima si se responde de nuevo que no entonces serán 2 veces y así sucesivamente. El método dice experimentos de más largo más seguidos si eso fue efectivo, y sino los dice menos seguidos.
En realidad esto no responde el tema, y los métodos pueden mejorar, seguiré con ello, pero bueno, la base está...