CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 19 Sep 2019 01:23

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 36 mensajes ]  Ir a página 1, 2, 3  Siguiente
Autor Mensaje
NotaPublicado: 13 Ene 2005 15:05 
hola, haber si alguien puede ayudarme ...
quisiera saber, si se puede en inform, programar contraseñas
bueno del tipo: introduce tu contraseña:
123456
vuelve a escribir la contraseña:
123457
las contraseñas no coinciden ...
de ese estilo, o: la bomba está formada por un display y un pequeño teclado numérico. Parece que debes introducir la clave correcta para desactivarla ...
44444 el código es correcto!
si no recuerdo mal, hace tiempo ví­ un juego del qe no recuerdo el tí­tulo pero se basaba en el señor de los anillos y estaba hecho en dos partes y para poder jugar la segunda necesitabas una contraseña qe se te proporcionaba al final de la primera parte pero no encontré el código ...
yo dirí­a, qe se hace con arrays
pero no me funciona
al comparar si array1 es igual a array2 me compila, pero no funciona como quiero ... haber si alguien puede ayudarme es todo
gracias!


Arriba
  
 
 Asunto:
NotaPublicado: 13 Ene 2005 15:11 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 15 Dic 2004 21:28
Mensajes: 2302
En la eZtanteria hay un documento de Zak escrito hace bastante tiempo que explica detalladamente como funcionan los arrays, las cadenas, las palabras de diccionario, etc.


Arriba
 Perfil  
 
NotaPublicado: 13 Ene 2005 15:51 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
gerish escribió:
hola, haber si alguien puede ayudarme ...
quisiera saber, si se puede en inform, programar contraseñas
bueno del tipo: introduce tu contraseña:
123456
vuelve a escribir la contraseña:
123457
las contraseñas no coinciden ...


Creo que usando la acción "consultar" puedes lograr ese efecto.
Yo lo hice en una de mis aventuras, tení­as que comparar una clave compuesta por dos letras e introducirla en un ordenador, y creo recordar que aproveché esa acción para ello.

Saludos
Jenesis


Arriba
 Perfil  
 
NotaPublicado: 13 Ene 2005 16:14 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 15 Dic 2004 21:28
Mensajes: 2302
jenesis escribió:
Creo que usando la acción "consultar" puedes lograr ese efecto.
Yo lo hice en una de mis aventuras, tení­as que comparar una clave compuesta por dos letras e introducirla en un ordenador, y creo recordar que aproveché esa acción para ello.


Creo que te refieres a "a veces", efectivamente utilizaste la acción consultar pero previamente extendida a unos cuantos verbos a tu conveniencia:

Código:
extend 'consulta'
 * 'en' noun topic -> consultar;
extend 'consulta'
 * -> abar;
verb 'escribe'='consulta';
verboirregular "escribir" with imperativo 'escribe';
verb 'introduce'='consulta';
verboirregular "introducir" with imperativo 'introduce';
verb 'teclea'='consulta';


De modo que no solo aceptaria eso sino también las gramáticas por defecto de la accion: verbos consultar, leer, etc.

De todas maneras esto hace que puedas especificar cosas como:

Citar:
>teclea sdshgad
Password correcta.


mientras que él lo que querí­a era algo más asi:

Citar:
>teclea password
Introduce la password: skjhdffkjd
Password Correcta.


Quizá lo mejor serí­a utilizar ambos métodos.


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 13 Ene 2005 19:24 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 07 Sep 2004 21:52
Mensajes: 1897
en el documentate fijo que encuentras ejemplos y ejercicios resueltos sobre cómo hacerlo... ahora bien... debes de tener ganas de bucear en él.

Chao.

_________________
Ruber "Urbatain" Eaglenest.
------------------------
http://www.indieorama.com/author/rubereaglenest/


Arriba
 Perfil  
 
 Asunto: contraseñas...
NotaPublicado: 13 Ene 2005 21:58 
bueno el tema de hacerlo con verbos y tal no lo he entendido mucho porque como no lo uso no se como funciona (lo de los verbos) de todas formas copiando el codigo me ha dado errores ...
¿el documentate?
donde puedo encontrarlo?
me leí­ todo el documento de arrays de la eztanteria pero no encontre esto...
gracias!!!!


Arriba
  
 
NotaPublicado: 13 Ene 2005 22:49 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
gerish escribió:
bueno el tema de hacerlo con verbos y tal no lo he entendido mucho porque como no lo uso no se como funciona (lo de los verbos) de todas formas copiando el codigo me ha dado errores ...
¿el documentate?
donde puedo encontrarlo?
me leí­ todo el documento de arrays de la eztanteria pero no encontre esto...
gracias!!!!


