Battle of the cars – Amstrad CPC – Locomotive Basic

Amstrad Computer User – Anno 1986 – Linguaggio: Amstrad CPC – Locomotive Basic

Il mio personale regalo per l’Epifania del 2026.

Battle of the cars
Un listato che ho trovato a pagina 46 della rivista Amstrad Computer User di Luglio 1986.
Il listato e’ volutamente corto per dimostrare, a detta dell’autore, le potenzialita’ del Locomotive Basic per scrivere giochi.

Scopo del gioco
L’idea del gioco è quella di controllare un’auto da corsa che gira su una griglia. Un’auto robotizzata gira nella direzione opposta e cercherà di speronarti mentre guidi. Quindi, per evitarla, dovrai cambiare corsia. Nel frattempo, dovrai guidare sui puntini per accumulare punti. Guidando su tutti i puntini di una schermata potrai passare alla schermata successiva e ricominciare da capo.

Immagine del gioco Head On del 1979

L’idea forse non e’ delle piu’ originali, l’abbiamo gia’ vista in sala giochi con il gioco Head On pubblicato da Sega/Gremlin nel 1979, ma vederlo scritto in Basic girare in maniera fluida sul nostro Amstrad CPC devo ammettere che ha il suo fascino.

Titolo: Battle of the cars
Piattaforma: Amstrad CPC
Linguaggio: Locomotive Basic
Versione originale: Mark Edmonds
Pubblicazione: Amstrad Computer User
Anno: Luglio 1986
TrascrizioneFrancesco Fiorentini
Anno: 2025
Note: N/A

Scopo del gioco
Un gioco di abilità e anticipazione…
Lo scopo del gioco è quello di correre lungo i numerosi passaggi del tracciato raccogliendo punti lungo il percorso ed evitando l’auto robot suicida.
C’è però un problema… puoi cambiare corsia solo in uno dei quattro piccoli spazi vuoti del circuito!
L’auto robot può spostarsi solo di una corsia alla volta… tu puoi spostarti fino a cinque in un unico spazio.
Attenzione… il robot guida nella direzione opposta e cambia sempre nella corsia più vicina alla tua.
Tasti: A/Z – Su’/Giu’ – N/M – Sinistra/Destra

I tasti da utilizzare nel gioco
CRASHHHHHH!!!!

Qui di seguito trovate il codice del gioco e del loader da copiare sul vostro Amstrad CPC.
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 direttamente su CBM prg Studio.

Listato: Battle of the cars – Amstrad CPC – Locomotive 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
10 REM     Bang Wollop
20 REM    *************
30 REM
40 REM    Mark Edmonds 1986
50 REM
60 MEMORY HIMEM-12
70 COPYCHAR=HIMEM+1
80 FOR ADDRESS=COPYCHAR TO COPYCHAR+10
90 READ BYTE:POKE ADDRESS,BYTE
100 NEXT ADDRESS
110 DATA &CD,&60,&BB,&DD,&6E,&00,&DD,&66,&01,&77,&C9
120 RESTORE 130:FOR Q=1 TO 10:READ IK:P(Q)=IK:NEXT
130 DATA 0,13,1,3,2,10,9,4,11,6
140 GOSUB 1290
150 REM
160 REM * Instructions *
170 REM
180 BORDER 0:INK 0,0:INK 1,25:INK 2,17:INK 3,19
190 MODE 1:PAPER 0:CLS:PEN 1:LOCATE 11,1:PRINT"* BANG WOLLOP *"
200 PEN 2:FOR D=1 TO 39:LOCATE D,5:PRINT " ";CHR$(250):FOR N=1 TO 70:NEXT N:NEXT D:LOCATE 40,5:PRINT" "
210 PEN 3:LOCATE 1,6:PRINT"  A game of skill and anticipation..."
220 PEN 1:PRINT:PRINT"  The object of the game is to race     around the many passages of the track    collecting points as you go whilst       avoiding the suicidal robot car."
230 PRINT:PRINT"  There is one catch...you can only     change lanes at one of the four small          gaps in the circuit!"
240 PRINT:PRINT"  The robot car can only move one lane   at a time.... you can move up to five   in one gap. BEWARE...the robot drives   in the opposite direction and always    changes into the lane nearest to you!"
250 PEN 2:LOCATE 12,24:PRINT"PRESS ANY KEY"
260 IF INKEY$="" THEN 260
270 CLS:PEN 1:LOCATE 16,1:PRINT"KEYS":LOCATE 16,2:PRINT"===="
280 PEN 3:LOCATE 9,4:PRINT"A - Move up one lane"
290 LOCATE 9,6:PRINT"Z - Move down one lane"
300 LOCATE 9,8:PRINT"N - Move left one lane"
310 LOCATE 9,10:PRINT"M - Move right one lane"
320 PEN 2:LOCATE 12,24:PRINT"PRESS ANY KEY"
330 IF INKEY$="" THEN 330
340 REM
350 REM * Set Up *
360 REM
370 SC=0:DOTS=0:SH=1:LI=3
380 REM
390 REM * Draw Screen *
400 REM
410 MODE 1:INK 0,P(SH)
420 PAPER 0:CLS:BORDER 7:PEN 1
430 PRINT"+--------------------------------------+";
440 PRINT"|................      ................|";
450 PRINT"|.+--------------      --------------+.|";
460 PRINT"|.|..............      ..............|.|";
470 PRINT"|.|.+------------      ------------+.|.|";
480 PRINT"|.|.|............      ............|.|.|";
490 PRINT"|.|.|.+----------      ----------+.|.|.|";
500 PRINT"|.|.|.|..........      ..........|.|.|.|";
510 PRINT"|.|.|.|.+--------      --------+.|.|.|.|";
520 PRINT"|.|.|.|.|                      |.|.|.|.|";
530 PRINT"|         +------------------+         |";
540 PRINT"|         |                  |         |";
550 PRINT"|         |                  |         |";
560 PRINT"|         |                  |         |";
570 PRINT"|         +------------------+         |";
580 PRINT"|.|.|.|.|                      |.|.|.|.|";
590 PRINT"|.|.|.|.+--------      --------+.|.|.|.|";
600 PRINT"|.|.|.|..........      ..........|.|.|.|";
610 PRINT"|.|.|.+----------      ----------+.|.|.|";
620 PRINT"|.|.|............      ............|.|.|";
630 PRINT"|.|.+------------      ------------+.|.|";
640 PRINT"|.|..............      ..............|.|";
650 PRINT"|.+--------------      --------------+.|";
660 PRINT"|................      ................|";
670 PRINT"+--------------------------------------+";
680 LOCATE 17,12:PEN 2:PRINT"Score ";SC  
690 LOCATE 17,13:PEN 3:PRINT"Sheet ";SH  
700 LOCATE 17,14:PEN 1:PRINT"Lives ";LI  
710 REM  
720 REM * Tune *  
730 REM  
740 PEN 2:LOCATE 21,24:PRINT CHR$(248)  
750 PEN 3:LOCATE 21,10:PRINT CHR$(244)  
760 FOR M=1 TO 3  
770 SOUND 7,239,10  
780 FOR N=1 TO 700:NEXT N  
790 NEXT M  
800 SOUND 7,119,100  
810 LOCATE 21,10:PRINT " "  
820 REM  
830 REM * Main Loop *
840 REM
850 X=21:Y=24:A=21:B=10
860 L=5:K=1
870 Z=248:C=244:A%=0:B%=0
880 LOCATE X,Y:CALL COPYCHAR,@B%
890 LOCATE A,B:CALL COPYCHAR,@A%
900 PEN 2:LOCATE X,Y:PRINT CHR$(Z)
910 PEN 3:LOCATE A,B:PRINT CHR$(C)
920 D=A:E=B:V=X:W=Y
930 IF B%=46 THEN DOTS=DOTS+1:SOUND 7,119,3
940 IF (X=A OR X=A+1 OR X=A-1) AND (Y=B OR Y=B+1 OR Y=B-1) THEN GOTO 1180
950 IF Z=248 OR Z=250 THEN X=X-(249-Z) ELSE Y=Y-(250-Z)
960 IF C=244 OR C=246 THEN A=A-(245-C) ELSE B=B+(246-C)
970 I$=UPPER$(INKEY$)
980 IF I$="N" THEN GOTO 1390
990 IF I$="M" THEN GOTO 1420
1000 IF I$="A" THEN GOTO 1450
1010 IF I$="Z" THEN GOTO 1480
1020 IF B=14 AND A>30 AND A<38 AND K<L THEN K=K+1:A=A+2
1030 IF B=14 AND A>32 AND A<40 AND K>L THEN K=K-1:A=A-2
1040 IF A=19 AND B>15 AND B<23 AND K<L THEN K=K+1:B=B+2
1050 IF A=19 AND B>17 AND B<25 AND K>L THEN K=K-1:B=B-2
1060 IF B=12 AND A>3 AND A<11 AND K<L THEN K=K+1:A=A-2
1070 IF B=12 AND A>1 AND A<9 AND K>L THEN K=K-1:A=A+2
1080 IF A=22 AND B>3 AND B<11 AND K<L THEN K=K+1:B=B-2
1090 IF A=22 AND B>1 AND B<9 AND K>L THEN K=K-1:B=B+2
1100 IF (X=Y AND X<11) OR (X+(25-Y)=40 AND X>29) OR (X+Y=41 AND X>29) OR (X+Y=26 AND X<11) THEN Z=Z+1
1110 IF (A=B AND A<11) OR (A+(25-B)=40 AND A>29) OR (A+B=41 AND A>29) OR (A+B=26 AND A<11) THEN C=C+1
1120 IF C=248 THEN C=244
1130 IF Z=252 THEN Z=248
1140 IF DOTS=288 THEN GOTO 1510
1150 PEN 1:LOCATE D,E:PRINT CHR$(A%):LOCATE V,W:PRINT" "
1160 GOTO 880
1170 REM
1180 REM * CRASH *
1190 REM
1200 PEN 3:LOCATE X-1,Y-1:PRINT"***":LOCATE X-1,Y:PRINT"***":LOCATE X-1,Y+1:PRINT"***"
1210 ENV 1,100,3,1:SOUND 1,200,100,1,1,1,5
1220 PS=SC:SC=SC+DOTS
1230 PEN 2:FOR T=PS TO SC:LOCATE 23,12:PRINT T:SOUND 7,119,1:NEXT T
1240 LI=LI-1:LOCATE 17,14:PEN 1:PRINT"LIVES ";LI
1250 FOR WT=1 TO 1000:NEXT WT
1260 IF LI=0 THEN GOTO 1560
1270 DOTS=0
1280 GOTO 380
1290 SYMBOL 244,&7,&F7,&62,&FF,&FF,&62,&F7,&7
1300 SYMBOL 244,&7,&F7,&62,&FF,&FF,&62,&F7,&7
1310 SYMBOL 245,&DB,&FF,&DB,&18,&5A,&7E,&7E,&5A
1320 SYMBOL 246,&E0,&EF,&46,&FF,&FF,&46,&EF,&E0
1330 SYMBOL 247,&5A,&7E,&7E,&5A,&18,&DB,&FF,&DB
1340 SYMBOL 248,&7,&F7,&62,&FF,&FF,&62,&F7,&7
1350 SYMBOL 249,&5A,&7E,&7E,&5A,&18,&DB,&7E,&DB
1360 SYMBOL 250,&E0,&EF,&46,&FF,&FF,&46,&EF,&E0
1370 SYMBOL 251,&DB,&FF,&DB,&18,&5A,&7E,&7E,&5A
1380 RETURN
1390 IF X>3 AND X<11 AND Y>10 AND Y<16 THEN X=X-2:L=L+1
1400 IF X>32 AND Y>10 AND Y<16 THEN X=X-2:L=L-1
1410 GOTO 1020
1420 IF X>1 AND X<10 AND Y>10 AND Y<16 THEN X=X+2:L=L-1
1430 IF X>30 AND X<38 AND Y>10 AND Y<16 THEN X=X+2:L=L+1
1440 GOTO 1020
1450 IF Y>3 AND Y<11 AND X>17 AND X<24 THEN Y=Y-2:L=L+1
1460 IF Y>17 AND X>17 AND X<24 THEN Y=Y-2:L=L-1
1470 GOTO 1020
1480 IF Y>1 AND Y<9 AND X>17 AND X<24 THEN Y=Y+2:L=L-1
1490 IF Y>15 AND Y<23 AND X>17 AND X<24 THEN Y=Y+2:L=L+1
1500 GOTO 1020
1510 PS=SC:SC=SC+DOTS
1520 PEN 2:FOR T=PS TO SC:LOCATE 23,12:P RINT T:SOUND 7,119,1:NEXT T
1530 SH=SH+1:DOTS=0
1540 IF SH=11 THEN SH=1
1550 GOTO 380
1560 CLS:PEN 2:LOCATE 16,13:PRINT"GAME OVER"
1570 LOCATE 16,15:PEN 3:PRINT"SCORE -";SC
1580 LOCATE 9,24:PEN 1:PRINT"PRESS A KEY TO PLAY AGAIN"
1590 IF INKEY$="" THEN 1590
1600 GOTO 340
1610 FOR WT=1 TO 1000:NEXT WT

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.