Simulatore di volo – MSX – Basic

Rivista: MSX Magazine – Anno: 1985 – Numero 3 – Trascrizione: Francesco Fiorentini

Se ti piacciono le emozioni forti e hai il polso fermo, prova a eseguire questo programma, che tra l’altro è molto adatto ai cardiopatici, dato che è necessaria una buona dose di pazienza per far volare l’apparecchio. Si tratta di un semplice simulatore di volo, ma con tutti gli incentivi dei simulatori più seri. Potremmo dire che si tratta di una versione “fai da te”.

Dovrai scegliere tra due aeroporti per atterrare o decollare (se scegli la seconda opzione delle tre che appaiono all’esecuzione del programma), con la rappresentazione del terreno separata e una mappa in scala ridotta della zona. Iniziata la manovra di avvicinamento, apparirà davanti a noi la pista di atterraggio, purché siamo al di sotto dei 2.000 metri. Allo stesso modo, la mappa del terreno verrà visualizzata quando decolliamo. La tua posizione sarà mostrata mediante un piccolo aereo lampeggiante, potendo controllare la direzione del volo attraverso gli orologi dedicati specialmente a questo scopo, che è l’HDG. Nella parte inferiore dello schermo, potrai vedere il pannello degli strumenti, che sarà il principale aiuto durante il volo.

Questi sono molto utili per conoscere lo stato dell’aereo, la rotta da seguire, la potenza dei motori, eccetera. Questi strumenti sono i seguenti:
HDG – Indica la direzione del nostro aereo. Il Nord è a 0 gradi, l’Est a 90 gradi, il Sud a 180 e l’Ovest a 270 gradi.
RDR – È la posizione del timone di coda, se è negativo indicherà una svolta a sinistra, e se è positivo a destra.
GAS – La quantità di carburante che ci resta.
VEL – Indica la velocità dell’aereo.
POT – La potenza in ogni momento.
ROC – Velocità di salita o discesa del nostro apparecchio. La luce rossa indica che stiamo scendendo alla velocità indicata da questo indicatore.
FLP – indica la posizione dei flap, quando è completamente chiuso e 30 quando è completamente aperto.

Carrello SU o GIÙ – Indica la posizione del carrello di atterraggio. Il quadro che appare a sinistra del pannello strumenti è un orizzonte artificiale, che ci aiuterà a verificare l’orizzontalità del nostro aereo. Quando la linea rossa è sopra la metà del quadro, significa che stiamo salendo, mentre se è sotto la metà, indicherà che stiamo scendendo. Allo stesso modo potremo verificare l’angolo di virata, poiché quando la linea rossa va dall’angolo inferiore sinistro all’angolo superiore destro, significa che l’aereo si sta inclinando verso sinistra.

L’aereo si controlla con i tasti E, S, D e X, dove ogni tasto ha una funzione che è la seguente: la X per salire, la E per scendere, la D per girare verso sinistra e la S per girare verso destra. In tutti i casi bisogna attendere la risposta del computer, poiché non basta premerli una volta.
I tasti O e P sono quelli che controllano la potenza dei motori: O la riduce e P la aumenta.
Il timone di coda si controlla con i tasti W e R. Questo permette di controllare l’aereo una volta a terra, sebbene venga utilizzato anche per aiutare a realizzare le virate in aria.
I flap sono parti delle ali degli aerei che si usano nella manovra di atterraggio; questi si controllano con i tasti A e F. Quando sono completamente chiusi apparirà uno 0 e quando sono completamente aperti vedremo un 30.
Il carrello di atterraggio si controlla con la G. Bisogna fare attenzione a non abbassarlo a metà del volo poiché ciò potrebbe comportare nefaste conseguenze.

Di nuovo insistiamo nel mantenere i tasti premuti finché l’aereo non risponda al nostro comando.

Come è normale, in tutte le mappe appare una legenda che indica le diverse altitudini del terreno. Nel nostro caso i colori indicano la seguente configurazione: verde per terreni fino a 100 metri di altitudine, rosso per terreni fino a 1.000 metri di altitudine, e in nero tutte quelle zone fino a 4.000 metri di altitudine. Bisogna prestare particolare attenzione quando sorvoliamo queste zone, altrimenti potreste schiantarvi.

