Bennu Game Development

Foros en Español => Sugerencias => Topic started by: juanpe on April 03, 2009, 11:18:51 PM

Title: escribir textos más facilmente
Post by: juanpe on April 03, 2009, 11:18:51 PM
  Hola, llevo algun tiempo pensando un tema, (no se si existira algo que lo haga más fácil), el caso es que cuando aprendi a programar fue con un amstrad en lenguaje basic y era muy fácil dar la posibilidad de escribir con el teclado para por ejemplo responder una pregunta. Ya que bennu es un lenguaje que ahorra trabajo a la hora de manejar gráficos, igual creo que también podría facilitar escribir textos. Un ejemplo:

  Para escribir los nombres de los jugadores de tu equipo de fútbol, que exista una función como:

 portero=escribir_texto(fuente,x,y,centrado,y lo que sea)
 defensa1=escribir_texto(fuente,x,y,centrado,y lo que sea)
 ...

 colocaria un puntero que permitiría al usuario escribir y cuando haya acabado pulsa enter, quedando memorizado y pudiendo escribirlo al disco duro. Creo que se me entiende, que no haya que definir nada de nada, escribes lo de arriba y ya puedes introducir texto sin más complicación.
 Recuerdo que en el juego de fútbol que venía con el DIV para escribir los nombres de los jugadores contenía unas cuantas lineas.
 No se si lo que digo es posible pero creo que para la mayoría de los programadores sería cómodo una función de ese tipo.
 En caso de no poder hacerse creo que otra posibilidad sería que todo el código necesario para hacer esto se podría ofrecer en un pequeño prg para que solo tengamos que copiar y pegar.
Title: Re: escribir textos más facilmente
Post by: SplinterGU on April 03, 2009, 11:30:03 PM
ummm... podria hacerse algo asi...
Title: Re: escribir textos más facilmente
Post by: TYCO on April 04, 2009, 06:16:09 PM
Y digo yo... usando un write_string (http://wiki.bennugd.org/index.php?title=Write_string) no te sirve??? solo tienes que cambiar una variable que sea de tipo string:


Program test;

Private
    string nombre;
Begin
    write_string(0,0,0,0,&nombre);

    Repeat
        If (ascii > 64 AND ascii < 91) // A-> 65. Z->90. MAYUSCULAS
            nombre+=chr(ascii);
        End
        If (ascii > 96 AND ascii < 123) // a-> 97. z-> 122. minusculas
            nombre+=chr(ascii);
        End
        If (ascii == 8) // Tecla de Borrado
            nombre=substr(nombre,0,len(nombre)-1);
        End
        While (ascii <> 0) Frame; End
        Frame;
    Until (key(_enter))
End


Ya ves que en poco mas de dos líneas está hecho. Ahora que si no es lo que buscas, ese es otro tema y no lo entendí.
Title: Re: escribir textos más facilmente
Post by: juanpe on April 04, 2009, 10:51:34 PM
OK lo intente probar, pero me da error:unknown identifier full-screen, esto por qué puede ser?
Title: Re: escribir textos más facilmente
Post by: juanpe on April 04, 2009, 11:26:45 PM
 ;D Bien, ya lo hice funcionar veo que no es tan difícil; aún así mi consulta sería si se puede hacer aún más sencillo, es decir, te ahorras:
        If (ascii > 64 AND ascii < 91) // A-> 65. Z->90. MAYUSCULAS
            nombre+=chr(ascii);
        End
        If (ascii > 96 AND ascii < 123) // a-> 97. z-> 122. minusculas
            nombre+=chr(ascii);
        End
        If (ascii == 8) // Tecla de Borrado
            nombre=substr(nombre,0,len(nombre)-1);
y además ya iría incluido puntos, comas, parentesis... y todo lo necesario.
Y lo más importante no es eso, es que sería más fácil de aprender sobretodo para un novato ( y para los vaguetes como yo xD). Todo hay que decirlo, que visto como tú lo planteas tampoco se hecha tan en falta la función que yo propongo.
Title: Re: escribir textos más facilmente
Post by: Danielo515 on April 05, 2009, 12:17:33 AM
funciona muy bien tyco, si se pone en una función y se le añaden dos cositas más, tendremos algo muy interesante a compartir con la comunidad.
Title: Re: escribir textos más facilmente
Post by: Drumpi on April 05, 2009, 05:26:14 PM
Juer, y pensar que este código parecía sencillo:

char letra;
string dato_a_devolver;
(...)

loop
letra=ascii;
switch (letra)
case 13: break; end //intro
case 9: //creo que era borrar
dato_a_devolver=substr(dato_a_devolver,0,-1);
end
case 1: end //caracter/es no válido/s, yo lo ignoro, tu puedes meter un error.
//todos los cases especiales que quieras
default: dato_a_devolver+=letra; end //una letra nueva, incluye caracteres acentuados, números, mayusculas, minúsculas...

frame;
end //loop

return(dato_a_devolver);

Yo lo he usado siempre con resultados muy satisfactorios (salvo el return, que con los "problemas" por devolver sólo ints, terminaba poniendo la string en plan global o parámetro por referencia). Otra cosa es querer poner el cursor en medio y todo eso, que ya es más dificil.
Title: Re: escribir textos más facilmente
Post by: SplinterGU on April 05, 2009, 07:53:50 PM
borrar es 8, 9 es tab...
Title: Re: escribir textos más facilmente
Post by: juanpe on April 05, 2009, 10:36:47 PM
gracias Drumpi por tu idea. He estado buscando la función write_string en una ayuda de div2 y veo que no está, supongo que será una función de original de fenix. He visto que la bennu wiki es una ayuda muy maja que está en internet, pero donde yo estoy programando no tengo internet, existe alguna ayuda más o menos actualizada que defina todas las funciones y que no sea a través de internet?
Title: Re: escribir textos más facilmente
Post by: SplinterGU on April 06, 2009, 01:00:15 AM
Si que existe... tenes que incluir el "mod_text"...

hay una utilidad llamada moddesc... que sirve para ver que tiene cada modulo...

saludos.
Title: Re: escribir textos más facilmente
Post by: Prg on April 06, 2009, 04:22:31 AM
también existe la del flamebird, es una ayuda en español, media actualizada, pero que describe las funciones muy ampliamente. write_string es nueva, no estaba en el div, tampoco write_var :)

