Tabla de multiplicar

10 CLS
20 INPUT "Dime el multiplicador";M
30 PRINT M;"X 1";" = ";1*M
40 PRINT M;"X 2";" = ";2*M
50 PRINT M;"X 3";" = ";3*M
60 PRINT M;"X 4";" = ";4*M
70 PRINT M;"X 5";" = ";5*M
80 PRINT M;"X 6";" = ";6*M
90 PRINT M;"X 7";" = ";7*M
100 PRINT M;"X 8";" = ";8*M
110 PRINT M;"X 9";" = ";9*M
120 PRINT M;"X 10";" = ";10*M

En este ejemplo, pedimos por teclado que se introduzca un número que usaremos como multiplicador y el multiplicando, serán los números comprendidos del 1 al 10.

Cada línea PRINT hace el cálculo y lo muestra formateado.

Tabla de multiplicar optimizada con un bucle

10 CLS
20 INPUT "Dime el multiplicador";M
30 FOR C=1 TO 10
40 PRINT C;"X ";M;" = ";C*M
50 NEXT C

Hemos cambiado todas las líneas PRINT por una sola que se encuentra dentro de un bucle FOR / NEXT. De este modo, mientras se recorre el bucle del 1 al 10, se van pintando los resultados.

Adivina mi número

10 Y=INT(RND(1)*10)
20 CLS
30 PRINT "ADIVINA MI NUMERO"
40 PRINT "-----------------":PRINT
50 INPUT "DAME UN NUMERO (0-9)";X
60 IF X < Y THEN PRINT:PRINT "DEBE SER MAYOR":FOR I=1 TO 300:NEXT I:GOTO 20
65 IF X > Y THEN PRINT:PRINT "DEBE SER MENOR":FOR I=1 TO 300:NEXT I:GOTO 20
70 IF Y = X THEN PRINT:PRINT "ACERTASTE MI NUMERO!!"
80 PRINT:PRINT "Mi numero era:";Y

Este sencillo programa, genera un número aleatorio del 1 al 10 y lo que hace es ir comparando el número introducido por teclado, variable X, con el generado de modo aleatorio, variable Y. Cuando son iguales, finaliza el programa. Observa que usamos la función INT para obtener el número entero sin decimales.

Jugando con bucles

10 CLS
15 PRINT "*"
20 FOR I=1 TO 9
30 FOR J=1 TO I
40 PRINT "*";
50 NEXT J
55 PRINT "*"
60 NEXT I

Este ejemplo pinta una media pirámide hecha a base de asteriscos. El “;” (punto y coma) después del PRINT sirve para que se pinte el siguiente PRINT seguido, sin saltos de línea. 

Jugando a tabular la salida de datos

10 CLS
20 DIM ano$(12)
30 FOR I=1 TO 12
40 READ ano$(I)
100 PRINT ano$(I);TAB(15);I
110 NEXT I
120 END
130 DATA Enero,Febrero,Marzo,Abril,Mayo
140 DATA Junio,Julio,Agosto,Septiembre
150 DATA Octubre,Noviembre,Diciembre

Este otro ejemplo, muestra la lista de meses con sus nombres y el número de mes al que corresponde. Usamos la función TAB para formatear la salida del número de mes.

Textos que se mueven

10 CLS
20 FOR X=1 TO 6
30 LOCATE X,2
40 PRINT"NOMBRE"
50 FOR T=1 TO 100:NEXT T
60 LOCATE X,2
70 IF X<6 THEN PRINT " "
80 NEXT X
90 FOR X=30 TO 20 STEP -1
100 LOCATE X,2
110 PRINT "APELLIDO"
120 FOR T=1 TO 100:NEXT T
130 LOCATE X+7,2
140 IF X>20 THEN PRINT " "
150 NEXT X

