Rivista: Acorn User – Numero: 4 – Anno: 1982 – Trascrizione: Francesco Fiorentini
Esordio del BBC Micro nella rubrica RetroLiPS. E decisamente un esordio in pompa magna…
Quello che andiamo a presentarvi é un bel listato, estratto dalla rivista inglese Acorn User, numero 4 di Novembre 1982, che sono sicuro apprezzerete per la modalita’ di gioco.
Il tuo compito come Comandante della Starship è distruggere tutti e 15 i Klingon (frecce rosse), usando meno tempo ed energia possibile. Il tuo livello di energia iniziale determina il livello di difficoltà.
Prima devi trovare il nemico. La tua Starship (freccia gialla) viene mossa usando i quattro tasti cursore del BBC micro. Lo schermo normale, o scansione a corto raggio, mostra un settore di un’area spaziale di otto per otto. La tua posizione nel settore è indicata sotto “AREA” (vedi scansione a corto raggio, SRS, in alto a sinistra).
Hai a disposizione due computer: il nav-com e l’arm-con. Per accedere al primo, premi N sulla tastiera e tieni premuto per un paio di secondi. Lo schermo cambierà mostrando informazioni su energia e settore e quattro opzioni di comando:
- Ritorno alla SRS: ti riporta allo schermo normale.
- Visualizza registro cumulativo della galassia: essenzialmente dice dove sei stato (in alto a destra). Le tre cifre indicano, per ogni settore che hai esplorato: il numero di Klingon, il numero di stelle (asterisco rosso nella SRS) e il numero di basi stellari.
- Dati della base stellare: fornisce le coordinate delle basi trovate e l’energia rimasta. Ogni base contiene fino a 20.000 unità di carburante. Per attraccare a una base stellare (@ blu) basta posizionare la Starship sopra di essa. L’energia può essere lasciata per dopo.
- Accedi al computer armamenti. Questo si può ottenere anche premendo A quando ci si trova nella scansione a corto raggio.
L’arm-com fornisce dettagli su energia, siluri fotonici sparati (ne hai sette), livello dello scudo e numero di Klingon distrutti. Ti ricordo che puoi premere A quando ti trovi nella scansione a corto raggio. I suoi tre comandi sono:
- Ritorno alla SRS
- Spara siluri fotonici: non mancano mai il bersaglio quando un Klingon è nel raggio d’azione.
- Reimposta scudo: immetti energia fino a 2000 unità.
- Entra nel nav-com.
Gli scudi proteggono dai Klingon, che attaccano automaticamente quando entri nel loro settore. Se non hai scudi, i tuoi computer vengono messi fuori uso per 30 secondi. I colpi nemici sono inversamente proporzionali alla forza dello scudo, ma ogni colpo indebolisce lo scudo e costa energia. Quindi più velocemente distruggi il Klingon attaccante, meglio è.
Oltre ai siluri fotonici, disponi dei phaser. Ma questi devono essere puntati e sparati in una delle quattro direzioni usando i tasti 1(su), 2(destra), 3(giù), 4(sinistra) quando sei nella normale visuale a scansione a corto raggio.
Quando incontri un Klingon o inizi ad avere poca energia, lo schermo lampeggerà e mostrerà un rapporto RED STATUS. Se provi a uscire dalla griglia otto per otto, scoprirai che non puoi e perdi tutta l’energia degli scudi.
Ogni siluro e ogni colpo di phaser consuma 1000 unità di energia. Ogni spostamento consuma ENERGIA/1000 unità, reimpostare gli scudi consuma SCUDO/40 unità. L’energia è il fattore decisivo, quindi usala saggiamente.
IMPORTANTE: Il codice di questo gioco e’ estremamente lungo e, nonostante i nostri sforzi ed i nostri test, potrebbero comparire ancora degli errori di digitazione. Nel caso ne trovaste, segnaleteceli e provvederemo a correggere il listato. Grazie!