aquí hay otra sugerencia

function escanea_teclado(fuente,x,y,alin)
private
string mi_texto;
contador=0, contador1;
car_act;
mitexto_string;
begin

mitexto_string=write_string(fuente,x,y,alin,&mi_texto);


while (not key(_enter))

if (ascii<>0 or key(_backspace))
if (car_act==true)
substr(mi_texto,0,len(mi_texto)-1);
car_act=false;
     if (key(_backspace)) //no recuerdo si así se llama, disculpen
        mi_texto=substr(mi_texto,0,len(mi_texto)-1);
     elseif ((ascii > 64 AND ascii < 91)  or (ascii > 96 AND ascii < 123))
       mi_texto+=ascii;
     end
end

     if (contador>15 & cont_act==true)
     substr(mi_texto,0,len(mi_texto)-1);
     car_act=false;
     end
     if (contador>30) contador=0; mi_texto+="_"; car_act=true;
     end
frame;
end
end
return(mi_texto);
delete_text(mitexto_string);

end

no lo he probado si funciona, quizá algunos end o algo así, pero este es un código que escribe un texto hasta finalizar con enter. he usado un código similar para mis editores, pero este lo he escrito aquí, por lo tanto no está probado je je je
Title: Re: escribir textos más facilmente
Post by: juanpe on April 06, 2009, 11:18:41 PM
Buscando por internet he encontrado algo de información sobre el lenguaje clásico basic de commodore 64. El equivalente (salvando las diferencias xD) a los textos de arriba sería algo así:

10 INPUT "nombre del portero:"; NN$
20 end

Imprime en pantalla la pregunta, coloca un puntero para escribir y al pulsar enter memoriza la respuesta en la variable NN

Si alguien lo quiere comprobar puede bajarse el emulador de commodore de: http://www.ccs64.com/, copia el texto (importante pulsar ENTER tras escibir cada linea) y abajo escribe RUN, y pulsa ENTER para ejecutar. Que recuerdos me trae!
Title: Re: escribir textos más facilmente
Post by: SplinterGU on April 06, 2009, 11:29:27 PM
no es solo de comodore, en todo basic esta esa funcion.
Title: Re: escribir textos más facilmente
Post by: Drumpi on April 07, 2009, 05:00:45 PM
Doy fe de que mi Amstrad CPC464 lo hacía, lo he consultado en el manual de usuario.
Es un poco raro que el "manual de usuario" sea un curso de programación, incluso en los últimos temas te enseñan a hacer un rompe-ladrillos sencillo. Si, aun conservo los libros, aunque no conserve aquel PC que tantos buenos ratos me hizo pasar (snif).