¿Pensabas que ese era todo el código necesario para hacer lo que quieres? :shock:

A ver... ese código que ha pegado Presi, es un cachito del código original de mi aventura, y ni siquiera es el bloque entero de instrucciónes necesarias para conseguir lo que te comentaba. Además ahí­ hay verbos inexistentes en la librerí­a, de hecho es código para extender el significado de ciertos verbos que creé para mi caso particular. Es comprensible que no funcione en la tuya. ;)

El DocumentATE está en la EZtanterí­a.
http://caad.mine.nu/eZtanteria/estado_documentate.html

Te recomiendo que te bajes también.
http://caad.mine.nu/eZtanteria/archivos ... 031206.pdf

Ambos te serán de gran ayuda.
Suerte con tu aventura.

Saludos
Jenesis


Arriba
 Perfil  
 
NotaPublicado: 14 Ene 2005 01:19 
El Documentate, el Manual de referencia de InformATE... son lecturas obligadas para desenvolverse con la programación en Inform, y lo suyo es leerselos y asimilarlos con calma y tranquilidad. Otra cosa es que en ellos no vas a encontrar precisamente ninguna solución para el problema especí­fico que planteas, lo cual, por supuesto, no significa que debas echarte atrás. Vamos poco a poco:

Si lo que quieres conseguir es que el juego reconozca una contraseña prefijada de antemano (vamos, que vale que sea la misma en todas las partidas) la cosa es "relativamente" fácil. En el reciente juego "La Mansión" hay una escena de ese tipo en la que para conseguir abrir una puerta el jugador debe teclear una contraseña concreta en un terminal... ¿Incanus? :-)

Ahora bien, si la contraseña debe poder ser establecida por el jugador (y por tanto puede ser diferente en cada partida) nos topamos con la abrumadora realidad de que Inform no está ni mucho menos preparado ni concebido para ese tipo de cosas, es decir, para reconocer como propia de su vocabulario una palabra creada por el jugador en tiempo de juego. Vamos, que no hay una manera "directa" de hacerlo, hay que dar vericuetos y rodeos, muchos, de hecho.

Como bien has intuido desde el principio, la cosa va de usar arrays. La idea serí­a conseguir que cuando el jugador defina la "clave" y la introduzca, esta se almacene en un array de caracteres. Y que luego, cuando le sea necesario usarla, se pueda comparar la palabra tecleada con el contenido de ese array. En principio, ese es el único modo que tendrí­a Inform de manejarse con palabras "externas" al vocabulario definido en el código de la aventura.

La parte mala es que ahí­ ya nos hemos metido en un nivel muy alejado de lo conocimientos de los usuarios principiantes y hasta de los avanzados, ya te digo que esto no es algo que se haga habitualmente. Se requiere programar a "bajo nivel", entendiendo por "bajo nivel" trastear muy cerca de las "tripas" de la máquina Z.

Hacerse se ha hecho en más de una ocasión, ahora que mi particular consejo serí­a no meterte en semejante berenjenal de buenas a primeras y que, de momento, te conformaras con algo más sencillito (como lo de la mencionada Mansión). Claro que estoy suponiendo, por el hecho de que desconocí­as el manual Documentate, que eres nuevo en Inform. Si no es el caso, todo es cuestión de respirar hondo y tirarte de cabeza a ello :-)

(Y perdón por no resolverte nada y encima pintartelo tan mal XDD)


Arriba
  
 
NotaPublicado: 14 Ene 2005 02:43 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Gerish, los dos casos que se han mencionado se dan en dos de mis aventuras.
En "A veces..." el password está ya definido en el código, y el jugador ha de descubrirlo y usarlo para acceder al ordenador.
En "Dios en zapatillas, se bautiza a un psi con el nombre que el jugador elige para él (password nueva) pasando a responder por ese nombre como si de un objeto más se tratara.
El código de ambas aventuras está disponible bajo licencia GPL, solo que el de Dios en zapatillas está pendiente de arreglar un par de bugs y por eso no está publicado.
Si estás interesado puedes pedí­rmelo y te los paso siempre que cumplas con la licencia y el código que generes a partir de estos sean también publicados bajo licencia GPL.
http://www.es.gnu.org/licencias/index.html
Por supuesto no será cuestión de "cortar y pegar", pero si tienes ya una idea de lo que quieres te ayudará bastante y si lo entiendes no tendrás demasiada dificultad en adaptarlo a tu caso.