En este ejemplo, podremos observar cómo se mueven dos cadenas de texto. NOMBRE se desplaza hacia la derecha y APELLIDO se desplaza hacia la izquierda. Utilizamos el comando LOCATE para posicionar el texto en los ejes X,Y de la pantalla. En este caso para ambos textos, el eje Y es 2. Los FOR.. NEXT con la variable X son los que manejan el movimiento del eje X, y al usar LOCATE X,2 y LOCATE X+7 junto con los FOR.. NEXT X, provocamos el movimiento en dicho eje. Los IF THE ELSE, controlan el borrado del carácter que vamos arrastrando. En el caso de NOMBRE es la letra N y en APELLIDO en la O. Prueba a quitar dichos IF THEN ELSE y comprobarás para que se usan. Los FOR..NEXT con la variable T actúa como temporizador, es decir, el tiempo que tarda el desplazar el texto carácter a carácter. Si cambiamos su valor, 100 por otro menor, los textos se desplazarán más rápido y por supuesto, si ponemos un valor superior a 100, se desplazarán más lentos.

Atrapa el número

10 KEY OFF:SCREEN 0:WIDTH 80
20 CLS
30 PRINT "ATRAPA EL NUMERO" TAB(30) "NUMERO ALEATORIO"
40 I=INT(9*RND(-1*TIME))
50 LOCATE 5,2:PRINT I
60 A=INT(9*RND(-1*TIME))
65 LOCATE 35,2:PRINT A
70 LOCATE 5,6: PRINT "Pulsa la barra espaciadora para congelar un numero"
80 K$=INKEY$
90 IF K$=" " THEN 140
100 GOTO 60
140 IF I=A THEN LOCATE 10,9:PRINT "ERES UN GENIO!"
150 IF I<>A THEN LOCATE 10,9:PRINT "HAS FALLADO"
230 LOCATE 1,12:PRINT "QUIERES JUGAR DE NUEVO?(S/N)";
240 A$=INKEY$
250 IF A$="S" OR A$="s" THEN GOTO 20 ELSE IF A$="N" OR A$="n" THEN END ELSE GOTO 240

Este programa hace uso de dos números aleatorios contenidos en dos variables; I, A. El número I se nos muestra bajo el texto ATRAPA ESTE NUMERO y bajo el texto NUMERO ALEATORIO vemos un número que va cambiando con rapidez del 1 al 9 de forma aleatoria, esa es la variable A.

El programa espera la pulsación de la barra espaciadora para parar el número que se autogenera rápidamente y el objetivo es pararlo en el mismo número que nos muestra a la izquierda. Si fallamos o acertamos, el programa mostrará el texto de ERES UN GENIO o HAS FALLADO, según el caso. Podremos continuar la partida pulsando S/s o parar pulsando N/n. La clave de este código es que genera dos códigos aleatorios y los comparamos para ver si son iguales o no.

Slot machine

10 REM SLOT MACHINE
20 KEY OFF:SCREEN 0,,0
30 DIM DADO(3)
40 M=100
50 APUESTA=5:I=1:CO=0:DI=0:TR=0:PI=0
55 DADO(0)=0:DADO(1)=0:DADO(2)=0:DADO(3)=0
60 CLS
70 PRINT "SLOT MACHINE"
80 DADO(I)=INT(4*RND(-1*TIME))
90 IF DADO(I)=0 THEN DADO(I)=67
100 IF DADO(I)=1 THEN DADO(I)=68
110 IF DADO(I)=2 THEN DADO(I)=69
120 IF DADO(I)=3 THEN DADO(I)=70
130 LOCATE 5+I,2:PRINT CHR$(1)+CHR$(DADO(I))
140 K$=INKEY$
150 IF K$=" " THEN 180
160 GOTO 80
180 IF DADO(I)=67 THEN CO=CO+1
190 IF DADO(I)=68 THEN DI=DI+1
200 IF DADO(I)=69 THEN TR=TR+1
210 IF DADO(I)=70 THEN PI=PI+1
215 IF I<3 THEN I=I+1:GOTO 80
220 IF CO>1 THEN APUESTA=APUESTA*CO
230 IF DI>1 THEN APUESTA=APUESTA*DI
240 IF TR>1 THEN APUESTA=APUESTA*TR
250 IF PI>1 THEN APUESTA=APUESTA*PI
260 IF APUESTA=5 THEN M=M-APUESTA:LOCATE 10,8:PRINT "HAS PERDIDO:";APUESTA
270 IF APUESTA>5 THEN M=M+APUESTA:LOCATE 10,8:PRINT "HAS GANADO:";APUESTA
280 LOCATE 10,10:PRINT "TU MONEDERO:";M
290 LOCATE 1,12:PRINT "QUIERES JUGAR DE NUEVO?(S/N)";
300 A$=INKEY$
310 IF A$="S" OR A$="s" THEN GOTO 50 ELSE IF A$="N" OR A$="n" THEN END ELSE GOTO 300

