gerish escribió:
bien, resumiendo xdd sería el mismo código que me pusiste arriba quitándo el espacio en contrasena1 y poniendo un pkeyboardPrimitive para que el jugador introduzca la contraseña. (Así me entiendo mejor)
si, sería otra forma de hacer que no se pudiera empezar la segunda parte de un juego pero ... mmmmm aun no tengo pensado hacerlo tan largo, aún tendría que acabar una primera parte
y ...
de momento solo compilo para máquina z
me gustaría hacerlo con glulse ya que hay mas posibilidades en todos los aspectos pero ...
ufffffff
me da mucho palo con lo que me costó aprender inform y encontrar esas cosillas difíciles de saber (como las contraseñas)
además el código que tengo de un juego que estoy en su programación no me compila en glulx porque tiene alg´´un menú ...
incluso la librería bajonivel que utilizo no sirve ...
enfin que lo veo muy complicado adaptar todo el código que tengo hecho
Eeeefectivamente. Vamos, poco a poco y por partes. Aquí pongo un ejemplo para Z (y de momento sólo para Z) de la situación en que el jugador es quien determina determina la contraseña, que viene a ser lo que tú has dicho:
[spoiler]
Código:
array contrasena1 string 10;
array contrasena2 string 10;
!Definimos nuestros 2 arrays tipo string.
!Es probable que no fuera estrictamente necesario que fuesen
!de tipo string, pero eso facilitó mucho testear y depurar
!el ejemplo
Include "EParser";
Include "Acciones";
Include "Gramatica";
!Aquí ponemos los includes de siempre
[inicializar;
do
{
print "Introduce password:^^";
KeyboardPrimitive(contrasena1);
}
until (contrasena1->1~=0);
!He puesto el primer KeyboardPrimitive en un bucle
!del que no sale hasta que la longitud de lo introducido por el
!jugador (que se guarda, como vimos, en posición 1 del array)
!sea distinta de cero
!Así nos aseguramos de que no introduce una cadena vacía
for(::)
if (confirmar_contrasena()==true) break;
!Aquí está el bucle que llama a confirmar_contrasena las veces
!que haga falta hasta que el password sea correcto
localizacion=limbo;
];
[confirmar_contrasena x;
print "Confirma password:^^";
KeyboardPrimitive(contrasena2);
if (contrasena2->1==0)
{
print "Password INCORRECTO";
rfalse;
}
!pequeño parche para que salta automaticamente como
!password incorrecto a poco que el jugador introduzaca una
!cadena vacía
if (contrasena1->1 ~= contrasena2->1)
{
print "Password INCORRECTO";
rfalse;
}
!otro pequeño parche salvavidas que retorna false a poco
!que lo introducido por el jugador no tenga la misma longitud
!exacta que la contraseña.
!Estos dos últimos pueden parecer un poco paranoides, pero
!evitan un par de problemas en los que el jugador
!podía hacer trampa
for(x=2:x<=(contrasena1->1+1):x++)
{
if (contrasena1->x ~= contrasena2->x)
{ print "Password INCORRECTO^";
rfalse;
}
}
"^^Password CORRECTO^";
!Y este era el bucle que examina la contraseña introducida y la
!compara caracter a caracter (letra a letra) con la original.
!De nuevo, notese que empieza por la tercera posición (la de
!índice 2) y dura mientras x sea menor o igual que lo indicado en
!la longitud de la contraseña original + 1, para que todo cuadre
!bien
];
object limbo "limbo"
with descripcion "¿Como has llegado aquí?^
Malditos betatesters...^^",
has luz;
[/spoiler]
Bien, como decía, esto parece (nunca hay que asegurarlo categóricamente XDD) funcionar en Z, pero es completamente inútil en Glulx. Tal y como pensaba, parece ser que es debido al modo absolutamente diferente en que funciona KeyboardPrimitive en uno y en otro. La cosa, como preguntaba ayer, está en ver cuales son exactamente esas diferencias para ver si se pueden sortear de algún modo.
Por suerte, los datos necesarios están documentados y explicados con cierta claridad en:
http://www.firthworks.com/roger/informfaq/ii.html#14
Lo cual hace que haya una pequeña esperanza de conseguir hacer los cambios oportunos para que funcione incluso a los que no estamos puestos en programar inform a tan bajos niveles.
¡A por ello! XDD