Una cosa que nunca comprendí: si en aquella época todos los PCs usaban basic ¿por qué eran incompatibles? ¿Es que los programas se guardaban en binario, y no coincidían instrucciones con los comandos? porque siempre que había un error se podía leer el código fuente tal y como fue programado. En aquella época distinguir un lenguaje de alto nivel y ensamblador no parecía fácil :P
Title: Re: escribir textos más facilmente
Post by: SplinterGU on April 07, 2009, 10:53:18 PM
algunos guardaban programas en texto, otros en una mezcla de texto y binarios... pero mas alla de eso los basic tenian sus particularidades, algunos mas funciones que otros, o algunas diferentes para tratar ciertas cosas...
mas alla de eso, no todo era basic, habia tambien mucho asm... los juegos comerciales eran en asm... solo la parte del arranque era en basic... pocas lineas... y los bloques en asm, eran binarios, mas bien era codigo de maquina.
y te aseguro que si se podia facilmente asm y lenguaje de alto nivel... pero seguro la ignorancia de muchos al respecto de la programacion en asm y basic les hacia dificil hacer la distincion...

yo tengo los manuales de mis tk85 y tk90 (version brasilera de zx1500 y zx2000), incluso tengo las maquinas, pero ya no funcionan.

y llamar pc a un cpc464 es demasiado generoso...

aca te dejo un regalito...

http://www.youtube.com/watch?v=OvChkOHgDIo

http://www.youtube.com/watch?v=y2EqX3rpJ6M&feature=related
Title: Re: escribir textos más facilmente
Post by: Drumpi on April 08, 2009, 01:43:39 AM
Quote from: SplinterGU on April 07, 2009, 10:53:18 PM
y llamar pc a un cpc464 es demasiado generoso...

aca te dejo un regalito...

http://www.youtube.com/watch?v=OvChkOHgDIo

http://www.youtube.com/watch?v=y2EqX3rpJ6M&feature=related

Bueno, teniendo en cuenta que fue lo más parecido que había en la época a un ordenador, y que me duró hasta prácticamente el 96 (y porque me obligaron a tirarlo, porque funcionaba como el primer día).

Juer, de los 100 juegos, habré jugado a diez, pero sólo tuve dos ¿y los clásicos de Amsoft como el "oh! mummy!" o el "plaga galáctica"? ¿Y juegazos como "Indiana jones y la última cruzada", "Hydra", "Batman" en isométrica...? ....... ¿Y de dónde salen tantos juegos de kárate y ninjas? :D
Y una cosa más: yo tenía el mítico monitor de fósforo, de pantalla verde.

Bueno, lo dejo, que me aparto del hilo de la discusión y se me va a saltar la lagrimita y voy a terminar por instalar el emulador en la gp2x :P
Title: Re: escribir textos más facilmente
Post by: juanpe on April 09, 2009, 01:51:29 PM
El Amstrad si tiene esas funciones, de hecho como ya dije yo lo aprendi en un Amstrad. Recuerdo que yo jugué a ese rompe-ladrillos que comentas, sencillito pero divertido, jeje

Saludos
Title: Re: escribir textos más facilmente
Post by: Prg on April 16, 2009, 04:54:49 PM
mi codigo anterior funcionando,  :)
[code language="bennu"]private
   
   string mitexto;
begin
   set_mode(800,600,32);
   
   
   escanea_teclado(0,400,300,4,&mitexto);
   write(0,200,300,4,mitexto);
   while (not key (_esc))
      frame;
   end
end


function escanea_teclado(fuente,x,y,alin,string * mi_texto)
private
   
   contador=0, contador1;
   car_act;
   mitexto_string;
   press;
   
begin
   
   mitexto_string=write_var(fuente,x,y,alin,mi_texto[0]);
   
   
   while (not key(_enter))
      
      if (ascii<>0 or key(_backspace) or key(_space))
      if (press ==false)
         if (car_act==true)
            mi_texto[0]=substr(mi_texto[0],0,len(mi_texto[0])-1);
            car_act=false;
         end   
            if (key(_backspace)) //no recuerdo si así se llama, disculpen
               mi_texto[0]=substr(mi_texto,0,len(mi_texto[0])-1);
            elseif ((ascii > 64 AND ascii < 91)  or (ascii > 96 AND ascii < 123))
               mi_texto[0]+=chr(ascii);
            elseif (key(_space))
            mi_texto[0]+=" ";
            end
         press=true;
         end
         else
         press=false;
      end
      contador++;
      if (contador>30 & car_act==true)
            mi_texto[0]=substr(mi_texto[0],0,len(mi_texto[0])-1);
            car_act=false;
            contador=0;
         end
         if (contador>15 & car_act==false)  mi_texto[0]+="_"; car_act=true;
         end
      frame;
   end
   if (car_act==true)
            mi_texto[0]=substr(mi_texto[0],0,len(mi_texto[0])-1);
            
         end   
   delete_text(mitexto_string);
   
end
[/code]