Ya comenzamos a ver código más complejo. El corazón de este programa está basado en el código anterior: Atrapa el número.

En este caso generamos un número aleatorio del 0 a 3 y dependiendo del número le asignamos otro número que usaremos más tarde para mostrar su código ASCII. Esos códigos ASCII son los símbolos de la baraja de cartas francesa: corazones, diamantes, tréboles y picas. El programa contabiliza cuantas figuras iguales han aparecido en las tiradas, de modo que, si han salido al menos dos símbolos iguales, suma puntos, si no, los resta.

Moviendo un carácter con el teclado

10 X=10:Y=10:CLS:KEY OFF
20 A$=INKEY$
30 IF A$="S" THEN X=X-1:GOTO 70
40 IF A$="D" THEN X=X+1:GOTO 70
50 IF A$="E" THEN Y=Y-1:GOTO 90
60 IF A$="X" THEN Y=Y+1:GOTO 90
70 IF X<0 THEN X=0
80 IF X>28 THEN X=28
90 IF Y<0 THEN Y=0
100 IF Y>20 THEN Y=20
110 LOCATE X,Y:PRINT " O "
120 GOTO 20
130 END

Este programa muestra esto “ O “ en la pantalla. Lo podemos mover pulsando las teclas:

S: izquierda, D: derecha, E:arriba, X: abajo

Creando un menú de acciones

10 REM SIMPLE MENU SYSTEM
20 REM PRINT OUT LIST OF OPTIONS
25 KEY OFF
30 CLS
35 PRINT "1. MOSTRAR UN MENSAJE"
40 PRINT "2. ESCUCHAR NOTAS MUSICALES"
50 PRINT "3. PINTAR UN CIRCULO"
60 PRINT "4. EXIT"
70 LOCATE 1,20
80 PRINT "ELIGE UNA OPCION ";
90 A$=INKEY$:IF A$="" THEN 90 ELSE PRINT A$
100 OPT%=ASC(A$)-48
110 IF (OPT%<1) OR (OPT%>4) THEN BEEP:LOCATE 22,20:GOTO 90
120 REM SELECT ACTION TO BE TAKEN
130 ON OPT% GOSUB 500,600,700,800
500 CLS:PRINT "HOLA. SOY UN MSXVR!"
510 FOR I=1 TO 800:NEXT I
520 RETURN 30
600 REM ALGO DE MUSICA
610 PLAY "CDEFG"
620 FOR I=1 TO 800:NEXT I
630 RETURN 30
700 REM PINTAR UN CIRCULO
710 SCREEN 2
720 CIRCLE(128,92),70,1
730 PAINT(128,92),1
740 FOR I=1 TO 800:NEXT I
750 SCREEN 1:RETURN 30
800 CLS:END:REM FIN DEL PROGRAMA

Un ejemplo sencillo de cómo crear un menú interactivo, de modo que, dependiendo de la opción que se elija, el programa salta a las líneas adecuadas para ejecutar esa parte de código. Todo se controla con GOSUB y RETURN. Este último para volver siempre al menú principal.

es_ESSpanish