Schmatzer
Wo gibt's denn das? Pacman für die Grundversion des VC 20? Schmatzer bietet sogar noch ein bißchen mehr.

Nach dem Start des Programms (siehe Listing) erscheint die Frage nach der Steuerung. Gibt man »J« ein, so spielt man mit Joystick, gibt man »N« ein, mit Tastatur. Dabei bedeuten die Tasten »,« nach links ».« nach rechts, »J« nach oben und »M« nach unten. Danach kommt die Frage nach dem Level (Schwierigkeitsgrad). Geben Sie zunächst am besten eine»1«ein. Es erscheint das Labyrinth mit Punkten, Herzen, dem »Schmatzer« und dem Monster. Die Position des Schmatzers und die des Monsters sind zufällig. Der Schmatzer hat den Mund abwechselnd offen und zu (Kaubewegung). Das Spiel beginnt bei Joysticksteuerung mit Bewegung des Knüppels in eine beliebige Richtung, bei Tastatursteuerung mit Betätigung einer beliebigen Taste. Der Schmatzer hinterläßt beim Laufen eine unsichtbare Spur. Das Monster fährt zunächst nach Zufall durch das Labyrinth; es läßt alle Punkte unberührt. Trifft das Monster auf die Spur des Schmatzers, so beginnt es. ihr — in größerer Geschwindigkeit als sich der Schmatzer bewegt — nachzulaufen was sich durch einen hohen Ton bemerkbar macht. Dabei löscht das Monster die Spur wieder. Das Monster geht nach einiger Zeit wieder von der Spur ab (Zufall). Diese Wahrscheinlichkeit wird aber von Runde zu Runde (zweistellige Zahl rechts oben, siehe Bildschirmfoto) geringer. Frißt der Schmatzer ein Herz, so wird das Monster an eine zufällige Position im Labyrinth katapultiert. Dies ist eine Möglichkeit, das Monster von der Spur des Schmatzers abzubringen.
Während des Spiels bedeutet die Zahl rechts oben die Rundenzahl, die darunter die Anzahl der Leben des Schmatzers. Schließt das Monster seine Verfolgung mit einem tieferen Ton ab, so bedeutet dies, daß es einer älteren Spur nachgelaufen war, die ein Ende gefunden hat. Wird der Schmatzer vom Monster erwischt, so wird ein Leben abgezogen, das Monster erscheint an einer zufälligen Stelle im Labyrinth und das Spiel geht durch Betätigung einer Taste beziehungsweise des Joysticks weiter. Ist die Zahl der Leben gleich Null, so ist das Spiel zu Ende. Ein neues Spiel kann mit Betätigung der Leertaste begonnen werden.
Hat man alle 265 Punkte im -Labyrinth aufgefressen, wird das Labyrinth wieder mit Punkten gefüllt, und man kommt in die nächste Runde. Die Positionen des Schmatzers und des Monsters sind wiederum zufällig und das Spiel ist etwas schwieriger. Nach der 3. Runde bekommt man noch ein Extra-Leben, von einer Tonfolge begleitet. Gibt man am Anfang für den Level eine Zahl zwischen 2 und 6 ein, erscheinen weniger Herzen auf dem Spielfeld, wodurch sich die Abwehr des Monsters schwieriger gestaltet. Ab Level 5 wird’s noch mühsamer, das Monster ist unsichtbar und nur dann zu erkennen, wenn es über Punkte läuft. Das verlangt besonders hohe Aufmerksamkeit und ist ein Nervenktizel, da man oft in Ungewißheit schwebt. Diese Levels 5 bis 8 sind eher für den geübteren Spieler gedacht.
Noch ein kleiner Tip: Um schneller durch die Kurven zu kommen, kann man auch schon vor einer Verzweigung die entsprechende Taste beziehungsweise den Joystickknüppel für die gewünschte Richtung betätigen.
(Hannes Kaltenbach)HI | Hi-Score (höchste Punktzahl) |
A$ | Zur Eingabe des Levels und zur Wahl der Steuerung |
L | Level |
J A B C D |
Dienen zur Tastatur- bzw. Joysticksteuerung |
Z | Farbe des Monsters |
I | Dient zur Mundbewegung des Schmatzers |
P | Dient verschiedenen Zwecken |
Q | Tonadresse (35876) |
MR | Anzahl der Leben des Schmatzers |
SC | Score (Punktzahl) des Spielers |
PU | Anzahl der schon gefressenen Punkte |
S | Nummer der Runde |
T | Entscheidet, ob das Monster eine Spur hat |
YM | Bewegungsrichtung des Monsters |
F | Farbadresse, zur Bildschirmadresse addiert |
X | Position des Schmatzers |
Y | Position des Monsters |
PO | Zeichen, auf dem sich das Monster befindet |
XT | Zur Steuerung des Schmatzers |
XM | Bewegungsrichtung des Schmatzers |
P(.) | Bildschirmadressen der Herzen |
5 rem schmatzer von hannes kaltenbach 10 hi=0:dimp(2):p(0)=7938:p(1)=7769:p(2)=8101:goto950 20 forp=1to500:next:return 30 poke36879,25:restore:fori=7616to7679:readp:pokei,p:next 40 q=36876:mr=3:sc=0:pu=0:poke36869,255:s=50 50 t=1:poke36878,15:ym=1:i=56:f=30720:gosub350 60 x=int(rnd(1)*506)+7680:ifpeek(x)<>174then60 70 gosub860:pokex,i:pokey,58:pokex+f,0:pokey+f,2 80 ifpeek(j)=64orpeek(j)=126andpeek(j+1)=247then80 90 ifx=ythen700 100 p=peek(j):ifp=athenxt=-1 110 ifp=bthenxt=1 120 ifpeek(j+1)=bthenxt=1 130 ifp=cthenxt=22 140 ifp=dthenxt=-22 150 ifpeek(x+xt)<>230thenxm=xt 160 p=peek(x+xm):ifp=230then210 170 ifp=211then820 180 ifp=174thenpu=pu+1:pokeq,240:pokeq,0:ifpu=265then610 190 pokex+f,1:pokex,xm+22:x=x+xm:pokex,i:pokex+f,0:if x=ythen690 200 i=i+1:ifi=58theni=56 210 ift=1then260 220 pokeq,250:pokeq,0:pokey,160:y=y+ym:ym=peek(y)-22:pokey+f,z:pokey,58 230 ifym>22then900 240 ifint(rnd(1)*s)=0thent=1:ym=-ym 250 goto90 260 p=peek(y+ym):ifp=230then300 270 pokey,po:pokey+f,6:y=y+ym:pokey+f,z:pokey,58:po=p 280 ifp<45thent=0:ym=p-22:po=160 290 goto90 300 p=int(rnd(1)*4):ifp=0thenym=-1 310 ifp=1thenym=1 320 ifp=2thenym=22 330 ifp=3thenym=-22 340 goto90 350 poke36865,156:print"{clr}{rvon}{blu}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}"; 360 print"{CBM-+}.......{CBM-+}...........{CBM-+}{CBM-+}"; 370 print"{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}{CBM-+}"; 380 print"{CBM-+}...........{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}{CBM-+}"; 390 print"{CBM-+}{yel}S{blu}{CBM-+}{CBM-+}.{CBM-+}{CBM-+}{CBM-+}{CBM-+}.....{CBM-+}.{CBM-+}....{CBM-+}"; 400 print"{CBM-+}{CBM-+}{CBM-+}...{CBM-+}...{CBM-+}.{CBM-+}.{CBM-+}...{CBM-+}{CBM-+}.{CBM-+}"; 410 print"{CBM-+}...{CBM-+}...{CBM-+}.{CBM-+}.{CBM-+}...{CBM-+}{CBM-+}{CBM-+}{CBM-+}.{CBM-+}"; 420 print"{CBM-+}.{CBM-+}...{CBM-+}.......{CBM-+}{CBM-+}{CBM-+}....{CBM-+}"; 430 print"{CBM-+}...{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}{CBM-+}......{CBM-+}{CBM-+}.{CBM-+}"; 440 print"{CBM-+}.{CBM-+}.{CBM-+}........{CBM-+}{CBM-+}.{CBM-+}....{CBM-+}"; 450 print"{CBM-+}...{CBM-+}..{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}{CBM-+}.{CBM-+}....{CBM-+}"; 460 print"{CBM-+}.{CBM-+}.{CBM-+}{CBM-+}...{CBM-+}.{CBM-+}..{CBM-+}.{yel}S{blu}.{CBM-+}.{CBM-+}{CBM-+}"; 470 print"{CBM-+}.{CBM-+}...{CBM-+}.{CBM-+}{CBM-+}.{CBM-+}{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}{CBM-+}"; 480 print"{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}.....{CBM-+}...{CBM-+}.{CBM-+}.{CBM-+}{CBM-+}"; 490 print"{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}{CBM-+}{CBM-+}.{CBM-+}...{CBM-+}.....{CBM-+}{CBM-+}"; 500 print"{CBM-+}.{CBM-+}.......{CBM-+}.{CBM-+}.{CBM-+}{CBM-+}.{CBM-+}{CBM-+}.{CBM-+}{CBM-+}"; 510 print"{CBM-+}.{CBM-+}{CBM-+}{CBM-+}{CBM-+}.{CBM-+}{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}.....{CBM-+}{CBM-+}"; 520 print"{CBM-+}.{CBM-+}...........{CBM-+}.{CBM-+}.{CBM-+}..{CBM-+}"; 530 print"{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}..{CBM-+}{CBM-+}.{CBM-+}.{CBM-+}{CBM-+}.{CBM-+}"; 540 print"{CBM-+}.{CBM-+}{yel}S{blu}....{CBM-+}.{CBM-+}.....{CBM-+}....{CBM-+}"; 550 print"{CBM-+}.{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}.{CBM-+}.{CBM-+}.{CBM-+}{CBM-+}{CBM-+}.{CBM-+}.{CBM-+}{CBM-+}.{CBM-+}"; 560 print"{CBM-+}....................{CBM-+}"; 570 print"{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{home}";:poke8185,230:poke38905,6 580 poke7700,int(s/500)+176:poke7701,s/50-10*peek(7700)+1936:ifl=1then600 590 forp=0tol-2:pokep(p),160:next 600 poke7767,mr+176:poke36865,38:return 610 pokex,160:x=x+xm:pokex,i 620 sc=sc+pu:pu=0:forx=1to6:pokeq,240:forp=1to70:next:pokeq,0:forp=1to30:nextp,x 630 gosub 20:poke36877,130:x=15:pokey+f,2 640 fori=59to63:pokey,i:poke36878,x:x=x-3:forp=1to100:nextp,i:pokey,160 650 poke36877,0:poke36878,15 660 print"{home}{rvon}punkte:"sc:ifs<>150then680 670 gosub20:forx=1to6:fori=190to240:pokeq,i:next:pokeq,0:next:mr=mr+1:gosub600 680 forp=1to3000:next:s=s+50:goto50 690 ifpo=174thenpu=pu+1 700 pokex,58:pokex+f,2:forp=245to130step-1:poke36874,p:next:poke36874,0:pokex,56 710 fori=59to63:pokex,i:forp=1to100:nextp,i:pokex,160:i=56:t=1:ym=1 720 mr=mr-1:gosub600:ifmr=0then760 730 gosub20:gosub20:gosub860:pokex,56 740 ifpu=265then620 750 goto80 760 forx=0to19:fory=0to3:poke7680+x+22*y,160:nexty,x:sc=sc+pu 770 print"{home}{rvon}{red}spielende."tab(22)"{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}"tab(44)"punkte :"sctab(59)"{blu}leer-{red}"; 780 ifsc>hithenhi=sc 790 printtab(66)"{rvon}hi-score:"hitab(81)"{blu}taste" 800 ifpeek(197)<>32then800 810 poke36869,240:pokej+3,255:goto950 820 pokex+f,1:pokex,xm+22:x=x+xm:pokex,i:pokex+f,0:pokey+f,7 830 pokeq,230:poke36876,0:t=1:gosub20:pokey+f,2 840 pokey,po:gosub860 850 gosub20:goto90 860 p=int(rnd(1)*20)+1:y=int(rnd(1)*21)+1:y=7680+p+22*y 870 po=peek(y):ifpo=230orx=ythen860 880 pokey,58:pokey+f,2:ifpo<45thent=0:ym=po-22:po=160 890 return 900 pokeq,244:poke36876,0:t=1:po=ym+22 910 goto300 920 data36,24,60,60,36,60,0,0,36,24,36,66,90,66,60,0,60,126,219,102,126,66,90 930 data126,36,24,52,28,36,60,0,0,36,24,52,28,32,60,0,0 940 data36,8,52,28,32,44,0,0,36,8,36,0,0,8,0,0,4,0,32,0,0,0,0,0 950 poke36879,27:print"{clr}{red}{down}schmatzer":print"{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}" 960 print"von hannes kaltenbach":print"{down}level? (1-8)"; 970 geta$:l=val(a$):ifl<1orl>8then970 980 printa$:print"{down}joystick? (j/n) "; 990 geta$:ifa$<>"j"anda$<>"n"then990 1000 printa$:j=197:a=29:b=37:c=36:d=20 1010 ifa$="j"thenj=37151:pokej+3,127:a=110:b=119:c=118:d=122 1020 z=2:ifl>4thenl=l-4:z=1 1030 goto30