"Simulateur de vol" for Sharp PC-1500 + CE-150
 Hebdogiciel, Shift editions.
Author : Charles CARON
Published in Hebdogiciel #37, June 1984.
BASIC program - 3949 bytes.

CLOAD "SIMULATEUR VOL"
RUN or DEF A

Commands:
.          turn on
0          ?
2/4/5/6/8  ?
-/+        ?

----- BASIC program -----------------------------------------
1 "SIMULATEUR VOL"
2 "Hebdogiciel no.37"
10 "A"CLEAR :RADIAN :A=90,B=[5D]/180,X=170,Y=10,R=155,A$="*":WAIT 0: GOSUB 580: GOSUB 620:CLS : GOSUB 480
20 IF INKEY$ <>"." GOTO 20
30 CLS :CURSOR 3:PRINT "***   CONTACT   ***"
40 IF INKEY$ ="."LET M=0,T=2: GOSUB 690
50 IF INKEY$ ="0" AND I<>0LET M=1,T=6: GOSUB 690
60 IF INKEY$ ="0" AND I=0LET A$="+": GOSUB 700: GOSUB 890: GOSUB 910
70 IF M=1LET H=H-5000/J/J:IF I>0LET J=J-6: GOTO 220
80 IF M=1 AND I<=0 GOSUB 700: GOSUB 890: GOTO 910
90 IF INKEY$ ="5"LET E=0,F=0
100 IF INKEY$ ="4"LET E=1
110 IF E=1LET G=G+5:IF G>65LET G=65
120 IF INKEY$ ="6"LET E=-1
130 IF E=-1LET G=G-5:IF G<-65LET G=-65
140 IF INKEY$ ="8"LET F=-1
150 IF F=-1LET H=H-0.5:IF I>0LET J=J+3
160 IF INKEY$ ="2"LET F=1
170 IF F=1LET H=H+0.5:IF I>0LET J=J-3
180 IF H>7LET H=7
190 IF H<-8LET H=-8
200 IF INKEY$ ="+"LET J=J+10
210 IF INKEY$ ="-"LET J=J-10
220 IF J>160LET J=160
230 IF J<0LET J=0
240 IF ASC INKEY$ =1 GOSUB 730
250 K=G/30:IF K<0LET K=-K
260 N=TAN (H*B)*.277*J+K:IF J<80 AND I=0LET N=0
270 N=INT (N*10)/10
280 IF J>80LET O=-G/10*120/J
290 IF INT I=0LET O=-G*J/100
300 IF O<0LET O=INT O+1
310 IF O>=0LET O=INT O
320 I=I+N
330 IF J>50 AND I<10 THEN IF G<-15 OR G>15 GOSUB 700: GOSUB 900: GOSUB 700: GOSUB 890: GOTO 940
340 IF X>80 AND X<180 AND Y>60 AND Y<120 GOSUB 780:IF L=1 GOSUB 700: GOSUB 900: GOSUB 890: GOTO 1010
350 IF J<80 AND I>0LET H=0,P=10
360 IF P>0LET J=J+5,I=I-5,N=-10,P=P-1:PRINT "***   D A N G E R   ***":T=4: GOSUB 690:S=1
370 IF I<20 AND S=1 GOSUB 470: GOSUB 770: GOSUB 900: GOSUB 890: GOTO 1030
380 S=0,A=A+O:IF A>360LET A=A-360
390 IF A<0LET A=A+360
400 X=X-INT (COS (A*B)*J/40),Y=Y+INT (SIN (A*B)*J/40),R=R-J/160
410 IF X<0 OR X>200 OR Y<0 OR Y>200 GOSUB 770:A$="?": GOSUB 890: GOTO 1020
420 IF I<0LET I=0
430 IF I=0 AND N<-2LET A$="O": GOSUB 700: GOSUB 890: GOTO 930
440 IF I=0 AND N<0LET N=0
450  GOSUB 770: GOSUB 470:IF R<=0LET H=H-5000/J/J:IF I>0LET J=J-6: GOTO 220
460  GOTO 40
470 WAIT 0:CLS :PRINT STR$ INT I:GCURSOR 23:PRINT N;: GOSUB 480:GCURSOR 110:PRINT J:GCURSOR 133:PRINT INT A:RETURN 
480 IF E=0GCURSOR 60:GPRINT "7F49495D49497F"
490 IF E=-1GCURSOR 60:GPRINT "7F43554955617F"
500 IF E=1GCURSOR 60:GPRINT "7F61554955437F"
510 IF I=0GCURSOR 75:GPRINT "002020202060202120602020202000"
520 IF I<>0 AND O<0GCURSOR 75:GPRINT "011112121434181910303030505040"
530 IF I<>0 AND O>0GCURSOR 75:GPRINT "405050303030101918341412121101"
540 IF I<>0 AND O=0GCURSOR 75:GPRINT "202828282838202920382828282820"
550 IF N>0GCURSOR 95:GPRINT "02030234081020703820":RETURN 
560 IF N<0GCURSOR 95:GPRINT "20302040203028260704":RETURN 
570 IF N=0GCURSOR 95:GPRINT "080C08182808080C0E08":RETURN 
580 N8=STATUS 2,N9=N8+17,S1=INT (N9/256),S2=256*(N9/256-S1)
590 POKE N8,&48,&FF,&68,&70,&6A,0,&BE,S1,S2,&68,&71,&6A,0,&BE,S1,S2,&9A
600 POKE N9,&4A,&4E,&84,&2D,&2E,&64,&42,&99,7,&9A
610 RETURN 
620 GRAPH :GLCURSOR (5,-210):SORGN :LINE -(200,200),0,0,B:GLCURSOR (160,10):LINE -(160,40),1:GLCURSOR (180,40)
630 LINE -(180,10):GLCURSOR (10,160):LINE -(40,160):GLCURSOR (40,180):LINE -(10,180):GLCURSOR (100,60)
640 LINE -(140,60)-(140,80)-(180,80)-(180,100)-(120,100)-(120,120),0,2
650 LINE -(80,120)-(80,80)-(100,80)-(100,60):GLCURSOR (105,65):LINE -(135,65)-(135,85)
660 LINE -(175,85)-(175,95)-(115,95)-(115,115)-(85,115)-(85,85)
670 LINE -(105,85)-(105,65):GLCURSOR (110,70):LINE -(130,90),,,B:GLCURSOR (115,75):LINE -(125,85),,,B
680 GLCURSOR (90,90):LINE -(110,110),,,B:GLCURSOR (95,95):LINE -(105,105),,,B:GLCURSOR (X,Y):RETURN 
690 FOR Q=1 TO T:BEEP 1,50:CALL N8:BEEP 1,100:NEXT Q:RETURN 
700 IF X>10 AND X<40 AND Y>160 AND Y<180LET Z=1:RETURN 
710 IF X>0 AND X<60 AND Y>140 AND Y<200LET Z=2:RETURN 
720 Z=0:RETURN 
730 GPRINT "7F":FOR Q=1 TO 154:GCURSOR Q:IF Q>RGPRINT "41":NEXT Q:GCURSOR 155:GPRINT "7F": GOTO 750
740 GPRINT "7F":NEXT Q:GCURSOR 155:GPRINT "7F"
750 IF ASC INKEY$ =1 GOTO 750
760 RETURN 
770 LINE -(X,Y),0,3:RETURN 
780 IF I<200 AND X>80 AND X<120 AND Y>80 AND Y<120LET L=1:RETURN 
790 IF I<200 AND X>100 AND X<140 AND Y>60 AND Y<100LET L=1:RETURN 
800 IF I<200 AND X>140 AND X<180 AND Y>80 AND Y<100LET L=1:RETURN 
810 IF I<300 AND X>85 AND X<115 AND Y>85 AND Y<115LET L=1:RETURN 
820 IF I<300 AND X>105 AND X<135 AND Y>65 AND Y<95LET L=1:RETURN 
830 IF I<300 AND X>135 AND X<175 AND Y>85 AND Y<95LET L=1:RETURN 
840 IF I<400 AND X>90 AND X<110 AND Y>90 AND Y<110LET L=1:RETURN 
850 IF I<400 AND X>110 AND X<130 AND Y>70 AND Y<90LET L=1:RETURN 
860 IF I<500 AND X>95 AND X<105 AND Y>95 AND Y<105LET L=1:RETURN 
870 IF I<500 AND X>115 AND X<125 AND Y>75 AND Y<85LET L=1:RETURN 
880 L=0:RETURN 
890 DEGREE :GLCURSOR (X-4,Y-6):LPRINT A$:GLCURSOR (0,0):TEXT :LF 2:CSIZE 1:COLOR 0:RETURN 
900 GCURSOR 75:GPRINT "082A1C492A3E1C7F1C3E2A491C2A08":FOR Q=1 TO 30:POKE# 64000,RND 256-1:NEXT Q:RETURN 
910 LPRINT "ATTERRISSAGE PARFAIT":IF Z=1 GOTO 1000
920  GOTO 970
930 LPRINT "ATTERRISSAGE TROP DUR": GOTO 960
940 LPRINT "L AILE A HEURTE LE SOL": GOTO 1000
950 LPRINT "CRASH SUR LA COLLINE":Z=0: GOTO 980
960 IF Z=1LPRINT "LES SECOURS SONT SUR LE POINT":LPRINT "D ARRIVER"
970 IF Z=2LPRINT "VOUS DEVREZ ATTENDRE LES SECOURS"
980 IF Z=0LPRINT "VOUS ETES PERDU : LES SECOURS NE":LPRINT "VIENDRONT PAS"
990 IF Z=0LPRINT "UNE MORT LENTE VOUS ATTEND"
1000 CLS :TEXT :LF 5:END
1010 LPRINT "CRASH SUR LA COLLINE": GOTO 1000
1020 LPRINT "VOUS VOUS ETES EGARE": GOTO 1000
1030 LPRINT " D E C R O C H A G E":LPRINT "VOUS AURIEZ DU PRENDRE QUELQUES"
1040 LPRINT "LECONS DE PLUS": GOTO 1000