Descriviamo le tre opzioni che appaiono all’esecuzione del programma. Queste sono: decollareatterrare oppure iniziare già in volo. Con quest’ultima opzione ci evitiamo il compito di decollare, ma avremo il problema aggiuntivo di doverci dirigere verso l’aeroporto più vicino per atterrare e rifornirsi.

Queste due ultime operazioni vanno eseguite nel modo seguente. L’avvicinamento deve essere effettuato da Est, cioè nella direzione di 270 gradi. L’altitudine deve essere sotto i 2.000 metri, prestando particolare attenzione alla pista di atterraggio che apparirà man mano che ci avviciniamo. Una volta toccato terra, bisogna spegnere i motori e azzerare tutta la potenza, altrimenti si provocherà un incidente.

PS – Il listato e’ molto lungo, se trovate degli errori che ci sono sfuggiti, scrivetelo nei commenti o inviateci una mail al nostro indirizzo: retromagazine.redazione@gmail.com

Il listato e’ stato estratto dalla rivista spagnola MSX Magazine – Anno: 1985 – Numero 3, edizioni PUBLINFORMATICA. Link diretto alla rivista su archive.org:
https://archive.org/details/msxmagazine06_201412/msx_magazine-03/

Titolo: Simulatore di volo
Piattaforma: MSX
Linguaggio: Basic
Versione originale: 1985
Pubblicazione: MSX Magazine nr. 3
Anno: 1985 – Luglio
Trascrizione: Francesco Fiorentini
Anno: 2026
Download: N/A
Note: I messaggi sono stati tradotti dallo spagnolo all’italiano.

Istruzioni
L’aereo si controlla con i tasti E, S, D e X.
I tasti O e P sono quelli che controllano la potenza dei motori: O la riduce e P la aumenta.
Il timone di coda si controlla con i tasti W e R.
I flap sono parti delle ali degli aerei che si usano nella manovra di atterraggio; questi si controllano con i tasti A e F.
Il carrello di atterraggio si controlla con la G.

Qui di seguito trovate il codice da copiare sul vostro MSX oppure su un emulatore, noi suggeriamo BlueMSX.

