"Meteorites" for Sharp PC-1500
 Hebdogiciel, Shift editions.
Author : Pierre LEFORT
Published in Hebdogiciel #58 (November 1984)
BASIC program - 1879 bytes

CLOAD "METEORITES"
RUN or DEF A

Keys:
A - fire
Q - shield
2/4/6/8 - move 

----- BASIC program -----------------------------------------
1 "METEORITES - hebdo 58
2 "Touches: A Q 2 4 6 8
9 "A"CLEAR :T=4,Y=10,E$="0000000000":RANDOM 
10 R=500,A=12,B=28,E=8,T=T-1
14 IF T=0WAIT :PRINT "Score final";S:END
15 GOSUB 1280
40 J=2.5,K=1,L=7.75,Z=RND 82+55,P=2'RND 5,V=RND 6+4+3*(S>800),J=J*P,C=255
50 IF (Z<X+7AND E*2>=K/4AND E/2<=K*4)OR R<0BEEP 5:GOTO 10
52 IF Z<VTHEN 1240
53 Z=Z-V:IF S>500AND N=0GOSUB 1200
55 IF S>300AND PEEK U=1POKE U,65:BEEP 1,C
56 IF S>500AND S<999POKE U,33:BEEP 1,C:T=T+1
57 IF S>1E3AND PEEK U=33POKE U,17:BEEP 1,C:T=T+1
60 IF R<20THEN 999
70 WAIT 0:GCURSOR X:GPRINT 0;A;B;B;A*2;E;E;0:GCURSOR Z:GPRINT J;K;L;K;J,E$,E$,E$:CURSOR 22:PRINT STR$ S
80 I$=INKEY$ :IF D=1AND E=KLET I$="A"
200 IF I$="A"LET I=X+8,P=X+58:GOTO 500
210 IF I$="Q"AND S<1500THEN 400
220 IF I$=CHR$ 15CALL &E33F
230 IF I$=CHR$ 1LET D=D=1=0:BEEP 1
240 POKE U+1,64+4*D:I=VAL I$,G=(I>3)+(I>6),Q=I-2-3*G,W=G-1:IF I=0GOTO 50
250 BEEP 1:R=R-2*(ABS Q+ABS W),W=2'W,A=A/W,B=B/W,E=E/W,X=X+Q:IF X<0OR X>90LET X=90*(X>90)
260 GOSUB 1250:GOTO 50
400 R=R-10:FOR I=X+8TO X+18STEP 2:BEEP 1,I,20:GCURSOR I:GPRINT 0,0;65;34;28:NEXT I:GCURSOR I:GPRINT 0,0,0
410 IF X+5<ZAND I>ZAND V<12LET N=0,R=R-10*V:GOTO 1240
420 GOTO 50
500 FOR I=ITO PSTEP Y:GCURSOR I:GPRINT E;E;E;E;E;E;E;E;E;E:IF E=KAND Z<I+YAND Z>=IBEEP 1:O=I,N=N+1:GOTO 520
510 BEEP 1,I,10:NEXT I:O=P
520 R=R-15:FOR I=X+8TO OSTEP Y:GCURSOR I:GPRINT E$;E$:NEXT I:IF N=1AND S<1E3AND S>500THEN 530
523 IF N=1AND S<300GOTO 530
525 IF N<2GOTO 50
530 N=0,S=S+V:GOTO 1240
999 GOSUB 1280:Z=11,W=4:FOR I=1TO 30:Q=2'W,Q=INT (15*Q/8),Q=Q-128*(Q>128),Q=127-Q
1010 GCURSOR Z:GPRINT Q;Q;Q;Q:Z=Z+4,W=W+RND 3-2:IF W>7OR W<1LET W=1+6*(W>7)
1020 IF I=14LET Z=Z+28,W=RND 7:GCURSOR 75:C$="63636363":GPRINT C$+C$+C$
1030 NEXT I:BEEP 2,Y:X=0:FOR I=YTO 16:@(I)=0:NEXT I
1040 G=K,H=L:FOR I=YTO 13:@(I)=@(I+3):NEXT I:FOR I=6TO 8:@(I+8)=POINT (X+I):NEXT I:C=B,D=A*2
1050 F=E:GCURSOR X:GPRINT G;H;J;:FOR I=1TO 6:GPRINT @(I)OR @(I+Y);:IF (@(I+Y)AND @(I))BEEP 1:X=0,D=0:GOTO 10
1060 NEXT I:I=VAL INKEY$ ,Q=2'((I>3)+(I>6)-1):IF I=0GOTO 1080
1070 BEEP 1:A=A/Q,B=B/Q,E=E/Q:GOSUB 1250
1080 IF X=75BEEP 5,50:R=500,S=S+250,T=T+1
1090 X=X+3:BEEP 1,1,9:IF X>148LET X=0,D=0:GOTO 14
1100 GOTO 1040
1200 I=2'(RND 3-2),J=J/I,K=K/I,L=L/I:IF J<2.5LET J=2.5,K=1,L=7.75
1210 IF J>80LET J=80,L=248,K=32
1230 RETURN 
1240 GCURSOR Z:GPRINT E$,E$:BEEP 2,100:GOTO 40
1250 IF A>96LET A=96,B=224,E=64
1260 RETURN 
1280 CLS :PAUSE "Energie";R:WAIT 150:CURSOR 12:PRINT "Vaisseaux";T:WAIT 0:BEEP 1:CLS :RETURN 