Saludos
Jenesis


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 14 Ene 2005 15:02 
haber, que parece que lo conseguí­.
aquí­ el código de lo que he hecho ...

array contrasena1-> 10;
array contrasena2-> 10;

Include "EParser";
Include "Acciones";
Include "Gramatica";

[ inicializar parseraux;
print "Introduce tu pasword:^^";
contrasena1->0=10;
KeyboardPrimitive(contrasena1,parseraux);
confirmar_contrasena();
];

[ confirmar_contrasena parseraux;
print "Confirma el password:^^";
contrasena2->0=10;
KeyboardPrimitive(contrasena2,parseraux);
! hasta aquí­ todo bien ahora biene el jaleo...
! hacer que si no coinciden los dos arrays debuelva un mensaje como: los passwords no coinciden y llame a inicializar otra vez
! (para volver a introducir el password) o a confirmar_contrasena para que el jugador la ponga bien...
if (contrasena2->1 ~=contrasena1->1)
{
print "El pasword no es correcto...^^";
confirmar_contrasena();
}
if (contrasena2->1 ==contrasena1->1)
{
print "Password correcto:^^";
localizacion=limbo;
}

];

object limbo "limbo"
with descripcion "¿Como has llegado aquí­?^
Malditos betatesters...^^",
has luz;

esta era la idea que tení­a desde un principio
no se porqué no me funcionaba como querí­a parece que ahora si ...
raro hee? xd
bueno os lo pongo más que nada para que me digais si está bien así­ ... y porque creo que entendereis mejor a lo que me refiero
y si, conozco el documentate de hecho gran parte de lo que se de inform lo aprendí­ de él lo que no sabí­a que se llamara así­ :P
Deduzco que si este programa es correcto (el código) para que haga lo que quiero para hacer una contraseña predefinida bastarí­a con ponerla en contrasena1
array contrasena1->1 "ddpjlc00s";
y lo demás serí­a igual que en el código anterior (comprobar una vez el jugador introduce la contraseña, si es igual a contrasena1)
gracias!


Arriba
  
 
 Asunto:
NotaPublicado: 14 Ene 2005 15:09 
el problema que tení­a con ese programa era que al comprobar si contrasena2 no era igual a contrasena1 ejecutaba el código de la comprobación de si contrasena2 era igual a contrasena1 y el código de esta comprobación lo pasaba por alto si la condición se cumplí­a ... xd


Arriba
  
 
 Asunto:
NotaPublicado: 14 Ene 2005 16:45 
Pooos, así­ a bote pronto, y sin comprobarlo, a mí­ me da que tu código sólo comprueba el primer caracter de la contraseña...

¡Parecí­a fácil! ¿eh? :-)


Arriba
  
 
NotaPublicado: 14 Ene 2005 17:15 
gerish escribió:
o: la bomba está formada por un display y un pequeño teclado numérico. Parece que debes introducir la clave correcta para desactivarla ...
44444 el código es correcto!


Puedes echarle un vistazo a las fuentes de 'Casi Muerto', en la parte de la consola para inspirarte.


Arriba
  
 
 Asunto:
NotaPublicado: 14 Ene 2005 20:47 
¿que solo comprueva el ... ¿primer carácter????
Pues no lo se, si que es cierto que he testeado decenas y decenas de veces este programa y hace lo que le da la gana ... según que password pones (la primera vez) al poner la segunda si no es la misma actua como si lo fuera.
En caso de funcionar como debe, si pones el segundo password diferente al primero muchas veces acaba aceptandolo ...
no entiendo ...
miraré casi muerto haber si encuentro algo nuevo


Arriba
  
 
 Asunto:
NotaPublicado: 14 Ene 2005 21:43 
gerish escribió:
¿que solo comprueva el ... ¿primer carácter????
Pues no lo se, si que es cierto que he testeado decenas y decenas de veces este programa y hace lo que le da la gana ... según que password pones (la primera vez) al poner la segunda si no es la misma actua como si lo fuera.
En caso de funcionar como debe, si pones el segundo password diferente al primero muchas veces acaba aceptandolo ...
no entiendo ...
miraré casi muerto haber si encuentro algo nuevo


Pues sí­, estás comprobando sólo el "contrasena1->1"... que es sólamente el elemento número 1 ( o sea, el segundo, ya sabes que el primero es el 0) el cual podrí­a o no coincidir, pero no tienes en cuenta el resto de caracteres de la contraseña.

Para más coña (ya te digo que esto tiene su gracia :-) ) la rutina KeyboardPrimitive() no es enteramente... inocente... quiero decir, trastea con su buffer, en nuestro caso el array contrasena1 o contrasena2. Tras su paso deja el primer elemento (el 0, recuerda) con la longitud del buffer y el segundo (el 1) con la longitud de la cadena tecleada por el jugador (de hecho, lo habitual es que no coincidan exactamente). El resultado es que al comparar contrasena1->1 y contrasena2->1 te saldrá siempre positivo si tienen la misma longitud, es decir, si el jugador ha tecleado cualquier cadena de la misma longitud que la contraseña... vamos, que si la contraseña es pepe y el jugador teclea caca la rutina creerá que la clave es correcta ^_^''

Te meto en spoiler una alternativa más o menos comentada que todaví­a debe pulirse un poquito:

[spoiler]Vamos a poner, por ejemplo, que la contraseña correcta sea "flipi". Comenzamos definiendo los arrays:

Código:
array contrasena1 string " flipi";
array contrasena2 string 6;


Ahora toca leerse el texto sobre los arrays y cadenas para entender las implicaciones de especificar lo de "string"... y... ¿por qué habre´puesto un espacio en blanco al principio de la contrasena1? Huuum...

Metemos los includes de rigor:

Código:
Include "EParser";
Include "Acciones";
Include "Gramatica";


Ponemos la rutina inicializar:

Código:
[inicializar;
   for(::)
      if (confirmar_contrasena()==true) break;
   localizacion=limbo;
];


Si repasa la sección de Documentate que trata sobre los bucles verás que he puesto un bucle infinito que llama una y otra vez a la rutina confirma_contrasena hasta que esta devuelva true, cosa que no sucederá, como veremos más abajo, hasta que el jugador no meta la contraseña correcta, tras lo cual hace que la localización sea el limbo y comienze la aventura en sí­ misma.

Y esta es la rutina confirma_contrasena con todo el meollo:

Código:
[confirmar_contrasena x;
   print "Introduce password:^^";
   KeyboardPrimitive(contrasena2);
   for(x=2:x<=contrasena1->0:x++)
   {   
      if (contrasena1->x ~= contrasena2->x)
      {   
         print"Password INCORRECTO^";
         rfalse;
      }
   }
   "^Password CORRECTO^";
];


Fijate que ahora, tras llamar a KeyboardPrimitive, no se contenta con mirar sólo uno de los caracteres, como tu hací­as, sino que se mete en un bucle que los compara todos uno a uno. En cuanto encuentra uno que no coincide salta y dice que es incorrecto y retorna con el valor false a la rutina inicializar que lo volverá a llamar hasta que meta la clave buena.
Como estás viendo, el bucle que los compará letra a letra recorre los valores o posiciones del array desde la 2 a la indicada en "contrasena1->0" (que, como sabrás, almacena la longitud de la clave original, de nuevo leerse con muucha calma el texto sobre arrays y cadenas). ¡Un momneto! ¿y por qué desde la 2 y no desde la 1 o la 0 que parecerí­a lo normal?
Pues porque la posición cero almacena un byte con la longitud de la cadena (hasta ahí­ bien) y una de las "gracias" que hace KeyboardPrimitive (en realidad no ella, sino la sentencia de ensamblador de la máquina Z a la que llama, "read" es colocar en el segundo elemento (el nº 1, recuerda siempre lo de que el primero es el 0) la longitud de lo que haya introducido exactamente el jugador. Evidentemente sus buenos motivos tiene y lo hace para bien, pero en este caso implica que empecemos a comparar desde el tercer elemento (el nº 2) de contrasena2. Como eso no ha sucedido en contrasena1, he recurrido a la chapuzilla de meter un espacio en blanco al principio de ella para que la comparación elemento a elemento coincida adecuadamente.

Y tras todo ello solo queda meter la localidad limbo y... ¡a jugar! ;-)

Código:
object limbo "limbo"
with descripcion "¿Como has llegado aquí­?^
Malditos betatesters...^^",
has luz;
[/spoiler]

La parte buena es que funciona estupendamente en máquina Z y la mala es que, como cabí­a esperar de un apaño semejante, en Glulx compila, pero no funciona ni para atrás, debido, en principio, al modo sustancialmente distinto en que funcionan en una y otra la rutina KeyboardPrimitive. Estoy mirando, sin mucho éxito, a ver cómo podrí­a hacerse, pero me temo que la cosa me supera bastante.

¿alguna idea?


Arriba
  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 36 mensajes ]  Ir a página 1, 2, 3  Siguiente

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
cron
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM