Croussaider – Ein Action-Spiel für den VC 20
Dieses Spiel zeigt die Möglichkeiten, die bereits in der Grundversion des VC 20 stecken. Obwohl von den Farbgrafik- und Soundmöglichkeiten ausgiebig Gebrauch gemacht wird, benötigt das Programm nur knapp 3 KByte RAM.

Feindliche Weltraumschiffe greifen die Erde an! Sie haben in diesem Spiel die Aufgabe, die Invasion abzuwehren. Dazu besitzen Sie ein Raumschiff, den »Croussaider«, das über der Erde schwebt. Unter ihm liegt eine moderne Stadt mit Hochhäusern, Fabriken und einem Atomkraftwerk. Am oberen Rand des Bildschirms erscheinen die Angreifer, deren Ziel es ist, in der Stadt zu landen und sie zu zerstören.
Sie bewegen sich rasch auf die Stadt zu, so daß schnelle Reaktionen erforderlich sind, um eine Landung zu verhindern.
Hat man es geschafft, den Angreifern eine bestimmte Zeit zu widerstehen, erscheint eine neue, gefährlichere Welle von Invasoren mit anderem Aussehen.
Wenn man fünf verschiedene Angriffswellen übersteht, erscheint wieder die erste, mit dem Unterschied, daß die Angreiferzahl steigt. So ist immer für Abwechslung und Spannung gesorgt.
Der fortgeschrittene Spieler, dem das Spiel zu einfach ist, kann den Wert der Variablen Y in Zeile 10 vermindern.
Um das Spiel zu beschleunigen, wurden einige Routinen in Maschinensprache geschrieben. Die erreichte Punktzahl wird ständig angezeigt, und eine »High-Score»-Funktion hält das jeweils beste Ergebnis fest.
Doch damit genug der Vorrede. Tippen Sie doch jetzt einfach das Listing ab und versuchen Sie, die Invasion zu verhindern…
(Eberhard Aust)| 10 | Einlesen des Maschinenprogramms |
| 12 | Einlesen der Grafikzeichen |
| 19 - 99 | Spielvorbereitung |
| 100 - 130 | Hauptspielroutine |
| 200 - 206 | Score-Routine |
| 250 - 292 | Anzeige des Highscore |
| 300 - 314 | Schwierigkeitsgrad ändern |
| 1000 - 1012 | Maschinensprache-DATA |
| 1100 - 1107 | Grafik-DATA |
| A | Raumschiffposition |
| Y | Angreiferwahrscheinlichkeit |
| J,K,L | Aussehen des Angreifers |
| SC | Score |
| HI | High-Score |
| E | Inhalt des Registers 37151 |
| F | Inhalt des Registers 37152 |
| N | Konstante 36876 |
| D | Zufallszahl zwischen 1 und 2 |
1 rem croussaider
2 rem ===========
3 rem
4 rem
10 fora=0to164:readb:poke828+a,b:next:forj=0to41:readk:poke7440+j,k:next
12 forj=0to159:readk:poke7168+j,k:next:forj=0to7:poke7168+32*8+j,0:next
19 poke36879,9:print"{clr}{down}{down}{down}{down}{down}":a=8086:b=8078:c=8095:sc=0:x=0
20 poke36869,255:poke36878,15:poke7432,8:poke7433,0:y=10:n=36876:li=10:ifqq=0then280
75 forrr=0to44:print"{yel} ";:next:print"{down}{cyn} "
80 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{yel}ll p l {cyn}q p q{yel} ll pll lllplll{grn}mm{cyn}rolor{yel}llllllll";
90 print"{grn}nnnnnnnnnnnnnnnnnnnnn{home}":poke7680+505,14:poke38400+505,5
91 pokea-1,9:pokea,10:pokea+1,11:gosub300
100 e=peek(37151):poke37154,127:f=peek(37152):poke37154,255:d=int(rnd(1)*2)+1:poken,s+d
103 if(eand16)=0anda>bthenpokea+1,32:pokea,32:a=a-d:pokea-1,9:pokea,10:pokea+1,11:poken,r
104 if(fand128)=0anda<cthenpokea-1,32:pokea,32:a=a+d:pokea+1,11:pokea,10:pokea-1,9:poken,t
106 poke36877,0:sys903:if(eand32)=0thenpokea-22,8:poke36877,252+d
111 ifint(rnd(1)*y)=0theni=int(rnd(1)*14)+7728:pokei-1,j:pokei,k:pokei+1,l
120 sys828:sys828+51:ifpeek(7432)<>8thengosub200
121 ifpeek(7433)<>0thengoto250
127 u=u+1:ifu=1thensys7440:ifti>2000thengosub300
129 print"{home}{wht}{rvon}"sc:ifu=2thensys(7461):u=0
130 sys903:goto100
200 forh=0to15:poke36879,int(rnd(1)*256):next:poke36879,9
201 h=peek(7432):poke36877,int(rnd(1)*90)+128:poke7432,8:ifh=0thensc=sc+10:return
202 ifh=2orh=4thensc=sc+40:return
203 ifh=3thensc=sc+int(rnd(1)*120):return
204 ifh=5thensc=sc+75:return
205 ifh=1thensc=sc+20:return
206 return
250 print"{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{yel} {cyn} {yel} s sslssss{grn}ms{cyn}qosoq{yel}ssssslss";
252 poken,0:poken+1,128:foru=15to0step-1:poken+2,u:foruu=0to40:poken+3,int(rnd(1)*128):next:next
279 ifsc>hithenhi=sc
280 poke36879,9:print"{home}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{wht}{rvon}"hi:print"{home}{rvon}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}croussaider{down}{down}{left}{left}{left}{left}{left}{left}{left}{left}{left}e. aust"
281 geta$:qq=1:ifa$=""then281
282 goto19
300 ti$="000000":x=x+1:s=220+x*3:r=s-10:t=s+10:ifx=6theny=y-1:x=1:ify<3theny=3
310 ifx=1thenj=32:k=1:l=32:z=y:return
311 ifx=2thenj=0:k=32:l=0:z=y:return
312 ifx=3thenj=2:k=3:l=4:z=y*2:return
313 ifx=4thenj=1:k=0:l=1:z=y*1.5:return
314 ifx=5thenj=2:k=3:l=4:z=y*1.5:return
1000 data162,228,189,0,31,201,8,16,8,157,22,31,169,32,157,0,31,224,0,240,4,202,76,62,3
1001 data162,233,189,22,30,201,8,16,8,157,44,30,169,32,157,22,30,224,0,240,4,202,76,87,3
1002 data96,162,0,189,184,31,201,8,48,9,224,43,240,4,232,76,113,3,96,142,9,29,76,120,3
1003 data162,0,189,22,30,201,8,208,20,168,189,0,30,201,8,16,3,141,8,29,152,157,0,30
1004 data169,32,157,22,30,224,255,240,4,232,76,137,3
1006 data162,0,189,22,31,201,8,208,20,168,189,0,31,201,8,16,3,141
1007 data8,29,152,157,0,31,169,32,157,22,31,224,200,240,4,232,76,174,3
1008 data162,0,169,32,157,22,30,232,224,22,240,3,76,211,3,96
1009 data169,126,141,4,28,169,36,141,5,28,169,36,141,6,28,169,24,141,7,28,96
1010 data169,102,141,4,28,169,60,141,5,28,169,66,141,6,28,169,129,141,7,28,96
1100 data60,126,219,255,102,60,66,129,66,36,24,126,165,126,24,
1101 data128,128,231,159,252,252,191,136,,126,255,255,66,66,255,255,1,1,193,249,63,63
1102 data255,,,,,,,,,,,,,,,,,,,,,,,,,,8,8,28,28,28,28,20,54,,24,126,165
1104 data255,165,127,36,66,36,60,24,126,255,231,,,24,126,165,255,165,254,36
1105 data255,165,255,165,255,165,255,165,4,14,14,31,31,31,4,4,255,255,255,255,255,255
1106 data255,255,,60,126,126,126,126,126,126,102,102,102,102,102,102,102,102
1107 data,,,,126,60,60,60,60,60,60,60,126,126,126,255,,,,,,52,126,255