Titolo: Trek III
Piattaforma: BBC Micro
Linguaggio: Basic
Versione originale: Tim Heaton
Pubblicazione: Acorn User – numero 4
Anno: 1982 – Novembre
Trascrizione: Francesco Fiorentini
Anno: 2026
Download: N/A




Come sempre, qui di seguito trovate il codice ottimizzato per essere copiato direttamente sul vostro BBC Micro oppure su un emulatore. Il nostro consiglio é quello di utilizzare BeebEm.
Una volta avviato BeebEm non dovrete far altro che copiare il listato sottostante ed incollarlo sull’emulatore tramite: Edit -> Paste. Dopodiché digitate RUN ed il gioco é fatto!
Attenzione – Ci siamo resi conto che nel listato i caratteri ‘>’ e ‘<‘ potrebbero venir sostituiti dai rispettivi encoding html ‘>’ e ‘<’. Nel caso, sostituite questi valori nel listato prima di copiarlo sull’emulatore.
Listato: Terk III – BBC Micro – 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 10 MODE7:*FX4,1
20 YC$=CHR$131:RC$=CHR$129:GC$=CHR$130
30 PRINTTAB(6,1)CHR$141;GC$;CHR$136"T=R=E=K III":PRINTTAB(6,2)CHR$141;GC$;CHR$136"T=R=E=K III"
40 PRINTTAB(5,12)YC$"40 IS EASIER!":PRINTTAB(2,10)YC$"INPUT DIFFICULTY (5-40)";:INPUTD
50 VDU23,0,11,0,0,0:PRINTTAB(0,24)
60 ENVELOPE 1,3,2,2,2,50,30,30,126,-1,1,-1,90,80:ENVELOPE 2,1,100,100,100,100,100,100,126,-50,-50,-50,120,90
70 DIM quadrant%(8,8),klingon%(15,2),base%(5,2),recharge%(5)
80 OK$=YC$+"ALL SYSTEMS OK ":Dnav$=RC$+"NAV-COM DAMAGED ":Darm$=RC$+"ARM-COM DAMAGED ":NK$=YC$+"NO KLINGONS IN RANGE"
90 HK$=YC$+"KLINGON DESTROYED ":LS$=RC$+"SHIELD LOW ":LE$=RC$+"RENERY LOW ":R$=RC$+CHR$136+"RED "
100 G$=GC$+"GREEN"
110 star$=CHR$133+"*":phaser$=GC$+CHR$255:base$=CHR$134+"@":klingon$=RC$+"^":enterprise$=YC$+"^":blank$=GC$+CHR$255+CHR$255+CHR$255
120 status$=GC$:report$=OK$:Dnav=0:Darm=0:Dkli=0
130 energy=D*10000:k1=15:NQ=0:B=0:move=0:shield=1000:phaser=0:photon=7:hit=0:torpedoe=0
140 navT=9999999:armT=9999999:k1T=9999999
150 PROCinst:TIME=0
160 PROCsrs:PROCscreen
170 PROCsrsfill:PROCmove:PROCenergy:PROCcommand:PROCklingon:PROCcheck
180 GOTO170
190 DEFPROCinst
200 FORX=1 TO 8:FORY=1 TO 8
210 quadrant%(X,Y)=110
220 NEXTY:NEXTX
230 QposX=RND(8):QposY=RND(8)
240 SposX=RND(22)+3:SposY=RND(10)+4
250 FORL=1 TO 100
260 R1=RND(8):R2=RND(8)
270 quadrant%(R1,R2)=quadrant%(R1,R2)+10
280 IF L>15 GOTO 340
290 RX=RND(8):RY=RND(8)
300 quadrant%(RX,RY)=quadrant%(RX,RY)+100
310 klingon%(L,1)=RND(22)+3:klingon%(L,2)=RND(9)+4
320 IF L>5 GOTO 340
330 base%(L,1)=RND(8):base%(L,2)=RND(8)
340 NEXT L:ENDPROC
350 DEFPROCsrs
360 CLS:SOUND3,-15,200,1
370 PRINTTAB(1,3)CHR$150;CHR$55;TAB(1,15)CHR$150;CHR$117;TAB(28,3)CHR$107;TAB(28,15)CHR$122
380 FORZ=3 TO 27:PRINTTAB(Z,3)CHR$96;TAB(Z,15)CHR$112;:NEXTZ
390 FORZ=4 TO 14:PRINTTAB(1,Z)CHR$150;CHR$53;TAB(27,Z)CHR$150;CHR$106:NEXTZ:PRINTCHR$159
400 PRINTTAB(30,2)CHR$132;CHR$157;YC$;"TIME ";CHR$156
410 PRINTTAB(29,5)CHR$131;CHR$157;RC$;"ENERGY ";CHR$156
420 PRINTTAB(29,8)CHR$133;CHR$157;YC$;"STATUS ";CHR$156
430 PRINTTAB(30,11)CHR$134;CHR$157;CHR$132;"AREA ";CHR$156
440 PRINTTAB(29,14)CHR$130;CHR$157;YC$;"SHIELD ";CHR$156
450 PRINTTAB(1,17)CHR$129;CHR$157;YC$;"STATUS REPORT: ";CHR$156
460 ENDPROC
470 DEFPROCnavcom
480 IF Dnav=1 LET report$=Dnav$:GOTO170
490 CLS:SOUND3,-15,100,2
500 H$="NAVIGATION COMPUTER":PROCheadings
510 PRINTTAB(0,6)CHR$129;CHR$157;YC$;" ENERGY:"
520 PRINTTAB(0,7)CHR$134;CHR$157;CHR$132;" QUADRANT:";QposX;";";QposY
530 PRINTTAB(2,14)YC$;"<1> _ Return to S.R.S."
540 PRINTTAB(2,15)YC$;"<2> _ See cumulative galaxy record"
550 PRINTTAB(2,16)YC$;"<3> _ Star_base data"
560 PRINTTAB(2,17)YC$;"<4> _ Enter armaments computer"
570 A$=INKEY$(10):A=VAL(A$)
580 *FX15,0
590 PROCenergy:PROCklingon:PRINTTAB(15,6);energy
600 IF A<>1 AND A<>2 AND A<>3 AND A<>4 GOTO570
610 ON A GOTO 160,2160,2400,640
620 ENDPROC
630 DEFPROCarmcom
640 IF Darm=1 LET report$=Darm$:GOTO170
650 CLS:SOUND 3,-15,150,2
660 H$="ARMAMENTS COMPUTER":PROCheadings
670 PRINTTAB(0,6)CHR$129;CHR$157;YC$;" ENERGY:"
680 PRINTTAB(0,7)GC$;CHR$157;YC$;" PHOTON TORPEDOES:"
690 PRINTTAB(0,8)CHR$134;CHR$157;CHR$132;" SHIELD:"
700 PRINTTAB(0,9)CHR$133;CHR$157;YC$;" KLINGONS:"
710 PRINTTAB(2,14)YC$;"<1> _ Return to S.R.S."
720 PRINTTAB(2,15)YC$;"<2> _ Fire photon torpedoes:"
730 PRINTTAB(2,16)YC$;"<3> _ Reset shield"
740 PRINTTAB(2,17)YC$;"<4> _ Enter navigation computer:"
750 B$=INKEY$(10):B=VAL(B$)
760 *FX15,0
770 PROCenergy:PROCklingon:PROCarmfill
780 IF B<>1 AND B<>2 AND B<>3 AND B<>4 GOTO750
790 ON B GOTO 160,800,820,480
800 IF LEFT$(STR$(quadrant%(QposX,QposY)),1)="1" report$=NK$:k1T=TIME:GOTO160
810 photon=photon-1:torpedoe=1000:PROChit:GOTO160
820 PROCshield:GOTO160:ENDPROC
830 DEFPROCsrsfill
840 PRINTTAB(32,3)CHR$129;INT(TIME/100)
850 PRINTTAB(31,6)CHR$131;energy;" "
860 PRINTTAB(30,9)CHR$133;status$
870 PRINTTAB(32,12)CHR$134;QposX;",";QposY
880 PRINTTAB(32,15)CHR$130;shield;" "
890 PRINTTAB(3,18)report$
900 ENDPROC
910 DEFPROCenergy
920 energy=INT(energy-(shield/40)-phaser-torpedoe-hit-move):move=0:phaser=0:hit=0:torpedoe=0
930 ENDPROC
940 DEFPROCcommand
950 C$=INKEY$(0)
960 *FX15,0
970 IF C$="" GOTO1030
980 SOUND3,-4,220,1
990 IF C$="1" OR C$="2" OR C$="3" OR C$="4":SOUND3,-15,100,5:PROCphasers
1000 IF C$="N" PROCnavcom
1010 IF C$="A" PROCarmcom
1020 IF C$="S" PROCshield
1030 ENDPROC
1040 DEFPROCscreen
1050 IF MID$(STR$(quadrant%(QposX,QposY)),2,1)="1" GOTO1090
1060 FOR L=1 TO (VAL(MID$(STR$(quadrant%(QposX,QposY)),2,1)))-1
1070 PRINTTAB(RND(22)+3,RND(10)+4)star$
1080 NEXTL
1090 IF LEFT$(STR$(quadrant%(QposX,QposY)),1)="1" GOTO 1130
1100 FOR L=1 TO VAL(LEFT$(STR$(quadrant%(QposX,QposY)),1))-1
1110 PRINTTAB(klingon%(k1,1),klingon%(k1,2))klingon$
1120 NEXTL
1130 ENDPROC
1140 DEFPROCmove
1150 NQ=0:PRINTTAB(SposX,SposY)" "
1160 M=INKEY(0):IF M=-1 GOTO1310
1170 *FX15,0
1180 move=energy/1000
1190 IF M=136 SposX=SposX-1:enterprise$="["
1200 IF M=137 SposX=SposX+1:enterprise$="]"
1210 IF M=138 SposY=SposY+1
1220 IF M=139 SposY=SposY-1:enterprise$="^"
1230 IF SposX<3 QposX=QposX-1:SposX=25:NQ=1
1240 IF SposX>25 QposX=QposX+1:SposX=3:NQ=1
1250 IF SposY<4 QposY=QposY+1:SposY=14:NQ=1
1260 IF SposY>14 QposY=QposY-1:SposY=4:NQ=1
1270 IF QposX<1 QposX=QposX+1:SposX=3:shield=0
1280 IF QposX>8 QposX=QposX-1:SposX=25:shield=0
1290 IF QposY<1 QposY=QposY+1:SposY=14:shield=0
1300 IF QposY>8 QposY=QposY-1:SposY=4:shield=0
1310 PRINTTAB(SposX,SposY)enterprise$
1320 IF NQ=1 GOTO160
1330 ENDPROC
1340 DEFPROCklingon
1350 K=VAL(LEFT$(STR$(quadrant%(QposX,QposY)),1))-1:IF K=0 GOTO 1440
1360 SOUND1,1,10,10:SOUND2,1,30,10:status$=R$
1370 FOR Z=1 TO K
1380 hit=RND(2300-shield):shield=INT(shield-(hit/23))
1390 IF RND(shield+5)=3 Dnav=1:navT=TIME
1400 IF RND(shield+5)=4 Darm=1:armT=TIME
1410 IF shield<0 Dnav=1:navT=TIME:Darm=1:armT=TIME
1420 PRINTTAB(6,21)" ":PRINTTAB(2,21)YC$;"HIT:";hit
1430 NEXTZ
1440 ENDPROC
1450 DEFPROCphasers
1460 P=VAL(C$)
1470 IF P=1 X1=0:Y1=-1
1480 IF P=2 X1=1:Y1=0
1490 IF P=3 X1=0:Y1=1
1500 IF P=4 X1=-1:Y1=0
1510 IF phaser=1000:M2=0
1520 IF SposX+(M2*X1)=klingon%(k1,1) AND SposY+(M2*Y1)=klingon%(k1,2) PROChit:GOTO1580
1530 PRINTTAB((SposX+(M2-1)*X1),SposY+(M2-1)*Y1);" ";TAB((SposX+(M2*X1)),(SposY+(M2*Y1)));phaser$
1540 IF SposX+(M2*X1)>24 OR SposX+(M2*X1)<4 OR SposY+(M2*Y1)>13 OR SposY+(M2*Y1)<5 PRINTTAB(SposX+(M2*X1),SposY+(M2*Y1));" ":GOTO1590
1550 M2=M2+1:SOUND3,1,200,1
1560 PROCenergy:PROCsrsfill:PROCklingon
1570 GOTO1520
1580 PRINTTAB(SposX+(M2-1)*X1),SposY+((M2-1)*Y1))" "
1590 ENDPROC
1600 DEFPROCshield
1610 SOUND3,-15,180,1:MS=0:shield=0
1620 PRINTTAB(2,23)GC$,"SHIELD:"
1630 D$=INKEY$(0):S=VAL(D$)
1640 PROCenergy:PROCklingon
1650 IF B=3 PROCarmfill ELSE PROCsrsfill
1660 IF D$="S" OR D$=""GOTO1630
1670 IF S<0 OR S>9 GOTO1630
1680 MS=MS+1:PRINTTAB(12,23)S
1690 IF MS=1 S=S*1000
1700 IF MS=2 S=S*100
1710 IF MS=3 S=S*10
1720 shield=shield+S
1730 IF MS=4 GOTO1750
1740 GOTO 1630
1750 IF shield>2000 shield=2000
1760 PRINTTAB(32,15)"",TAB(2,23)
1770 ENDPROC
1780 DEFPROChit
1790 SOUND2,2,100,10:SOUND0,-15,4,8:Dkli=1:report$=HK$:kIT=TIME:status$=G$
1800 quadrant%(QposX,QposY)=quadrant%(QposX,QposY)-100
1810 PRINTTAB(klingon%(k1,1),klingon%(k1,2))" "
1820 k1=k1-1:PRINTTAB(2,21)" "
1830 ENDPROC
1840 DEFPROCarmfill
1850 PRINTTAB(17,6)energy;TAB(25,7);photon;TAB(17,8)shield;TAB(17,9)k1
1860 ENDPROC
1870 DEFPROCbase
1880 PRINTTAB(15,10)base$
1890 PROCenergy:PROCsrsfill:PROCmove
1900 IF SposX<>15 OR SposY<>10 GOTO1960
1910 report$=YC$+"DOCKED: "+STR$(recharge%(L1))
1920 IF recharge%(L1)=20000 report$=KC$+"DOCKED:NO FUEL ":GOTO1880
1930 energy=energy+1/2*recharge*(L1)=recharge*(L1)+1/2*Q
1940 SOUND1,-1,0,(2*Q*Q-recharge*(L1))/1/2*Q,3:SOUND2,-1,0,(2*Q*Q-recharge*(L1))/1/4*Q
1950 GOTO1880
1960 ENDPROC
1970 DEFPROCcheck
1980 IF k1=0 PROCwin
1990 IF energy<0 PROClose
2000 FORL1=1 TO 5
2010 IF QposX=base%(L1,1) AND QposY=base%(L1,2) PROCbase
2020 NEXTL1
2030 IF RIGHT$(STR$(quadrant%(QposX,QposY)),1)="0" quadrant%(QposX,QposY)=quadrant%(QposX,QposY)+1
2040 report$=OK$:status$=G$
2050 IF VAL(LEFT$(STR$(quadrant%(QposX,QposY)),1))>1 status$=R$
2060 IF shield<10 shield=0:report$=LS$
2070 IF Dkli=1 report$=HK$
2080 IF Dnav=1 report$=Dnav$
2090 IF Darm=1 report$=Darm$
2100 IF TIME>navT+3000 Dnav=0:navT=999999:report$=OK$
2110 IF TIME>armT+3000 Darm=0:armT=999999:report$=OK$
2120 IF TIME>k1T+1000 Dkli=0:k1T=999999:report$=OK$
2130 IF energy<20000 report$=LE$:SOUND3,1,energy/100,5:status$=R$
2140 ENDPROC
2150 DEFPROCalgebra
2160 CLS
2170 H$="GALACTIC RECORD":PROCheadings
2180 FOR X=1 TO 8:FOR Y=1 TO 8
2190 SOUND1,-12,(X*3/2)+Y*2,1
2200 IF QposX=X AND QposY=Y col=135 ELSE col=134
2210 R=VAL(RIGHT$(STR$(quadrant%(X,Y)),1)):M=VAL(MID$(STR$(quadrant%(X,Y)),2,1))-1:L=VAL(LEFT$(STR$(quadrant%(X,Y)),1))-1
2220 Nbase=0
2230 IF R=0 PRINTTAB(X*4,(11-Y)*2)blank$:GOTO2260
2240 FOR L1=1 TO 5:IF X=base%(L1,1) AND Y=base%(L1,2) Nbase=Nbase+1:NEXT L1
2250 PRINTTAB((X*4),(11-Y)*2)CHR$col;L;M;Nbase
2260 NEXT Y:NEXTX
2270 A=GET:GOTO160
2280 ENDPROC
2290 DEF PROClose
2300 CLS:PRINTTAB(2,3)"!! YOU FOOL !!!"'''"YOU RAN OUT OF FUEL IN ";TIME/100;" secs"
2310 GOTO2370
2320 DEF PROCwin
2330 CLS:PRINTTAB(2,3)"!! WELL DONE CAPTAIN !!"'''"YOU EXTERMINATED ALL THE KLINGONS"
2340 score=INT((energy/(TIME/100))*(41-D)):IF score>H% H%=score
2350 PRINTTAB(1,8)"STARBASE COMMAND AWARDS YOU ";score'" POINTS"
2360 PRINTTAB(5,12)"HI-SCORE=";H%
2370 PRINTTAB(2,20)"PRESS 'R' TO ERADICATE ANOTHER SECTOR"
2380 IF INKEY$(0)="R" RUN ELSE GOTO2380
2390 DEF PROCbasedets
2400 CLS
2410 H$="STAR-BASE DATA":PROCheadings
2420 PRINTTAB(0,5)GC$+"STARBASE POSITION ENERGY AVAILABLE"
2430 FOR Z=1 TO 5:SOUND3,-10,Z*50,1:PRINTTAB(1,(Z*2)+6)CHR$131;Z
2440 IF RIGHT$(STR$(quadrant%(base%(Z,1),base%(Z,2))),1)="0" PRINTTAB(14,(Z*2)+6);"___":GOTO2460
2450 PRINTTAB(14,(Z*2)+6);base%(Z,1);",";base%(Z,2)
2460 PRINTTAB(30,(Z*2)+6);20000-recharge%(Z)
2470 NEXTZ:A=GET:GOTO160
2480 DEFPROCheadings
2490 PRINTTAB(0,2)CHR$131;CHR$157;CHR$132;CHR$141;TAB(6,2)H$
2500 PRINTTAB(0,3)CHR$131;CHR$157;CHR$132;CHR$141;TAB(6,3)H$
2510 PRINTTAB(26,2)CHR$131;CHR$157;CHR$129;CHR$136;CHR$140"ON-LINE";TAB(0,3)CHR$131
2520 ENDPROC
