Escribir letra a letra en BASIC Spectrum

Si tienes alguna duda y crees que alguien podría resolverla, ponla aquí. || If you have any doubt about programming, post it here.

Moderador: CEZ

Responder
Zael
16 bits
16 bits
Mensajes: 55
Registrado: 12 Mar 2006 22:53

Escribir letra a letra en BASIC Spectrum

Mensaje por Zael »

Hola. Me gustaría saber si se puede escribir un texto que vaya apareciendo letra a letra en código BASIC Spectrum.

Gracias. Un saludo.
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensaje por na_th_an »

Sí:

Código: Seleccionar todo

10 GOTO 1000
20 REM las rutinas que llames mucho van más rápido si las pones al principio
30 FOR I = 1 TO LEN(A$):PRINT A$(I);:PAUSE 10:NEXT I:PRINT:RETURN
1000 LET A$="ESTE MENSAJE APARECERA LETRA POR LETRA":GOSUB 30
1010 LET A$="ESTE MENSAJE TAMBIEN APARECERA LETRA POR LETRA":GOSUB 30
1020 LET A$="HOLA MAMAAAA":GOSUB 30
Explicación (que si no, no sirve pa ná): Si A$ es una cadena, A$(I) imprime el carácter Iésimo (empezando en 1) de esa cadena. Lo que tenemos ahí es un bucle que recorre desde 1 hasta la longitud de la cadena (LEN A$). En cada iteración del bucle, se imprime el carácter correspondiente cuidándonos de poner un ";" al final para que el siguiente se imprima a continuación.

El PAUSE 10 introduce una pequeña pausa de aproximadamente 1/5 de segundo. Se puede cambiar por BEEP o por lo que más te guste :)

Al final del bucle ponemos "PRINT" para avanzar a la linea siguiente.
Zael
16 bits
16 bits
Mensajes: 55
Registrado: 12 Mar 2006 22:53

Mensaje por Zael »

Gracias de nuevo na_th_an.

La respuesta clara, bien explicada y además rapidísima.

Te vas a convertir en un fijo en los créditos de los juegos Ancient Bits.

Gracias de nuevo. Un saludo.
Avatar de Usuario
Terrorquack
32 bits
32 bits
Mensajes: 397
Registrado: 26 May 2005 14:19
Contactar:

Mensaje por Terrorquack »

nathan, más emocionao! :cry: me has hecho despertar el gusanillo de antaño de ver qué hacía el Amstrad al escribir esas sentencias :cry: cuando llegue a casa lo pruebo a ver qué hace (aunque más o menos creo intuirlo :P )
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensaje por na_th_an »

En Amstrad no funcionaría, habría que poner algo así:

Código: Seleccionar todo

10 GOTO 1000
20 REM las rutinas que llames mucho van más rápido si las pones al principio
30 FOR I = 1 TO LEN(A$):PRINT MID$(A$,I,1);:FOR J=1 TO 2000: NEXT J:NEXT I:PRINT:RETURN
1000 LET A$="ESTE MENSAJE APARECERA LETRA POR LETRA":GOSUB 30
1010 LET A$="ESTE MENSAJE TAMBIEN APARECERA LETRA POR LETRA":GOSUB 30
1020 LET A$="HOLA MAMAAAA":GOSUB 30
A$(I) es específico de Sinclair BASIC. Hay que usar el MID$(A$,I,1) que hace lo mismo y es de BASIC estándar.

PAUSE 10 es específico de Sinclair BASIC. De memoria no me acuerdo como poner retardos en el CPC, así que he hecho la cutrez de meter el típico bucle que no hace otra cosa que perder el tiempo.
Responder