Vi suggeriamo di creare un dischetto con MSX Disk-Manager (http://www.lexlechz.at) e di copiare il listato all’interno di esso per poi caricare il file nell’emulatore. Se avete problemi, contattateci!

Attenzione – Ci siamo resi conto che nel listato i caratteri ‘>’ e ‘<‘ potrebbero venir sostituiti dai rispettivi encoding html ‘&gt’ e ‘&lt’. Nel caso, sostituite questi valori nel listato prima di copiarlo sull’emulatore.

Listato: Coches locos – MSX – Basic


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
100 REM ************************
110 REM *                      *
120 REM *  simulador de vuelo  *
130 REM *                      *
140 REM ************************
150 REM
160 X=RND(-TIME)
170 OPEN "GRP:" AS #1
180 REM Menu de Opciones
190 CLS
200 SCREEN 0
210 COLOR 1,15,1
220 LOCATE 3,3:PRINT "Simulatore di volo"
230 LOCATE 3,8:PRINT "1. Decollo"
240 LOCATE 3,10:PRINT "2. Atterraggio"
250 LOCATE 3,12:PRINT "3. In volo"
260 LOCATE 3,18
270 PRINT "Scelta?"
280 Q$=INKEY$:IF Q$="" THEN 280
290 IF Q$>"3" OR Q$<"" THEN 280
300 Q=VAL(Q$)
310 LOCATE 3,20
320 PRINT "Vento? (s/n)"
330 A$=INKEY$:IF A$="" THEN 330
340 IF A$="s" THEN WN=1
350 SCREEN 2
360 CLS
370 ON Q GOSUB 4570,4690,4840
380 REM rutina principal
390 GOSUB 1480
400 GOSUB 760
410 GOSUB 1480
420 GOSUB 2300
430 GOTO 390
440 REM rutinas
450 IF LEN(P$)>1 THEN 480
460 P$="    "+P$
470 GOTO 620
480 IF LEN(P$)>2 THEN 510
490 P$="   "+P$
500 GOTO 620
510 IF LEN(P$)>3 THEN 540
520 P$="  "+P$
530 GOTO 620
540 IF LEN(P$)>4 THEN 620
550 P$=" "+P$
560 GOTO 620
570 IF LEN(P$)>1 THEN 600
580 P$="  "+P$
590 GOTO 620
600 IF LEN(P$) >2 THEN 620
610 P$=" "+P$
620 IF LEFT$(P$,1)=CHR$(219) OR P$=CHR$(43) THEN 680
630 IF MID$(P$,2,1)>="0" AND MID$(P$,2,1)<="9" THEN P$=RIGHT$(P$,LEN(P$)-1)
640 C=C-1
650 GOSUB 710
660 C=C+1
670 COLOR 11
680 PRESET((C-1)*8,(R-1)*8)
690 PRINT#1,P$
700 RETURN
710 PRESET((C-1)*8,(R-1)*8)
720 COLOR 1
730 PRINT#1,STRING$(LEN(P$)+2,219)
740 RETURN
750 REM Actualiza altitud, velocidad y fuel
760 FU=FU-PW*.013
770 IF FU<=0 THEN FU=0:PW=0
780 P$=STR$(INT(FU))
790 R=15:C=4:GOSUB 570
800 VE=(PW*1.14-B2*44.978-VE*((FL>0)*(VE>100))*FL/150-.1*VE*((GR=0)*(VE>100))+VE/2*(VE<10)+VE*4)/5
810 IF VE<20 THEN 830
820 VE=VE+RND(1)*4-2
830 IF VE<0 THEN VE=0
840 P$=STR$(INT(VE))
850 R=18:C=4:GOSUB 570
860 AL=AL+RO/10
870 IF AL<0 THEN AL=0
880 P$=STR$(INT(AL))
890 R=16:C=16:GOSUB 450
900 REM Comprobar accidente
910 IF AL<1 AND TS<>6 AND TS<>10 THEN 4090
920 IF AL<1 AND GR=1 THEN 4270
930 IF AL<1 AND ABS(B3-B1)>3 THEN 4270
940 IF AL<1 AND RO<-320 THEN 4090
950 IF AL<1 AND VE<1 AND (TS=6 OR TS=10) AND RO<0 AND RO>-320 THEN 4270
960 IF AL<100 AND PS=12 AND WM=2 THEN 4090
970 IF AL<100 AND PS=6 AND WM=2 THEN 4090
980 IF AL<400 AND PS=1 AND WM=2 THEN 4090
990 REM Velocidad de ascenso
1000 RO=(((B2*62.4-ABS(B3-B1)*22.28)*31.33)-(220*VE/150)*(AL>5)*SGN(RO)-VE*B2*2*(B2<-1)+RO*2)/3
1010 GOSUB 1030
1020 GOTO 1170
1030 IF AL<5 THEN 1060
1040 RO=RO+RND(1)*8-4
1050 REM Visualizar cotroles
1060 IF RO>=0 THEN 1110
1070 P$=STR$(ABS(INT(RO)))
1080 PRESET(17*8,17*8):COLOR 1:PRINT#1,STRING$(3,219)
1090 PRESET(15*8,17*8):COLOR 11:PRINT#1,"ROD":COLOR 6:PRINT#1,CHR$(219)
1100 GOTO 1140
1110 PRESET(17*8,17*8):COLOR 1:PRINT#1,STRING$(3,219)
1120 PRESET(15*8,17*8):COLOR 11:PRINT#1,"ROC":COLOR 1:PRINT#1,CHR$(219)
1130 P$=STR$(INT(RO))
1140 R=19:C=16:GOSUB 450
1150 RETURN
1160 REM caida
1170 IF VE>(80-FL*.66) OR AL<5 THEN 1320
1180 R0=R0-ABS(R0*RND(1)/2)-RND(1)*320*(80-VE)
1190 GOSUB 1030
1200 PLAY "acacacac"
1210 IF RND(1)>.5 THEN 1240
1220 K=69
1230 GOTO 1560
1240 IF RND(1)>.5 THEN 1270
1250 K=83
1260 GOTO 1560
1270 IF RND(1)>.5 THEN 1300
1280 K=68
1290 GOTO 1560
1300 K=88
1310 GOTO 1560
1320 IF AL<20000 OR R0<0 THEN 1350
1330 IF AL=0 THEN R0=0:GOTO 1350
1340 R0=R0*15000/AL
1350 IF VE>350 THEN 1200
1360 IF VE<140 OR AL>0 THEN 1460
1370 GOSUB 4020
1380 REM Rodando muy rapido
1390 P$="Ruote"
1400 R=15:C=8:GOSUB 620
1410 P$="troppo"
1420 R=17:C=8:GOSUB 620
1430 P$="veloci"
1440 R=19:C=8:GOSUB 620
1450 GOTO 4090
1460 RETURN
1470 REM comprobación de tecla pulsada
1480 K$=INKEY$
1490 IF K$="" THEN 2280
1500 K=ASC(K$)
1510 PLAY "o6;c"
1520 REM control por joysticks
1530 IF K<>69 AND K<>88 AND K<>83 AND K<>68 THEN 1960
1540 IF AL<5 AND VE<(80-FL*.666) THEN 1960
1550 IF K<>88 AND AL<4 THEN 1960
1560 IF B1>6 OR B1<-5 THEN 1580
1570 R=17+B1:C=24:P$=STRING$(2,219):COLOR 15:GOSUB 620
1580 IF B2>6 OR B2<-5 THEN 1600
1590 R=17+B2:C=26:P$=STRING$(2,219):COLOR 15:GOSUB 620
1600 IF B3>6 OR B3<-5 THEN 1620
1610 R=17+B3:C=28:P$=STRING$(2,219):COLOR 15:GOSUB 620
1620 IF K<>69 THEN 1670
1630 B1=B1+1
1640 B2=B2+1
1650 B3=B3+1
1660 GOTO 1790
1670 IF K<>88 THEN 1720
1680 B1=B1+1
1690 B2=B2+1
1700 B3=B3+1
1710 GOTO 1790
1720 IF K<>83 THEN 1760
1730 B1=B1-1
1740 B3=B3+1
1750 GOTO 1790
1760 IF K<>68 THEN 1790
1770 B1=B1+1
1780 B3=B3-1
1790 IF B2<10 THEN 1840
1800 B1=-10
1810 B2=-10
1820 B3=-10
1830 REM Pirueta aerea
1840 IF ABS(B3-B1)<18 THEN 1860
1850 SWAP B1,B3
1860 IF ABS(B3-B1)<8 THEN 1900
1870 B1=B1-1
1880 B2=B2-1
1890 B3=B3-1
1900 IF B1>6 OR B1<-5 THEN 1920
1910 R=17+B1:C=24:COLOR 6:P$=CHR$(219)+CHR$(219):GOSUB 620
1920 IF B2>6 OR B2<-5 THEN 1940
1930 R=17+B2:C=26:P$=CHR$(219)+CHR$(219):COLOR 6:GOSUB 620
1940 IF B3>6 OR B3<-5 THEN 1960
1950 R=17+B3:C=28:P$=CHR$(219)+CHR$(219):COLOR 6:GOSUB 620
1960 IF K<>79 OR PW<10 THEN 1990
1970 PW=PW-10
1980 GOTO 2020
1990 IF K<>80 OR PW>210 THEN 2040
2000 IF FU=0 THEN 2040
2010 PW=PW+10
2020 P$=STR$(PW)
2030 R=21:C=4:GOSUB 570
2040 IF K<>65 OR FL<5 THEN 2070
2050 FL=FL-5
2060 GOTO 2090
2070 IF K<>70 OR FL>25 THEN 2110
2080 FL=FL+5
2090 P$=STR$(FL)
2100 R=22:C=16:GOSUB 570
2110 IF K<>82 OR RD>1 THEN 2140
2120 RD=RD+1
2130 GOTO 2160
2140 IF K<>87 OR RD<-1 THEN 2190
2150 RD=RD-1
2160 P$=" "+STR$(RD)+" "
2170 R=12:C=17:GOSUB 620
2180 REM tren de aterrizaje
2190 IF K<>71 THEN 2280
2200 IF AL<4 THEN 2280
2210 IF GR=1 THEN 2250
2220 GR=1
2230 P$="carico"
2240 GOTO 2270
2250 GR=0
2260 P$="scarico"
2270 R=23:C=8:GOSUB 620
2280 RETURN
2290 REM calcula nueva ruta
2300 HD=HD-(B3-B1)*3-RD*2*(VE>2)
2310 M2=M2-1
2320 IF AL>0 OR VE<2 THEN 2340
2330 HD=HD+RD*15
2340 IF HD>359 THEN HD=HD-360
2350 IF HD<0 THEN HD=360+HD
2360 REM comprobó rumbo
2370 P$=STR$(HD)
2380 R=12:C=9:GOSUB 570
2390 IF WN=0 THEN 2440
2400 REM calcula efecto del viento
2410 IR=COS(WD/57.296)*WS/160
2420 IC=SIN(WD/57.296)*WS/160
2430 REM calcula nueva posición
2440 PR=PR-(VE/100)*COS(HD/57.296)+IR
2450 PC=PC+(VE/100)*SIN(HD/57.296)-IC
2460 IF WM=1 THEN 2600
2470 IF PC>40 AND PC<310 AND PR>15 AND PR<100 THEN 2510
2480 PR=DI
2490 PC=OC
2500 REM mostrar nueva posición
2510 PRESET((INT(OC/10+.5)-1)*8,(INT(OI/10+.5)-1)*8)
2520 COLOR PS
2530 PRINT#1,CHR$(219)
2540 PS=POINT((INT(PC/10+.5)-1)*8,(INT(PR/10+.5)-1)*8)
2550 PRESET((INT(PC/10+.5)-1)*8,(INT(PR/10+.5)-1)*8)
2560 COLOR 15
2570 PRINT#1,CHR$(43)
2580 OI=PR:OC=PC
2590 GOTO 2700
2600 PRESET((INT(TC+.5)-1)*8,(INT(TR+.5)-1)*8)
2610 COLOR TS
2620 PRINT#1,CHR$(219)
2630 TC=TC+(VE/120)*SIN(HD/57.296)+IC*(AL<1)*VE/80+IC*(AL>0)
2640 TR=TR-(VE/120)*COS(HD/57.296)-IR*(AL<1)*VE/80-IR*(AL>0)
2650 IF TR>10 OR TR<2 OR TC>30 OR TC<4 THEN 2960
2660 TS=POINT((INT(TC+.5)-1)*8,(INT(TR+.5)-1)*8)
2670 R=INT(TR+.5):C=INT(TC+.5)
2680 COLOR 13
2690 P$=CHR$(43):GOSUB 620
2700 IF WM=2 AND AL<2000 AND PC<295 AND PC>267 AND PR<55 AND PR>41 THEN 2710 ELSE 2830
2710 IF WM=1 THEN 3010
2720 IF M2>0 THEN 3010
2730 GOSUB 3630
2740 GOSUB 3450
2750 WM=1
2760 M2=3
2770 TR=PR-35
2780 TR=TR/2
2790 TC=PC-264
2800 TS=POINT((INT(TC+.5)-1)*8,(INT(TC+.5)-1)*8)
2810 GOTO 3010
2820 REM cambia el mapa
2830 IF WM=2 AND AL<2000 AND PC<85 AND PC>58 AND PR<75 AND PR>61 THEN 2840 ELSE 3010
2840 IF WM=1 THEN 3010
2850 IF M2>0 THEN 3010
2860 GOSUB 3630
2870 GOSUB 3450
2880 WM=1
2890 M2=3
2900 TR=PR-55
2910 TR=TR/2
2920 TC=PC-55
2930 TS=POINT((INT(TC+.5)-1)*8,(INT(TR+.5)-1)*8)
2940 GOTO 3010
2950 IF M2>0 THEN 3010
2960 IF WM=2 THEN 3010
2970 GOSUB 3700
2980 WM=2
2990 M2=8
3000 PS=12
3010 IF M2<>0 OR WM<>2 THEN 3040
3020 R=7:C=7:P$=CHR$(219):COLOR 11:GOSUB 620
3030 R=5:C=28:COLOR 11:P$=CHR$(219):GOSUB 620
3040 RETURN
3050 REM limpa parte inferior de la pantalla
3060 P$=STRING$(30,219):COLOR 1:C=3
3070 FOR R=11 TO 24
3080 GOSUB 620
3090 NEXT R
3100 C=23:P$=STRING$(8,219):COLOR 15
3110 FOR R=12 TO 23
3120 GOSUB 620
3130 NEXT R
3140 R=11:C=22:COLOR 4:P$=STRING$(10,219):GOSUB 620
3150 COLOR 4:P$=CHR$(219):C=22
3160 FOR R=12 TO 24
3170 GOSUB 620
3180 NEXT R
3190 C=31
3200 FOR R=12 TO 24
3210 GOSUB 620
3220 NEXT R
3230 R=24:C=22:P$=STRING$(10,219):COLOR 4:GOSUB 620
3240 R=17:C=24:P$=STRING$(6,219):COLOR 6:GOSUB 620
3250 P$=STRING$(7,219):C=8:COLOR 15
3260 FOR R=14 TO 20
3270 GOSUB 620
3280 NEXT R
3290 REM Panel inicial de instrumentos
3300 P$="HDG":COLOR 11:R=12:C=5:GOSUB 620
3310 P$="GAS":R=14:C=4:GOSUB 620
3320 P$="VEL":R=17:C=4:GOSUB 620
3330 P$="POT":R=20:C=4:GOSUB 620
3340 P$="TREN BAJA00":R=23:C=5:GOSUB 620
3350 P$="RDR":R=12:C=13:GOSUB 620
3360 P$="ALT":R=15:C=16:GOSUB 620
3370 P$="ROC ":R=18:C=16:GOSUB 620
3380 P$="FLP":R=21:C=16:GOSUB 620
3390 IF WM=0 THEN 3440
3400 COLOR 1
3410 P$="AIRE":R=15:C=9:GOSUB 5130
3420 P$=STR$(WS)+" KN":R=17:C=7:GOSUB 5130
3430 P$=STR$(WD)+" DEG":R=19:C=7:GOSUB 5130
3440 RETURN
3450 COLOR 1:P$=STRING$(30,219):R=1:C=3:GOSUB 620
3460 P$=CHR$(219):C=3
3470 FOR R=2 TO 11
3480 GOSUB 620
3490 NEXT R
3500 C=32
3510 FOR R=2 TO 11
3520 GOSUB 620
3530 NEXT R
3540 C=2
3550 FOR R=1 TO 24:GOSUB 620
3560 NEXT R
3570 R=4:C=7:COLOR 12:P$=STRING$(11,219):GOSUB 620
3580 R=5:C=7:COLOR 10:GOSUB 620
3590 R=6:C=7:P$=STRING$(11,219):GOSUB 620
3600 R=7:C=7:P$=STRING$(11,219):GOSUB 620
3610 R=8:C=7:COLOR 12:GOSUB 620
3620 RETURN
3630 P$=STRING$(28,219):C=4
3640 COLOR 15
3650 FOR R=2 TO 10
3660 GOSUB 620
3670 NEXT R
3680 RETURN
3690 REM mapa del terreno
3700 RESTORE
3710 FOR J=2 TO 10
3720 FOR K=4 TO 31
3730 READ CH,RP
3740 IF CH=97 THEN COLOR 1
3750 IF CH=112 THEN COLOR 12
3760 IF CH=120 THEN COLOR 6
3770 IF CH=128 OR CH=129 THEN COLOR 10
3780 P$=STRING$(RP,219)
3790 R=J:C=K:GOSUB 620
3800 K=K+RP-1
3810 NEXT K,J
3820 REM datos para el mapa del terreno
3830 DATA 97,2,120,5,112,2,120,2,112,3,120,1,97,3,120,2,112,8
3840 DATA 97,1,120,2,112,10,120,1,97,6,120,2
3850 DATA 112,5,120,1,120,2,112,10,120,7,97,2
3860 DATA 120,2,112,2,120,2,97,1,112,19
3870 DATA 120,1,97,1,112,3,129,1,112,1,120,2
3880 DATA 112,8,120,2,112,8,97,1,120,1,112,7
3890 DATA 120,1,112,3,129,1,112,2,120,8,97,5,120,3,112,6
3900 DATA 112,5,120,4,112,2,120,5,97,3,120,2,112,7
3910 DATA 112,4,120,4,112,7,120,1,97,1,120,3
3920 DATA 112,8,112,2,120,6,112,6,120,4,112,4,120,6,120,2
3930 DATA 97,2,120,1,112,5,120,2,112,8,120,4,97,4
3940 RETURN
3950 REM condiciones iniciales
3960 FU=500
3970 IF WN=0 THEN 4000
3980 WS=INT(RND(1)*30)+4
3990 WD=INT(RND(1)*360)
4000 OI=PR:OC=PC
4010 RETURN
4020 P$=STRING$(7,219):C=8
4030 COLOR 15
4040 FOR R=14 TO 20
4050 GOSUB 620
4060 NEXT R
4070 RETURN
4080 REM avión estrellado
4090 SOUND 0,0:SOUND 1,5:SOUND 2,0:SOUND 3,13
4100 SOUND 4,255:SOUND 5,15:SOUND 6,30:SOUND 7,0
4110 SOUND 8,16:SOUND 9,16:SOUND 10,16:SOUND 11,0
4120 SOUND 12,5:SOUND 13,0
4130 FOR DE=1 TO 100:NEXT DE
4140 SOUND 12,56:SOUND 13,0
4150 GOSUB 4020
4160 P$="Ti sei":R=16:C=8:GOSUB 5130
4170 P$="schian-":R=17:C=8:GOSUB 5130
4171 P$="tato.":R=18:C=8:GOSUB 5130
4180 FOR DE=1 TO 4000:NEXT DE
4190 REM inicia las variables
4200 RO=0:PW=0:VE=0
4210 AL=0:RD=0:FL=0
4220 WN=0:WD=0:WS=0
4230 IR=0:IC=0
4240 B1=0:B2=0:B3=0
4250 GOTO 190
4260 REM comprueba el tren de aterrizaje
4270 IF GR=0 THEN 4330
4280 GOSUB 4020
4290 P$="Carr.":R=16:C=9:GOSUB 5130
4300 P$="ritir.":R=18:C=8:GOSUB 5130
4310 GOTO 4090
4320 REM comprueba el ángulo de giro
4330 IF ABS(B3-B1)<4 THEN 4390
4340 GOSUB 4020
4350 P$="Troppo":R=15:C=9:GOSUB 5130
4360 P$="incli":R=17:C=9:GOSUB 5130
4370 P$="nato":R=19:C=9:GOSUB 5130
4380 GOTO 4090
4390 PLAY "ecf"
4400 GOSUB 4020
4410 P$="Sei":R=16:C=9:GOSUB 5130
4420 P$="atter-":R=17:C=9:GOSUB 5130
4430 P$="rato":R=18:C=9:GOSUB 5130
4440 FU=500
4450 RO=0
4460 FOR DE=1 TO 16000:NEXT DE
4470 GOSUB 4020
4480 PLAY "ce"
4490 P$="Pronto":R=15:C=8:GOSUB 5130
4500 P$="per":R=16:C=8:GOSUB 5130
4510 P$="decol-":R=17:C=8:GOSUB 5130
4520 P$="lo-":R=18:C=8:GOSUB 5130
4530 FOR DE=1 TO 50000:NEXT DE
4540 GOSUB 4020
4550 GOTO 1460
4560 REM initial values
4570 HD=90
4580 PR=62
4590 PC=55
4600 TS=10
4610 GR=0
4620 WM=1
4630 TR=6
4640 TC=8
4650 GOSUB 3960
4660 GOSUB 3060
4670 GOSUB 3450
4675 P$="scarico":R=23:C=8:GOSUB 620
4680 RETURN
4690 HD=270
4700 PR=70
4710 PC=79
4720 TS=15
4730 GR=0
4740 WM=1
4750 TR=6
4760 TC=30
4770 AL=400
4780 VE=110
4790 PW=100
4800 GOSUB 3960
4810 GOSUB 3060
4820 GOSUB 3450
4825 P$="bajado":R=23:C=8:GOSUB 620
4830 RETURN
4840 HD=INT(RND(1)*360)
4850 PR=RND(1)*50+40
4860 PC=RND(1)*160+60
4870 WM=2
4880 AL=INT(RND(1)*300)+400
4890 VE=INT(RND(1)*50)+100
4900 PW=130
4910 GR=1
4920 GOSUB 3960
4930 GOSUB 3060
4940 GOSUB 2220
4950 P$=STRING$(30,219)
4960 COLOR 1
4970 R=1:C=3:GOSUB 620
4980 C=3:P$=CHR$(219)
4990 FOR R=2 TO 11
5000 GOSUB 620
5010 NEXT R
5020 C=32
5030 FOR R=2 TO 11
5040 GOSUB 620
5050 NEXT R
5060 C=2
5070 FOR R=1 TO 24
5080 GOSUB 620
5090 NEXT R
5100 GOSUB 3700
5110 PS=POINT(INT(PC/10+.5)*8-1,INT(PR/10+.5)*8-1)
5120 RETURN
5130 COLOR 1,15
5140 PRESET((C-1)*8,(R-1)*8)
5150 PRINT#1,P$
5160 RETURN

Share

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

This site uses Akismet to reduce spam. Learn how your comment data is processed.