escribir textos más facilmente

Started by juanpe, April 03, 2009, 11:18:51 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

juanpe

  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.

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

TYCO

Y digo yo... usando un 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í.
Programador, Escritor/Guionista y Deportista.

Todo Modo Gráfico tiene por detrás una Línea de Comandos.

SnowCraft Remake (100%)
Rally Mortal (87%)

juanpe

OK lo intente probar, pero me da error:unknown identifier full-screen, esto por qué puede ser?

juanpe

 ;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.

Danielo515

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.

Drumpi

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.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

juanpe

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?

SplinterGU

Si que existe... tenes que incluir el "mod_text"...

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

saludos.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

#10
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
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

juanpe

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!

SplinterGU

no es solo de comodore, en todo basic esta esa funcion.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

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
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

#14
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
Download Lastest BennuGD Release: http://www.bennugd.org/node/2