12 agosto, 2012 a las 20:01

Fruto de un domingo un tanto aburrido he programado un juego sencillisimo en BASIC. Creo que está claro que la finalidad solo ha sido didactica y por diversión, que nadie piense que va a ser un gran juego ya que lo he programado para un Amstrad 128Kb en un par de horas.

Nuestro personaje debe ir recogiendo tréboles que van apareciendo en la pantalla mientras esquiva las diferentes bombas que van cayendo.

A continuación os dejo el código fuente del programa

10 FLECHAABAJO$ = CHR$(241)
20 FLECHAARRIBA$ = CHR$(240)
30 FLECHADERECHA$ = CHR$(243)
40 FLECHAIZQUIERDA$=CHR$(242)
50 CARACTERPERSONAJE=249
60 CARACTERBOMBA=252
70 CARACTERPREMIO=226
80 POSICIONX = 5
90 POSICIONY = 5
91 PUNTOS = 0
100 'PONE LOS COLORES NEGRO Y BLANCO
110 'Y LIMPIA LA PANTALLA

120 MODE 0: PAPER 5: PEN 4: CLS
130 FOR CONTADOR=1 TO 24
140 RANDOMIZE TIME
150 POSICIONBOMBA=INT(RND*100)+1
160 IF POSICIONBOMBA>20 THEN GOTO 150
170 LOCATE POSICIONBOMBA,CONTADOR
179 PEN 3
180 PRINT CHR$(CARACTERBOMBA);
181 PEN 4
190 NEXT CONTADOR
200 LOCATE POSICIONX,POSICIONY: PRINT CHR$(CARACTERPERSONAJE)
210 'GENERA UN NUEVO PERMIO
220 RANDOMIZE TIME
230 POSICIONPREMIOX=INT(RND*100)+1
240 IF POSICIONPREMIOX>20 THEN GOTO 230
250 POSICIONPREMIOY=INT(RND*100)+1
260 IF POSICIONPREMIOY > 24 THEN GOTO 250
270 LOCATE POSICIONPREMIOX,POSICIONPREMIOY
275 PEN 12
276 PRINT CHR$(CARACTERPREMIO);
280 PEN 4
281 'CARTEL CON LOS PUNTOS
282 LOCATE 1,25: PRINT "Puntos: " PUNTOS;
290 'BAJA LAS BOMBAS'
300 FOR LINEA=1 TO 24
310 TECLAPULSADA$ = INKEY$
320 IF LINEA=24 THEN GOTO 300
330 LINEASUPERIOR=24-LINEA
340 LINEAACTUAL=LINEASUPERIOR+1
350 FOR COLUMNA=1 TO 20
360 LOCATE COLUMNA,LINEASUPERIOR
370 CARACTER$=COPYCHR$(#0)
380 'SOLO SI SON BOMBAS
390 IF CARACTER$ = CHR$(CARACTERBOMBA) THEN PRINT " ";
400 IF CARACTER$ = CHR$(CARACTERBOMBA) THEN LOCATE COLUMNA,LINEAACTUAL
401 IF CARACTER$ = CHR$(CARACTERBOMBA) THEN FUTUROCARACTER$=COPYCHR$(#0)
402 IF FUTUROCARACTER$ = CHR$(CARACTERPERSONAJE) THEN GOTO 930
410 IF CARACTER$ = CHR$(CARACTERBOMBA) AND FUTUROCARACTER$<>CHR$(CARACTERPREMIO) THEN PEN 3: PRINT CARACTER$;: PEN 4
420 IF TECLAPULSADA$ = "" GOTO 470
430 IF TECLAPULSADA$ = FLECHAIZQUIERDA$ THEN GOTO 510
440 IF TECLAPULSADA$ = FLECHADERECHA$ THEN GOTO 610
450 IF TECLAPULSADA$ = FLECHAARRIBA$ THEN GOTO 720
460 IF TECLAPULSADA$ = FLECHAABAJO$ THEN GOTO 840
470 NEXT COLUMNA
480 NEXT LINEA
490 GOTO 930
500 'PRIMERO BORRA EL PERSONAJE
510 LOCATE POSICIONX,POSICIONY
520 'COMPRUEBA QUE NO CHOQUE
530 PRINT " ";
540 'AHORA LO VUELVE A DIBUJAR
550 IF POSICIONX>1 THEN POSICIONX=POSICIONX-1
560 LOCATE POSICIONX,POSICIONY
570 IF COPYCHR$(#0) = CHR$(CARACTERBOMBA) THEN GOTO 930
580 PRINT CHR$(CARACTERPERSONAJE)
581 IF POSICIONX=POSICIONPREMIOX AND POSICIONY=POSICIONPREMIOY THEN LOCATE 1,25: PUNTOS=PUNTOS+1: PRINT "Puntos: " PUNTOS;: GOTO 220
590 'VUELVE A LA ESPERA DE PULSAR
600 GOTO 310
610 'BORRA EL PERSONAJE
620 LOCATE POSICIONX,POSICIONY
630 PRINT " "
640 'LO VUELVE A DIBUJAR
650 IF POSICIONX>19 THEN POSICIONX=19
660 POSICIONX=POSICIONX+1
670 LOCATE POSICIONX,POSICIONY
680 IF COPYCHR$(#0) = CHR$(CARACTERBOMBA) THEN GOTO 930
690 PRINT CHR$(CARACTERPERSONAJE);
691 IF POSICIONX=POSICIONPREMIOX AND POSICIONY=POSICIONPREMIOY THEN LOCATE 1,25: PUNTOS=PUNTOS+1: PRINT "Puntos: " PUNTOS;: GOTO 220
700 'VUELVE A LA ESPERA DE PULSAR
710 GOTO 310
720 'BORRA EL MUNECO
730 LOCATE POSICIONX,POSICIONY
740 PRINT " ";
750 'LO VUELVE A DIBUJAR
760 IF POSICIONY

Acerca de Miguel Díaz

Informático, enamorado de la programación, diseño Web y el deporte.
Categorías: Programación, Retroinformatica. Etiquetas: , , , , , , , , .

2 comentarios en Retroinformática: Programando en en el Amstrad con BASIC

  1. Hola,
    Antes de mas, mis felicitaciones. Me hiciste recordar un amigo de la universidad. Cuando estaba estudiando y se cansaba, lo que hacia para descansar, era leer un libro de los que tendría en el siguiente año. Cuando dices que programaste ese “jueguito” por ser un domingo aburrido fue lo que pensé. Excelente.
    Un saludo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *