Skip to main content

Full text of "Das Atari Spielebuch für 600XL / 800XL"

See other formats


aktıv und kreativ computern 











Mike James, S.M.Gee, Kay Ewbank 
Das Atari-Spielebuch für 600 XL/ 800 XL 





HC - Mein Home-Computer 


Mike James, S.M.Gee, Kay Ewbank 


Das Atari-Spielebuch 
für 600 XL/ 800 XL 


N 


VOGEL-BUCHVERLAG 
WÜRZBURG 


Deutsche Übersetzung und Neubearbeitung: 
Hans-Walter Beilstein, Bensheim 


ISBN 3-8023-0788-7 
1. Auflage. 1984 
Dieses Buch ist eine Übersetzung der englischen Originalausgabe 
«The Atari Book of Games». 
Copyright 1983 by M. James, S.M.Gee and K. Ewbank. 
Erstausgabe 1983 by Granada Publishing. 
Alle Rechte vorbehalten. 

Kein Teil des Werkes darf in irgendeiner Form (Druck, Fotokopie, Mikrofilm oder 
einem anderen Verfahren) ohne schriftliche Genehmigung des Verlages 
reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, 
vervielfältigt oder verbreitet werden. Hiervon sind die in $ 53, 54 UrhG 

ausdrücklich genannten Ausnahmefälle nicht berührt. 
Printed in Germany. 
Copyright 1984 by Vogel-Buchverlag Würzburg 
Umschlaggestaltung: Bernd Schröder, Böhl 
Herstellung: Druckerei Dotzler, München 





Inhaltsverzeichnis 





Einleitung 7 
Schlittenfahrt 13 
Fang den Quark 19 
Pferderennen 29 
Wortsuchspiel 35 
Wächter der Herde 45 
Raketenabwehrschlacht 53 
Die Schatzinsel 61 
Die Schlucht 73 
Achtung - fertig - los! 81 
Schwer auf Draht 89 
Atari-Würfel 95 
Invasion der Außerirdischen 101 
Atari-Mühle 109 
Tontaubenschießen 117 
Rettet den Wal 123 
Raketenschlacht 131 
Golfspiel 139 
Wortpuzzle 147 
Spielhölle 157 
Squash 165 
Ataris Talkshow 173 








Einleitung 





dem Atari lauffähig; Programm eintippen und los geht’s! 

Viel Spaß! 
Da die Programme «Fang den Quark», «Raketenabwehrschlacht», 
«Die Schatzinseb» und «Ataris Talkshow» sehr viel Speicherplatz be- 
nötigen, können bei Rechnern, die mit 16-K-RAM ausgestattet sind, 
eventuell vorhandene Diskettenlaufwerke wegen des Speicherbe- 
darfs desDOS (Disk-Operating-System = Disketten-Betriebssystem) 
nicht benutzt werden. Wenn keine Speichererweiterung möglich ist, 
müssen die Diskettenlaufwerkeabgeschaltetund die vierProgramme 
auf Kassette gespeichert werden. 

Die Spielesind in BASIC geschrieben. Mit dieser Art der Program- 
mierung und der Form der Originallistings sollen zwei Dinge erreicht 
werden. Dazu müssen die Programme selbst eingegeben werden, 
auch wenn es einige Mühe macht. Ein Anfänger wird so sehr schnell 
mit Syntax und Aufbau der Programmiersprache BASIC vertraut. 
Der erfahrene, fortgeschrittene BASIC-Programmierer wird nützli- 
che Tips und Tricks kennenlernen, die auch in eigenen Programmen 
sehr gute Dienste leisten. Atari-BASIC ist nicht einfach, aber unge- 
mein leistungsfähig und steht den anderen, auf dem Markt befindli- 
chen BASIC-Versionen nicht nach. Die hier abgedruckten Program- 
me sind eine eindrucksvolle Bestätigung dafür. 


D: vorliegenden 21 Spiele sind ohne Änderungen auf je- 


8 Einleitung 


Die in diesem Buch gesammelten Spiele sind für die ganze Familie 
geeignet. Jedes Programm ist ausführlich beschrieben. Um die Qual 
der Wahl zu erleichtern, ist bei allen Spielen eine Bildschirmdarstel- 
lung abgedruckt. Natürlich kann das den eindrucksvollen Farbgrafi- 
ken des Atari nicht gerecht werden. Es gibt leider noch keine Mög- 
lichkeit, dem Leser die Geräuschkulisse der Spiele zu vermitteln. 


ZU DIESEM BUCH UND SEINEN SPIELEN 

Es ist schwer, jedes der 21 Spielprogramme genau einer Kategorie 
zuzuordnen oderin eine Rangfolge zu bringen. Etwa ?/: der Spiele ar- 
beiten mit bewegter Grafik. Bei Spielen wie «Invasion der Außerirdi- 
schen», «Squash» und «Schlittenfahrb» handelt es sich um Variatio- 
nen bekannter und beliebter Spiele. Spiele wie «Die Schluchb», 
«Wächter der Herde» oder «Achtung - fertig - los!» sind neu und da- 
her unbekannt. Sie sind aber so reizvoll und spannend, daß sie sicher 
bald zu den Favoriten gehören. «Raketenschlachb» und «Raketenab- 
wehrschlachb» gehören zu den bekannten Feindabwehrspielen, he- 
ben sich aber durch die eingebauten Spezialeffekte deutlich ab. «Die 
Schatzinseb» ist mit eindrucksvoller Grafik ausgestattet und setzt ein 
gutes Gedächtnis voraus. «Fang den Quark» ist ein Brettspiel, bei 
dem man aufeinem 8x 8-Feld gegen den Atari spielt. Aucheinige tra- 
ditionelle Spiele sind dabei, die sich aufdem Computer hervorragend 
spielen lassen, z.B. «Atari-Würfelspieb», «Atari-Mühle» und «Wort- 
puzzle». Mit «Ataris Talkshow» wird ein ganz besonders interessan- 
tes Spiel vorgestellt: Es ist eine Unterhaltung zwischen Mensch und 
Computer in englischer Sprache. 


ZU DEN PROGRAMMEN 

Zum besseren Verständnis sind alle Programme strukturiert und 
die Unterprogramme (Subroutines) aufgelistet, damit deutlich wird, 
«wo, was und warum etwas» geschieht. Spezielle Tricks sind ausführ- 
lich erklärt, weitere Tips stehen in den Hinweisen zu jedem Pro- 
gramm. Wer solche Programmteile in eigenen Programmen verwen- 
det, wird sehen, wie effektiv ein Atari programmiert werden kann. 


Einleitung 9 


Um denLeser zu eigenem Programmieren anzuregen, sind sämtli- 
che Spiele in der Programmiersprache BASIC geschrieben. Zwar 
können solche Spiele nicht so schnell laufen wie die in Maschinen- 
sprache geschriebenen Spiele der Spielekassetten, aber Programmie- 
renin Maschinensprache ist bedeutend schwierigeralsin BASIC, be- 
sonders, wenn man noch nicht zu den Profis gehört. 

Die Spielprogramme sind in Modultechnik aufgebaut. Sämtliche 
Berechnungen, Bildschirmdarstellungen usw. sind als eigenständige 
Unterprogramme (Moduln) vorhanden, die von einem relativkurzen 
Hauptprogramm aufgerufen werden. So ist das von der Programmier- 
sprache Pascal her bekannte Prozedurkonzept angewendet worden. 


PROGRAMMLISTINGS 

Bei den Listings in diesem Buch handelt es sich um die Original- 
listings, mit denen die Spiele getestet wurden. Es wurde bewußt auf 
eine Neunumerierung der Programmzeilen verzichtet (und «krum- 
me» Zeilennummern in Kaufgenommen), um Fehler bei dieser Ak- 
tion zu vermeiden. Die Programme sollten also genauso eingegeben 
werden, wie sie hier abgedruckt sind. 

Zur besseren Lesbarkeit der Listings ist der Zeilenumbruch so ge- 
wählt, daß keine Wörter auseinandergerissen werden. Weiterwurden 
zwischen die einzelnen Programmteile Leerzeilen eingefügt. 

Alle Zeichen, die im Grafik-Modus einzugeben sind, sind zwi- 
schen die spitzen Klammern < und > gesetzt. So bedeutetein<R>, 
daß der Buchstabe R im Grafik-Modus einzugeben ist (siehe Rubrik 
Hinweise bei den Listings). 

Um Verwechslungen zwischen der Ziffer Null (0) und dem Groß- 
buchstaben «O» zu vermeiden, wurde weitgehend auf die Verwen- 
dung des großen «O» verzichtet. Bei der Eingabe ist daraufzu achten, 
daß diese Zeichen nicht verwechselt werden, weil derzum Ausdruk- 
ken der Listings verwendete Atari-Typenwalzendrucker die Null oh- 
ne Schrägstrich darstellt. 

Um Schwierigkeiten beim Eingeben der Programme zu vermei- 
den, sind die Umlaute durch ae, oe usw. ersetzt worden. Sollen Um- 


10 Einleitung 


laute verwendet werden, ist zu beachten, daß im Grafikmodus u. U. 
statt der Umlaute Grafikzeichen ausgegeben werden. 

Im Grafikmodus werden Groß- und Kleinbuchstaben in unter- 
schiedlichen Farben ausgegeben. In den Listings sind daher einige 
Wörter nur in Groß- oder nur in Kleinbuchstaben geschrieben wor- 
den, um diesen Effekt zu erzielen. Ebenso ist bei Textzeilen, die über 
den rechten Bildschirmrand hinausgehen, teilweise aufeinen neuen 
Druckbefehl verzichtet worden. Durch Einfügen oder Weglassen von 
Leerzeichen wurde eine entsprechende Bildschirmformatierung er- 
reicht. 


FEHLER... 

Wie erwähnt, handelt es sich bei den abgedruckten Listings aus- 
nahmslos um Originallistings lauffähiger Programme. Ein Pro- 
gramm, das ohne jede Änderung eingegeben wurde, sollte auf An- 
hieb funktionieren. Gerade beim Abschreiben von Texten können 
sich aber sehr leicht Fehler einschleichen. Sollte ein Programm nicht 
laufen, ist das eingegebene Programm Zeile für Zeile mit dem Origi- 
nallisting zu vergleichen. Wenn das Spiel nach der ersten Korrektur 
immer noch nicht läuft, sollte man einen Augenblick Pause machen 
und dann noch einmal vergleichen. 

Bestimmt sind einige Fehler überhaupt nicht aufgefallen. Soistbe- 
sonders auf «Null-Strings» zu achten, das sind Zeichenketten ohne 
Zeichen (z.B. A$ = ””),oderaufStrings (Zeichenketten) mit Leerzei- 
chen (A$ =” ”). Die Anzahl der Leerzeichen (Blanks) ist wichtig. In 
REM-Zeilen (Kommentarzeilen) der Listings ist dort, wo das Abzäh- 
len zu umständlich gewesen wäre, die richtige Zahl der Blanks ange- 
geben. Weitere Fehlerquellen liegen in der Verwechslung der Zei- 
chen ”.” und”,” ”:”und”;” ”<”und”>” sowie derrichtigen Anzahl 
von Klammern (besonders bei Mehrfachklammern). 

Auf keinen Fall sollten die Zeilennummern geändert werden! Es 
entstehen regelrechte Fallgruben im Programm, in die man unwei- 
gerlich stürzt, wenn zu einer geänderten Zeilennummer gesprungen 
werden soll. Welche der jetzt existierenden Zeilennummern war die 


Einleitung 11 


richtige? Bitte auch in diesem Zusammenhang auf die Hinweise ach- 
ten. 

Wenn das Spiel mit einer Fehlermeldung abbricht, sollte nicht nur 
dieinder Fehlermeldungangegebene Zeileüberprüft werden. Fehler 
können auch in weit entfernten Programmteilen liegen, z.B einfalsch 
dimensioniertes Feld (Array). Stehen SprunganweisungeninderZei- 
le, sollte geprüft werden, ob die angegebenen Zieladressen (=Zeilen- 
nummern) tatsächlich existieren. 


JOYSTICKS 

Die hier veröffentlichten Spiele sind für die Grundausstattung ei- 
nes Atari-Computers vorgesehen, auf die Verwendung von Joysticks 
(Steuerknüppel, Paddles) wurde daher in den Programmen verzich- 
tet. 

Für erfahrene Programmierer dürfte es jedoch keine Schwierigkeit 
bereiten, die Steuerung durch die Pfeiltasten auf Joysticks umzustel- 
len. Geeignet sind die Programme «Schlittenfahrb», «Schwer auf 
Drahb», «Invasion der Außerirdischen», «Tontaubenschießen» und 
«Squash». Bei den restlichen Spielen ist die Verwendung von Joy- 
sticks nicht möglich oder wenig sinnvoll. 


SICHERHEITSKOPIEN 

Es empfiehlt sich, Änderungen an einem Programm niemals am 
Original, sondern grundsätzlich an einer Kopie des Programms 
durchzuführen. Von allen lauffähigen Programmen sollte daher eine 
Sicherheitskopie (Back-up) angefertigt werden, die nicht angetastet 
wird und auf die man bei Schwierigkeiten zurückgreifen kann. 





Se ann Darräbiiisiehicigennna 
u ut N AERO. 
BAT 

nnneuige HIT be aka Denke eh" es 
Alu Ski Aal 
RE rn in ueber erg 
us ze nt er bern j Yin a I 


nr Een 
ey N > 22 EP a DIR Pelz Ber DE Dre De 
lan Pape en ae Pa eg 
EERZÄMEBIE IT Er 
AED 
run Pe Ze MEET 


AN Zune 





Ay * 


By ee VA 






Hill] 
I 


a ee Mia hr 1 gu eec Peenden BE 
el tert are u 

e re 23E a SW OT 
ne DAR EieSpei REN bee is 








de 


B Sackius Ne nn Der 
e tee ee 


l Schlittenfahrt 


as wilde Abenteuereinerrasanten Schlittenfahrt! Die Strecke 
windet sich durch einen Tannenwald, und man muß schon 
ein guter Slalomfahrer sein, um nicht aus der Bahn geworfen 
zu werden. Die Breite der Strecke kann gewählt werden, 5 Schwierig- 
keitsstufen stehen zur Verfügung; das Spiel wird akustisch untermalt. 


SPIELVERLAUF 

Der Schlitten befindet sich oben am Startpunkt. Um die Schlitten- 
fahrt zu simulieren, bewegt sich die Bahn am Schlitten vorbei. Der 
Schlitten kann mit der Rechts-und Links-Pfeiltaste gesteuert werden. 
Die Bahnbegrenzung darf nicht berührt werden: Unfallgefahr! Vor 
dem Spielbeginn ist der Schwierigkeitsgrad zu wählen: Stufe 1 für 
«leichb» mit breiter Schlittenbahn, Stufe 5 istam schwierigsten mitei- 
ner sehr schmalen Bahn. 


HINWEISE 

Die Zeilen in den Programmblöcken 1000 bis 1070, 1100 bis 1170, 
1200 bis 1270 unterscheiden sich nur durch einzelne Zeichen. Hier 
sollten die guten Editiermöglichkeiten des Atari ausgenutzt werden, 
um Tippfehler zu vermeiden und Zeit zu sparen. 


14 


Schlittenfahrt 





PROGRAMMAUFBAU 


20 
150 
260 
380 


440 
480 
560 
670 
770 
1000 
1100 


Umschalten auf Grafikmodus und Abschalten des Cursors 
Beginn der Slalomstrecke 

Hauptprogramm: Slalomfahrt 

Ziel ist erreicht, das Ende der Strecke wird aufdem Bildschirm 
nach oben gerollt (Scrollingeffekt) 

Meldung über Gewinn/Verlust 

Ende des Spiels 

Titelbild 

Bewegung/Steuerung des Schlittens 

Ausgabe der Tannenbäume auf dem Bildschirm 
Definition der Schlittendarstellung auf dem Bildschirm 
Definition der Bahnbegrenzung auf dem Bildschirm 


Schlittenfahrt 15 


1200 Definition der Tannenbaumdarstellung auf dem Bildschirm 
1280 Umschaltung der Farben 
2000 Tonerzeugung 


ERLÄUTERUNGEN 

Die Figurendarstellungen (Shapes) für Schlitten, Bahnbegrenzung 
und Tannenbaum werdenals neue, selbst definierte Zeichen aufgeru- 
fen. Atari-BASIC hat hierfür zwar keine eigenen Befehle, die Defini- 
tion eines neuen Zeichens ist jedoch nicht schwer. Die Form jedes 
Zeichens ist üblicherweise im ROM-Zeichensatz abgelegt. Da keine 
Reservezeichen zur Verfügung stehen, müssen einige der bereits vor- 
handenen Zeichen umdefiniert werden: $ = Schlitten, & = Bahnbe- 
grenzung, % = Tannenbaum. Zunächst wird dergesamte Zeichensatz 
aus dem ROM- in den RAM-Bereich kopiert (Zeilen 50 bis 90). 
Durch Verändern entsprechender Speicherplätze kann nun für jedes 
Zeichen eine neue Form definiert werden (Zeilen 1000 bis 1270). Ab- 
schließend wird in den Zeilen 110 und 120 der ROM-Zeichensatz ab- 
und der RAM-Zeichensatz eingeschaltet. 

Der Eindruck des fahrenden Schlittens entsteht, weil der Bild- 
schirm am Schlitten, der sich nur nach rechts und links bewegen 
kann, vorbei emporgerollt wird. Das LOCATE-Kommandb in Zeile 
730 testet, ob der Schlitten gegen die Bahnbegrenzung fährt. Dazu 
wird geprüft, welches Zeichen sich am Bildschirm an der Stelle befin- 
det, an der das Schlittensymbol als nächstes erscheinen soll. Wenn 
dieses Zeichen nichtden ASCII-Code32 (Blank, Leerzeichen) hat, ist 
man (leider) aus der Bahn geflogen. 


EIGENE ERGÄNZUNGEN 

Es sollte versucht werden, das Programm durch eine «charakteri- 
stische» Melodie zu ergänzen. Im Spiel «Pferderennem» findet sich 
ein Beispiel hierzu. 


16 Schlittenfahrt 





SSS Sasse 


10 REM Schlittenfahrt 


20 GRAPHICS O 

30 GOSUB 560 

40 DIM A$(1) 

50 CH=(PEEK(106)-8)*256 
60 CHORG=(PEEK(756)*256) 
70 FOR I=0 TO 511 

80 POKE CH+I,PEEK(CHORG+I) 
90 NEXT I 

100 GOSUB 1000 

110 POKE 756,CH/256 

120 POKE 752,1 


150 YB=0 

160 X=INT(RND(0)*10)+5 

170 XB=INT(X+D/2) 

175 PRINT CHR$(125) 

180 FOR Y=1 TO 23 

190 POSITION X,23:PRINT "&&";: POSITION X+D,23:PRINT "S6" 
200 GOSUB 770 

210 X=X+SGN(RND(0)-0.5) 

220 IF X>29 THEN X=29 

230 IF X<1 THEN X=1 

240 NEXT Y 

250 POSITION XB,YB: PRINT "$"; 


260 FOR Z=1 TO 500:NEXT Z 
270 F=0 

280 FOR Z=1 TO 300 

290 X=X+SGN(RND(0)-0.5) 
300 IF X>29 THEN X=29 

310 IF X<1 THEN X=1 

320 POSITION X,23: PRINT "6&6&";:POSITION X+D,23:PRINT " 
330 GOSUB 770 

340 GOSUB 670 

350 IF F=1 THEN GOTO 460 
370 NEXT Z 





380 FOR Z=1 TO 30 

390 POSITION 19,23: PRINT 
400 GOSUB 670 

410 IF F=1 THEN GOTO 460 
430 NEXT Z 





SSSssSssSsSssSsssssseaseeee 


Schlittenfahrt 17 





SS 


440 
450 
460 
470 
480 
520 
530 
540 
550 


560 
580 
589 
590 
591 
592 
593 
600 
620 
630 
640 
641 
642 
650 
660 


670 
680 
685 
710 
720 
730 
740 
750 


770 
780 
790 
800 
810 
820 
840 
860 


POSITION 1,19:PRINT "BRAVO! TOLLE LEISTUNG! ZIEL ERREICHT" 
GOTO 480 

POSITION 1,19:PRINT "LEIDER AUS DER BAHN GEFLOGEN!" 

GOSUB 2000 

POSITION 1,20:PRINT "NOCH EIN VERSUCH (J/N)"; 

INPUT A$ 

IF A$="J" OR A$="j" THEN RUN 

GRAPHICS O0 

STOP 


PRINT CHR$(125) 

PRINT " Schlittenfahrt":REM 11 Leerzeichen 
POSITION 2,5:PRINT "Die Schlittenbahn ist sehr steil und" 
PRINT "geht durch einen dichten Wald" 

PRINT :PRINT "Der Schlitten ist mit den Tasten":PRINT 
PRINT " <== (Linkspfeil) und" 

PRINT " ==> (Rechtspfeil)" 

PRINT :PRINT "zu steuern." 

POSITION 2,18:PRINT "Welcher Schwierigkeitsgrad -" 
PRINT " <1> = leicht" 

PRINT " <5> = schwer":PRINT 

PRINT "Zahl von 1 bis 5 eingeben: ";:INPUT D 

IF I<1 OR D>5 THEN GOTO 641 

D=11-D 

RETURN 


REM Schlitten 

A=PEEK(764) 

POKE 764,255 

IF A=6 THEN XB=XB-1 

IF A=7 THEN XB=XB+1 

LOCATE XB,YB,Q:IF Q<>32 THEN F=1 
POSITION XB,YB: PRINT "$" 

RETURN 


REM Baum 

IF RND(0)<0.4 THEN GOTO 860 
K=SGN(RND(0)-0.5) 

XT=X+K 
XT=INT(X+D/2+(K*(RND(0)*5+D))) 
IF XT<O OR XT>38 THEN RETURN 
POSITION XT,23: PRINT "%"; 
RETURN 





SS Ssaassassassaenss 


18 Schlittenfahrt 





Sasse 


1000 
1010 


")-32)*8+0,32 
-32)*8+1,40 
1020 -32)*8+2,232 
1030 -32)*8+3,252 
1040 POKE CH+(ASC("$")-32)*8+4,126 
1050 POKE CH+(ASC("$")-32)*8+5,62 
1060 POKE CH+(ASC("$")-32)*8+6,30 
1070 POKE CH+(ASC("$")-32)*8+7,14 





1100 POKE CH+(ASC("&")-32)*8+0,16 
1110 POKE CH+(ASC("&")-32)*8+1,16 
1120 POKE CH+(ASC("&")-32)*8+2,16 
1130 POKE )-32)*8+3,16 
1140 PORE CH+(ASC("&")-32)*8+4,16 
1150 ")-32)*8+5,16 
1160 ")-32)*8+6,124 










1170 )-32)#8+7,124 
1200 CH+CASCC"%")-32)*8+0,24 
1210 )-32)*8+1,24 


1220 
1230 POKE CH+(ASC( 
1240 POKE CH+(ASC("x")-32)*8+4,126 
1250 PORE CH+(ASC("*")-32)*8+5,126 
1260 POKE CH+(ASC("2")-32)*8+6,24 
1270 POKE CH+(ASC("#")-32)*8+7,24 


")-32)*8+2,60 
)-32)*8+3,60 








1280 SETCOLOR 1,0,0 
1290 SETCOLOR 2,0,14 
1999 RETURN 


2000 SOUND 0,100,10,10 
2010 FOR Q=1 TO 50 
2020 SOUND 0,0,0,0 
2025 NEXT Q 

2030 RETURN 





Ssssssssöst 





2 Fang den Quark 





as in aller Welt ist ein «Quark»? Nun, ausnahmsweise 

nichts zuessen, sondern... -aberdassollman während des 

Spiels selbst herausfinden! Hier einige Anhaltspunkte: 
Der Quark wandertaufeinem 8 x 8-Schachbrettvom oberenzum un- 
teren Rand. Das Ziel ist es, ihm den Weg nach unten zu verlegen und 
so einzukreisen, daß er sich nicht mehr bewegen kann. Als Sperren 
verfügt man über 2, 3 oder4 Spielsteine (Die Anzahl bestimmt bei je- 
dem Spiel der Atari), die nur diagonal nach oben (!) um ein Feld 
je Spielzug bewegt werden können. Der Quark zieht zwar auch nur 
diagonal, aber vorwärts und rückwärts! 


SPIELVERLAUF 

Zu Beginn des Spiels liegen die Spielsteine in der untersten Reihe 
des Schachbretts, der Quark lauert am oberen Rand und wartet auf 
denersten Zug. Mit dem invers dargestellten Spielstein kann gezogen 
werden. Durch Drücken der CONTROL -Taste zusammen mit einer 
beliebigen anderen Taste kann auf einen anderen Spielstein umge- 
schaltet werden. Am besten ausprobieren! 

Die Spielsteine werden mit den Rechtspfeil- und Linkspfeiltasten 
bewegt. Linkspfeil: 1 Feld diagonal nach links oben, Rechtspfeil: 1 
Feld diagonal nach rechts oben. Nach jedem Spielzug erfolgt der Ge- 
genzug des Quarks. 


20 Fang den Quark 





Sollte man während des Spiels die Ausweglosigkeit seiner Situa- 
tion erkennen, kannman durch ein«R» anstelle einer Pfeiltaste aufge- 
ben. Um sicherzugehen, daß es sich nicht um einen Tippfehler han- 
delt, bittet der Computer, die Aufgabe des Spiels durch ein «J» zu be- 
stätigen. Bei «N» für NEIN geht das Spiel weiter. 


HINWEISE 

Bei dem IF-Befehl in Zeile 1010 sind keine Vergleichsoperatoren 
angegeben. Der Befehl ist trotzdem vollständig und wird vom Atari 
richtig ausgeführt. Die Elemente des angesprochenen Feldes sind 
hier entweder = 1 oder = 0, und für den Computer ist das 
gleichbedeutend mit den Booleschen Werten «wahr» und «falsch». 
Bei der Eingabe des Programms bitte besonders auf die Leerzeichen 
achten! Je2 Leerzeichen müssen zwischen den Anführungsstrichen 


Fang den Quark 21 


in den Zeilen 2000 und 5500 stehen, je 2 Leerzeichen vor bzw. hinter 
den Dollarzeichen in den Zeilen 7020 und 7060. 


PROGRAMMAUFBAU 


8420 
8920 


9000 


Initialisierung der Variablen 

Hauptteil des Programms 

Berechnung der Spielzüge des Quarks 

Bewegung der Steine, Prüfung, ob Zug erlaubt ist 

Auswahl des zu rückenden Spielsteins 

Inverse Darstellung eines Spielsteins 

Normale Darstellung eines Spielsteins 

Tonerzeugung 

Löschen der Spielzüge 

Zeichnen des Schachbretts 

Anfangspositionen der Spielsteine und des Quarks, Ausgabe 
auf dem Bildschirm 

Kopiert den Zeichensatz aus dem ROM-inden RAM-Bereich 
Definition eines Spielfeldes im RAM-Zeichensatz 
Quark-Darstellung im RAM-Zeichensatz 

Spielstein im RAM-Zeichensatz 

Umschalten des Atari auf den nun im RAM-Bereich definier- 
ten neuen Zeichensatz und Abschalten des Cursors 

Ende des Spiels 


ERLÄUTERUNGEN 

Das Programm benutzt hier nur die Schwarzweiß-Grafik, wobei 
die Darstellung des Schachbretts in weißen und schraffierten Feldern 
erfolgt, um die Übersichtlichkeit zu erhöhen (Zeilen 8050 bis 8080). 





22 Fang den Quark 





sSsssassssssssssssEe 


10 REM Fang den Quark 


50 GOSUB 8000 

55 SETCOLOR 1,0,15 

56 SETCOLOR 2,0,0 

60 GOSUB 7000 

70 H=INT(RND(0)*3)+2:G0SUB 7500 
130 GOSUB 6000 

140 GOSUB 1000 

150 GOTO 130 


1000 POSITION 26,12:PRINT #6;"QUARK ZIEHT " 

1010 IF D(QI+2,QJ+2) AND D(QI+2,QJ) AND 
D(QI,QJ+2) AND D(QI,QJ) THEN GOTO 9000 

1020 M-1 

1030 GOSUB 3000 

1035 IF QI+N<1 OR QI+N>8 THEN GOTO 1100 

1040 IF D(QI+N+1,QJ+M+1) THEN GOSUB 2500 

1050 IF D(QI+N+2,QJ+M+2)=1 AND D(QI+N,QJ+M+2)=1 
AND QJ<7 AND QJ>1 THEN M=-M 

1100 IF D(QI+N+1,QJ+M+1) THEN GOSUB 2500 

1110 IF OI=QI AND OJ=QJ THEN M=-M: 
N=SGN(RND(1)-0.5):G0T0 1035 

1120 OI=Q1:0J=QJ 

2000 POSITION QX,QY:PRINT #65" "; 

2001 POSITION QX,QY+1:PRINT #65" "; 

2010 QX=QX+N*2 

2020 QY=QY+Mr2 

2030 POSITION QX,QY:PRINT #65"23"; 

2031 POSITION QX,QY+1: PRINT #6;"4 

2040 D(QI+N+1,QJ+M+1)=2 

2050 D(QI+1,QJ+1)=0 

2060 QI=QI+N 

2070 QJ=QJ+M 

2080 IF QJ=8 THEN GOTO 9500 

2090 RETURN 

2500 N=-N 








2510 IF D(QI+N+1,QJ+M+1)<>1 THEN RETURN 
2520 M=-M 

2525 IF QJ<4 THEN N=1 

2530 IF D(QI+N+1,QJ+M+1)<>1 THEN RETURN 
2540 N=-N 

2550 RETURN 








Fang den Quark 23 


Sasse 


3000 N-(QI<5)-(QI>=5) 

3005 R=RND(1) 

3010 IF QJ>6 THEN RETURN 

3020 IF R>0.5 AND QI>3 THEN GOTO 3050 

3025 IF QI>7 THEN GOTO 3035 

3030 IF (D(QI+3,QJ+3)=0 OR D(QI+2,QJ+3)=0) 
AND D(QI+2,QJ+2)=0 THEN N=-1:RETURN 

3035 IF QI<4 OR R>0.5 THEN RETURN 

3050 IF (D(QI-3,QJ+3)=0 OR D(QI-2,QJ+3)=0) 
AND D(QI-2,QJ+2)=0 THEN N=1:RETURN 

3050 IF R>0.5 THEN GOTO 3025 

3070 RETURN 

5000 ACHM)=ACHM)+M 

5010 BCHM)=BCHM)-1 

5020 IF D(ACHM)+1,BCHM)+1)<>0 THEN GOTO 5100 

5050 D(ACHM)-M+1,BCHM)+2)=0 

5060 D(ACHM)+1,BCHM)+1)=1 

5070 GOTO 5500 

5100 ACHM)=ACHM)-M 

5110 BCHM)=BCHM)+1 

5120 GOSUB 6700 

5130 GOTO 6000 

5500 POSITION X(HM),YCHM):PRINT #65" 

5501 POSITION XCHM),YCHM)+1: PRINT #6; 

5510 YCHM)=YCHM)-2 

5520 XCHM)=XCHM)+M*2 

5530 POSITION X(HM),YCHM):PRINT #65"68"; 

5531 POSITION X(HM),YCHM)+1: PRINT #65"'79"; 

5540 GOSUB 6500 

5550 RETURN 








6000 SOSUB 6700 
6007 POSITION 26,12:PRINT #65"BITTE ZIEHEN" 
6010 GET #2,M 

6025 IF M=82 THEN GOTO 6100 

6030 IF M=43 THEN M=-1:G0T0 5000 

6040 IF M=42 THEN M=1:G0T0 5000 

6050 GOSUB 6200 

5060 30T0 6000 

6100 POSITION 26,14: PRINT #6;"ABBRECHEN (J)" 
6105 GET #2,A 

6110 IF A=74 THEN GOTO 9500 

6120 POSITION 26,14:PRINT #65" ” 
6121 REM 12Leerzeichen 

6130 SOTO 6000 

6200 GOSUB 6600 

6210 HM=HM+1 

6220 IF HM>H THEN HM=1 

6230 GOSUB 6500 

6240 RETURN 


SssssssE 





24 Fang den Quark 





Ossssssssaeassss 


6500 POSITION XCHM),YCHM) 

6501 PRINT #6;CHR$(54+128) ;CHR$(56+128); 
6510 POSITION X(HM),YCHM)+1 

6511 PRINT #6;CHR!(55+128);CHR$(57+128) 
6520 RETURN 


6600 POSITION X(HM),YCHM):PRINT #6;"68"; 
6601 POSITION X(HM),YCHM)+1:PRINT #65"79"; 
6610 RETURN 





6700 SOUND 0,80,10,10 
6710 FOR I=1 TO 50 
6720 NEXT I 

6730 SOUND 0,0,0,0 
6740 RETURN 


6800 FOR I=1 TO 10 
6810 FOR J=1 TO 10 
6820 D(I,J)=0 

6830 NEXT J 

6840 NEXT I 

6850 RETURN 


7000 POSITION 8,3 

7005 FOR I=1 TO 4 

7010 FOR J=1 TO 8 

7020 PRINT " 38"; 

7030 IF J/4=INT(J/4) THEN PRINT :PRINT " "; 
7031 REM 6 Leerzeichen 

7040 NEXT J 

7050 FOR J=1 TO 8 

7060 PRINT "$$ "; 

7070 IF J/4=INT(J/4) THEN PRINT :PRINT " ur 
7071 REM 6 Leerzeichen 

7080 NEXT J 

7090 NEXT I 

7100 RETURN 


7500 FOR I=1 TO H 

7510 X=I#4+6 

7520 POSITION X,17:PRINT #6;"68"; 
7521 POSITION X,18:PRINT #6;"79"; 
7530 D(I*2+1,9)=1 

7540 X(I)=X 

7550 Y(I)=17 

7560 HM=l 


Sasse 





Fang den Quark 25 





SS Ssssasssseeseaeaeae 


7570 
7580 
7590 
7600 
7610 
7620 
7630 
7640 
7650 
7651 
7660 
7670 
7680 
7690 
7700 
7710 
7720 
7730 
7740 
7750 


8000 
8001 
8005 
8010 
8020 
8030 
8040 


8050 
8060 
8070 
8080 


8090 
8100 
8120 
8130 
8140 
8150 
8160 
8170 
8180 
8190 
8200 
8210 


A(I)=Ir2 

B(I)=8 

NEXT I 

GOSUB 6500 

QI=5 

Q=1 

OX=QIr2+6 

QY=3 

POSITION QX,QY:PRINT #65 "23" 
POSITION QX,QY+1:PRINT #65"4 
FOR I=1 TO 10 

D(I,1)=1 

D(1,1)=1 

D(10,1)=1 

D(1,10)=1 

NEXT I 

D(QI+1,09+1)=2 

oI=0 

0J=0 

RETURN 





GRAPHICS O 

POSITION 1,1:PRINT "EINEN AUGENBLICK BITTE" 
CH=(PEEK(106)-8)*256 

CHORG=(PEEK(756)*256) 

FOR I=0 TO 511 

POKE CH+I,PEER(CHORG+I) 

NEXT I 


FOR Q=0 TO 7 STEP 2 
POKE CH+(ASC("$")-32)*8+Q,51 
POKE CH+(ASC("$")-32)*8+Q+1,204 
NEXT Q 


POKE CH+(ASC("2")-32)*8+0,0 
POKE CH+(ASC("2")-32)*8+1,0 
POKE CH+(ASC("2")-32)*8+2,7 
POKE CH+(ASC("2")-32)*8+3,31 





POKE CH+(ASC("2")-32)*8+4,63 
POKE CH+(ASC("2")-32)*8+5,115 
POKE CH+(ASC("2")-32)*8+6,115 





POKE CH+(ASC("2")-32)*8+7,127 
PORE CH+(ASC("3")-32)*8+0,0 
POKE CH+(ASC("3")-32)*8+1,0 
POKE CH+(ASC("3")-32)*8+2,224 
POKE CH+(ASC("3")-32)r8+3,248 





SssssE Sessel 


26 Fang den Quark 





SgaaassssssssEe 


8220 POKE CH+(ASC("3")-32)*8+4,252 
8230 POKE CH+(ASC("3")-32)*8+5,206 
8240 POKE CH+(ASC("3")-32)*8+6,206 





8250 POKE CH+(ASC("3")-32)*8+7,254 
8260 POKE CH+(ASC("4")-32)*8+0,127 
8270 POKE CH+(ASC("4")-32)*8+1,63 





8280 POKE CH+(ASC("4")-32)*8+2,31 
8290 POKE CH+(ASC("4")-32)8+3,15 
8300 POKE CH+(ASC("4")-32)*8+4,7 
8310 POKE CH+(ASC("4")-32)*8+5,3 
8320 POKE CH+(ASC("4")-32)*8+6,1 
8330 POKE CH+(ASC("4")-32)*8+7,0 
8340 POKE CH+(ASC("5")-32)*8+0,254 
8350 POKE CH+(ASC("5")-32)*8+1,252 
8360 POKE CH+(ASC("5")-32)*8+2,248 
8370 POKE CH+(ASC("5")-32)*8+3,240 
8380 POKE CH+(ASC("5")-32)*8+4,224 
8390 POKE CH+(ASC("5")-32)*8+5,192 
8400 POKE CH+(ASC("5")-32)*8+6,128 
8410 POKE CH+(ASC("5")-32)*8+7,0 
8420 POKE CH+(ASCC" 
8430 POKE CH+(ASC("6")-32)*8+1,0 

























8440 POKE ")-32)*8+2,15 
8450 POKE -32)*8+3,31 
8460 POKE -32)#8+4,31 
8470 POKE CH+(ASC("6")-32)*8+5,63 
8480 POKE CH+(ASC("6")-32)*8+6,55 


8490 POKE CH+(ASCC" 
8500 POKE CH+CASC("7 
8510 POKE CH+(ASC("7 
8520 PORE CH+(ASC("7")-32)*8+2,115 
8530 PORE CH+(ASC("7")-32)*8+3,115 
8540 POKE CH+(ASC("7" 
8550 POKE CH+(ASC("7 
8560 POKE CH+(ASC("7 
8570 POKE CH+(ASC("7")-32)*8+7,0 

8580 POKE CH+(ASC("8")-32)*8+0,0 

8590 POKE CH+(ASC("8")-32)*8+1,0 

8600 POKE CH+(ASC("8")-32)*8+2,240 
8610 POKE CH+(ASC("8")-32)*8+3,248 
8620 POKE CH+(ASC("8")-32)*8+4,248 
8630 POKE CH+(ASC("8")-32)*8+5,252 
8650 POKE CH+(ASC("8")-32)*8+6,220 
8660 POKE CH+(ASC("8")-32)*8+7,206 
8670 POKE CH+(ASC("9")-32)*8+0,206 
8680 POKE CH+(ASC("9")-32)*8+1,206 
8690 POKE CH+(ASC("9")-32)*8+2,206 
8700 POKE CH+(ASC("9")-32)*8+3,206 
8710 POKE CH+(ASC("9")-32)*8+4,192 
























SseossssnsssssssEe 


Fang den Quark 27 





sesssssssassE 


8720 
8730 
8740 


8920 
8930 
8940 
8945 
8950 


9000 
9010 
9500 
9900 
9910 
9930 
9940 
9950 


-32)*8+5,192 
-32)*8+8,192 
POKE CH+(ASC("9")-32)*8+7,0 





PRINT CHR$(225) 

POKE 756, CH/256 

POKE 752,1 

POSITION 1,1: PRINT " ":REM 21 Leerz. 
RETURN 


POSITION 1,20:PRINT "PRIMA, GEWONNEN!" 

GOTO 9900 

POSITION 1,20:PRINT "DER QUARK HAT SEWONNEN!" 
PRINT "NOCH EIN SPIEL (J/N) "; 

INPUT A$ 

IF A$="J" THEN RUN 

GRAPHICS O0 

PRINT "AUF WIEDERSEHEN !11" 





SesssssssssssssaasE 






Y Se Dz . . 
en j 


ar # Pe REDE 


Fa u i f 3 en Fir 

ge Ay Ay RER [sr LIEFIFT. u we j 

ih IE aid AUNFTIeTTe Hl ü ‚ FR 
i ar IB ST art RL ITENT u u 
iu ne 4 er. I RLNENIURINNNE 





1 


5 Pferderennen 


gestelltes Pferderennen statt. Akustisch wird dasSpielmitder 

Melodie «Camptown Races» untermalt. Das Programm ist 
eine eindrucksvolle Demonstration der hervorragenden grafischen 
und akustischen Möglichkeiten des Atari-Computers. 


A ufdem Bildschirm findet ein rasantes, äußerstrealistisch dar- 


SPIELVERLAUF 

Zu Beginn des Spiels spendiert der Atari 100 Chips. Es ist nun der 
Favorit zu bestimmen, der als weißes Pferd auf dem Bildschirm dar- 
gestellt wird. Nun wird noch die Wettsumme eingetippt, und das 
wilde Rennen beginnt. Die Quote ist 5:1, d.h. es werden für 20 
gesetzte Chips 100 ausbezahlt, falls der Favoritgewinnt. Die Finanzen 
werden vom Computer überwacht und Meldungen über Gewinn 
bzw. Verlust ausgegeben. Während das Rennen läuft, gibt es keine 
Möglichkeit, die Pferde zu beeinflussen. 


HINWEISE 

Beim Eingeben des Programms ist besonders auf die Punkte und 
Kommas der DATA-Statements ab Zeile 6000 zu achten. Fehler be- 
deuten hier nicht unbedingt den Abbruch des Programms, aber daes 
sich bei diesen Zeilen um die Noten der Melodie handelt, kann es bei 
Tippfehlern zu unschönen Dissonanzen kommen. Bei dem Zeichen 
zwischen den Anführungsstrichen in Zeile 220 handeltessichum das 
Doppelkreuz «#» (Shift-3). 


Pferderennen 





PROGRAMMAUFBAU 


200 

600 

610 
1070 
1560 
2000 
3000 
4000 
5000 
6000 
7000 
8000 
9000 


Darstellung des Pferdes 

Unterprogramm-Aufruf für Melodie und Titelbild 
Initialisierung der Variablen 

Rennstrecke 

Start des Rennens 

Titelbild 

Wetteinsatz 

Bewegung des Pferdes 

Spielt die gesamte Melodie 

Spielt genau eine Note der Melodie 

Bewegung der Beine des Pferdes 

Berechnung der Finanzen (Gewinn bzw. Verlust) 
Neues Rennen bzw. Ende des Spiels 


Pferderennen 31 


ERLÄUTERUNGEN 

Pferderennen ist das einzige Programm dieses Buchs, das eine 
komplette Melodie spielt. Die Noten sind in den DATA-Zeilen 6000 
bis 6080 gespeichert. Es handelt sich um Zahlenpaare, wobei der er- 
ste Wert die Tonhöhe, der zweite die Tonlänge bestimmt. Typische 
Werte für Tonlängen sind 1 (Halbe-Note), 0.5 (Achtel-Note) oder 
0.25 (Sechzehntel-Note). Der Wert -99 als Tonlänge wird in eine 
Pause umgesetzt. Das Zahlenpaar 99,99 in Zeile 6080 kennzeichnet 
das Ende der Melodie und veranlaßt den Computer, den DATA- 
Zeiger wieder auf das erste DATA-Element zu setzen, damit die Me- 
lodie im nächsten Durchgang wieder von vorn gespielt werden kann. 

Zu Spielbeginn wird durch Aufruf des Unterprogramms 5000 die 
gesamte Melodie gespielt. Mit einem Trick ist die Melodie auch wäh- 
rend des Rennens zu hören. Ein Computer kann nie mehrere Dinge 
gleichzeitig tun. Um während des Galopps die Melodie zu spielen, 
wird durch Aufruf des Unterprogramms 6000 zunächst nur ein Ton 
gespielt. Dabei rückt der DATA-Zeigernach dem Lesen eines Wertes 
automatisch auf das nächste Element vor. Da hier kein RESTORE- 
Befehl verwendet wird (Rücksetzen des DATA-Zeigers auf das erste 
Element), wird bei dem nächsten READ sofort das richtige Werte- 
paar gelesen und als Ton ausgegeben. Nachdem eine Note gespielt 
worden ist, werden die Pferde ein Stück weiterbewegt, dann die näch- 
ste Note gespielt usw. Aufgrund der eingeschobenen Pferdebewe- 
gungen sind die Pausen zwischen den Tönen etwas größer. DieBewe- 
gungen werden aber so schnell durchgeführt, daß der Eindruck einer 
Melodie erhalten bleibt. Wenn dieser Trick auch inanderen Program- 
men verwendet werden soll, ist darauf zu achten, daß solche Einschü- 
be nicht zu lange dauern (Rechenzeit prüfen!), sonst sind zwar noch 
die Töne, aber keine Melodie mehr zu hören. 


EIGENE ERGÄNZUNGEN 

Wurde das Lied oft genug gehört, sollte eine andere Melodie als die 
hier vorgesehene eingegeben werden. Interessant wäre auch eine Än- 
derung des Programms, die es erlaubt, seinen Favoriten zu lenken. 





32 


Pferderennen 





SsanananssssssssssE 


10 REM Pferderennen 


200 
210 
220 
230 
240 
250 
400 
410 
420 
500 
510 
520 
530 
540 
550 
560 
570 
580 


600 


610 
620 


1000 
1005 
1010 
1020 
1030 


GRAPHICS 2+16 
CH=(PEEK(106)-8)*256 
CHORG=(PEEK(756)*256) 

FOR I=0 TO 511 

POKE CH+I,PEEK(CHORG+I) 

NEXT I 

FOR I=0 TO 7 

POKE CH+(ASC("#")-32)*8+1,128 
NEXT I 

PORE CH+(ASC("$")-32)*8+0,0 
POKE CH+(ASC(" 32)*8+1,12 
POKE CH+(ASC("$")-32)*8+2,26 
PORE CH+(ASC("$")-32)*8+3,255 
PORE CH+(ASC("$")-32)*8+4,125 
POKE CH+(ASC("$")-32)*8+5,66 
POKE CH+(ASC("$")-32)*8+6,129 
PORE CH+(ASC("$")-32)*8+7,0 
POKE 756,CH/256 











GOSUB 5000 


TOTAL=100 
FLAG=O 

DIM X(5),Y(5),A$(5) 
GRAPHICS 2 

SETCOLOR 0,0,0 
SETCOLOR 1,0,14 
SETCOLOR 2,12,4 


1040 SETCOLOR 3,3,5 
1050 SETCOLOR 4,12,4 
1060 POKE 756,CH/256 


1070 


RESTORE 


1200 FOR X=0 TO 18 


1220 
1225 POSITION X,8:PRINT #6; 
1230 


POSITION X,O:PRINT #65" #" 





NEXT X 


1300 FOR Y=1 TO 7 


1310 POSITION 18,Y: PRINT #6; 





1320 NEXT Y 

1500 FOR Y=1 TO 4 
1520 X(Y)=2 

1530 Y(Y)=Y*2-1 





S jSssssssssssssssE 


Pferderennen 33 





1540 
1550 
1560 
1570 
1710 
1720 


2000 
2005 
2010 
2020 
2050 
2060 
2070 
2080 


3000 
3010 
3020 
3030 
3040 
3050 
3060 


4000 
4010 
4050 
4110 
4120 
4130 
4140 
4145 
4160 
4170 
4180 
4190 


5000 
5005 
5010 
5015 
5020 
5030 
5032 
5035 


POSITION X(Y)-1,Y(Y): PRINT #65 Y;CHR$(132) 
NEXT Y 

GOSUB 3000 

TEMPO=50 

GOSUB 4000 

GOTO 1710 


SETCOLOR 0,0,0 
SETCOLOR 3,3,5 
SETCOLOR 4,0,1 
POSITION 3,2 

PRINT #65" PFERD E" 
POSITION 5,4 

PRINT #65" RENNEN" 
RETURN 


4a 


PRINT "AUF WELCHES PFERD SOLL GESETZT WERDEN ";:INPUT B 

IF B<1 OR B>4 THEN PRINT "EIN SOLCHES PFERD GIBT ES NICHT!":GOTO 3000 
PRINT "GUTHABEN: ";TOTAL;" DM" 

PRINT "WETTEINSATZ: ";:INPUT M 

IF TOTAL-MO THEN PRINT "DAS GELD REICHT NICHT!":GOTO 3020 
TOTAL=TOTAL-M 

PRINT :PRINT "SIE SIND GESTARTET!!!" 


REM Pferdebewegungen 
Z=INT(RND(O)*4)+1 

POSITION X(Z),Y(Z):PRINT #65" " 
X(Z)=X(Z)+(1+RND(0)*0.4) 
COL=132 

IF Z=B THEN COL=4 

POSITION X(Z),Y(Z): PRINT #65CHR$(COL) 
GOSUB 7000 

IF X(Z)>16.5 THEN GOTO 8000 
GOSUB 6000 

IF T=99 THEN RESTORE 

RETURN 


GOSUB 2000 
TEMPO=50 

I=1 

GOSUB 6000 

IF T=99 THEN POSITION I+1,9:PRINT ;" ":RESTORE :RETURN 
POSITION I,9:PRINT #65" ";CHR$(132) 

GOSUB 7000 

FOR Q=0 TO 10:NEXT Q 





SS ss 


34 


Pferderennen 





5040 
5060 


6000 
6005 
6010 
6020 
6025 
6030 
6040 
6050 
6060 
6070 
6080 
6090 
6100 
6110 
6120 
6130 
6140 
6150 
6160 


7000 
7010 
7020 
7030 
7040 
7500 
7510 
7520 
7530 


8000 
8001 
8010 
8020 


I=1+0.3 
GOTO 5015 


DATA 72,.5,72,.5,72,.5,85,.5,72,.5,64,.5 
DATA 72,.5,85,.5,-99,.5,85,.5,96,1.5,85,.5,96,1 
DATA 72,.5,72,.5,85,.5,72,.5,64,.5,72,.5,85,.5 





DATA ‚85,.25,96,.25,108,.25,96,.25 
DATA 96, .5,108,1.5 
DATA -99,1,108,.75,108,.25,85,.5,72,.5,53,1.5 


DATA -99, .5,64,.75,64,.25,53,.5,64,.5,72,1.5 
DATA 85,.25,81,.25,72,.5,72,.5,85,.25,85,.25 
DATA 72,.25,72,.25,64,.5,72,.5,85,1 

DATA 96,.5,85,.5,81,.25,85,.5,96,.25,96,.25,108,1.5 
DATA 99,99 

READ P,T 

IF T=99 THEN RETURN 

T=T+TEMPO 

IF P=-99 THEN FOR Q=1 TO T:NEXT Q: RETURN 
SOUND 0,P,10,8 

FOR Q=1 TO T:NEXT Q 

SOUND 0,P,10,0 

RETURN 





IF FLAG=1 THEN GOTO 7500 
FLAG=1 

POKE CH+(ASC("$")-32)*8+6,40 
POKE 756,CH/256 

RETURN 

FLAG=O 

POKE CH+(ASC("$")-32)*8+6,129 
POKE 756,CH/256 

RETURN 


IF Z=B THEN PRINT "PRIMA, GEWINN: ";:TOTAL=TOTAL+INT(5*M) 
PRINT INT(5*M);" DM" 

IF Z<>B THEN PRINT "VERLUST ";M;" DM" 

IF TOTAL<=O THEN PRINT "PECH GEHABT, PLEITEI":GOTO 9020 





Saas 





4 Wortsuchspiel 





Familie. Es setzt Scharfsinn, ein offenes Auge und Geduld 

voraus. 
Bis zu zehn Wörter, vondenenjedesbis zuzehn Buchstaben langsein 
darf, sind in den Atari einzugeben. Die eingegebenen Wörter werden 
in ein 15 x 15-Buchstabenfeld geschrieben, wobei die verbleibenden 
Leerräume vom Computer mit beliebigen Buchstaben aufgefüllt 
werden. Die ursprünglichen Wörtertauchen zwar wiederauf, können 
aberjetztvonoben nach unten, diagonal, sogar rückwärts (!) geschrie- 
ben sein. Durch die Füllbuchstaben ist das Suchen der eingegebenen 
Wörter wie das Suchen der Nadel in dem berühmten Heuhaufen. Es 
erleichtert die Aufgabe, sich das Puzzle ohne die Füllbuchstaben an- 
zuschauen, und man kann sich eine Liste der eingegebenen Wörter 
neben dem Puzzle ausgeben lassen. Aber auch dann ist es im- 
mer noch äußerst schwierig, die versteckten Wörter zu finden. 

Ziel des Spiels ist es, alle versteckten Wörter zu finden. Für jedes 

wiedergefundene Wort gibt es einen Punkt. 


D ieses Puzzlespiel ist eine Herausforderung an die ganze 


SPIELVERLAUF 

Die ersten Schritte des Spiels werden durch den Computer vorge- 
geben. Zunächst fordert er die Anzahl der Suchwörteran. Esmüssen 
mehr als zwei Worte gewählt werden. Bei Falscheingabe erfolgt eine 
akustische Zurückweisung der Eingabe, und das Spiel beginnt von 


36 Wortsuchspiel 





vorn. Atari bittet nun um die Eingabe der zu versteckenden Wörter. 
Diese sind ausschließlich in Kleinbuchstaben einzugeben (auch der 
erste Buchstabe!). Für den anschließenden Aufbau des Puzzles wird 
eine gewisse Zeit benötigt; bitte nicht ungeduldig werden. Sicher- 
heitshalber steht eine entsprechende Meldung auf dem Bildschirm. 
Die Rechenzeit hängt von der Anzahl und insbesondere von den 
Wortlängen der Suchwörter ab. 

Im nächsten Schritt stehen die beiden Hilfsmöglichkeiten zur 
Wahl: Puzzleohne Füllbuchstaben und Wörterlisteneben dem Spiel- 
feld. Werden beide Hilfen abgelehnt (Eingabe: «n»), startet das Spiel 
in seiner normalen, aber auch schwierigsten Version. Zunächst wird 
das Puzzle gezeichnet. Links oben befindet sich der Cursor, der wie 
üblich mit seinen Steuertasten bewegt werden kann. Wenn man 
meint, ein Wort gefunden zu haben, ist der Cursor auf den Anfangs- 


Wortsuchspiel 37 


buchstaben zu stellen und «w» einzugeben. Atari fordert nun das Lö- 
sungswortan. War es richtig, wird das Punktekonto (Score) um einen 
Punkt erhöht. Sind alle Begriffe gefunden worden, belohnt Atari die- 
sen Erfolg durch einen Glückwunsch. Durch Eingabe von «m wäh- 
rend desSpielsgibtmanaufund kehrt zu den Wahlmöglichkeiten der 
Hilfestellungen zurück. 


HINWEISE 

Bei diesem Spiel müssen alle Eingaben ausschließlich in Klein- 
buchstaben erfolgen. Zwischen den Anführungszeichen in den Zei- 
len 410, 600,800, 810, 930, 1400 und 1420 muß genaueein Leerzeichen 
stehen. Keine «Nullstrings» eingeben! Lediglich in Zeile 1090 exi- 
stiert ein Nullstring: A$=””, 


PROGRAMMAUFBAU 
15 Anfangswerte, Variablendefinitionen 
80 Aufruf des Hauptprogramms 
90 Eingabe der Ratewörter 
280 Fehlermeldung bei zu langen Ratewörtern 
330 Suche des längsten der eingegebenen Ratewörter 
380 Aufbau des Puzzles 
760 Ausgabe des Puzzles 
870 Erlaubt, sich das Puzzle noch ohne die Füllbuchstaben an- 
zusehen, setzt anschließend die Füllbuchstaben ein 
1010 Hauptprogramm 
1240 Eingabe eines vermeintlich gefundenen Ratewortes 
1320 Verarbeitung eines richtig gefundenen Ratewortes 
1500 Überprüfung des eingegebenen Ratewortes 
1650 Setzt Punktestand auf Null 
1670 Ausgabe des Puzzles ohne Füllbuchstaben 
1710 Spielende 
2000 Tonerzeugung 


38 Wortsuchspiel 


ERLÄUTERUNGEN 

In diesem Spiel werden einige interessante Programmiertechniken 
vorgestellt. Für jedes Ratewort wird über die Random-Funktion ein 
zufälliger Startpunkt (Zeile 510 bis 520) und eine zufällige Richtung 
(Zeilen 530 bis 540) auf dem Spielfeld gewählt. Nun wird für jeden 
Buchstaben des Wortes geprüft, ob das für ihn vorgesehene Feld leer 
ist oder den Buchstaben schon enthält (von einem anderen Rate- 
wort). Wenn das Wort paßt, wird es in die vorgesehenen Felder des 
Puzzles eingeschrieben. Diese Technik erlaubt es, die Wörter wie in 
einem Kreuzworträtsel anzuordnen. Paßt ein Wort nicht, werden ein 
neuer Startpunkt und eine neue Richtung gewählt, und das Prüfver- 
fahren beginnt von neuem. So werden alle Wörter nach und nach in 
das Puzzle eingearbeitet. 

Eines der Hauptprobleme von Atari-BASIC ist das Fehlen von 
Stringfeldern. Der einfachste Weg aus diesem Dilemma ist das «Pak- 
ken» der Werte. Insgesamt finden auf dem Spielfeld 15 x 15 = 225 
Buchstaben Platz. Diese Buchstaben werden in dem String D$ ge- 
speichert, der in Zeile 390 in der richtigen Länge dimensioniert wor- 
denist. Damitkanndas15x15-Buchstabenfeld wie ein zweidimensio- 
nales Feld gespeichert werden. So steht der Buchstabe I,J (Zeile und 
Spalte) des Spielfelds in D$(I + (J-1) * 15, 1+ (J-1) * 15). Beispiel: Für 
I=5 und J=10 ergibt sich D$(150,150). 


EIGENE ERWEITERUNGEN 

Wenn ein Drucker zur Verfügung steht, sollte das Programm so er- 
gänzt werden, daß das Puzzle ausgedruckt werden kann. Noch sschwe- 
rer wird das Spiel, wenn Wörter mit mehr als zehn Buchstaben zuge- 
lassen werden. Sehr praktisch wäre es, wenn die gefundenen Wörter 
aus der Liste gestrichen oder sonst irgendwie kenntlich gemacht wür- 
den (z.B. im Puzzle selbst!). 


Wortsuchspiel 39 





SsaasssE 


10 


15 
20 
29 
30 
40 
50 
70 


80 


90 


REM Wortsuchspiel 


OPEN #2,4,0," 
DIM w$(30) 
DIM LZ$(10) 
12$=" ":REM 10 Leerzeichen 
GOSUB 90 

GOSUB 380 

GOSUB 870 





GOSUB 1010 


GRAPHICS O 


100 DIM L$(100) 


105 


FOR I=1 TO 100:L$(I)=" ":NEXT I 


110 DIM C(10) 


120 
130 
140 
150 
151 
152 
153 
154 


LST=0 

PRINT CHR$(125) 

POSITION 5,2 

POSITION 13,1:PRINT "Wortsuchspiel" 

PRINT :PRINT "Bis zu 10 Worte sind in den Atari ein 
PRINT "zugeben, die in einem Puzzle verstecktwerden." 
PRINT "Viel Erfolg beim Suchen! !1" 

PRINT :PRINT "Wie viele Worte ";:INPUT W 








155 PRINT 


160 
170 
180 
190 
200 
210 


IF W2 OR W>10 THEN GOSUB 2000:G0T0 140 
PRINT "Rateworte in Kleinbuchstaben eingeben" 
FOR I=1 TO W 

POSITION S,10+I:PRINT 15". Wort: "; 

INPUT w$ 

IF LEN(W$)>10 THEN GOTO 280 


220 IF LEN(W$)<1 THEN GOTO 290 


230 
240 
250 
270 


L$CCI-1)*10+1,(I-1)*10+LEN(WS) )=W$ 
CCI)=LEN(W$) 

NEXT I 

RETURN 


280 POSITION 1,22:PRINT "Nicht mehr als 10 Buchstaben!" 


290 
292 


GOSUB 2000 
POSITION 1,22:PRINT L2$;12$;L2$ 


295 POSITION 14,10+I:PRINT LZ$;L2$;12$ 
300 GOTO 190 





sesssssssE 


40 


Wortsuchspiel 





SSaeaeansassls 


330 
340 
350 
360 
370 


380 
390 
400 
410 
420 


460 
470 
480 
490 
500 
5ı0 
520 
530 
540 
550 
560 
570 
580 
590 
595 
596 
600 
601 
610 
620 
630 
640 
650 
660 
670 
680 
690 
700 
701 
710 
720 
730 
740 
750 


M=0:J=0 

FOR Z=1 TO W 

IF MC(Z) THEN M-C(Z):J=Z 
NEXT Z 

RETURN 


REM Worte ins Spielfeld setzen 
DIM D$(225) 

FOR J=1 TO 225 

D$CI)=" " 

NEXT J 

PRINT CHR$(125) 

F=0 

FOR I=1 TO W 

GOSUB 330 

L=C(J) 

c(J)=0 

X=INT(RND(O)*(15-L))+1 
Y=INT(RND(O)*(15-L))+1 
V=INT(RND(0)*3)-1 
U=INT(RND(0)*3)-1 

IF U=0 AND V=0 THEN GOTO 530 
A=X:B=Y 

IF V<O THEN A=A+L 

IF U<O THEN B=B+L 

FOR K=1 TO L 

H=(J-1)*10+K 

w$C1,1)=L$CH,H) 

H=A+(B-1)*15 

IF D$CH,H)<>" " AND D$CH,H)<>W$C1,1) THEN Fel:K=L:GOTO 630 
A=A4+V 

B=B+U 2 
NEXT K 

IF F=1 THEN F=0:G0T0 510 
PRINT "Gleich geht es weiter ..." 
A=X:B=Y 

IF V<O THEN A=A+L 

IF U<O THEN B=B+L 

FOR K=1 TO L 
H=A+(B-1)*15:G=(J-1)*10+K 
D$CH,H)=L$(G,G) 

A=A+V 

B=B+U 

NEXT K 

NEXT I 

RETURN 





Wortsuchspiel 41 








760 REM Puzzle auf Bildschirm 

765 POKE 752,1 

770 PRINT CHR$(125) 

780 FOR M=1 TO 15 

790 FOR N=1 TO 15 

800 H=(M-1)*15+N 

801 IF D$CH,H)=" " THEN PRINT "."; 

810 IF D$CH,H)<>" " THEN PRINT D$CH,H); 

820 NEXT N 

830 IF LST=0 OR M>10 THEN PRINT 

840 IF LST=1 AND M=10 THEN POSITION 20,M:PRINT L$((M-1)*10+1,M*10) 
850 NEXT M 

860 RETURN 

870 REM Puzzle ohne Fuellbuchstaben 

880 DIM A$(1) 

890 PRINT "Puzzle erst einmal ohne die Fuellbuch-"; 
891 PRINT "staben ausgeben j/n ";:INPUT A$ 
900 IF A$="j" THEN GOSUB 760 

910 FOR I=1 TO 15 

920 FOR J=1 TO 15 

930 H=I+(J-1)*15 

931 IF D$CH,H)=" " THEN D$CH,H)=CHR$CINT(RND(0)*25)+97) 
940 NEXT J 

950 NEXT I 

960 PRINT "Sollen die Rateworte neben dem Puzzle" 
961 PRINT "ausgegeben werden j/n ";:INPUT A$ 
970 IF LEN(A$)=O THEN GOTO 960 

980 IF A$="j" THEN LST=1 

990 GOSUB 760 

1000 RETURN 

1010 x=2 

1020 Y=1 

1050 LOCATE X,Y,Q 

1055 POSITION X,Y: PRINT CHR$(Q+128); 

1080 GET #2,A 

1090 IF A$="" THEN GOTO 1080 

1100 IF A=119 THEN GOTO 1230 

1110 POSITION X,Y: PRINT CHR$(Q); 

1120 IF A=43 AND X>2 THEN X=X-1 

1130 IF A=42 AND X<16 THEN X=X+1 

1140 IF A=45 AND Y>1 THEN Y=Y-1 

1150 IF A=61 AND Y<15 THEN Y=Y+l 

1160 IF A=114 THEN GOSUB 1670 


1220 


GOTO 1050 





42 Wortsuchspiel 





SsSaassssssE Sal 


1230 POSITION 0,20 

1235 w$=" ":;REM 10 Leerzeichen 

1240 PRINT "Wie heisst das Wort ";:INPUT WS 

1250 IF LEN(W$)=O OR LEN(W$)>15 THEN GOSUB 2000:G0T0 1230 
1260 GOSUB 1450 

1270 POSITION 0,20:PRINT LZ$;12$;1L2$;1L2$ 

1280 IF MATCH=0 THEN GOSUB 2000:G0T0 1080 

1290 FOR U=-1 TO 1 

1300 FOR V=-1 TO 1 

1310 IF U=0 AND V=0 THEN GOTO 1340 


1320 GOSUB 1500 

1330 IF MATCH=1 THEN V=1:U=1:G0T0 1340 

1340 NEXT V 

1350 NEXT U 

1360 IF MATCH=1 THEN GOTO 1390 

1370 GOSUB 2000 

1380 GOTO 1080 

1390 SCORE=SCORE+1 

1400 POSITION 10,18:PRINT "Punktestand = ";SCORE;" " 
1410 GOSUB 2000 

1420 L$(10*(WORD-1)+1,10*(WORD-1)+1)=" " 

1430 IF SCORE=W THEN GOTO 1780 

1440 GOTO 1080 

1450 MATCH=O 

1460- FOR I=1 TO W 

1470 H=(I-1)*10 

1471 IF W$=L$(1+H,LEN(W$)+H) THEN MATCH=1:WORD=I:I=W 
1480 NEXT I 

1490 RETURN 


1500 REM Wort gefunden ? 

1510 MATCH=1 

1520 A=X-1 

1530 B=Y 

1540 FOR I=1 TO LEN(W$) 

1550 H=A+(B-1)*15 

1551 IF W$(I,I)<>D$CH,H) THEN I=LEN(W$):MATCH-0:G0T0 1600 
1560 A=A+U 

1570 B=B+V 

1580 IF Ac1 OR A>15 THEN I=LEN(W$):MATCH=0:G0TO 1600 
1590 IF B<1 OR B>15 THEN I=LEN(W$):MATCH=0:G0T0 1600 
1600 NEXT I 

1610 RETURN 


1650 SCORE=0 
1660 RETURN 





sSasssssssssssasEe 


Wortsuchspiel 43 


Ssssssssssssssse 


1670 POSITION 0,19 

1680 PRINT "Spiel wirklich abbrechen j/n ";:INPUT A$ 
1690 POSITION 0,19 

1695 FOR I=0 TO 180:PRINT " ";:NEXT I 

1700 IF A$<>"j" THEN RETURN 





1710 PRINT CHR$(125) 

1720 POSITION 10,8:PRINT "Ergebnis = ";SCORE 
1730 POSITION 8,10 

1740 PRINT "Noch ein Spiel j/n " 
1750 IF A$="3" THEN RUN 

1760 IF A$<>"n" THEN GOTO 1730 
1770 STOP 

1780 POSITION 0,19: PRINT "Toll, alle Worte gefunden !!1" 
1790 GOTO 1740 





INPUT A$ 


2000 SOUND 0,80,10,8 
2010 FOR T=1 TO 50 
2020 NEXT T 

2030 SOUND 0,0,0,0 
2040 RETURN 





Sssssssssssssssasss 





8 Wächter der Herde 





fahrene Hirte hält die Herde mit Hilfe seines gut dressierten 

Schäferhundes zusammen, den er mit knappen Kommandos 
dirigiert. Der Hund umkreist unermüdlich die Herde, treibt sie vor- 
wärts und spürt Ausreißer auf. 

Das Spiel ist eine äußerst realistische Darstellung dieser Situation. 
Fünf schneeweiße Schafe weiden auf einer grünen Wiese, bewacht 
von einem braunen Schäferhund (während der Schäfer vor seinem 
Atari sitzt). Ziel ist es, die Herde in ihren rechts oben angedeuteten 
Stall zu treiben. Bisher hat es nur einer geschafft, vom Atari mit dem 
Titel eines Superhirten ausgezeichnet zu werden, und das war ein 
richtiger Schäfer ... 


| ine Schafherde strahlt Ruhe und Zufriedenheit aus. Der er- 


SPIELVERLAUF 

Aufgabe des Hirten ist es, alle Schafe mit möglichst wenigen Spiel- 
zügen in den Stall in derrechten oberen Ecke des Bildschirms zu trei- 
ben. Die Kommandos für den Schäferhund werden dabei über die 
Pfeiltasten gegeben. Wenn der Hund jedoch den Schafen zu nahe 
kommt, zerstreuen sie sich in alle Himmelsrichtungen. Auch wäh- 
rend des Spiels kann es plötzlich dazu kommen, daß die Schafe aus- 
einanderlaufen. Für diesen Effekt wird die RND-Funktion des Atari 
ausgenutzt. Der Hund kann die Schafe durch unvorsichtiges Annä- 
hernsoerschrecken, daß siesogarüber den Zaun springen. Wennsich 


46 Wächter der Herde 


Bannnnnnnnnnnnn 
BANUEDSRRERREN 


| 


33 
= 
F3 
FI 
== 
33 
22 
2 
3 
ss 
2 
2 
z= 
F3 
2 
2: 
z 
3 
== 


| 





die Schafe sehr eng zusammendrängen, kann man sie auf dem Bild- 
schirm unter Umständen nicht mehr unterscheiden, so daß im Ex- 
tremfall nur ein Schaf zu sehen ist. 

Bei diesem Spiel wird man schnell gute und schlechte Strategien 
herausfinden. Es kostet sehr viel Zeit, den Hund um die Herde krei- 
sen zu lassen. Um jedoch ein Lob des Atari zu erhalten, muß das Ziel 
mit möglichst wenigen Spielzügen erreicht werden. 


HINWEISE 

Der Zaun um die Wiese wird mit Hilfe des Doppelkreuzes (# = 
SHIFT-3) dargestellt (Unterprogramm ab Zeile 20). Zum Löschen 
der alten Positionen von Hund und Schafen wird das zwischen den 
Anführungsstrichen eingeschlossene Leerzeichen verwendet (Zei- 
len 440 und 780). 


Wächter der Herde 47 


PROGRAMMAUFBAU 
20 Initialisierung der Grafik und der Variablen 
120 Umzäunung der Wiese 
240 Stall 
280 Darstellung eines Schafes 
340 Darstellung des Hundes 
390 Bewegung des Hundes 
520 Bewegung der Schafe und Test auf Spielende 
550 Berechnungen für die Bewegungen der Schafe 
780 Ausgabe der Schafe auf dem Bildschirm 
860 Meldung über den Spielstand; Spielende 
990 Auseinanderlaufen der Schafe 
2000 Definition des Grafikzeichens für ein Schaf 
2100 Definition des Grafikzeichens für den Hund 
2200 Umschaltung des Atari auf den neu definierten RAM- 
Zeichensatz 


PROGRAMMHINWEISE 

Die Tastatur wird mit Hilfe der GET-Anweisung gelesen. Vorteil 
hierbei ist, daß jeder Tastendruck sofort derGET-Variablen zugewie- 
sen wird, ohne daß die Eingabe mit RETURN abgeschlossen werden 
muß. Die Aktionen des Hundes können so wesentlich einfacher ge- 
steuert werden. Für die GET-Anweisung muß die Tastatur als Einga- 
beeinheit bestimmt werden, was in Zeile 30 durch die OPEN-Anwei- 
sung geschieht. Die GET-Anweisung unterbricht das Programm, 
wartet aufeinen Tastendruck, weist den Tastencode der GET-Varia- 
blen zu und setzt das Programm mit der nächsten Anweisung fort. 

Trotz der vorbildgerechten Darstellung des Herdenlebens sind für 
die einzelnen Tierbewegungen keine speziellen Tricks erforderlich. 
Die Berechnungen der gegenseitigen Entfernungen erfolgen durch 
mathematische Gleichungen: In den Zeilen 600 und 610 wird z.B. ge- 
prüft, obsichderHund den Schafen zu sehrgenähert hat. Fallsja, wird 
das Zerstreuen der Schafe durch die Gleichungen in den Zeilen 1000 
und 1030 berechnet. Das Zerstreuen der Schafe ohne erkennbaren 


48 Wächter der Herde 


Grund wird über eine Zufallszahl gesteuert, wobei nur Zahlen unter 
0.1das Auseinanderlaufen bewirken (Wahrscheinlichkeithierfüralso 
1: 100). IF-Anweisungen stellen sicher, daß Schafe weder auf dem 
Zaun noch auf dem Hund sitzen können. 


EIGENE ERWEITERUNGEN 

Der Reiz des Spiels kann durch Hindernisse wie Bäume, ein Fluß 
mit oder ohne Brücke noch gesteigert werden. Durch Ändern des 
Schwellenwerts kann das Zerstreuen der Schafe häufiger erfolgen. 
Man kann auch gegen die Uhr spielen, wie esim Spiel «Achtung - fer- 
tig - los!» vorgesehen ist. 


Wächter der Herde 49 





Ssanssssssse 


10 REM Waechter der Herde 


20 GRAPHICS 1+16 
25 PRINT #65" WAECHTER DER HERDE" 
26 POSITION 3,16 

27 PRINT #6;"es geht gleich" 

28 POSITION 7,19 

29 PRINT #6;"weiter" 

30 OPEN #2,4,0,"K:" 

40 CH=(PEEK(106)-8)*256 

50 CHORG=(PEEK(756)*256) 

60 FOR I=0 TO 511 

70 POKE CH+I,PEEK(CHORG+I) 

80 NEXT I 

90 GOSUB 2000 

100 DIM Y(5):DIM X(5) 

110 M=0 


120 FOR X=0 TO 15 
130 POSITION X,16: PRINT #65"#" 
140 NEXT X 

150 FOR Y=0 TO 16 

160 POSITION 16,Y: PRINT #65" #" 
170 NEXT Y 

180 FOR Y=0 TO 19 

190 POSITION O,Y:PRINT #63"#"; 
191 POSITION 19,Y: PRINT #63"#" 
200 NEXT Y 

210 FOR X=0 TO 19 

220 POSITION X,O:PRINT #65" 
221 POSITION X,19:PRINT #6; 
230 NEXT X 

240 FOR Y=1 TO 3 

250 POSITION 12,Y:PRINT #6; 
260 NEXT Y 











280 FOR S=1 TO 5 

290 Y(S)=5+INT(RND(O)*10) 

309 X(S)=4+INT(RND(0)*6) 

310 POSITION X(S),Y(S):PRINT #65CHR$(4); 
320 NEXT S 


340 YD=1+INT(RND(0)"3) 
350 XD=1+INT(RND(0)"3) 
360 POSITION XD,YD:PRINT #6;CHR$(5+160) 





S[aassssssssssaaaeE 


50 Wächter der Herde 





390 GET #2,D 

400 IF D=0 THEN GOTO 390 

410 IF XD=12 AND YD=4 AND D=45 THEN GOTO 390 
420 IF XD=11 AND YD<4 AND D=42 THEN GOTO 390 
430 IF XD=13 AND YIX4 AND D=43 THEN GOTO 390 
440 POSITION XD,YD:PRINT #65" " 

450 IF D=43 AND XD>1 THEN XD=XD-1 

460 IF D=42 AND XD<15 THEN XD=XD+1 

470 IF D=61 AND YI<15 THEN YD=YD+1 

480 IF D=45 AND YD>1 THEN YD=YD-1 

490 POSITION XD,YD: PRINT #65CHR$(5+160) 

500 M=M+1 

510 POSITION 10,18 

511 PRINT #65"zug nr ";M 


520 GOSUB 550 
530 IF F=0 THEN GOTO 860 
540 GOTO 390 


550 F=0 

570 FOR S=1 10 5 

580 Y=Y(S) 

590 X=X(S) 

600 HX=ABS(X(S)-XD):HY=ABS(Y(S)-YD) 

601 IF (HXc2 AND HY<2) THEN GOSUB 990 

610 IF RND(O)<0.01 THEN GOSUB 990 

620 IF ABS(X(S)-XD)>2+RND(0)*2 THEN GOTO 780 
630 IF ABS(Y(S)-YD)>2+RND(0)*2 THEN GOTO 780 
640 X(S)=X(S)+SGNCX(S)-XD) 

650 Y(S)=Y(S)+SGN(Y(S)-YD) 

660 IF X(S)<13 AND X(S)>11 AND Y(S)<4 THEN X(S)=X 
670 FS=0 

680 FOR Z=1 TO 5 

690 IF Z=S THEN GOTO 710 

700 IF (X(S)=X(Z)) AND (Y(S)=Y(Z)) THEN FS=1 
710 NEXT Z 

720 IF FS=1 THEN GOTO 640 

730 IF X(S)=XD AND Y(S)=YD THEN GOTO 640 
740 IF X(S)<1 THEN X(S)=1 

750 IF X(S)>15 THEN X(S)=15 

760 IF Y(S)<1 THEN Y(S)=1 

770 IF Y(S)>15 THEN Y(S)=15 


780 POSITION X,Y:PRINT #65" " 
790 POSITION X(S),Y(S):PRINT #65CHR$(4); 
800 IF X(S)>12 AND (Y(S)>O AND Y(S)<4) THEN GOTO 820 





Sssssassss SS 


Wächter der Herde 51 


Sssssssssssssssssss 


810 
820 
830 
860 
861 
870 
880 
890 
900 
910 
920 
921 
930 
935 
940 
950 
960 
980 


990 
1000 


Fel 
NEXT S 

RETURN g 

POSITION 10,18:PRINT #65" ende u 

FOR I=1 TO 1000:NEXT I 

IF M40 THEN PRINT "Superhirte!":GOTO 920 

IF M60 THEN PRINT "Brauchbarer Hund!":G0T0 920 
IF M<90 THEN PRINT "Weiter ueben!!":G0T0 920 

IF M120 THEN PRINT "es bessert sich ...": 
PRINT "Das dauerte viel zu lange!" 

POSITION 0,10:PRINT "Es wurden ";M; 

PRINT " Spielzuege benoetigt" 

DIM A$(1) 

PRINT :PRINT :PRINT 

PRINT "Noch ein Spiel J/N " 
IF A$="J" THEN RUN x 
GRAPHICS O 

END 





:INPUT A$ 





XT=X(S):YT=Y(S) 
XCS)=XS)+LSGNERND(0)-0.5)*(2+RND(0)*2)) 


1010 IF X(S)<1 THEN X(S)=1 

1020 IF X(S)>15 THEN X(S)=15 

1030 Y(S)=Y(S)+(SGNCRND(0)-0.5)*(2+RND(0)*2)) 
1035 Y(S)=INT(Y(S)):XCSI=INTCXCS)) 

1040 IF Y(S)<1 THEN Y(S)=1 

1050 IF Y(S)>15 THEN Y(S)=15 

1060 IF X(S)=12 AND Y(S)<3 THEN GOTO 1000 


1070 


IF XT=X(S) AND YT=Y(S) THEN GOTO 1000 


1080 RETURN 


2000 


POKE CH+(ASC("$")-32)*8+0,0 


2010 POKE CH+(ASC("$")-32)*8+1,0 


2020 





POKE CH+(ASC("$")-32)*8+2,122 


2030 POKE CH+(ASC("$")-32)*8+3,255 


2040 
2050 
2060 


PORE CH+(ASC("$")-32)*8+4,125 
POKE CH+(ASC("'$")-32)*8+5,120 
POKE CH+(ASC("$")-32)*8+6,72 


2070 POKE CH+(ASC("$")-32)*8+7,72 


2100 
2110 
2120 
2130 
2140 


POKE CH+(ASCC"'%")-32)*8+0,0 
PORE CH+(ASC("'%")-32)*8+1,0 
POKE CH+(ASC("%")-32)*8+2,6 
PORE CH+(ASC("x")-32)*8+3,123 
POKE CH+(ASC("%")-32)*8+4,120 








52 Wächter der Herde 





SJaaenenssssssssss5s 


2150 POKE CH+(ASC("%")-32)*8+5,132 
2160 POKE CH+(ASC("%")-32)*8+6,66 
2170 POKE CH+(ASC("%")-32)*8+7,0 
2200 POKE 752,1 

2210 POKE 756,CH/256 


2220 SETCOLOR 0,0,0 
2230 SETCOLOR 1,0,14 
2240 SETCOLOR 2,2,5 
2250 SETCOLOR 4,13,8 
2500 RETURN 





SaensnessessssEste 


6 Raketenabwehrschlacht 


ur 100 Sekunden stehen in diesem aufregenden Spiel zur Ver- 

fügung, um ein Raumschiff außerirdischer Eindringlinge zu 

vernichten. In der unendlichen Weite des Weltraums findet 
die Begegnung eines terrestrischen Schiffes mit den Außerirdischen 
statt. Sogar die Einsteinsche Raumkrümmung istaufdemBildschirm 
realisiert: Fliegt man über einen Rand des Bildschirms hinaus, findet 
man sich am entgegengesetzten Rand wieder. 


SPIELVERLAUF 

Der zu Beginn des Spiels zu wählende Schwierigkeitsgrad be- 
stimmt den sonst nicht mehr beeinflußbaren Kurs des gegnerischen 
Raumschiffes und die Anzahl der Sterne. Der Navigator muß das 
Schiff sorgfältig um die Sterne herumführen, beim Rammen eines 
Sternes wird das Raumschiff irgendwo in den Raum geschleudert 
(RND-Funktion). Das eigene terrestrische Raumschiff wird in Form 
eines Pfeils dargestellt und bewegt sich mit konstanter Geschwindig- 
keit vorwärts. DerNavigator kann das Raumschifflediglichindierich- 
tige Richtung dirigieren. Beijedem Tastendruck wird das Raumschiff 
um 45 Grad im Uhrzeigersinn gedreht. 

Das AbfeuerndesLasers erfolgt über die Leertaste. Der Laserstrahl 
zischt in der durch das eigenen Raumschiff vorgegebenen Richtung 
durch das All. Wird dasfeindliche Raumschiffgetroffen, explodiertes 
geräuschvoll. Dielaufendaufdem Schirm eingeblendete Spielzeitbe- 
trägt maximal 100 Sekunden. 


54 Raketenabwehrschlacht 





HINWEISE 

Beim Atari mit 16-k-RAM müssen vorhandene Diskettenlaufwer- 
ke abgeschaltet werden, damit für dieses sehr lange Programm genü- 
gend Speicherplatz zur Verfügung steht. Zum Abspeichern des Pro- 
gramms muß ein Kassettenrecorder verwendet werden. 


PROGRAMMAUFBAU 
20 Hauptprogramm 
1000 Richtung des terrestrischen Raumschiffs bzw. Laserstrahls 
2000 Laserstrahl 
2235 Explosion des gegnerischen Raumschiffs 
2500 Prüfung, ob Gegner getroffen worden ist 
3000 Flug des eigenen Raumschiffs 


Raketenabwehrschlacht 55 


4000 Flug des feindlichen Raumschiffs 

5000 Löschen der alten Position des eigenen Raumschiffs 
5100 Ausgabe des eigenen Raumschiffs auf dem Bildschirm 
5200 Tonteil 

5300 Ausgabe des gegnerischen Raumschiffs auf dem Bildschirm 
5500 Ton für Laserstrahl : 

7000 Titelbild 

7500 Zeitmessungund Anzeige auf dem Bildschirm 

7900 Ausgabe der Sterne auf dem Bildschirm 

8000 Anfangswerte der Variablen, Farben 

9000 Ende des Spiels 


ERLÄUTERUNGEN 

Das Programm ist ziemlich kompliziert, enthält aber interessante 
Tricks. Das eigene pfeilförmige und das gegnerische radförmige 
Raumschiff werden mit Hilfe der PLOT- und DRAWTO-Anwei- 
sungen gezeichnet. In den Feldern V und W werden die horizontalen 
und vertikalen Geschwindigkeiten der beiden Raumschiffe gespei- 
chert und für die Bildschirmpositionen ausgewertet. Aus diesen Wer- 
ten wird auch die Bewegungsrichtung des eigenen Raumschiffs und 
dessen entsprechende Ausrichtung auf dem Bildschirm errechnet. 


EIGENE ERWEITERUNGEN 

Die Spannung des Spiels läßt sich noch um ein Vielfaches steigern. 
Sokönnte dasgegnerische Raumschiffebenfalls schießen, was eigene 
Ausweichmanöver zur Folge hätte. Zur Steuerung der feindlichen 
Kanonen wäre die RND-Funktion gut geeignet. 


56 Raketenabwehrschlacht 








Sasse 
10 REM Raketenabwehrschlacht 


20 GOSUB 7000 

30 GOSUB 8000 

40 GOSUB 7500 

50 IF INT(T)>1000 THEN GOTO 9000 
60 GOSUB 1000 

70 GOSUB 3000 

80 IF H=1 THEN GOTO 9000 

90 GOSUB 4000 

100 GOTO 40 


1000 I=PEEK(764) 

1010 IF I=255 THEN RETURN 
1015 POKE 764,255 

1020 IF 1=33 THEN GOTO 2000 
1030 K=K+l 

1040 IF K>8 THEN K=1 

1050 RETURN 


2000 XL=X+4*V(K) 

2010 YL=Y+4*W(K) 

2015 GOSUB 2500 

2050 PLOT XL,YL 

2060 DX=0 

2070 IF V(K)=1 THEN DX=144-XL 
2080 IF V(K)=-1 THEN DX=6-XL 

2090 DY=0 

2100 IF W(K)=1 THEN DY=72-YL 

2120 IF W(K)=-1 THEN DY=6-YL 

2130 IF V(K)*WCK)=O THEN GOTO 2200 
2140 HH=ABS(DX) 

2141 IF HH<ABS(DY) THEN DY=HH*SGN(DY):GOTO 2200 
2150 DX=ABS(DY)*SGN(DX) 

2200 COLOR 1:DRAWTO XL+DX, YL+DY 
2210 COLOR O:PLOT XL,YL 

2215 GOSUB 5500 ; 

2220 COLOR O:DRAWTO XL+DX,YL+DY 
2230 IF H=0 THEN RETURN 


2235 MX=B+2 :MY=A-2 

2240 FOR I=1 TO INT(RND(0)*5)+20 

2250 COLOR 1:PLOT MX,MY 

2260 DX=10-RND(0)*20 

2270 IF MX+DX>159 OR MX+DX<O THEN GOTO 2330 





SJaaaeneanenssssste 


2280 
2290 
2300 
2310 
2320 
2330 
2340 


2500 
2510 
2520 
2530 
2540 
2541 
2550 
2560 


3000 
3010 
3020 
3030 
3040 
3050 
3060 
3065 
3066 
3070 
3080 
3090 


4000 
4010 
4020 
4030 
4040 
4050 
4060 
4070 
4080 
4085 
4086 
4090 
4100 
4110 
4120 


Raketenabwehrschlacht 57 





DY=10-RND(0)*20 

IF MY+DY>79 ‘OR MY+DY<O THEN GOTO 2330 
PLOT MX,MY 

DRAWTO MX+DX,MY+DY 

SOUND O,INT(RND(0)*100),4,8 

NEXT I 

RETURN 


H=O 

DY=A-Y-4*VCK) 

DX=B-X-4*V(K) 

IF W(K)*DX<>VCK)*DY THEN RETURN 

IF ABS(VCK))*SGN(DX)<>VCK) THEN RETURN 
IF ABS(WCK))*SGN(DY)<>WCK) THEN RETURN 
He1 

RETURN 


IF NB1=0 THEN GOSUB 5000 
X=X+6*V(K) 

Y=Y+6*W(K) 

IF X<6 THEN X=144 

IF X>144 THEN X=6 

IF Y<6 THEN Y=72 

IF Y>72 THEN Y=6 

LOCATE X+V(K)*4,Y+WCK)*4,Q 
IF >0 THEN GOSUB 5200:NBl=1:G0T0 1030 
GOSUB 5100 

NB1=0 

RETURN 


IF RND(0)>1.05-DF/20 THEN Z=Z+1 
IF Z>8 THEN Z=1 

IF NB2=0 THEN GOSUB 5300 
A=A+6*V(Z) 

B=B+6*W(Z) 

IF B<6 THEN B=144 

IF B>144 THEN B=6 

IF A<6 THEN A=72 

IF A>72 THEN A=6 

LOCATE B+2,A+2,Q 

IF Q>0 THEN GOSUB 5200:NB2=1:Z=2+1:G0T0 4010 
R=R+1:IF R>8 THEN R=1 

GOSUB 5400 

NB2=0 


RETURN 





58 Raketenabwehrschlacht 





Ss[aassssssssee 


5000 COLOR 0 
5010 K=K-1 

5020 GOSUB 5110 
5030 K=K+l 

5040 G0TO 5110 


5100 COLOR 1 

5110 PLOT X,Y 

5120 DRAWTO X+4*V(K),Y+4*W(K) 

5130 I=K+3:1=I-INT(1/8)*8 

5140 DRAWTO X+4*V(K)+2*V(I),Y+arWCK)+2*WCL) 
5150 PLOT X+4*V(K),Y+4*W(CK) 

5160 I=K+5:I=I-INT(I/8)*8 

5170 DRAWTO X+4*V(K)+2*V(I),Y+4*WCK)+2=WCI) 
5180 RETURN 


5200 SOUND 0,80,10,10 
5210 FOR S=1 TO 10 
5220 NEXT S 

5230 SOUND 0,0,0,0 
5240 RETURN 


5300 COLOR O 

5310 GOTO 5410 

5400 COLOR 1 

5410 PLOT B-2*V(R),A-2*WCR) 
5420 DRAWTO B+V(R)*2,A+W(R)*2 
5430 I=R+2:1=I-INT(1/8)*8 
5440 PLOT B-V(I)*2,A-W(I)*2 
5450 DRAWTO B+V(I)*2,A+W(I)*2 
5460 RETURN 


5500 FOR S=255 TO 0 STEP 20 

5510 SOUND 0,5,10,10:SOUND 0,5,10,14 
5520 NEXT S 

5530 SOUND 0,0,0,0 

5540 RETURN 


7000 GRAPHICS O 

7040 POSITION 10,2:PRINT "Raketenabwehrschlacht" 

7045 POSITION 5,5 

7050 PRINT " Sie sind der Kommandant eines" 

7060 POSITION 6,7:PRINT "Raumschiffs in vorgerueckter" 





SsssssssasEe SS] 


Raketenabwehrschlacht 


59 





S[sssssssssssssE 


7079 
7075 
7080 
7090 
7100 
7105 
7110 
7120 
7130 


7500 
7510 
7520 


7900 
7910 
7920 
7930 
7940 
7941 
7950 


8000 
8010 
8020 
8030 
8040 
8050 
8060 
8070 
8080 
8090 
8100 
8105 
8106 
8110 
8120 
8130 
8140 
8150 
8160 
8900 


POSITION 6,9:PRINT "Position zur Abwehr fremder" 





POSITION :PRINT "Eindringlinge" 

POSITION PRINT "Der Gegner muss innerhalb der vorge-" 
POSITION PRINT "gebenen Zeit (100 s) erledigt sein!" 
POSITION PRINT "Schwierigkeitsgrad waehlen:" 

PRINT "<1> leicht ... <10> schwer "; 

INPUT DF 

IF DF<1 OR DF>10 THEN GOTO 7100 


RETURN 


T=(PEEK(20)+PEEK(19)*256)/5 
PRINT INT(T)/105" " 
RETURN 


REM Sterne 
XS=INT(RND(0)*159) 
YS=INT(RND(0)*60) 

COLOR 1 

PLOT XS,YS:PLOT XS+1,YS 
PLOT XS,YS+1: PLOT XS+1,YS+1 
RETURN 


DIM W(8),V(8),ASC1) 

GRAPHICS 7 

DATA -1,1,0,1,1,1,1,0,1,-1,0, 
FOR I=0 TO 8 

READ W,V:WCI)=W:VCI)=V 

NEXT I 

Kel 

X=3*6+6 

Y=4r6+6 

V=V(K) 

WeW(K) 

SETCOLOR 1,0,14:SETCOLOR 2,7,8 

SETCOLOR 4,7,8:SETCOLOR 0,0,14 

FOR J=1 TO 10+RND(O)*DF:GOSUB 7900:NEXT J 
POKE 18,0 

POKE 19,0 

POKE 20,0 

B=INT(RND(O)*10)*6+6 

A=INT(RND(0)*10)*6+6 

RETURN 








Sasse: 


60 Raketenabwehrschlacht 


Ssssssasssssssesss 


9000 IF H<>1 THEN GOTO 9500 

9010 PRINT "Bravo, Feind eliminiert!" 
9020 GOTO 9600 

9500 PRINT "Schade, die Zeit ist um!" 
9600 SOUND 0,0,0,0 

9610 PRINT "Noch ein Spiel J/N ";:INPUT A$ 
9620 IF A$="J" THEN RUN 








SSSssSssSsSsSsSssssssseeee 


7 Die Schatzinsel 


ten, verschiedene Eingeborenenstämme, Stellen mit gefähr- 

fährlichem Treibsand. - In diesem echten Abenteuerspiel ist 
ein gutes Gedächtnis Gold wert! Sogar Long-John-Silvers Papagei 
spielt mit! Die umfangreichen grafischen und akustischen Möglich- 
keiten des Atari-Computers werden voll ausgenutzt. 


| in unermeßlich reicher Schatz aufeiner einsamen Insel, Pira- 


SPIELVERLAUF 

Ein Lageplan der Insel mit dem bei X vergrabenen Schatzund dem 
Weg dorthin wird bei Spielbeginn auf dem Bildschirm kurz darge- 
stellt. Man sollte sich das Bild gut einprägen, denn die Landkarte ver- 
schwindet relativ schnell wieder (RND-Funktion). Ein Verlassen des 
Weges kann fatale Folgen haben. Ein Versinken im Treibsand been- 
det das Spiel unter Umständen ziemlich rasch, es sei denn, ein be- 
freundeter Eingeborener taucht als Retter auf. Unangenehm ist es, 
feindlichen Ureinwohnern der Insel zu begegnen, da man durch die 
langen Verhandlungen wieder ein Stück zurückgeworfen wird. Long- 
John-Silvers Papagei ist ein echter Kumpel: er fliegt genau über dem 
nächsten Wegstück und dient so als lebendiger Wegweiser. Leider ist 
dieser Vogel viel zu selten in der Nähe! 

Während der Schatzsuche nähert sich ein Piratenschiff der Insel. 
Wenn die Piraten landen können, ist das Spiel zu Ende. Jede Verzöge- 
rung sollte also vermieden werden. Die Geschwindigkeit, mitdersich 


62 Die Schatzinsel 





das Schiff nähert, hängt von den nachfolgend beschriebenen Bedin- 
gungen ab. 

Die Karte wird während des Spiels durch Eingabe von «H» erneut 
kurz eingeblendet. Da auch alle Hindernisse gezeigt werden, ist das 
schon eine große Hilfe. Allerdings kommt als «Strafe» das Piraten- 
schiffein großes Stück näher, so daß von dieser Hilfsmöglichkeit nur 
selten Gebrauch gemacht werden sollte. 

Nach je fünf Spielzügen wird die Insel mit dem Piratenschiff ge- 
zeigt, die Entfernung nimmt dabei stetigab. Für dieSchatzsuche wer- 
den die Pfeiltasten nach rechts, links und unten benötigt. Der Wegzu- 
rück ist nicht möglich. Viel Erfolg! 


Die Schatzinsel 63 


HINWEISE 

Bei Ataris mit 16-k-RAM müssen die Diskettenlaufwerke abge- 
schaltet werden, um genügend Speicherplatz zu erhalten. Zum Spei- 
chern des Programms muß ein Kassettenrecorder verwendet werden. 


PROGRAMMAUFBAU 


20 
100 
200 
300 
400 
500 


600 


700 
800 


Kopiert Zeichensatz in den RAM-Bereich 

Darstellung eines Männchens im RAM-Zeichensatz 
Darstellung des Treibsands im RAM-Zeichensatz 
Darstellung des Papageis im RAM-Zeichensatz 

Darstellung eines Eingeborenen im RAM-Zeichensatz 
Darstellung eines Teils des Piratenschiffs im RAM-Zeichen- 
satz 

Darstellung eines Teils des Piratenschiffs im RAM-Zeichen- 
satz 

Blockgrafik für den Rand der Insel 

Umschalten auf den RAM-Zeichensatz und Abschalten des 
Cursors 

Initialisierung der Variablen und Felder 

Hauptprogramm 

Test, ob Schatzsucher in Treibsand geraten ist 

Angriff feindlicher Eingeborener 

Programmlogik für den Hilfsflug des Papageis 

Ausgabe der Landkarte auf dem Bildschirm 

Bewegung des Schatzsuchers 

Ausgabe des Treibsands auf der Landkarte 

Berechnung, wo in diesem Spiel Treibsandflächen sein 
sollen 

Tonerzeugung 

Löscht den Bildschirm und schaltet um auf Grafik 

Form der Insel 

Weg zu dem Schatz 

Ausgabe und Fahrt des Piratenschiffs 

Ausgabe der Insel auf dem Bildschirm 


64 Die Schatzinsel 


8000 Hilfestellung 
9000 Schatz gefunden 
9990 Ende des Spiels 


ERLÄUTERUNGEN 

Das Programm ist trotz seiner Länge, seiner vielen Feinheiten und 
bemerkenswerten Techniken übersichtlich und vor allen Dingen 
gradlinig aufgebaut. Das Unterprogramm ab Zeile 5000, das die 
Form derInsel berechnet, verdient besondere Aufmerksamkeit. Hier 
sind die Vorzeichenfunktion (SGN) und der Zufallszahlengenerator 
(RND) kombiniert worden, um die charakteristische unregelmäßige 
Form einer Insel als geschlossene Linie in Blockgrafik darzustellen. 


EIGENE ERWEITERUNGEN 

Die Zeit, während der die Karte auf dem Bildschirm sichtbar ist, 
kann durch Ändern der Parameter in der Warteschleife ab Zeile 8020 
variiert werden. Die Geschwindigkeit des Piratenschiffs wird durch 
den Wert der Variablen R (Zeile 6020) bestimmt, die während des 
Spiels Werte zwischen 0 und 2 annimmt (RND-Funktion). Änderun- 
gen dieses Wertes haben direkten Einfluß auf den Spielablauf. 


Die Schatzinsel 65 





ssnnaaasE SSE 


10 REM Die Schatzinsel 


20 GRAPHICS 1+16 

21 POSITION 9,0:PRINT #65"die" 
22 POSITION 5,10 

23 PRINT #65"schatzinsel" 

24 POSITION 0,19 

25 PRINT #6;"GLEICH GEHT'S WEITER" 
30 OPEN #2,4,0,"K:" 

40 CH=(PEEK(106)-8)*256 

50 CHORG=(PEEK(756)*256) 

60 FOR I=0 TO 511 

70 POKE CH+I,PEEK(CHORG+I) 

80 NEXT I 


100 POKE CH+(ASC("$")-32)*8+0,24 
110 POKE CH+(ASC("$")-32)*8+1,24 
120 POKE CH+(ASC("$")-32)*8+2,126 








130 POKE CH+(ASC("$")-32)*8+3,24 
140 POKE CH+(ASC("$")-32)*8+4,60 
150 POKE CH+(ASCC" -32)*8+5,102 





160 POKE CH+(ASC("$")-32)*8+6,102 
170 POKE CH+(ASC("$")-32)*8+7,0 


200 POKE CH+(ASC("@")-32)*8+0,12 
210 POKE CH+(ASC("@")-32)*8+1,28 
220 POKE CH+(ASC("@")-32)*8+2,92 
230 POKE CH+(ASC("@")-32)*8+3,127 
240 POKE CH+(ASC("@")-32)*8+4,255 
250 
260 @")-32)*8+6,124 
270 POKE CH+(ASC("@")-32)*8+7,56 





300 POKE CH+(ASC("S")-32)*8+0,32 
310 
320 
330 PORE CH+(ASC("&")-32)*8+3,28 
340 POKE CH+(ASC("5")-32)*8+4,30 
350 POKE CH+(ASC("&")-32)*8+5,39 
360 POKE CH+(ASC("&")-32)*8+6,64 
370 POKE CH+(ASC("&")-32)*8+7,0 








66 Die Schatzinsel 


SsssssssEe essssE 


400 POKE CH+(ASC("%")-32)*8+0,1 

410 POKE CH+(ASC("%")-32)*8+1,25 
420 POKE CH+(ASC("%")-32)*8+2,217 
430 POKE CH+(ASC("%")-32)*8+3,255 
440 POKE CH+(ASC("%")-32)*8+4,217 
450 POKE CH+(ASC("%")-32)*8+5,25 
460 POKE CH+(ASC("%")-32)*8+6,37 
470 PORE CH+(ASC("%")-32)*8+7,37 














500 POKE CH+(ASC("[")-32)*8+0,255 
510 POKE CH+(ASC("[")-32)*8+1,126 
520 POKE CH+(ASC("[")-32)*8+2,165 
530 POKE CH+(ASC("[")-32)*8+3,195 
540 PORE CH+(ASC("[")-32)*8+4,195 
550 POKE CH+(ASC("[")-32)*8+5,165 
560 POKE CH+(ASC("[")-32)*8+6,126 
570 POKE CH+(ASC("[")-32)*8+7,255 





600 POKE CH+(ASC("]")-32)*8+0,16 
610 POKE CH+(ASC("]")-32)*8+1,255 
620 POKE CH+(ASC("]")-32)*8+2,255 
630 POKE CH+(ASC("]")-32)*8+3,126 
640 POKE CH+(ASC("]")-32)*8+4,126 
650 POKE CH+(ASC("]")-32)*8+5,126 
660 POKE CH+(ASC("}")-32)*8+6,60 
670 POKE CH+(ASC("]")-32)*8+7,60 








700 POKE CH+(ASC(""")-32)*8+0,255 
710 POKE CH+(ASC(""")-32)*8+1,255 
720 POKE CH+(ASC(""")-32)*8+2,255 
730 POKE CH+(ASC(""")-32)*8+3,255 
740 POKE CH+(ASC(""")-32)*8+4,255 
750 PORE CH+(ASC(""")-32)*8+5,255 
760 POKE CH+(ASC(""")-32)*8+6,255 
770 POKE CH+(ASC(""")-32)*8+7,255 











800 POKE 756,CH/256 
810 POKE 752,1 


820 
830 
840 MES=O 

850 DIM v(11) 
860 DIM U(11) 








SeseessssssssE 


Die Schatzinsel 67 





S[seessssssE 


870 DIM L(21) 
880 DIM R(21) 
890 DIM X(21) 
900 DIM A$(10) 


1000 
1010 
1070 
1080 
1090 
1100 
1110 
1120 
1130 
1140 
1150 
1160 
1170 


1200 
1210 
1220 
1230 
1240 
1250 


1300 
1310 
1320 
1325 
1330 
1340 
1350 
1360 
1370 
1380 
1390 
1400 
1410 
1420 
1430 
1440 
1450 


GOSUB 5000 

XM=X(T+1) 

YM=T+1 

GOSUB 3000 

FOR Q=1 TO 300+INT(RND(0)*200):NEXT Q 
GOSUB 7000 

GOSUB 3600 


„GOSUB 3500 


IF XM=XT AND YM=YT THEN GOTO 9000 

F=F+1 

IF INT(F/5)=F/5 THEN GOSUB 6000 

IF X(YM)=XM AND INT(F/5)=F/5 THEN GOTO 1100 
IF XCYM)=XM THEN GOTO 1120 


GOSUB 4500 

GOSUB 6000 

FOR Q=1 TO 10 

IF V(Q)=XM AND U(Q)=YM THEN GOSUB 4000 
NEXT Q 

IF RND(O)<=0.4 THEN GOTO 2000 


GOSUB 7000 

POSITION 1,19 

PRINT #6;"achtung feindliche" 
PRINT #65" eingeborene" 
FOR N=1 TO 3 
R=INT(RND(0)*3) 

IF YM+R>=B THEN R=0 
POSITION XM, YM+R 

PRINT #6;'%" 

NEXT N 

YM=YM-3 

IF YM=T+1 THEN YM=T+1 


POSITION XM, YM 
PRINT #65" 
GOTO 1120 





Ss 


68 Die Schatzinsel 





SaaannssssssssssssEe 


2000 GOSUB 7000 

2010 GOSUB 3600 

2020 POSITION 1,19 
2030 PRINT #6;"dem papagei nach" 
2040 YJ=YM+1 

2050 IF YJ>P THEN YJ=P 
2060 XJ=X(YJ) 

2070 POSITION XJ,YJ 
2080 PRINT #6;CHR$(6) 
2090 MES=1 

2100 GOTO 1120 


3000 GOSUB 4600 

3020 FOR X=L(T) TO R(T) 
3030 POSITION X,T 

3040 PRINT #6;CHR$(7) 
3050 NEXT X 

3060 FOR Y=T TO B 

3070 POSITION L(Y),Y 
3080 PRINT #6;CHR$(7) 
3090 POSITION R(Y),Y 
3100 PRINT #6;CHR$(7) 
3120 NEXT Y 

3130 FOR X=L(Y-1) TO R(Y-1) 
3140 POSITION X,Y 

3150 PRINT #6;CHR$(7) 
3160 NEXT X 


3300 FOR Y=T+1 TO P 

3310 POSITION X(Y),Y 
3320 PRINT #6;CHR$(3+128) 
3330 NEXT Y 

3340 POSITION 1,20 

3350 PRINT #6;"schatz ist bei x" 
3360 POSITION X(P),P 
3370 PRINT #65"X"; 

3380 POSITION XM, YM 

3390 PRINT #6;"$"; 

3400 RETURN 


3500 GOSUB 4500 

3510 GET #2,A 

3520 IF A=-1 THEN G0T0 3510 
3530 POSITION XM,YM 

3540 PRINT #6;CHRS(7+128) 





SJaassssssE 


Die Schatzinsel 69 


3550 
3560 
3570 
3580 
3590 
3600 
3610 
3620 
3630 
3635 
3640 
3650 
3660 
3670 


3700 
3710 
3720 
3730 
3740 
3750 
3760 


4000 
4010 
4020 
4030 
4050 
4060 
4065 
4070 
4075 
4080 
4090 
4095 
4100 
4120 
4130 
4140 


4500 
4510 
4520 
4530 
4540 


IF A=72 THEN GOSUB 8000: RETURN 
IF A=43 THEN XM=XM-1:G0T0 3590 
IF A=42 THEN XM=XM+1:G0T0 3590 
IF AC>61 THEN GOTO 3500 
YM=YM+1 

POSITION XM,YM 

PRINT #6;"$" 

IF MES=0 THEN RETURN 

POSITION 0,19 

FOR I=1 TO 40 

PRINT #65" "; 

NEXT I 

MES=O 

RETURN 


FOR Q=1 TO 10 
POSITION V(Q),U(Q) 
PRINT #65CHR$ (32464) 
NEXT Q 

XS=XS+1 

YS=YS+1 

RETURN 


GOSUB 7000 

POSITION XM,YM 

PRINT #6;CHR$(32+64) 
POSITION XM+1,YM+1 

FOR I=60 TO 40 STEP -2 
SOUND 0,80-1,10,8 

FOR D=1 TO 10:NEXT D 

NEXT I 

SOUND 0,0,0,0 

POSITION 1,19 

PRINT #6;"im treibsand" 
FOR Q=1 TO 500:NEXT Q 

IF RND(0)>0.5 THEN GRAPHICS 1:G0T0O 9990 
PRINT #65" —- rausgezogen" 
FOR Q=1 TO 500:NEXT Q 
RETURN 


SOUND 0,80,10,8 
FOR D=1 TO 20 
NEXT D 

SOUND 0,0,0,0 
RETURN 


Ss 


70 Die Schatzinsel 








Sasse 


4600 GRAPHICS 1+16 
4610 POKE 756,CH/256 
4620 SETCOLOR 4,0,0 
4630 SETCOLOR 2,0,0 
4640 SETCOLOR 0,3,8 
4650 SETCOLOR 1,14,8 
4660 SETCOLOR 3,12,8 
4670 RETURN 


5000 L=INT(RND(0)*3)+7 

5010 T=INT(RND(0)*2)+2 

5020 W=6+INT(RND(0)*3) 

5030 B=INT(RND(0)*2)+17 

5040 FOR Y=T TO B 

5050 L(Y)=L 

5060 R(Y)=L+W 

5070 L-L-(SGN(10-Y)*INTCRND(0)*2)) 
5080 WeW+(SGN(10-Y)*INT(RND(0)*2)) 
5090 IF L(Y)<2 THEN L(Y)=2 

5100 IF R(Y)>18 THEN R(Y)=18 

5110 NEXT Y 


5500 X(T+1)=L(T+1)+INT(RND(0)*3) 
5510 K=T+2 

5520 FOR P=K TO B-1-INT(RND(0)*3) 
5530 X(P)=X(P-1)+INT(RND(0)*3)-1 
5540 IF X(P)>=R(P) THEN X(P)=R(P)-1 
5550 IF X(P)<=L(P) THEN X(P)=L(P)+1 
5560 NEXT P 

5570 P=P-1 

5580 XT=X(P) 

5590 YT=P 

5700 FOR Q=1 TO 10 

5710 D=INT(RND(O)*(P-T-2))+T+1 

5720 U(Q)=D 

5730 V(Q)=X(D)+(SGNERND(0)-0.5)*2) 
5740 IF V(Q)<=L(D) THEN V(Q)=V(Q)+3 
5750 IF V(Q)>=R(D) THEN V(Q)=V(Q)-3 
5760 NEXT Q 

5770 RETURN 


6000 GOSUB 4600 
6020 R=INT(RND(0)*3) 
6030 XS=XS+R 

6040 YS=YS+R 

6050 POSITION 18,18 





Sasse 


Die Schatzinsel 71 





Sssssssssse 


6060 
6070 
6080 
6090 
6100 
6110 
6120 
121 
6122 
6130 
6140 
6150 
6160 
6165 
6166 
6170 
6180 


7000 
7020 
7030 
7040 


PRINT #65CHR$(32+64) 
POSITION XS,YS 

PRINT #65" ["; 

POSITION XS,YS+1 

PRINT #65"]"; 

FOR Q=1 TO 200:NEXT Q 

IF YS<18 THEN RETURN 
GRAPHICS 1 

SETCOLOR 2,0,0 

POSITION 2,2 

PRINT #6;"oweh - die piraten" 
POSITION 3,4 

PRINT #6;"sind gelandet und" 
POSITION 3,6 

PRINT #6;"nehmen dich gefangen" 
FOR I=1 TO 100:NEXT I 

GOTO 9990 


GOSUB 4600 

FOR X=L(T) TO R(T) 
POSITION X,T-1 
PRINT #6;CHR$(7+128) 
NEXT X 

FOR Y=T TO B 
POSITION L(Y)-1,Y 
PRINT #6; CHR$(7+128) 
FOR X=L(Y) TO R(Y) 
POSITION X,Y 

PRINT #6;CHR$(7+128) 
NEXT X 

POSITION X,Y 

PRINT #6;CHR$(7+128) 
NEXT Y 

FOR X=L(Y-1) TO R(Y-1) 
POSITION X,Y 

PRINT #6;CHR$(7+128) 
NEXT X 

RETURN 


GOSUB 3000 

GOSUB 3700 

FOR Q=1 TO 100+INT(RND(0)*100) 
NEXT Q 

GOSUB 6000 

GOSUB 7000 

GOSUB 3600 

RETURN 





SSsıSsSsSSsssasae 


72 Die Schatzinsel 





SaassssssssssssE 


9000 GRAPHICS 1 

9005 FOR C=15 TO 1 STEP -1 

9010 SETCOLOR 4,C,8:SETCOLOR 2,C,8 
9020 PRINT CHR$(125) 

9030 SOUND 0,C+66,10,8 

9040 FOR Q=1 TO 20:NEXT Q 

9045 NEXT C 

9046 SOUND 0,0,0,0 

9048 SETCOLOR 0,0,0 

9050 POSITION 1,10 

9060 PRINT #65"SCHATZ GEFUNDEN!" 


9990 POSITION 1,11 
9991 PRINT #65"NOCH EIN SPIEL J/N "; 
9992 INPUT A$ 

9993 IF A$="J" THEN RUN 

9999 GRAPHICS O 





S[enensssssss:s 





8 Die Schlucht 


utund Geschicklichkeit werden vom Führer einer Expedi- 

tion durch unwegsames Gelände erwartet. Eines der 

schwierigsten Hindernisse ist auf dem Bildschirm darge- 
stellt: eine tiefe Schlucht mit einem reißenden Fluß. Brücken zum 
Überqueren derSchluchtgibtesnicht, Hinabkletternist aufgrund der 
senkrechten Felswände unmöglich. Die einzige Hilfe ist ein mitten 
über dem Abgrund hängendes Seil. Es ist unausgesetzt in Be- 
wegung, mit ihm kann man sich von einem Rand der Schlucht zum 
anderen Rand schwingen. Mittlerweile ist das Seil so kurz, daß esnur 
noch mit Anlauf zu erreichen ist. Greift man daneben, stürzt man 
durch den eigenen Schwung in die Schlucht, was mit dem Leben be- 
zahlt werden muß. Das Spiel ist mit einer eindrucksvollen Geräusch- 
kulisse versehen. 


SPIELVERLAUF 

Die Expedition besteht aus fünf Teilnehmern. Jeder Teilnehmer 
wird zum Anlauf am äußeren Bildrand bereitgestellt. Per Tasten- 
druck wird der Anlauf gestartet, der Rest geschieht automatisch. Da 
man die Sprungkraft jedes Teilnehmers nicht beeinflussen kann, 
kommt es auf den richtigen Zeitpunkt an, wann der Anlauf gestartet 
wird. 


74 


Die Schlucht 





PROGRAMMAUFBAU 


20 
1500 
2000 
3000 
4000 


5000 
6000 
7000 
7500 
9000 


Festlegen der Arrays, Hauptprogramm 
Pendelvorgang des Seils 

Berechnung der Koordinaten für den Pendelvorgang 
Schlucht 

Ausgabe des sich an dem Seil festhaltenden Expeditionsteil- 
nehmers 

Anlauf und Versuch, das Seil zu packen 
Bereitstellen des nächsten Sprungkandidaten 

Sturz in die Schlucht 

Parameter für das Spiel 

Ende des Spiels 


Die Schlucht 75 


ERLÄUTERUNGEN 

Auch in diesem Programm wird von einigen nachahmenswerten 
Techniken Gebrauch gemacht. 

Die Koordinaten für das schwingende Seil sind für jede Schwin- 
gung gleich. Sie werden daher zunächst im Unterprogramm ab Zeile 
2000 berechnet und in den Feldern X und Y gespeichert. Durch dieso 
gesparte Rechenzeit für jede Schwingung wird das Programm erheb- 
lich schneller. Bei allen periodischen Bewegungen sollte dieses Ver- 
fahren angewendet werden. 

Für das am Seil hängende Männchen wird die hochauflösende 
Grafik verwendet, da hier Figuren an jeder beliebigen Stelle des Bild- 
schirms gezeichnet werden können. Durch rasche, nur wenig ausein- 
anderliegende Bildfolgen sind fast ruckfreie Bewegungsabläufe auf 
dem Bildschirm darstellbar. 





76 Die Schlucht 





Saaaiansssssssssssse 


10 REM Die Schlucht 


20 DIM X(16) 

30 DIM Y(16) 

35 DIM AS(1) 

40 GOSUB 3000 
50 GOSUB 2000 
60 GOSUB 7500 
70 GOSUB 6000 
75 POKE 764,255 
80 GOSUB 1500 
85 POKE 754,255 
90 IF MEN<=O THEN MEN=0:POKE 754,255:G0T0 9000 
100 GOTO 80 


1500 FOR T=1+R TO N-R 

1510 COLOR 2:PLOT 85,0 

1520 DRAWTO 85+X(T),Y(T) 
1525 S=1:COLOR 1:G0SUB 4000 
1530 COLOR O:PLOT 85,0 

1540 DRAWTO 85+X(T),Y(T) 

1550 IF J=1 THEN S=2:COLOR 0:G0SUB 4000 
1560 NEXT T 

1565 IF MEN=0 THEN RETURN 
1570 IF C=1 THEN GOTO 1680 
1600 FOR T=N-R TO 1+R STEP -1 
1610 COLOR 2:PLOT 85,0 

1620 DRAWTO 85+X(T),Y(T) 
1625 S=3:COLOR 1:G0SUB 4900 
1630 COLOR O:PLOT 85,0 

1640 DRAWTO 85+X(T),Y(T) 

1650 IF J=1 THEN S=4:COLOR 0:GOSUB 4000 
1660 NEXT T 

1670 RETURN 

1680 ACROSS=ACROSS+1 

1690 DX=(ACROSS-1)*10+5 

1700 DY=52 

1710 COLOR 1:G0SUB 4020 

1720 C=0 

1730 MEN=MEN-1 

1735 IF MEN=0 THEN GOTO 6050 
1740 GOSUB 6000 

1750, RETURN 





SJaaassssssssssssssE 


Die Schlucht 77 


Ssssssssssssssssss 


2000 
2010 
2020 
2030 
2040 
2050 
2060 


3000 
3010 
3011 
3012 
3013 
3014 
3020 
3030 
3040 
3050 
3060 
3070 
3080 
3090 
3100 
3110 
3120 
3130 
3140 
3150 
3999 


4000 
4010 
4020 
4030 
4040 
4050 
4060 
4070 
4080 
4090 
4100 


NO 
FOR T=-PI/& TO PI/6 STEP 0.1 
NeN+1 

X(N)=-INT(50*SIN(T)) 
Y(N)=INT(50*COS(T)) 

NEXT T 

RETURN 


GRAPHICS 7 

PRINT "essen 

PRINT "* . 

PRINT "* Die Schlucht " 

PRINT "* “ "7 
REM 8 Leerz. 

COLOR 2 

PLOT 159,79 

DRAWTO 159,60 

DRAWTO 105,60 

POSITION 105,79 

POKE 765,2 

xIo 18,#6,0,0,"S:" 

PLOT 70,80 
DRAWTO 70,60 
DRAWTO 0,60 
POSITION 0,80 
xIO 18,#6,0,0, 
J=0:C=0 
PI=4*ATN(1) 
RETURN 





IF C=0 THEN GOTO 5000 
DX=85+X(T):DY=Y(T) 
PLOT DX,DY 

PLOT DX,DY+1 

PLOT DX-3,DY+2 
DRAWTO DX+3,DY+2 
PLOT DX,DY+3 
DRAWTO DX+2 ,DY+7 
PLOT DX+1,DY+3 
DRAWTO DX-1,DY+7 
RETURN 








78 Die Schlucht 





Sasse 


5000 A=PEEK(764) 

5001 IF A=255 AND J=O THEN FOR I=1 TO 50:NEXT I: RETURN 
5005 POKE 764,255 

5006 IF MEN=O THEN RETURN 

5010 J=1 

5020 DY=MY 

5030 DX=MX 

5040 COLOR 0:G0SUB 4020 

5050 MX=MX-10 

5060 DY=MY 

5070 DX=MX 

5080 COLOR 1:G0SUB 4020 

5090 H=ABS(MX-85-X(T)) 

5091 IF H<10 AND S=2 THEN C=1:COLOR 0:G0T0 4020 
5200 IF MX<105 THEN GOTO 7000 

5210 RETURN 


6000 My=52 

6010 MX=140 

6020 DY=MY 

6030 DX=MX 

6040 J=0 

6045 COLOR 1 

6050 GOSUB 4020 

6055 PRINT 

6060 PRINT "Rest1." 

6061 PRINT "Gruppe", "drueber' 
6070 PRINT MEN,ACROSS, LOST 
6080 RETURN 





"abgestuerzt" 


7000 COLOR 0:G0SUB 4020 

7010 MY=MY+2 

7020 DY=MY 

7030 COLOR 1:G0SUB 4020 

7040 SOUND 0,10,MY/2,8 

7050 COLOR 0:G0SUB 4020 
7060 IF MY<78 THEN GOTO 7010 
7070 SOUND 0,80,10,8 

7071 FOR I=1 TO SO:NEXT I 
7072 SOUND 0,0,0,0 

7080 LOST=LOST+1 

7090 C=0 

7100 J=0 

7110 MEN=MEN-1 

7120 IF MEN=-O THEN POKE 764,255:G010 6060 
7130 GOSUB 6000 

7140 RETURN 


SS1S1S1S1S1S1S1S1S1S1S1S1S1S1S1S1S1S] 


Die Schlucht 79 


1015151515191 S101S1S1S181S1S81S1S1S18] 


7500 
7510 
7520 
7530 
7540 
7550 
7560 
7570 
7580 
7590 
7595 
7596 


9000 
9001 
9002 
9005 
9009 
9010 
9020 


MEN=5 
LOST=0 

ACROSS=0 

J=0 

c=-o 
R=INT(RND(0)*4) 
FOR I=52 TO 59 
FOR Q=0 TO 60 
COLOR O:PLOT Q,I 
NEXT Q 

NEXT I 

RETURN 


IF LOST=0 THEN GOTO 9009 

IF LOST>1 THEN GOTO 9005 

PRINT "Es ist einer abgestuerzt":GOTO 9009 
PRINT "Es sind ";LOST;" Leute abgestuerzt" 
PRINT :PRINT "NOCH EIN SPIEL J/N ";:INPUT A$ 
IF A$="J" THEN GOTO 60 

GRAPHICS O 














9 Achtung-fertig-los! 


bei diesem Spiel gefragt. Das Männchen aufdem Bildschirm 

soll über eine gewaltige Mauer klettern - ohne Kletterhilfen 
über die Tastatur ist das nicht zu schaffen. Lockerungsübungen für 
die Hände werden dringend empfohlen. 


( ewandtheit, Reaktionsschnelligkeit und flinke Finger sind 


SPIELVERLAUF 

Der erste Teil der Mauer wird im Sprung genommen. Auf dem 
Bildschirm erscheinen die Kommandos «Achtung-Fertig-Los!». So- 
fort nach dem letzten Kommando, aber auf gar keinen Fall früher, 
wird das Männchen nach einem Tastendruck emporkatapultiert. Die 
Sprunghöhe hängt von der Zeitspanne zwischen dem Kommando 
«Los!» und dem Tastendruckab. Jeschneller der Tastendruck erfolgt, 
um so höher kann das Männchen springen. 

Für das Überwinden der Mauer stehen insgesamt 5 Sekunden zur 
Verfügung. Die nach dem ersten Sprung verbliebene Restzeit wird 
auf dem Bildschirm angegeben. Zum Weiterklettern sind nun die 
Auf- und Ab-Pfeiltasten abwechselnd zu drücken. Je schneller die 
beiden Tasten betätigt werden, um so eher ist das Männchen oben. 
Wichtigist, daß die Tasten wirklich abwechselnd gedrückt werden, da 
nur Tastenpaare gezählt werden. FünfPaare von Tastendrückenbrin- 
gen das Männchen um eine Steinreihe höher. Die Zeit läuft unerbitt- 
lich weiter! Wird das Ziel in der vorgegebenen Zeit nicht erreicht, 


82 Achtung - fertig — los! 





rutscht das Männchen wieder zurück, und ein neuer Versuch kann 
beginnen. 

Da die beiden Pfeiltasten abwechselnd betätigt werden müssen, ist 
kontinuierliches Festhalten einer solchen Taste sinnlos. Ebensokann 
das Männchen nichtschon vor dem letzten Kommando gestartet wer- 
den. Mogeln geht also hier nicht! 


HINWEISE 

Für die Eingabe der Zeilen 8100 bis 8170, die sich nur in einzelnen 
Zeichen unterscheiden, sollten die Editiermöglichkeiten des Atari 
ausgenutzt werden. 


Achtung — fertig — los! 83 


HINWEISE FÜR ATARI-400-BESITZER 

Beim Atari 400 ist es nicht möglich, die Tastendrücke schnell ge- 
nug zu produzieren. Hier sollte in der Gleichung für die Variable H 
der Wert 0.2 geändert werden. Dieser Wert bestimmt, wieviel Tasten- 
paare gezählt werden, bis das Männchen um eine Reihe hochklettern 
kann. Das Produkt aus der Anzahl der Paare und diesem Wert muß 
immerlergeben. Also wird für fünf Tastenpaare der Wert0.2 verwen- 
det, für 2 Tastenpaare wäre die Zahl 0.5 einzusetzen. Durch Auspro- 
bieren kann der geeignetste Wert am einfachsten gefunden werden. 


PROGRAMMAUFBAU 
20 Hauptteil 
1000 Countdown «Achtung - Fertig - Los!» 
1500 Test, ob Sprungbefehl zu früh gegeben wurde (Mogelei!) 
2000 Mauer 
2060 Sprung des Männchens 
2500 Zurückrutschen des Männchens bei Zeitüberschreitung 
2600 Ziel erreicht 
7000 Spielzeit auf Null setzen 
7100 Aktuelle Spielzeit 
8000 Anfangswerte, Höhe der Mauer 
8100 Darstellung des Männchens im RAM-Zeichensatz 
8200 Umschalten auf RAM-Zeichensatz und Abschalten des 
Cursors 
9000 Spielstand 
9600 Ende des Spiels 


ERLÄUTERUNGEN 

In diesem Programm wird die Anwendung bewegter, niedrigauflö- 
sender Grafik demonstriert. Von Interesse dürfte auch die Verwen- 
dung des im Atari eingebauten Taktgebers als Stoppuhr sein. Die 
Nullstellung dieser Uhr erfolgt in Zeile 7000, das Lesen der Zeit in 
Zeile 7100. Diese Programmteile können ohne Schwierigkeiten in ei- 
gene Programme übertragen werden. 


84 Achtung — fertig — los! 


Der Programmteil zum Registrieren eines Tastendrucks ist eben- 
falls recht außergewöhnlich. Der Speicherplatz 764 enthält den Code 
der zuletzt gedrückten Taste. Zum Löschen eines noch dort stehen- 
den Codes wird in den Speicherplatz 764 zunächst über die POKE- 
Anweisung der Wert 255 (hex FF) eingeschrieben. Jede Änderung 
dieses Wertes entspricht einem Tastendruck. Es genügt daher, mit 
Hilfe der PEEK-Anweisung zu testen, ob sich der Wert im Speicher- 
platz 764 verändert hat. Nach der Registrierung eines Tastendrucks 
wird zum Löschen wieder der Wert 255 in den Speicherplatz 764 ge- 
schrieben. In Zeile 8210 wird der Cursor des Atari abgeschaltet. 


Achtung - fertig — los! 85 





Sasse 





10 REM Achtung-Fertig-Los 


11 REM —— 





20 GOSUB 8000 
30 GOSUB 2000 
50 GOTO 9000 


1000 
1001 
1004 
1005 
1010 
1020 
1025 
1030 
1040 
1050 
1060 
1070 
1080 
1085 
1090 
1095 
1100 
1110 


1500 
1510 
1515 
1516 
1520 
1530 
1540 
1550 


2000 
2010 
2020 
2030 
2040 
2050 


POSITION 1,18 
PRINT #55" ":REM 7 Leerzeichen 
PRINT #65" ":REM 3 Leerzeichen 
POSITION 1,18:PRINT #6 ;"ACHTUNG" 

FOR I=1 TO RND(0)*200+200 

NEXT I 

POKE 764,255 

POSITION 1,18:PRINT #65" FERTIG" 

FOR I=1 TO RND(0)*200+200 

NEXT I 

IF PEEK(764)<>255 THEN GOTO 1500 
GOSUB 7000 

PRINT #8; "Los" 

SOUND 0,100,10,10 

IF PEEK(764)=255 THEN GOTO 1090 
SOUND 0,9,0,0 

GOSUB 7100 

RETURN 


POSITION 1,10:PRINT #63"GEMOGELTI" 

SOUND 0,150,2,8 

FOR D=1 TO 1000:NEXT D 

SOUND 0,0,0,0 

POSITION 1,10:PRINT #65" ":REM 9 Leerz. 
T=5 

POKE 764,255 

RETURN 


PRINT CHR$(125):JUMP=1 
H=10+INT(RND(0)*5) 

FOR I=18 TO 19-H STEP -1 
POSITION 15,I:PRINT #6;"2" 
NEXT I 

POSITION 15,18-H:PRINT #6 











86 Achtung - fertig — los! 





2060 POSITION 18,20:PRINT #65"SPRUNG ";JUMP 
2070 POSITION 18,18:PRINT #65"$" 

2100 GOSUB 1000 

2110 FOR I=18 TO 18-H+INT(T*20) STEP -1 
2120 POSITION 18,I:PRINT #65" " 





2130 POSITION 18,I-1:PRINT #6; 
2140 SOUND 0,80+1,10,10 

2145 FOR D=1 TO 10:NEXT D:SOUND 0,0,0,0 
2150 NEXT I 

2160 J=I:L=INT(I) 

2170 GOSUB 7100 

2175 IF T>5 THEN GOTO 2500 

2180 POSITION 20,9: PRINT #63"RESTZEIT" 
2181 POSITION 22,10 

2182 PRINT #65INT((5-T)*10)/105" " 
2190 IF PEEK(764)=255 THEN GOTO 2170 
2195 POKE 764,255 

2200 POSITION 18,L:PRINT #65" " 

2210 J=J-0.2 

2215 L-INT(J) 

2220 POSITION 18,L:PRINT #6;"$" 

2230 IF L>17-H THEN GOTO 2340 

2231 POSITION 18,L+1 

2233 PRINT #65" ":GOTO 2600 

2340 IF PEEK(764)<>15 THEN GOTO 2340 
2350 G0TO 2170 


| 
| 


2500 FOR I=L TO 18 
2510 POSITION 18,I-1:PRINT #63" " 
2520 POSITION 18,I:PRINT #63"$" 
| 2530 SOUND 0,80+1,10,10 
2535 FOR D=1 TO 5:NEXT D:SOUND 0,0,0,0 
2540 NEXT I 
2550 JUMP=JUMP+1 
| 2560 POSITION 25,10 





2561 PRINT #655" ":REM 4 Leerzeichen 
| 2570 IF JUMP<=10 THEN GOTO 2060 
| 2580 RETURN 


2600 FOR I=18 TO 10 STEP -1 
2610 POSITION I+1,L:PRINT #65" " 
2620 POSITION I,L:PRINT #6;"$" 
2630 FOR K=1 TO 10:NEXT K 
2640 NEXT I 

2650 FOR I=L TO 18 








SsssssesssssssssE 


Achtung — fertig — los! 87 


Sssssssssssssssssss 


2660 
2670 
2675 
2676 
2690 
2700 


7000 
7010 
7020 
7030 


7100 
7110 


8000 
8005 
8010 
8013 
8014 
8015 
8017 
8020 
8039 
8040 
8050 
8060 
8070 
8080 
8090 
8100 
8110 
8120 
8130 
8140 
8150 
8160 
8170 


8200 
8210 
8220 
8230 
8240 





POSITION 10,I-1:PRINT #65" " 
POSITION 10,I:PRINT #65"$" 

SOUND 0,80+1*2,10,10 

FOR D=1 TO 20:NEXT D:SOUND 0,0,0,0 
NEXT I 

RETURN 


POKE 18,0 
POKE 19,0 
POKE 20,0 
RETURN 


T=(PEEK(20)+256*PEEK(19))/50 
RETURN 


GRAPHICS 1+16 

POKE 764,255 
CH=(PEEK(106)-8)*256 

PRINT "Achtung-Fertig-Los": PRINT 
PRINT "Ich muss noch einige Vorbereitungen” 
PRINT "treffen":PRINT :PRINT 
PRINT "Gleich geht’s weiter" 
CHORG=(PEEK(756)*256) 

FOR I=0 TO 511 

POKE CH+I,PEEK(CHORG+I) 

NEXT I 

POKE CH+(ASC("%")-32)*8+0,0 


)-32)*8+1,255 


POKE CH+(ASC("$")-32)*8+0,24 
POKE CH+(ASCC"$")-32)*8+1,24 
PORE CH+(ASC("$")-32)*8+2,255 
PORE CH+(ASC("$")-32)*8+3,60 
POKE CH+(ASC("$")-32)*8+4,60 
POKE CH+(ASC("$")-32)*8+5,36 
POKE CH+(ASC("$")-32)*8+6,102 
POKE CH+(ASC("$")-32)*8+7,195 






POKE 756,CH/256 
POKE 752,1 

T=0 

DIM A$(10) 
RETURN 














| 
| 
| 
| 
| 
| 
| 





88 Achtung — fertig — los! 


SaaanannassssEe 


9000 IF JUMP<=10 THEN GOTO 9500 

9010 POSITION 10,0:PRINT #6;"PECH GEHABT" 

9020 GOTO 9600 

9500 POSITION 10,0 

9501 PRINT #6;"ES WURDEN ";JUMP;" SPRUENGE GEBRAUCHT" 
9600 POKE 764,255 

9610 POSITION 15,2:PRINT "NOCH EIN SPIEL J/N "; 

9620 INPUT A$ 

9621 IF A$="J" THEN GOTO 30 

9640 GRAPHICS O 








Sasse 


0 Schwer auf Draht 


er kennt nicht das beliebte Geschicklichkeitsspiel, bei dem 
ein Ring über eine Hindernisstrecke so an einer Schnur 
entlanggeführt werden muß, daß die Schnur nicht berührt 
wird? Hier wird eine interessante Variante dieses Spiels vorgestellt. 
Ein aufdem Bildschirm nach rechts wanderndes QuadratistmitHilfe 
der Auf-und Ab-Pfeiltasten an einem vom Atarigewaltigverbogenen 
Drahtstück entlangzuführen. AlsSpielstand wirdam Endeangezeigt, 
wieviel Prozent der Gesamtspielzeit das Quadrat den Draht. nicht ver- 
lassen hat. Einem familiären Wettkampf steht nichts mehr im Wege! 


SPIELVERLAUF 

Zu Beginn des Spiels ist der Schwierigkeitsgrad zu wählen, von 
dem die Größe des Quadrats abhängt. Das Quadrat bleibt einen Au- 
genblick am Anfang der Linie stehen, startet dann automatisch und 
bewegt sich mit konstanter Geschwindigkeit nach rechts. Durch Be- 
tätigen der Auf-und Ab-Pfeiltasten kann das Quadrat nach oben und 
unten gelenkt werden (Autorepeatfunktion der Tasten ausnutzen). 


% 


Schwer auf Draht 





PROGRAMMAUFBAU 


15 
110 
1000 
2000 
5000 


5570 
6000 


Hauptprogramm 

Ende des Spiels 

Anfangswerte und Titelbild 

Zackenlinie 

Steuerung des Quadrats, Reparatur der Linienteile, die von 
dem darüber hinweg wandernden Quadrat gelöscht worden 
sind 

Test, ob das Quadrat auf der Linie läuft 

Tonerzeugung 


Schwer auf Draht 9 


ERLÄUTERUNGEN 

Um eine kontinuierliche Bewegung des Quadrats zu ermöglichen, 
wird die hochauflösende Grafik verwendet. Im Gegensatz zur Block- 
grafik können hier Figuren punktweise verschoben werden, wodurch 
abgehackte Bewegungen vermieden werden. Das Unterprogramm 
ab Zeile 2000 konstruiert den verbogenen Draht, das Quadrat wird 
mit HilfederDRAWTO-Anweisungen ab Zeile 5000 gezeichnet. Die 
LOCATE-Funktion in Zeile 5570 testet, ob die Linie während des 
Spiels berührt wurde. 





EEE ee 


92 Schwer auf Draht 





sesssssasE SsassasssE 
10 REM Schwer auf Draht 


15 DIM A$(10),C(15) 

20 GOSUB 1000 

30 GOSUB 2000 

40 FOR Z=1 TO 100:NEXT Z 
60 GOSUB 6000 

70 Y=35:X=10 

80 B=Y:R=12-DF 

90 R2=INT(R/2):v=2 

100 GOSUB 5000 


110 PRINT "Der Draht wurde "; 

111 PRINT INTCHIT/(HIT+MISS)*10000)/100; 
112 PRINT "% der Spielzeit" 

113 PRINT "nicht verlassen." 

120 PRINT "Noch ein Spiel J/N ";:INPUT A$ 
130 IF A$= 
140 IF A$<>"N" THEN GOTO 120 
160 PRINT CHR$(125) 

170 STOP 





1009 X=10 

1010 Y=40 

1020 D=30 

1030 P=0 

1070 PRINT CHR$(125) 

1080 POSITION 10,2:PRINT "Spielregel:" 

1090 PRINT :PRINT "Auf dem Bildschirm wird ein gewaltig" 
1095 PRINT "verbogener Draht gezeichnet." 

1096 PRINT 

1100 PRINT "Das Quadrat muss so gesteuert werden," 
1105 PRINT "dass es immer auf dem Draht bleibt." 
1109 PRINT 

1110 PRINT "AUF- und AB-Pfeil benutzen!" 

1120 POSITION 0,16 

1121 PRINT "Die Gesamtbewertung erfolgt am Schluss" 
1150 POSITION 5,21:PRINT "Schwierigkeitsgrad" 

1151 POSITION 5,22:PRINT "1> leicht ... <5> schwer "; 
1155 INPUT DF 

1170 IF DF<1 OR DF>5 THEN GOTO 1150 

1180 PRINT CHR$(125) 

1190 GRAPHICS 7+16:COLOR 1 

1210 POKE 752,1 

1220 COLOR 1 

1999 RETURN 





SsssssssE Sasse 


Schwer auf Draht 93 





2000 
2005 
2010 
2020 
2030 
2040 
2050 
2060 
2065 
2070 
2080 
2090 
2100 


5000 
5010 
5020 
5030 
5040 
5050 
5060 
5070 
5080 
5100 
5105 
5110 
5120 
5500 
5510 
5520 
5530 
5540 
5550 
5560 
5561 
5565 


5570 
5575 
5580 
5585 
5590 
5600 
5605 
5610 
5700 
5710 





PLOT X,Y 

CO)=Y 

FOR I=1 TO 14 
R=D-INT(RND(0)*2*D) 
Y=Y+R:X=X+10 

IF Y>60 THEN Y=Y-R 
IF Y<20 THEN Y=Y-R 
DRAWTO X,Y 

C(I)=Y 

NEXT I 

HIT=O 

MISS=O 

RETURN 


PLOT X-R2,Y-R2 
DRAWTO X-R2,R+Y-R2 

DRAWTO X-R2+R,R+Y-R2 

DRAWTO X-R2+R,Y-R2 

DRAWTO X-R2,Y-R2 

PLOT 10,C(0) 

FOR I=1 TO 14 

DRAWTO 10+1*10,C(1) 

NEXT I 

M=PEEK(764) 

PORE 764,255 

IF M-14 AND Y-R2>2*V THEN B=B-2*V 
IF M=15 AND Y+R<80-2*V THEN B=B+2*V 
COLOR 0 

PLOT X-R2,Y-R2 

DRAWTO X-R2,R+Y-R2 

DRAWTO X-R2+R,R+Y-R2 

DRAWTO X-R2+R,Y-R2 

DRAWTO X-R2,Y-R2 

X=X+V 

COLOR 1 

IF X>145 THEN RETURN 


Y=B 

H=0 

FOR I=R2 TO R2 

LOCATE X,Y+1,Q 

IF Q>0 THEN HIT=HIT+1:FOR Z=1 TO 20:NEXT Z:I=R-1:H=1 
NEXT I 

IF H=1 THEN GOTO 5000 

MISS=MISS+1 

GOSUB 6000 

GOTO 5000 











94 Schwer auf Draht 


SaaessssesssssE 


6000 SOUND 0,80,10,8 
6010 FOR Q=1 TO 10 
6020 NEXT Q 

6030 SOUND 0,0,0,0 
6040 RETURN 








SS 





ll Atari-Würfel 





ürfelspiele gehören zu den ältesten Spielen überhaupt. 

Eines der Hauptprobleme ist jedoch, daß der Würfel oft 

vom Tisch rollt und erst mühsam unter Schränken oder 
anderen Möbeln gesucht werden muß, was ärgerliche Spielunterbre- 
chungen zur Folge hat. 

Mit diesem Programm ist das Problem ein für allemal sinnvoll mit 
Hilfe des Atari-Computers gelöst. Ein großer, überdimensionaler 
Würfel ist auf dem Bildschirm sichtbar, sogar das Würfeln ist zu hö- 
ren. Spiele wie Monopoly oder Mensch-ärgere-Dich-nicht gewinnen 
so neuen Reiz. Außerdem sollte wieder einmal anders als nur mit 
dem Computer gespielt werden. 


ANWENDUNG DES PROGRAMMS 

Nach dem üblichen RUN wird das Würfeln (Promptzeichen ab- 
warten) durch einen Tastendruck gestartet. Während der Würfelrollt, 
erscheinen auf dem Bildschirm die «oben liegenden Punktzahlen. 
Am Anfang kommen diese Zahlen sehr rasch, dann rollt der Würfel 
langsam aus. Wie üblich, hilft die RND-Funktion bei diesen Vorgän- 
gen. Das Programm kann über die BREAK-Taste verlassen werden. 





96 Atari-Würfel 





PROGRAMMAUFBAU 
10 Hauptprogramm 
1000 Ausgabe bzw. Löschen der Würfelpunkte auf dem Bild- 
schirm 
2000 Würfelfläche (gelbes Quadrat) 
5000 Farben; Bereitstellen der Tastatur als INPUT-File 
6000 Würfelgeräusche 
7000 Kopiert Zeichensatz in den RAM-Bereich 
7060 Darstellung der Würfelpunkte im RAM-Zeichensatz 
7090 Anfangswerte der Variablen 
7200 Umschalten auf den RAM-Zeichensatz 


Atari-Würfel 97 


ERLÄUTERUNGEN 

Ein Würfelprogramm istdieideale Anwendung von Zufallszahlen. 
In diesem Programm wird hiervon gleich zweimal Gebrauch ge- 
macht. Zunächst wirdüberdieRND-Funktion in Zeile 140 bestimmt, 
welche Zahl während des Würfelns als nächste auf dem Bildschirm 
erscheinen soll. Diese Zufallszahl muß entsprechend den möglichen 
Würfelpunkten zwischen 1 und 6 liegen. Ihr Wert wird dem Ausgabe- 
programm (ab Zeile 1000) übergeben, das je nach Wert der Zahl zu 
den Zeilen 1100 (1 Würfelpunkt), 1200 (2 Punkte) usw. verzweigt. Auf 
dem Bildschirm erscheint die richtige Augenzahl des Würfels. 

Die zweite Anwendung der RND-Funktion (Zeilen 90 bis 110) be- 
stimmt das Ausrollen des Würfels. Die Variable Tnimmt Werte zwi- 
schen 5 und 15 anundlegtso die Zahlder Drehungen des Würfels fest, 
bevor der Ausrollvorgang beginnt. 


EIGENE ERWEITERUNGEN 

Das Programm kann ohne Schwierigkeiten in andere Programme 
eingebaut werden. So könnten die Wetten im Spiel «Pferderennen» 
auf gewürfelten Nummern gesetzt werden. 





98 Atari-Würfel 





soaE SSssSssssssssEe 


5 REM Atari-Wuerfel 


10 GOSUB 7000 
12 PRINT #65CHR$(125) 

20 GOSUB 5000 

30 GOSUB 2000 

40 POSITION 0,22 

50 PRINT #6;"IRGENDEINE TASTE" 
51 PRINT #6;"DRUECKEN" 

60 GET #2,B 

90 T=RND(0)*5+5 

100 FOR I=1 TO T 

110 FOR Q=1 TO 20*I:NEXT Q 

120 D$=B$ 

130 GOSUB 1000 

140 R=INT(RND(0)*6)+1 

150 D$=A$ 

160 GOSUB 1000 

170 NEXT I 

180 G0TO 60 


1000 GOSUB 6000 
1010 GOTO 1000+R*100 
1100 POSITION 8,11 
1110 PRINT #6;D$ 
1120 RETURN 

1200 POSITION 5,5 
1210 PRINT #6;D$ 
1220 POSITION 12,17 
1230 PRINT #6;D$ 
1240 RETURN 

1300 GOSUB 1100 
1310 GOSUB 1200 
1400 POSITION 5,17 
1410 PRINT #6:D$ 
1420 POSITION 12,5 
1430 PRINT #6;D$ 
1440 GOTO 1200 
1500 GOSUB 1400 
1510 GOTO 1100 
1600 POSITION 5,11 
1610 PRINT #6;D$ 
1620 POSITION 12,11 
1630 PRINT #6;D$ 
1640 GOTO 1400 





sssssssaaEe SS ae 


Atari-Würfel 





99 


SsssssEe 


2000 
2010 
2020 
2030 
2040 
2050 
2060 


5000 
5010 
5020 
5030 
5040 
5050 
5060 


6000 
6010 
6020 


7000 
7004 
7005 
7006 
7007 
7010 
7020 
7030 
7040 
7050 


7060 
7079 
7080 


7090 
7100 
7110 
7120 
7130 


7200 
7999 


FOR I=1 TO 16 
POSITION 4,I+2 
PRINT #6;B$ 
NEXT I 

R=1 

DS=A$ 

GOTO 1000 


REM Farben 
SETCOLOR 0,0,0 
SETCOLOR 1,12,12 
SETCOLOR 2,3,6 
SETCOLOR 4,8,10 
OPEN #2,4,0,"'K" 
RETURN 


SOUND 0,100,12,8 
SOUND 0,0,0,0 
RETURN 


GRAPHICS 1+16 
POSITION 4,8 

PRINT #65 "ATARI-WUERFEL" 
POSITION 0,18 

PRINT #6;"GLEICH GEHT’S WEITER" 
CH=(PEEK(106)-8)*256 
CHORG=(PEEK(756)*256) 

FOR I=0 TO 511 

POKE CH+I,PEEK(CHORG+I) 

NEXT I 


FOR I=0 TO 7 
PORE CH+(ASC("$")-32)*8+1,255 
NEXT I 


DIM A$(1),B$(10),D$(1) 
AS=CHR$(164) 

FOR I=1 TO 10 
BSCI)=CHR$(A) 

NEXT I 


POKE 756,CH/256 
RETURN 





SsssssE SS 








12 Invasion der Außerirdischen 


außerirdischer Eindringlinge rasen aufdie Erde zu — höchste 

Alarmbereitschaft für die Verteidigungsstreitkräfte! Für die 
Abwehr werden Raketen eingesetzt, jeder Treffer zerstört ein feindli- 
ches Schiff. Alle Schiffe müssen vor Erreichen des Punkts X (siehe 
Bildschirm) vernichtet werden, sonstistdie Erde verloren. Dasich die 
Feinde mit hoher Geschwindigkeit nähern, steht die Verteidigungs- 
mannschaft vor äußerst schwierigen Aufgaben. 


( roßangriff auf die Erde! Pulks vonroten und gelben Schiffen 


SPIELVERLAUF 

Die Raketenabschußbasis der Erde wird über die Rechts- und 
Linkspfeiltasten des Atari bewegt, der Raketenabschuß erfolgt über 
die Aufwärts-Pfeiltaste. Ein Punktezähler registriert jeden Abschuß, 
wobei die erreichte Punktezahl von der Entfernung des getroffenen 
Schiffes abhängt. Das Spiel ist zu Ende, wenn entweder alle gegneri- 
schen Schiffe zerstört worden sind oder wenn mindestens eines der 
feindlichen Schiffe den Punkt X passieren konnte. 


PROGRAMMAUFBAU 
20 Grafikmodus 
140 Stringvariablen 
220 Anfangswerte der Strings 
280 Hauptprogramm 








102 





580 
740 
890 
1250 
1360 
1380 
2000 


2100 
2200 


2300 


Invasion der Außerirdischen 


> 


o 

” 

oo 0 oo 0500 060 
2 


Ende des Spiels 

Bewegung der Raketenabschußbasis, Abfeuern einer Rakete 
Berechnungen für einen Raketenabschuß 

Test auf Treffer 

Bewegung der gegnerischen Schiffe nach rechts 

Bewegung der gegnerischen Schiffe nach links 

Darstellung eines gegnerischen Schiffes (Typ D im RAM- 
Zeichensatz 

Darstellung der Raketenabschußbasis im RAM-Zeichensatz 
Darstellung eines gegnerischen Schiffes (Typ ID im RAM- 
Zeichensatz 

Darstellung der Explosion eines gegnerischen Schiffes im 
RAM-Zeichensatz 


Invasion der Außerirdischen 103 


2400 Umschalten des Atari auf den RAM-Zeichensatz 
2500 Tonerzeugung 
2600 Darstellung der gegnerischen Schiffssteuerung 


ERLÄUTERUNGEN 

Die gegnerischen Schiffe werden in Stringvariablen gespeichert. 
Zur Darstellung der beiden Schiffstypen sind das $-Zeichen und das 
&-Zeichen im Zeichensatz neu definiert worden. Die Frontlinie (Zei- 
le 220) wird durchaacht Schiffe des Typs $ dargestellt, die zweite Reihe 
durchacht Schiffe des &-Typs (Zeile 230). Um die zweite Reihegegen 
die erste versetzt darzustellen, sind Leerzeichen eingefügt. Die dritte 
und vierte Reihe sind Kopien deranderen beiden Reihen (Zeilen 240 
und 250). In Zeile 260 werden für jede Angriffsreihe entsprechend 
lange Strings aus Leerzeichen gebildet. Mit diesen Leerzeichen- 
strings wird in den Zeilen 520 bis 570 getestet, ob feindliche Schiffe 
den Punkt X überwinden konnten. 

Durch die versetzten Bewegungen der gegnerischen Angriffsrei- 
hen erhält das Spiel eine zusätzliche Note. In Zeile 1260 wird geprüft, 
ob einfeindliches Schiff von einer Rakete getroffen worden ist. In die- 
sem Fall wird der String, in dem der Treffer registriert worden ist, an 
der entsprechenden Stelle geteilt, das zerstörte Schiff durch ein Leer- 
zeichen ersetzt und die zwei Hälften des Strings wieder zusammenge- 
setzt. Dieses Programm demonstriert anschaulich die im Atari-BA- 
SIC möglichen String-Manipulationen. 


EIGENE ERWEITERUNGEN 

Noch spannender wird das Spiel, wenn auch die Gegner schießen 
können. Für die Raketenstation der Erde müssen dann Abwehrmaß- 
nahmen (Ausweichmanöver, Schutzschild) vorgesehen werden. 


104 Invasion der Außerirdischen 





SISSS SS SSssassenenenesss 


10 REM Invasion der Ausserirdischen 


20 GRAPHICS 1+16 

25 POSITION 3,3:PRINT #6;"INVASION DER" 
26 POSITION 2,6:PRINT #6; "AUSSERIRDISCHEN" 
27 POSITION 0,12 

28 PRINT #6;"GLEICH GEHT’S WEITER" 

30 OPEN #2,4,0,"K" 

40 CH=(PEEK(106)-8)*256 

50 CHORG=PEEK(756)*256 

60 FOR I=0 TO 511 

70 POKE CH+I,PEEK(CHORG+I) 

80 NEXT I 

100 SETCOLOR 0,3,6 

110 SETCOLOR 1,0,14 

120 SETCOLOR 2,13,8 

130 GOSUB 2000:PRINT #6;CHR$(125) 





140 DIM At(20):DIM B$(20) 
144 DIM C$(20):DIM D$(20) 
146 DIM E$(20):DIM Q$(20) 
148 DIM T$(20) 

150 Y=1 

160 XL=10 

170 YM=O 

180 T=0 

190 S=0 

200 J=0 

210 K=0 


220 FOR I=0 TO 8 

225 AS(1+I1*2)=CHRS(164) 
225 Ag(2+182)=" " 

228 
230 
240 
250 
260 





"; REM 18 Leerzeichen 


280 POSITION 0,143 PRINT #65"X"; 

290 J= NOT J 

300 IF K=1 THEN GOTO 600 

310 IF T>30+INT(RND(0)*15) THEN POSITION O,Y:PRINT #65E$:Y=Y+2:T=0:G0SUB 2500 
315 Q$=A$ 

320 IF J THEN GOSUB 1360:A$=0$:G0T0 340 





SSsSSsSsSsSsSsSssssssasaasase 


Invasion der Außerirdischen 105 





Ssssssssssss 


330 
340 
350 
360 
365 
370 
380 
390 
400 
410 
420 
440 
450 
460 
470 
490 
500 
510 
520 
530 
540 
550 
560 
565 
570 


580 
581 
582 
583 
590 
600 
601 
602 
603 
810 
620 
650 
655 
660 
680 
730 





GOSUB 1380:A$=Q$ 





POSITION 1,Y:PRINT #6;A$ 
SOUND 1,10,50+Y*8, 10 
GOSUB 740 

Q$=B$ 


IF J THEN GOSUB 1360:B$=Q$:G0T0 390 
GOSUB 1380: B$=Q$ 

POSITION 1,Y+2:PRINT #6;B$ 

SOUND 1,10,129-Y*8, 10 

GOSUB 740 

Q$=C$:GOSUB 1360:C$=Q$ 

POSITION 1,Y+4:PRINT #6;C$ 

SOUND 1,5,121-Y*8,5:SOUND 0,0,0,0 
GOSUB 740 

Q$=D$:GOSUB 1380:D$=Q$ 

POSITION 1,Y+6: PRINT #6;D$ 

SOUND 1,10,129-Y*8,10 

GOSUB 740 

IF Y>8 AND D$<>E$ THEN GOTO 580 
IF Y>10 AND C$<>E$ THEN GOTO 580 
IF Y>12 AND B$<>E$ THEN GOTO 580 
IF Y>14 AND A$<>E$ THEN GOTO 580 
T=T+1 

GOSUB 2600 

GOTO 280 


POSITION 3,18 

PRINT #6;"DIE WELT IST" 
POSITION 3,19 

PRINT #6; "VERLOREN" 

GOTO 610 

POSITION 1,18 

PRINT #65"GUT GEMACHT!" 
POSITION 1,19 

PRINT #6;"WELT GERETTET" 
SOUND 0,1,80,10 

FOR D=1 TO 1000:NEXT D 

IF Q=0 THEN SOUND 0,10,4,10 
SOUND 0,0,0,0 

IOCH EIN SPIEL J/N " 








SS Ss Ssssssasasess 


106 Invasion der Außerirdischen 





Ssssssssssssssssse 


740 A=PEEK(764) 

750 POKE 764,255 

770 T=T+1 

790 POSITION XL,20:PRINT #6;CHR$(5) 
800 IF A=255 THEN RETURN 

810 POSITION XL,20:PRINT #65" " 
820 IF A=6 AND XL>1 THEN XL=XL-1 
830 IF A=7 AND XL<17 THEN XL=XL+1 
850 POSITION XL,20:PRINT #6;CHR$(5) 
860 IF A=14 THEN GOSUB 890 

880 RETURN 


890 REM Schiessen 

900 FOR M=18 TO Y+6 STEP -1 
910 POSITION XL,M: PRINT #6; 
920 POSITION XL,M+1: PRINT # 
930 NEXT M 

940 POSITION XL,M+1:PRINT #65" " 
950 F=0 

950 QS=D$ 

970 R=6 

980 GOSUB 1250 

990 D$=Q$ 

1000 IF F=1 THEN GOTO 1220 
1020 POSITION XL,Y+5: PRINT 
1021 POSITION XL,Y+ 
1025 POSITION XL,Y+ 
1026 POSITION XL,Y+4:PRINT 
1030 Q$=C$ 

1040 R=4 

1050 GOSUB 1250 

1060 C3=Q£ 

1070 IF F=1 THEN GOTO 1220 
1080 POSITION XL,Y+3: PRINT 
1081 POSITION XL,Y+ 
1090 POSITION XL,Y+ 
1091 POSITION XL,Y+2:PRINT 
1100 Q$=B$ 

1110 R=2 

1130 GOSUB 1250 

1140 B$=Q$ 

1150 IF F=1 THEN GOTO 1220 
1160 POSITION XL,Y+1:PRINT #6;"." 
1161 POSITION XL,Y+1:PRINT #6; 
1165 POSITION XL,Y: PRINT #65". 
1166 POSITION XL,Y:PRINT #65" 
1170 Q$=A$ 





min, 
























sssssssssE gasssssE 





Invasion der Außerirdischen 107 


SJ[aeasssssssssssssaeE 


1180 R=0 

1200 GOSUB 1250 

1210 A$=Q$ 

1220 IF A$=E$ AND B$=E$ AND C$=ES AND D$=E$ THEN K-1 
1230 IF Q$=E$ THEN POSITION 1,Y:PRINT #65E$:Y=Y+2 
1240 RETURN 





1250 REM getroffen! 

1260 IF Q$(XL,XL)=" " THEN RETURN 

1270 Q$CXL,XL)=" " 

1280 F=1 

1290 S=S+10-Y 

1310 POSITION XL,Y+R:PRINT #6;"@" 

1320 SOUND 1,15,4,3:SOUND 0,0,0,0 

1330 POSITION 2,21:PRINT #65"PUNKTE ";5;" " 
1340 T=T-RND(0)*3 

1350 RETURN 











1360 QL=LEN(Q$):Q$(QL+1)=0$(1,1):0$=Q$(2,QL+1) 
1370 RETURN 


1380 T$=Q$(LEN(Q$)) 

1390 T$(2)=Q$(1,LEN(Q$)-1) 
1395 Q$=T$ 

1398 RETURN 


2000 POKE CH+(ASC("$")-32)*8+0,24 
2010 PORE CH+(ASC("$")-32)*8+1,60 
2020 POKE CH+(ASC("$")-32)*8+2,126 
2030 POKE CH+(ASC("$")-32)*8+3,255 
2040 POKE CH+(ASCC"$")-32)*8+4,195 
2050 POKE CH+(ASC("$")-32)*8+5,195 
2060 PORE CH+(ASC("$")-32)*8+6,102 
2070 PORE CH+(ASCC"$")-32)*8+7,36 








2100 PORE CH+(ASC("%")-32)*8+0,24 






110 POKE CH+(ASCC"x")-32)*8+1,24 
2120 POKE CH+(ASC("%")-32)*8+2,24 
2130 POKE CH+(ASC("%")-32)*8+3,60 





2140 POKE CH+(ASC(" 
2150 POKE CH+(ASC("% 
2160 PORE CH+(ASC(" 
2170 PORE CH+(ASC(" 


")-32)*8+4,126 
-32)*8+5,126 
-32)*8+6,255 
-32)*8+7,255 











Sssssssssaae 


108 Invasion der Außerirdischen 





Gasse Sasse 


2200 POKE CH+(ASC("3")-32)*8+0,24 
2210 POKE CH+(ASC("&")-32)*8+1,60 
2220 PORE CH+(ASC("&")-32)*8+2,126 
2230 PORE CH+(ASC("6")-32)*8+3,255 
2240 POKE CH+(ASC("S")-32)*8+4,60 
2250 POKE CH+(ASC("&")-32)*8+5,102 
2260 POKE CH+(ASC("&")-32)*8+6,195 
2270 POKE CH+(ASC("&")-32)*8+7,102 


















2300 POKE CH+(ASC("@")-32)*8+0,40 
2310 PORE CH+CASC(" 
2320 PORE CH+CASC("E" 











2330 POKE CH+(ASC(''@")-32)*8+3,40 
2340 POKE CH+(ASC("'@")-32)*8+4,28 
2350 POKE -32)*8+5,52 
2360 POKE -32)*8+6,164 


2370 POKE CH+(ASC( )-32)*8+7,164 


2400 POKE 756,CH/256 
2410 PORE 752,1 
2420 FLAG=O 

2499 RETURN 


2500 SOUND 1,4,50,8:SOUND 0,0,0,0 
2510 RETURN 


2600 IF FLAG=1 THEN GOTO 2650 

2610 POKE CH+(ASC("$")-32)*8+7,129 
2620 PORE CH+(ASC("S")-32)*8+7,195 
2630 FLAG=-1 

2640 RETURN 

2650 POKE CH+(ASC("$")-32)*8+7,36 
2660 POKE CH+(ASC("&")-32)*8+7,102 
2670 FLAG=O 





2680 RETURN 











13 Atari-Mühle 


ist der Computer mit seinen wohldurchdachten Zügen. 

Da aber keine Analyse für die weiteren Spielzüge durchge- 
führt wird, erweist sich der Atari als fairer Gegenspieler. Die Chan- 
cen, gegen den Computer zu gewinnen, sind erstaunlich gut! Viel 
Spaß bei diesem lehrreichen Strategiespiel! 


( egenspieler bei diesem etwas abgewandelten Mühlespiel 


SPIELVERLAUF 

Das Spiel findet aufeinem 3 x 3-Brett statt. Die eigenen Spielsteine 
sind mit X (Zeile 7020), die des Atari mit O (Zeile 7030) bezeichnet. 
Man hat stets den ersten Zug. 

Die Angabe des Feldes, auf dem der Stein plaziert werden soll, er- 
folgt durch Eingabe der Spalten- und Zeilennummer, wobei zwi- 
schen den beiden Zahlen weder ein Zwischenraum noch einanderes 
Zeichen stehen darf. 


ANORDNUNG DER FELDER: Spalte 
1 2. 3 
1 TV 3] 


Zeile 2 12° 7227 732 
3 13- 23.,..33 





110 Atari-Mühle 





Um einen Spielstein in die linke obere Ecke zu setzen, ist also 11 
einzugeben. Falscheingaben werden nichtangenommen, bereits be- 
setzte Felder können nicht noch einmal belegt werden. Nach dem ei- 
genen Zug setzt der Computer seinen Spielstein. Wenn eine Mühle 
gebildet oder das gesamte Spielfeld mit Steinen besetzt worden ist, 
wird das Spiel beendet und auf dem Bildschirm das Ergebnis ange- 
zeigt. 


HINWEISE 

Zur Darstellung des Spielfelds werden einige der Grafikzeichen 
des Atari verwendet. Da diese Zeichen nicht im Programmlisting ge- 
druckt werden können, sind sie in die spitzen Klammern <und > ge- 
setzt (Zeilen 8190 und 8400). So ist z.B. in der Zeile 8190 die Grafik- 


Atari-Mühle 11 


Buchstabenfolge RRRSRRRSRRR einzugeben, im Listing steht also 
<RRRSRRRSRRR>. Beim Erreichen der Klammer < ist der Atari 
zunächst in den Grafik-Modus zu schalten (Taste CAPS und CTRL 
gemeinsam drücken), dann wird die Buchstabenfolge eingetippt. Die 
Klammer > bedeutet Abschalten des Grafik-Modus (CAPS und 
SHIFT gemeinsam drücken). Aufdem Bildschirm erscheintanstelle 
der Grafikbuchstaben das Gitter des Spielfelds. 

Den senkrechten Strich der Zeilen 8200 bis 8390 erreicht man 
durch gleichzeitiges Drücken der SHIFT- und der =-Taste (Gleich- 
heitszeichen). 


PROGRAMMAUFBAU 

20 Hauptprogramm 
4000 Berechnung des Computerzuges 
5000 Jeder mögliche Zug wird berücksichtigt 
6000 eigener Zug 
7000 Ausgabe der Spielfelder auf dem Bildschirm 
8000 Initialisierung der Felder und Variablen 
8140 Ausgabe des Spielbretts 
8500 Tonerzeugung 
9000 Spielende 


ERLÄUTERUNGEN 

Der Computer berechnet nur seinen nächsten Zug. Erberücksich- 
tigtnicht, welche Möglichkeiten sich in den folgenden Zügen nocher- 
geben könnten. Die Chancen, gegen den Computer zu gewinnen, 
sind daher recht gut. Trotz dieser bewußten Einschränkung für die 
Computerspielzüge basiert das Programm auf den Prinzipien der 
künstlichen Intelligenz. 





112 Atari-Mühle 





SSisssSsıs sale 


10 REM Atari-Muehle 


29 GOSUB 8000 

30 GOSUB 6000 

40 GOSUB 7000 

50 GOSUB 5000 

60 IF FIN=1 THEN GOTO 9500 

70 IF FIN=2 THEN GOSUB 7000:G0T0 9000 
75 IF DR=1 THEN GOTO 9100 

80 GOSUB 7000 

90 GOTO 30 

99 STOP 


4000 FOR Q=1 TO 4 

4010 X(Q)=0:Y(Q)=0 

4015 NEXT Q 

4020 FOR L=1 TO 3 

4030 S=0 

4040 T=0 

4050 FOR K=1 TO 3 

4060 IF A(L,K)=1 THEN S=S+1 

4070 IF B(L,K)=1 THEN T=T+1 

4080 NEXT K 

4090 IF S=O THEN Y(T+1)=Y(T+1)+1 
4100 IF T=0 THEN X(S+1)=X(S+1)+1 
4105 NEXT L 

4110 FOR L=1 T0 3 

4120 T=0 

4125 S=0 

4130 FOR K=1 TO 3 

4140 IF ACK,L)=1 THEN S=S+1 

4150 IF B(K,L)=1 THEN T=T+1 

4160 NEXT K 

4170 IF S=O THEN Y(T+1)=Y(T+1)+1 
4180 IF T=0 THEN X(S+1)=X(S+1)+1 
4185 NEXT L 

4190 GOSUB 4300 

4200 GOSUB 4400 

4210 IF X(4)=1 THEN FIN= 
4215 IF Y(4)=1 THEN FIN=: 
4220 E=128*Y(4)-63#X(3)+31*Y(3)-15*X(2)+7*Y(2) 
4230 RETURN 

4300 T=0 

4310 S=0 

4320 FOR K=1 TO 3 

4330 T=T+A(K,K) 











RETURN 









SsssEe Sssssssssaat:e 


Atari-Mühle 113 


SDooSoSoSoSSsSst[Ss1S1Ss1S1S1S1S1S1 


4340 
4350 
4360 
4370 
4380 


4400 
4410 
4420 
4430 
4440 
4450 
4460 
4470 
4480 


5000 
5005 
5010 
5015 
5016 
5020 
5025 
5030 
5035 
5040 
5050 
5060 
5070 


6000 
6001 
6005 
6010 
6020 
6030 
6040 
6050 
6060 
6070 
6071 
6073 
6080 
6081 
6083 


S=S+B(K,K) 

NEXT K 

IF S-O THEN XCT+1)=XCT+1)+1 
IF T=0 THEN Y(S+1)=Y(S+1)+1 
RETURN 


T=0 

S=0 

FOR K=1 TO 3 

T=T+A(4-K,K) 

S=S+B(4-K,K) 

NEXT K 

IF S=O THEN X(T+1)=X(T+1)+1 
IF T=0 THEN Y(S+1)=Y(S+1)+1 
RETURN 


M=-256::DR=1 
FOR J=1 10 3 

FOR I=1 TO 3 

IF AC1,J)=1 OR B(I,J)=1 THEN G0TO 5040 
DR=0:B(1,J)=1 

GOSUB 4000 

IF FIN=1 THEN RETURN 

IF E>M THEN MeE:A=1:B=J 

B(1,J)=0 

NEXT I 

NEXT J 

BCA,B)=1 

RETURN 


POSITION 8,19:PRINT "Dein Zug (Spalte/Reihe) " 
INPUT A$ 

IF LEN(A$)<>2 THEN GOSUB 8500:G0T0 6000 
J=VAL(A$(1,1)):I=VAL(A$(2,2)) 

IF I<ı OR I>3 THEN GOSUB 8500:G0T0 6000 

IF I<1 OR J>3 THEN GOSUB 8500:G0TO 6000 

IF A(I,l)=1 THEN GOTO 6100 
IF B(I,J)=1 THEN GOTO 6100 
A(1,J)=1 

POSITION 8,20 

PRINT " 

REM * 30 Leerzeichen 
POSITION 8,19 

PRINT " 

REM * 31 Leerzeichen 





Ss 


114 Atari-Mühle 





sssssasE Sasse 


6090 RETURN 
6100 POSITION 8,20 

6105 PRINT "Dieser Platz ist schon belegt" 
6110 GOSUB 8500 

6120 GOTO 6000 


7000 FOR J=1 TO 3 

7010 FOR I=1 TO 3 

7020 IF ACI,J)=1 THEN POSITION J*448,1*4+3:PRINT "X"; 
7030 IF B(I,J)=1 THEN POSITION J*4+8,1*4+3: PRINT "0"; 
7040 IF ACI,J)+B(I,J)<>0 THEN GOTO 7050 

7045 POSITION J*4+8,1*4+43:PRINT " "; 

7050 NEXT I 

7060 PRINT 

7070 NEXT J 

7080 RETURN 


8000 DIM A(3,3) 
8005 DIM B(3,3) 
8010 DIM A$(2) 
8020 DIM X(4) 
8030 DIM Y(4) 
8040 FOR Q=1 T0 3 
8050 FOR W=1 TO 3 
8060 A(Q,W)=0 
8070 B(Q,W)=0 
8080 NEXT W 

8090 NEXT Q 

8120 FIN-O 

8130 DR=0 


8140 PRINT CHR$(125) 
8150 POKE 752,1 

8190 POSITION 11,9: PRINT "<RRRSRRRSRRR>" 
8200 POSITION 14,6: PRINT "| 
8210 POSITION 18,6: PRINT 
8220 POSITION 14,8: PRINT 
8230 POSITION 18,8:PRINT "| 
8240 POSITION 14,7: PRINT 
8250 POSITION 18,7: PRINT 
8260 POSITION 14,10: PRINT 
8270 POSITION 18,10:PRINT "|" 
8280 POSITION 14,11: PRINT "|" 
8290 POSITION 18,11:PRINT " 
8300 POSITION 14,12:PRINT "|"; 












SSssessssssssssssss 


Atari-Mühle 115 








sessassale EaalE 


8310 
8320 
8350 
8360 
8370 
8380 
8390 
8400 
8410 


8500 
8510 
8520 
8530 
8540 


9000 
9010 
9100 
9110 
9500 
9600 
9602 
9610 
9620 


POSITION 
POSITION 
POSITION 
POSITION 
POSITION 
POSITION 
POSITION 
POSITION 
RETURN 


18,12: PRINT 
14,14: PRINT 
18,14: PRINT 
14,15: PRINT 
18,15: PRINT 
14,16: PRINT 
18,16: PRINT 
11,13: PRINT 


SOUND 0,100,10,10 
FOR D=1 TO 100 


NEXT D 


SOUND 0,0,0,0 


RETURN 


in 
” 





"< RRRSRRRSRRR>" 


POSITION 10,20:PRINT "Ich habe gewonnen" 


GOTO 9600 


POSITION 10,20:PRINT "UNENTSCHIEDEN! " 


GOTO 9600 


POSITION 10,20:PRINT "Du hast gewonnen " 


POSITION 


10,21 


PRINT "Noch ein Spiel J/N ";:INPUT A$ 
IF A$="J" THEN RUN 


GRAPHICS 


o 








S[SS1[s]S1S15 Sale 








14 Tontaubenschießen 


ünf Tontauben stehen bereit, sich dem Gewehrfeuer des 

Atarischützen zu stellen. Ein eventueller Treffer führt jedoch 

nicht zum Absturz, sondern wird als Punkt dem eigenen 
Spielekonto zugeschlagen. Der künstliche Vogel zieht unbekümmert 
seine Bahn, unabhängig davon, wie oft er getroffen wird. Nur ist das 
Treffen nicht ganz so einfach, denn das Gewehr hat einen relativ star- 
ken Rückschlag. Die erreichten Treffer werden auf dem Bildschirm 
angezeigt. 


SPIELVERLAUF 

Das Fadenkreuz auf dem Bildschirm ist mit Hilfe der vier Pfeil- 
tasten ins Ziel zu bringen. Geschossen wird durch Drücken der Leer- 
taste. Bitte beachten: Der Rückschlag des Gewehrs muß durch ent- 
sprechendes Zielen ausgeglichen werden! Jede Taube darf so oft wie 
möglich getroffen werden. 


118 Tontaubenschießen 





PROGRAMMAUFBAU 
20 Hauptprogramm 
1000 Ausgabe des Fadenkreuzes auf dem Bildschirm 
2000 Zielvorgang 
3000 Anfangswerte, Grundeinstellungen des Atari für das Spiel 
4000 Ausgabe der Taube auf dem Bildschirm 
5000 Rückschlag beim Abschuß, Schuß, Test auf Treffer 
6000 Tonerzeugung für Treffer 
6500 Tonerzeugung für Schuß 
8000 Titelbild und Berechnung der Flugbahn der Tontaube 
9000 Spielende 


Tontaubenschießen 119 


ERLÄUTERUNGEN 

Da es bei diesem Spiel aufmöglichst kontinuierliche Bewegungen 
(Flug der Ton-Taube, Zielvorgang mit dem Fadenkreuz) ankommt, 
wird zur grafischen Darstellung die hochauflösende Grafik verwen- 
det. Mit der LOCATE-Funktion wird im Unterprogramm ab Zeile 
5000 geprüft, ob ein Treffer zu verzeichnen ist. Nachahmenswert ist 
das zur akustischen Untermalung des Schusses vorgesehene Unter- 
programm ab Zeile 6500, das sich sehr gut zum Einbau in eigene Pro- 
gramme eignet. Um während des Spiels Rechenzeitzu sparen und die 
Abläufe zu beschleunigen, wird die Flugbahn der Taube vorher be- 
rechnet und für weitere Verwendungen im Feld B gespeichert. 





120 Tontaubenschießen 





SSSS SS 


10 REM Tontaubenschiessen 


20 GOSUB 8000 

30 FOR G=1 TO 5 

35 PRINT CHR$(125) 
38 GOSUB 8190 

40 GOSUB 3000 

45 PRINT "Taube ";G; 
50 GOSUB 2000 

60 NEXT G 

70 GOTO 9000 

90 STOP 


1000 PLOT X-3,Y 
1010 DRAWTO X+3,Y 
1020 PLOT X,Y-3 
1030 DRAWTO X,Y+3 
1060 RETURN 


2000 A=PEEK(764) 

2005 POKE 764,255 

2006 J=B(I):COLOR 0:GOSUB 4000 
2008 COLOR 0:G0SUB 1000 

2010 IF A=6 AND X>4 THEN X=X-2 
2020 IF A=14 AND Y>4 THEN Y=Y-2 
2030 IF A=15 AND Y<76 THEN Y=Y+2 
2040 IF A=7 AND X<146 THEN X=X+2 
2050 I=I+1:J=B(I):COLOR 2:G0SUB 4000 
2060 IF A=33 THEN GOSUB 5000 
2065 IF X<5 THEN X=5 

2066 IF X>146 THEN X=146 

2070 COLOR 1:G0SUB 1000 

2080 IF FIN=1 THEN FIN=0:RETURN 
2100 GOTO 2000 


3000 FIN=0 

3010 X=INT(RND(0)*30)+20 
3020 Y=35 

3030 I=6 

3040 GOSUB 1000 

3050 J=B(I):GOSUB 4000 
3060 RETURN 





SJaasssassE SsSsE 


Tontaubenschießen 121 





Saas: 


4000 
4005 
4010 
4020 
4030 
4040 
4050 
4060 
4070 
4080 
4090 
4100 


5000 
5010 
5011 
5020 
5030 
5040 
5050 
5060 


6000 
6010 
6020 
6030 
6040 


6500 
6510 
6515 
6520 
6530 
6540 


8000 
8005 
8010 
8020 
8030 
8060 
8070 
8080 
8100 


PLOT I 
PLOT I 
PLOT I 
PLOT I- 
PLOT I 
PLOT I 
PLOT I 
PLOT I+ 
PLOT I-4, 
PLOT 144,J-1 

IF 1>146 THEN FIN-1 
RETURN 


GOSUB 6500 

LOCATE X,Y,BI 

IF BIc>2 THEN X=X+10-INT(RND(0)*20): RETURN 
X=X+10-INT(RND(0)*20) 

GOSUB 6000 

PRINT " getroffen "; 

H(G)=H(G)+1 

RETURN 


SOUND 0,50,10,8 
FOR D=1 TO 10 
NEXT D 

SOUND 0,0,0,0 
RETURN 


FOR P=15 TO 0 STEP -2 
SOUND 0,80,0,P 

FOR D=1 TO 15-P:NEXT D 
NEXT P 

SOUND 0,0,0,0 

RETURN : 


HIT=O 

GRAPHICS O 

POKE 752,1:PRINT CHR$(125) 

POSITION 12,2: PRINT "TONTAUBENSCHIESSEN" 
POSITION 10,10:PRINT "Einen Augenblick bitte" 
DIM B(160) 

FOR I=1 TO 160 

BCL)=(75-1)*(75-1)/150+10 

NEXT I 





122 Tontaubenschießen 


sssssssssssaEe 


8130 DIM H(5) 
8140 FOR H=1 TO 5 
8150 H(H)=0 
8160 NEXT H 
8170 DIM A$(1) 
8190 GRAPHICS 7 
8200 POKE 752,1 
8210 SETCOLOR 4, 
8230 SETCOLOR 1, 
8240 SETCOLOR 0, 
8250 SETCOLOR 2, 
8260 RETURN 








7,8 
0,14 
0,0 
7,8 


9000 GRAPHICS O 

9010 T=0 

9020 FOR I=1 TO 5 

9030 POSITION 5,5+I 

9040 PRINT "Taube "515" - Treffer: ";H(I) 
9050 T=T+H(I) 

9060 NEXT I 

9070 POSITION 9,12:PRINT "Gesamttreffer: ";T 
9080 POSITION 9,15: PRINT "Noch ein Spiel J/N "; 
9090 INPUT A$ 

9100 IF A$="J" THEN RUN 

9110 PRINT CHR$(125) 

9120 POSITION 10,12 

9130 PRINT "Auf Wiedersehen!" 








SsesssssssE sssssE 











15 Rettet den Wal 


P 


Eskimos gejagt. Eisberge bieten den einzigen Schutz. Wenn 

ein Eskimo mit seinem Kajak gegen einen Eisberg prallt, 
ist für diesen Jäger das Spiel zu Ende. Der Wal muß also die Eskimos 
dazubringen, ihm zufolgen und im Eifer des Gefechts dieEisberge zu 
rammen. 


| iner der letzten Wale der Arktis wird von erbarmungslosen 


SPIELVERLAUF 

Für das Spiel können verschiedene Schwierigkeitsstufen gewählt 
werden, die die Startpositionen derschwimmenden Eisberge bestim- 
men. Das Verhalten des Wals wird über die Pfeiltasten gesteuert. 
Fährt ein Kajak gegen einen Eisberg, wird es zerstört. Rammtder Wal 
dagegen einen Eisberg, wird der Eisbergund damit ein möglicher Un- 
terschlupfzerstört. Der Wal sollte also sehr gefühlvoll durch die arkti- 
schen Gewässer gesteuert werden. DasSpielistzu Ende, wenn ein Es- 
kimo den Wal eingeholt und getötet hat oder wenn alle Eskimos an 
Eisbergen gescheitert sind. 


PROGRAMMAUFBAU 
20 Anfangswerte, Festlegen der Felder 
160 Titelbild 
250 Bildschirm für Grafik vorbereiten 
280 Ausgabe der Kajaks auf dem Bildschirm 

















124 


Rettet den Wal 





360 
420 
450 
520 
540 
680 
800 
950 
1000 
1100 
1200 
1280 


Ausgabe der Eisberge auf dem Bildschirm 
Ausgabe des Wals auf dem Bildschirm 
Hauptprogramm 

Test auf Spielende 

Bewegung des Wals 

Bewegung der Kajaks 

Spielende 

Kopiert Zeichensatz in den RAM-Bereich 
Darstellung des Wals im RAM-Zeichensatz 
Darstellung eines Eskimos im RAM-Zeichensatz 
Darstellung eines Eisberges im RAM-Zeichensatz 
Umschalten auf den RAM-Zeichensatz und Abschalten des 
Cursors 


Rettet den Wal 125 


1300 Farben 
1600 Tonerzeugung 


ERLÄUTERUNGEN 

Die Anfangspositionen der Kajaks werden mit Hilfe der RND- 
Funktion innerhalb eines bestimmten Bereichs zufällig festgelegt 
(Zeilen 290 bis 300), ebenso die Startpositionen der Eisberge, aller- 
dings unter Beachtung des Schwierigkeitsgrades (Zeilen 370 bis 380). 
Die LOCATE-Funktion in Zeile 735 prüft, ob ein Eisberg von einem 
Eskimo gerammt worden ist, was das Ende des Kajaks bedeuten wür- 
de. In gleicher Weise wird in Zeile 750 getestet, ob sich ein Eskimo 
dem Wal nähern und ihn erlegen konnte. 





126 Rettet den Wal 





salslE sassssEe SsssE 
10 REM Rettet den Wal 


20 GRAPHICS O 

30 OPEN #2,4,0,"K:" 
40 DIM x(20) 

50 DIM Y(20) 

60 DIM U(20) 

70 DIM v(20) 


160 POSITION 12,2 

161 PRINT "Rettet den Wal" 

170 POSITION 4,7 

171 PRINT "Eskimos in ihren Kajaks sind auf" 
180 POSITION 4,9 

181 PRINT "Walfang. - Der Wal wird mit Hilfe" 
190 POSITION 4,11 

191 PRINT "der Pfeiltasten gesteuert. Er" 
200 POSITION 4,13 

201 PRINT "kann nur entkommen, wenn es ihm" 
202 POSITION 4,15 

203 PRINT "gelingt, die Eskimos auf die" 

204 POSITION 4,17 

205 PRINT "Eisberge zu locken." 

210 POSITION 1,20 

211 PRINT "Schwierigkeitsgrad" 

220 POSITION 1,22 

221 PRINT "<1> schwer ... <3> leicht ";:GET #2,D 
236 D=D-48 

240 IF I<1 OR D>3 THEN GOTO 230 


250 GRAPHICS 1+16:G0SUB 950 


280 FOR C=1 TO 20 

290 X=SGN(RND(0)-0.5)*INTCRND(O)*4+5)+9 
300 Y=SGN(RND(0)-0.5)*INT(RND(0)*4+6)+9 
310 POSITION X,Y:PRINT #65 CHR$(5); 

320 X(C)=X 

330 Y(C)=Y 

340 NEXT C 


360 FOR C=1 TO 20 

370 UCC)=SGN(RND(O)-0.5)*INT(RND(O)*4+3-D)+9 
380 V(C)=SGN(RND(0)-0.5)*INT(RND(O)*4+3-D)+9 
390 POSITION U(C),V(C):PRINT #6;"@"; 

400 NEXT C 





SISSsSSIsISSSss 


Rettet den Wal 127 


SSsSsSssssssssssssss 


420 X=INT(RND(0)*2+10) 
430 Y=INT(RND(0)*2+10) 
440 POSITION X,Y:PRINT #6;CHR$(4+160) 





450 GOSUB 540 

460 F=0 

470 FOR C=1 TO 20 

480 IF X(C)=0 THEN GOTO 510 
490 E=1 

500 GOSUB 680 

510 NEXT C 


520 IF F=0 THEN GOTO 830 
530 GOTO 450 


540 GOSUB 1600 

550 Z=X:V=Y 

570 GET #2,A 

580 IF A=0 THEN GOTO 570 





590 3 AND X>1 THEN X=X-1 
600 2 AND X<19 THEN X=X+1 
610 1 AND Y<19 THEN Y=Y+1 


620 IF A=45 AND Y>O THEN Y=Y-1 
640 POSITION Z,V:PRINT #6; 
660 POSITION X,Y:PRINT #65 CHR$(4+160) 
670 RETURN 





680 POSITION X(C),Y(C):PRINT #65" " 

690 E=0 

700 E=SGN(X(C)-X) 

710 X(C)=INT(X(C)-E) 

720 E=SGN(Y(C)-Y) 

730 Y(C)=INT(Y(C)-E) 

735 LOCATE X(C),Y(C),D 

740 IF D=64 THEN X(C)=0:G0SUB 1600:G0T0 780 
750 IF X(C)=X AND Y(C)=Y THEN GOTO 800 
770 POSITION X(C),YCC):PRINT #65CHR$(5); 
780 RETURN 





800 POSITION X(C),YCC):PRINT #65" " 
810 POSITION 1,15 

811 PRINT #6;" der wal ist tot" 
820 GOTO 840 


ossasaaaEe SE Se 





128 Rettet den Wal 





SSsSss[ss[s1ss1515 


830 POSITION 1,15 

831 PRINT #6;"noch einmal entkommen" 
840 DIM A$(1) 

845 FOR Q=1 TO 500:NEXT Q 

846 GRAPHICS O 

850 POSITION 10,10 

851 PRINT "NOCH EIN SPIEL J/N "; 
852 INPUT A$ 

860 IF A$="J" THEN RUN 

870 GRAPHICS O 

900 STOP 


950 CH=(PEER(106)-8)*256 
960 CHORG=PEEK(756)*256 
970 FOR I=0 TO 511 

980 POKE CH+I,PEEK(CHORG+I) 
990 NEXT I 


1000 POKE CH+(ASC("$")-32)*8+0,0 
1010 POKE CH+(ASCC"$")-32)*8+1,0 
1020 POKE CH+(ASCC"$" 
1030 POKE CH+(ASC(" 
1040 POKE CH+(ASC(" 
1050 POKE CH+(ASC("$")-32)*8+5,255 





















1060 POKE CH+(ASC("$")-32)*8+6,249 
1070 POKE 

1100 POKE CH+(ASC("%")-32)*8+0,0 
1110 POKE CH+(ASC("#")-32)*8+1,200 
1120 POKE CH+(ASC("%")-32)*8+2,88 
1130 POKE CH+(ASC("x")-32)*8+3,56 
1140 POKE CH+(ASCC"%")-32)*8+4,255 





1150 POKE CH+(ASC("%")-32)*8+5,60 
1160 POKE CH+(ASC("%")-32)*8+6,8 
1170 POKE CH+(ASC("%")-32)*8+7,0 





1200 POKE CH+(ASC("@")-32)*8+0,0 

1210 POKE CH+(ASC("@")-32)*8+1,32 
1220 POKE CH+(ASC("@")-32)*8+2,112 
1230 POKE CH+(ASC("@")-32)*8+3,116 
1240 PORE CH+(ASC("@")-32)*8+4,116 
1250 POKE CH+(ASC("@")-32)*8+5,126 
1260 POKE CH+(ASC("@")-32)*8+6,255 
1270 POKE CH+(ASC("@")-32)*8+7,255 











SSSs Ss 





Rettet den Wal 129 





1280 PORE 756,CH/256 
1290 PORE 752,1 


1300 SETCOLOR O, 
1310 SETCOLOR 1 
1320 SETCOLOR 2, 
1340 SETCOLOR 4 
1500 RETURN 


1600 SOUND 0,60,10,6 
1610 FOR D=1 TO 50 
1620 NEXT D 

1630 SOUND 0,0,0,0 
1640 RETURN 





Sasse 

















er nn more ha 








iyzes 
er 














16 Raketenschlacht 





ten zehn Angreifer zu besiegen, ist bestimmt keine leichte 

Aufgabe. Die eigenen Raketen zerstören alles, was sie tref- 
fen, auch wenn esnureinStreifschuß gewesen ist. Abgefeuert werden 
sie von einem Raumschiff, das in einer Raumbasis stationiert ist. So- 
lange diese Basis von ihrem Schutzschirm umgeben ist, ist auch das 
Raumschiff unverwundbar, und zwar unabhängig von seinem Auf- 
enthaltsort. Das mörderische Dauerfeuer der feindlichen Laserkano- 
nen wird von dem Schirm absorbiert. Aufgrund der dadurch beding- 
ten Energieverluste verliert der Schirm langsam seine Schutzfunk- 
tion. Bei 30% Restenergie ist er fast wirkungslos. Zur Kontrolle wird 
die jeweilige Reststärke des Schutzschirms angezeigt. Die Bahn eines 
gegnerischen Schiffs ist konstant und daher berechenbar. Trotzdem 
muß das Abfeuern einer Rakete genau überlegt werden. Es gibt nur 
zwei Punkte, von denen aus geschossen werden kann. Bei einem 
Fehlschuß ist die Rakete verloren, sie explodiert am oberen Bild- 
schirmrand. 


| ier sind geniale Strategen herausgefordert! Mit zehn Rake- 


SPIELVERLAUF 

Zum Schießenmuß die Raumstation verlassen werden. Durch Be- 
tätigen der Rechts- oder Linkspfeiltaste nimmt das Schiff einen der 
beiden fest vorgegebenen Punkte ein und schießt eine Rakete ab. In 
die Kalkulation zum Verlassen der Basis müssen folgende Aspekte 











132 Raketenschlacht 





einbezogen werden: Startposition und Flugzeit der Rakete sowie der 
Flugweg des gegnerischen Raumschiffs. Die gegnerischen Raum- 
schiffe sollten möglichst früh abgeschossen werden, um das Dauer- 
feuer auf den Schutzschirm der Basis zu stoppen. Für die angreifen- 
den Raumschiffe ist am oberen Bildschirmrand ein bestimmter Be- 
reich vorgesehen. Innerhalb dieses Bereichs hat jedes Raumschiffei- 
ne eigene Geschwindigkeit und eine eigene Flugbahn. 


HINWEISE 

Vor und hinter dem Prozentzeichen in Zeile 690 (Angabe der 
Restenergie des Schutzschirmes) muß je ein Leerzeichen stehen. 
Wenn die Stärke des Schutzschirms 100% bzw. 10% unterschreitet, 
rückt das Prozentzeichen jedesmal um eine Stelle nach links, da die 


Raketenschlacht 133 


Werte ganzzahlig sind (INT-Funktion) und wie üblich linksbündig 
ausgegeben werden. Um das alte Prozentzeichen zu löschen, ist das 
zweite Leerzeichen eingefügt worden. 


PROGRAMMAUFBAU 
30 Anfangswerte und Umschalten auf Grafik 
70 Hauptprogramm 
310 Ende des Spiels 
380 Ausgabe des Gegners und dessen Dauerbeschuß auf dem 
Bildschirm 
500 Test, ob eine Abwehrrakete abgeschossen werden soll 
620 Berechnung der Restenergie des Schutzschirms 
710 Abschuß der Abwehrrakete, Test auf Treffer 
780 Explosion (Grafik und Ton) 
940 Flugbahn des Gegners 
1070 Ausgabe des Schutzschirmes auf dem Bildschirm 
1200 Löschen des Bildschirms, Wahl der Farben 
2000 Ausgabe der Explosion auf dem Bildschirm 
2200 Löschen der alten Position der Rakete auf dem Bildschirm 
2300 Ausgabe der Rakete auf dem Bildschirm 
2400 Ausgabe des Gegners auf dem Bildschirm 
2600 Tonerzeugung 


ERLÄUTERUNGEN 

Das Programm ist klar strukturiert, alle wichtigen Berechnungen 
und Bildschirmausgaben erfolgen durch Unterprogramme. Der Be- 
reich, in dem sich ein gegnerisches Schiffaufhalten darf, wird nur ein- 
mal berechnet (ab Zeile 940) und in den Feldern Xund Y gespeichert. 
Diese Werte stehen dann jederzeit sofort zur weiteren Verwendung 
zur Verfügung. 

Das Durchlöchern des Schutzschirms ist relativ einfach darzustel- 
len. Der gegnerische Laserstrahl ist in hochauflösender Grafik als ei- 
ne einfache Linie in der Farbe 2 gezeichnet. Dieser Laserstrahl wird 
nun ein zweitesmalangleicher Position in der Farbe 0 gezeichnet, wo- 


134 Raketenschlacht 


durch der zuerst gezeichnete Strahl ausgelöscht wird. Bei diesem 
Löschvorgang wird nicht nur der Laserstrahl, sondern auch alles, was 
er durchdrungen hat, gelöscht. Aufdem Bildschirm ist das als Auflö- 
sung des Schutzschirms gut zu beobachten. 

Die Restenergie desSchutzschirms wird entsprechend der gegneri- 
schen Treffer berechnet (ab Zeile 620). Dazu werden mit Hilfe der 
LOCATE-Funktion die Treffer gezählt. LOCATE liefert genau dann 
den Wert 0, wenn der Punkt x, y die Farbe 0 hat, also ein Loch des 
Schirms darstellt. 














Raketenschlacht 135 





see S[asssssssssss 


10 


30 
40 
50 
so 


70 

80 

90 

100 
110 
120 
130 
140 
150 
160 
170 
180 
190 
200 
210 
220 
230 
240 
250 
260 
270 
280 
290 
300 


310 
315 
320 
340 


REM Raketenschlacht 


GOSUB 1200 
GOSUB 940 
GOSUB 1070 
GOSUB 620 


FOR A=1 TO 10 
DIR=SGNCRND(0)-0.5) 
PRINT "Angreifer 
PRINT "Treffer = ";HIT 
R=7-INTCRND(0)*14) 

IF R<O THEN S=3-R:E=36 

IF R>=0 THEN S=3:E=36-R 

IF DIR--1 THEN T=S:S=E:E=T 
FOR I=S TO E STEP DIR 
GOSUB 380 

GOSUB 500 

IF F=1 THEN GOSUB 710 

NEXT I 

GOSUB 2000 

IF F=1 THEN FIN=1 

IF FIN=2 THEN A=11:G0T0 300 
GOSUB 620 

IF F=1 THEN F=0:G0SUB 2100 
GOSUB 2200 

MX=74::MY=76 

SOSUB 2300 

IF FIN=0 THEN GOTO 150 
FIN=0 

NEXT A 








IF FIN=2 THEN PRINT "Du wurdest abgeschossen" 
IF FIN<2 THEN PRINT "Sehr gut!!!" 

PRINT "Treffer = ";HIT 

PRINT "Noch ein Spiel J/N "; 


345 INPUT A$ 


350 


IF A$="J" THEN RUN 


360 GRAPHICS O 


370 


STOP 





SSSSSSsSsssssansneanesasass 


136 Raketenschlacht 





SsaassssesssE 


380 REM Feind 

390 GOSUB 2000 

400 GOSUB 2400 

410 IF RND(0)<O.3 THEN RETURN 

420 HV=ABS(MX-X(I+DIR)+4) 

421 IF C<=30 AND HV<10 THEN FIN=2:G0T0 840 
430 COLOR 2:PLOT X(I+DIR)+4, Y(I+R+DIR) 
440 D=5-INT(RND(0)*10) 

450 DRAWTO X(I+DIR)+D, YCI+R+DIR)+20 
460 GOSUB 2600 

470 COLOR O:PLOT XCI+DIR)+4,Y(I+R+DIR) 
480 DRAWTO X(I+DIR)+D, YCI+R+DIR)+20 
490 RETURN 





500 REM Raketenfeuer 

510 IF F=1 THEN RETURN 

520 Z=PEEK(764) 

530 POKE 764,255 

540 IF Z=255 THEN RETURN 

550 GOSUB 2200 

560 IF Z=6 THEN MX=MX-40:G0TO 590 
570 IF Z=7 THEN MX=MX+40:G0T0 590 
580 RETURN 

590 GOSUB 2300 

600 F=1 

610 RETURN 


620 REM Schutzschirm 

630 c=0 

640 J=54 

650 FOR I=80 TO 100 

655 LOCATE I,J,P 

660 C=C+P 

670 NEXT I 

680 C=INT(C/41*100) 

690 PRINT "Schirmenergie: ";05"% " 
700 RETURN 


710 REM Abwehrflak 

720 GOSUB 2200 

730 MY=MY-4 

740 IF MY<12 THEN F=0:FIN=1:G0T0 860 
750 GOSUB 2300 

760 IF ABS(MX-X(I+DIR))>7 THEN RETURN 
770 IF ABS(MY-Y(I+R+DIR))>5 THEN RETURN 











ale Ssssssae 


Raketenschlacht 137 





SEES SSSSsssaarase 


780 
790 
800 
810 
820 
830 
840 
850 
860 
890 
900 
910 
920 
930 


940 
950 
960 
970 
980 
990 


FIN=1 

GOSUB 2200 

MX=X(I+DIR) 

MY=Y(I+R+DIR) 

HIT=HIT+1 

F=0 

COLOR 2:PLOT X(I+DIR)+3,YCI+R+DIR) 
DRAWTO MX+3,MY 

GOSUB 2100 

IF FIN=2 THEN GOTO 920 

GOSUB 2000 
X=X(I+DIR):Y=Y(I+R+DIR):COLOR 0:GOSUB 2430 
I=E+DIR 

RETURN 


REM Orbit des gegnerischen Raumschiffs 
DIM X(50),Y(50) 

X=0:Y=0 

N-39 

FOR I=1 TO N 

X=X+4 


1000 Y=40-INT( ((80-X)*(80-X))/200) 
1010 XCI)=X 

1020 Y(I)=Y 

1030 NEXT I 

1040 I=1 

1050 HIT=0 

1060 COLOR 1 


1070 REM Schutzschild 
1090 FOR I=50 TO 60 


1100 


PLOT 60,I:DRAWTO 100,I 


1110 NEXT I 
1120 MX=74 
1130 MY=76 
1160 GOSUB 2300 


1170 
1180 


F=0 
FIN=O 


1190 RETURN 


1200 REM Farben 


1210 GRAPHICS 7 
1220 SETCOLOR 4,8,8 
1230 SETCOLOR 2,8,8 
1240 SETCOLOR 1,0,14 
1250 SETCOLOR 0,4,5 





1260 DIM A$(1) 


1320 


RETURN 





sessssE Sssssssssste 


138 Raketenschlacht 





sssssasaE SsasEe 


2000 COLOR O 

2010 X=X(I) 

2020 Y=Y(I+R) 

2030 GOTO 2430 
2100 COLOR 2 

2110 FOR Q=1 TO 20 
2120 PLOT MX+INT(RND(0)*5),MY-INT(RND(0)*5) 
2130 NEXT Q 

2140 COLOR O 

2150 FOR Q=0 TO 7 
2160 FOR Z=0 TO 7 
2170 PLOT MX+Z,MY-Q 
2180 NEXT Z 

2190 NEXT Q 

2195 RETURN 


2200 COLOR O 
2210 GOTO 2310 


2300 COLOR 1 

2310 PLOT MX,MY:DRAWTO MX+2,MY 

2320 PLOT MX+5,MY:DRAWTO MX+7 ,MY 
2330 PLOT MX+1,MY-1:DRAWTO MX+6,MY-1 
2340 PLOT MX+2,MY-2:DRAWTO MX+5 ,MY-2 
2350 PLOT MX+3,MY-3:PLOT MX+4,MY-3 
2360 PLOT MX+3,MY-4:PLOT MX+4,MY-3 
2370 PLOT MX+1,MY-5:DRAWTO MX46,MY-5 
2380 PLOT MX+2,MY-6:DRAWTO MX+5 ‚MY-6 
2390 PLOT MX+3,MY-7:PLOT MX+4,MY-7 
2395 RETURN 


2400 COLOR 1 

2410 X=X(I+DIR) 

2420 Y=Y(I+R+DIR) 

2430 PLOT X+3,Y:PLOT X+4,Y 
2440 PLOT X+3,Y-1:PLOT X+4,Y-1 
2450 PLOT X+2,Y-2:DRAWTO X+5,Y-2 
2460 PLOT X,Y-3:DRAWTO X+7,Y-3 
2470 PLOT X,Y-4:DRAWTO X+7,Y-3 
2480 FOR Yi=Y-4 TO Y-7 STEP -1 
2490 PLOT X,Y1 

2500 PLOT X+1,Y1 

2510 PLOT X+3,Y1 


2520 PLOT X+4,Y1 2600 SOUND 0,100,10,10 
2530 PLOT X+6,Y1 2610 FOR Q=1 TO 4 
2540 PLOT X+7,Y1 2620 NEXT Q 

2550 NEXT Y1 2630 SOUND 0,0,0,0 
2560 RETURN 2640 RETURN 





sesssssse SsssssEe 

















17 Golfspiel 


ermöglicht mit beeindruckender grafischer Darstellung und 

äußerst realistischem Ablauf ein 9-Loch-Golfspiel auf dem 
Bildschirm. Das Wandern von Loch zu Loch, Putten des Golfballs, 
Wahl des Schlägers, Ballschlag, Flug des Balls, alle Situationen wer- 
den durchgespielt. Viel Spaß! 


D): Golfplatz ist zu weit entfernt? Macht nichts, der Atari 


SPIELVERLAUF 

Das wichtigste Kriterium zur Auswahl des Golfschlägers ist die 
Entfernung des Balls zum nächsten Loch. Dieser Wert wird aufdem 
Bildschirm angegeben. Acht verschiedene Golfschläger stehen zur 
Auswahl. Der Schläger mit der niedrigsten Nummer erzielt die größ- 
te Schlagweite. Fliegt der Ball über den Bildschirmrand, also aus dem 
Gelände, zählt das Loch als verfehlt, und es geht weiter bis zum näch- 
sten. Wenn der Ball am Loch vorbeigeht, aber auf dem Platz bleibt, 
hat man einen neuen Versuch. Bei einem zu schwachen Schlag liegt 
der Ball etwas näher am Loch, von dort geht es weiter. Ist man dem 
Loch genügend nahe gekommen, wird derBallaufdem letzten Stück- 
chenregelrechtgeputtet, biserindasLochgefallen ist. DerSpielstand 
wird laufend eingeblendet. 





140 





Golfspiel 





PROGRAMMAUFBAU 


Anfangswerte der Variablen 

Nächstes Loch des Golfplatzes 

Punktzahl für jedes Loch 

Ende des Spiels 

Berechnung der Flugbahn des Balls 

Ausgabe des fliegenden Balls auf dem Bildschirm 
Test, ob der Ball am Loch vorbeigeflogen ist 
Schwingender Schläger beim Ballschlag 
Auswahl des Schlägers, Ausführung des Schlags 
Wahl der Farben 

Ausgabe des Fähnchens auf dem Bildschirm 
Ausgabe des Golfspielers auf dem Bildschirm 


Golfspiel 141 


9400 Löschen der alten Position des Spielers auf dem Bildschirm 
schirm 

9500 Tonerzeugung 

9600 Erzeugung einer kurzen Pause 

9700 Erzeugung einer langen Pause 


ERLÄUTERUNGEN 

Besondere Aufmerksamkeit verdient die Routine, mit der der 
Golfschläger bei dem bevorstehenden Ballschlag dargestellt wird 
(Unterprogramm ab Zeile 7000). Dazu wird in hochauflösender Gra- 
fik eine Linie gezeichnet und in einem zweiten Schritt sofort wieder 
gelöscht. Der Anfangspunkt der Linie ist fest in der Hand des Golf- 
spielers, während sich der Endpunkt aufeinem Kreis bewegt. Durch 
dieses fortwährendeZeichnen und Löschen der Linie in Verbindung 
mit der Bewegung des Endpunkts aufder Kreislinie entsteht der Ein- 
druck, als ob mit dem Schläger wie im richtigen Spiel zum Schlag aus- 
geholt wird. Die Flugbahn des Balls, ebenfalls in hochauflösender 
Grafik, isteine Parabel. Dader BallimmerinRichtungLoch fliegt, er- 
scheint die Parabel etwas verzerrt. 


EIGENE ERWEITERUNGEN 

Trotz der schon vorhandenen umfangreichen Möglichkeiten kann 
das Spiel sinnvoll erweitert werden. So könnte jeder Ballschlag oder 
jedes Teilergebnis mit einer lustigen Meldung kommentiert werden. 
Wenn mehrere Spieler golfen, müßte für jeden Spieler eine Liste ge- 
führt und eine abschließende Rangfolgebewertung vorgenommen 
werden. 





142 Golfspiel 





SsssssssssssasasasaE 


10 REM Golfspiel (9-Loch-Platz) 


20 DIM AS(1) 

790 DIM T(9) 

810 XH=0:XC=0 

820 YH=0:HT=0:YC=0 


2000 FOR H=1 TO 9 

2010 GOSUB 9000 

2020 T(H)=0 

2040 PRINT "Loch-Nr: ";H 

2100 REM Lochdaten 

2120 X=INT(RND(0)*25)+5 

2130 Y=INT(RND(0)*10+60) 

2150 XT=INT(RND(0)*60+85) 

2170 YT=INT(RND(0)*30)+6 

2180 D=SGN(XT-X)* 
SQRLCXT-X)*CXT-X)HAYT-Y)*CYT-Y)) 

2190 GOSUB 9200 

2200 GOSUB 9300 

2300 PRINT "Lochentfernung: ";INT(D) 

2310 PRINT "Welcher Schlaeger (1-8) "; 

2311 INPUT C 

2315 IF C<1 OR C>8 THEN GOTO 2310 

2320 C=10-C 

2325 SOSUB 7000 

2326 B=0 

2330 GOSUB 5000 

2335 IF B=1 THEN B=0:G0T0 4920 

2340 D=SGN(XT-XHT)* 
SORC(XT-XHT)*(XT-XHT)+(YT-YHT)*CYT-YHT)) 

2360 IF D<-10 THEN PRINT 
"zu weit - noch einmal":GOSUB 9700:G0T0 2010 

2370 IF D<5 THEN PRINT 
"prima, schon nah am Ziel" 
:GOSUB 9700:G0TO 8000 

2380 GOSUB 9400 

2390 X=XHT 

2400 Y=YHT 

2500 GOTO 2190 


4900 PRINT "Du brauchtest ";T(H);" Schlaege" 
4910 GOSUB 9700 
4920 NEXT H 





sısE SiS SS 


Golfspiel 143 





SS, 


4930 GRAPHICS O 
4940 POSITION 5,2:PRINT "Ergebnis dieser Runde" 


4945 PRINT 
4950 FOR I=1 TO 9 
4960 PRINT " Loch ";I; 


4970 IF T(IJ=-1 THEN PRINT " Ball verloren":GOTO 4990 
4980 PRINT " ";T(I)5" Schlaege" 

4990 NEXT I 

4995 PRINT :PRINT "Noch eine Runde J/N 
4996 INPUT A$ 

4997 IF AS="J" THEN RUN 

4999 GRAPHICS 0:STOP 





5000 REM Schlagweite 

5100 VT=(C*(1+RND(O)*0.1))+1 
5160 HT=0 

5170 XH=0 


5500 REM Flug des Golfballs 

5530 Q=(Y-YT)J/CXT-X) 

5600 VV=-VT*(SIN(45*3.14159/180)) 

5610 XC=X+1 

5620 YC=Y 

5630 VH=VT*(COS(45*3.14159/180)) 

5650 HT=HT+VV 

5660 YH=Q*XH 

5670 W=VV+l 

5800 XH=XH+VH 

5810 YH=-Q*XH 

5820 IF XH+XC>159 THEN YH=0:YT=0:YC=0: 
XH=0:XC=0:G0TO 6500 

5830 IF YH+HT+YC<O THEN YH=0:YT=0:YC=0: 
XH=0:XC=0:G0T0 6500 

5850 IF HT>=0 THEN GOTO 5900 

5860 COLOR 2:PLOT XH+XC,YH+HT+YC 

5865 GOSUB 9600 

5880 COLOR O:PLOT XH+XC, YH+HT+YC 

5890 GOTO 5650 

5900 XHT=XH+XC 

5910 YHT=YH+HT+YC 

5915 RETURN 

6000 PLOT XH+XC,YH+HT+YC 

6010 RETURN 





SssssaaaE S1S15 


144 Goifspiel 





sesssssssssssse 


6500 PRINT "Der Ball ist weggeflogen" 
6510 GOSUB 9500 

6520 HT=0:TCH)=-1 

6530 GOSUB 9700 

6540 B=1:RETURN 


7000 REM Schwingen des Schlaegers 

7010 T(H)=T(H)+1 

7100 XS=X+3 

7110 YS=Y:YS=YS-3 

7200 FOR S=-30 TO 5 STEP 2 

7220 A=S/30*3.14159 

7230 SX=6*SIN(A):SY=6*COS(A) 

7240 COLOR 2:PLOT XS,YS:DRAWTO XS+SX, YS+SY 
7250 IF S=0 THEN GOSUB 9500 

7260 GOSUB 9600 

7270 COLOR O:PLOT XS,YS:DRAWTO XS+SX,YS+SY 
7275 GOSUB 9300 

7280 NEXT S 

7500 RETURN 


8000 REM putten des Golfballs 

8010 GOSUB 9000 

8030 XG=INT(RND(0)*15)+15 

8040 YG=70 

8050 XH=INTCRND(0)*45)+100 

8060 YH=70 

8070 D=XH-XG 

8080 IF D<O THEN D=ABS(D) 

8100 XT=XH: YT=YH:GOSUB 9200 

8110 X=XG:Y=YG:GOSUB 9300 

8120 PRINT "Lochentfernung: ";D;" " 
8130 PRINT "Welcher Schlaeger (1-8) ";:INPUT C 
8135 IF C<1 OR C>8 THEN GOTO 8130 
8140 TCH)=TCH)+1 

8145 H1=9-C+INT(RND(0)*2) 

8150 HI=H1*5 

8160 D=D-Hl 

8165 IF D<O THEN HI=XH-XG 

8170 FOR Z=XG+1 TO XG+Hl 

8180 COLOR 2:PLOT Z,YH 

8200 COLOR O:PLOT Z,YH 

8210 NEXT Z 

8220 GOSUB 9400 

8230 XG=XH-D 

8240 IF ABS(XG-XH)<4 THEN GOTO 8300 
8250 IF DKO THEN GOSUB 9000: XG=XH+2*D:GOTO 8070 
8260 GOTO 8100 








SssssssssssssE 


Golfspiel 145 





SS Sale SS 


8300 
8310 


9000 
9010 
9020 
9030 
9040 
9050 


9200 
9210 
9220 
9230 
9240 
9250 


9300 
9310 
9320 
9330 
9340 
9350 
9360 


9370 
9380 
9390 


9400 
9410 


9500 
9510 
9520 
9530 


9600 
9610 
9620 


9700 
9710 
9720 


REM im Loch !1l 
GOTO 4900 


GRAPHICS 7 
SETCOLOR 0,0,0 
SETCOLOR 4,12,9 
SETCOLOR 1,0,14 
SETCOLOR 2,12,9 
RETURN 


COLOR 1 
PLOT XT,YT 
DRAWTO XT,YT-5 
DRAWTO XT+2,YT-4 
DRAWTO XT,YT-3 
RETURN 


COLOR 2 

PLOT X,Y:PLOT X+5,Y 

PLOT X+1,Y-1: PLOT X+4,Y-1 
PLOT X+1,Y-2:PLOT X+4,Y-2 


PLOT :PLOT X+3,Y-3 
PLOT '-4: DRAWIO X+4,Y-4 
PLOT LOT X+2,Y-5: 





PLOT X+3,Y-5:PLOT X+5,Y-5 
PLOT X+1,Y-6:DRAWTO X+4,Y-6 
PLOT X+2,Y-7:PLOT X+3,Y-7 
RETURN 


COLOR O 
GOTO 9310 


SOUND 0,80,10,8 
GOSUB 9600 
SOUND 0,0,0,0 
RETURN 


FOR TON=1: TO 15 
NEXT TON 
RETURN 


FOR PAUSE=1 TO 500 
NEXT PAUSE 
RETURN 




















18 Wortpuzzle 





ortpuzzle ist ein altehrwürdiges, aber ungeheuer interes- 

santes Spiel. In einem quadratischen 4 x 4-Rahmen sind 

fünfzehn frei verschiebbare Spielfelder angeordnet, das 
sechzehnte Feld bleibt frei. In diese Lücke kann eines der angrenzen- 
den Felder verschoben werden. Die Lücke befindet sich nun dort, wo 
ebennoch das gerade verschobene Feld gewesen ist. Durch weiteres 
Verschieben wandert die Lücke durch das Spielfeld, und die ur- 
sprüngliche Anordnung der Felder verändert sich von Zug zu Zug. 
Ziel des Spiels ist es, die Ausgangsstellung durch geschicktes Ver- 
schieben der Spielfelder wieder herzustellen. Als Symbole auf den 
Feldern werden Buchstaben verwendet. Auch für alte Hasen ist das 
Spiel eine Herausforderung! 


SPIELVERLAUF 

Eskönnen.nurdirektandie LückeangrenzendeSSpielsteinebewegt 
werden, diagonale Züge sind nicht möglich. Die Felder sind von 1bis 
16 durchnumeriert. Der Zug wird ausgeführt, indem dieNummer des 
Feldes eingegeben wird, das in die Lücke geschoben werden soll. 
Fehlerhafte Eingaben werden als Hilflosigkeit gedeutet, und anstelle 
eines Spielzuges erscheinen für kurze Zeit die Feldnummern. 

Mit welchen Buchstaben und Zeichen die fünfzehn Felder gefüllt 
werdensollen, kann zu Beginn des Spiels bestimmt werden. Einzuge- 
bensind drei Wörter aus vier Buchstaben und ein WortausdreiBuch- 


148 Wortpuzzle 








staben. Durch geschickte Wahl dieser Wörter kann der Schwierig- 
keitsgrad des Spiels beeinflußt werden. Je mehr gemeinsame Buch- 
staben die Ratewörter besitzen, desto einfacher wird das Puzzle. Der 
höchste Schwierigkeitsgrad ergibt sich bei Wörtern, die keine ge- 
meinsamen Buchstaben haben. Hat man keine eigenen Ideen, füllt 
der Computerdie Felder mit den Buchstaben A bisO (dassind die er- 
sten fünfzehn Buchstaben des Alphabets). 


BEISPIELE: 
niedriger Schwierigkeitsgrad MOOR BOOT TRAM RAT 
hoher Schwierigkeitsgrad GOLD ACHT NEUN IST 


Wortpuzzle 149 


Um eine gewisse «Unordnung» des Puzzles zu erreichen, werden 
die Felder nun durcheinander geschüttelt. Die Anzahl der vom Atari 
vorgenommenen Mischungen kann gewählt werden. Das Puzzle 
wird um so verzwickter, jelängerderComputerneueKombinationen 
errechnen kann. Das Puzzle ist gelöst, wenn durch geschicktes Ver- 
schieben der Spielfelder alle eingegebenen Ratewörter wieder im 
Klartext lesbar sind. 

Und nun viel Erfolg beim puzzlen! Hier zeigen sich Ausdauer und 
Kombinationsgabe! Der Computer zählt mit und gibt am Schluß die 
Gesamtzahl der benötigten Spielzüge an. 


HINWEISE 

Den senkrechten Strich in den Zeilen 2020 und 2050 erreichtman 
durch gleichzeitiges Drücken der SHIFT- und der =-Taste (Gleich- 
heitszeichen). Vor dem Strich der Zeile 2020 müssen zwei Leerzei- 
chen stehen. Ebenfalls zwei Leerzeichen gehören zwischen die An- 
führungsstriche in Zeile 3250. 

In diesem Programm werden einige der Grafikzeichen des Atari 
benötigt. Da diese Zeichen nicht im Programmlisting ausgedruckt 
werden können, sind sie in die spitzen Klammern < und > gesetzt 
(Zeilen 2080, 2130, 2180 bis 2220). In Zeile 2080 ist z.B. die Grafik- 
Buchstabenfolge RRS einzugeben, im Listing steht also <RRS>. 
Beim Erreichen der Klammer < ist der Atari zunächst in den Grafik- 
Modus zu schalten (Tasten CAPS und CTRL gemeinsam drücken), 
dann wird die Buchstabenfolge RRS eingetippt. Die Klammer > be- 
deutet Abschalten des Grafik-Modus (CPS und SHIFT gemeinsam 
drücken). 


PROGRAMMAUFBAU 
10 Definition der benötigten Felder 
40 Auswahl verschiedener Optionen des Atari für das Spiel 
120 Hauptprogramm 
170 Ende des Spiels 
500 Test, ob Ausgangszustand wieder erreicht ist 








150 Wortpuzzle 


1000 Füllen der 15 Felder mit den Buchstaben A bis O 
2000 Spielfeld 

2500 Mischen der eingegebenen Wörter 

3000 Einblenden der Feldnummern 

3500 Löschen der Feldnummern, Fehlermeldungen 
4000 Eingabe und Überprüfung des nächsten Zuges 
5000 Feststellen, in welchem Feld sich die Lücke befindet 
5500 Titelbild, einleitende Fragen 

6000 Ausführen des Spielzugs 

6500 Eingabe der Puzzlewörter 

7000 Tonerzeugung 

8000 Ausführen des Spielzuges (Fortsetzung) 


ERLÄUTERUNGEN 

Das Verschieben der Felder ist ziemlich kompliziert und benötigt 
umfangreiche Tests und Verzweigungen. Um das Programm den- 
noch überschaubar zu schreiben, ist wieder die bewährte Unterpro- 
grammtechnik angewendet worden. Die Programme werden da- 
durch zwar länger, oft sogar langsamer, sind aber wesentlich leichter 
nachvollziehbar. Einzelschritte werden transparent, Fehlersuche 
und Programmänderungen erheblich vereinfacht. 


EIGENE ERWEITERUNGEN 
Nützlich wäre eine Routine, die die eingegebenen Wörter als Hilfe- 
stellung - z.B. als Liste - einblenden kann. 


Wortpuzzle 151 





SssssssssaasE 


SUR! 


10 
20 
30 
35 
36 


40 
50 
60 
70 
85 
90 
100 
110 


120 
130 
140 
150 
160 
161 
162 
170 
177 
180 
200 
210 


500 
510 
520 
525 
530 
540 
550 
560 


100 
101 
102 
103 
104 


EM Wortpuzzle 


DIM B(20) 
DIM B$(20) 
DIM W3(20) 
DIM Ms(5) 
DIM A&(10) 


GOSUB 5500 

GOSUB 1000 

IF WR=1 THEN GOSUB 6500 
MOVE=0: ERROR=O 

PRINT CHR$(125) 

GOSUB 2000 

GOSUB 5000 

GOSUB 2500 


GOSUB 4000 

GOSUB 500 

MOVE=MOVE+1 

IF FIN<>0 THEN G0T0 120 

POSITION 0,19 

PRINT "Das Puzzle wurde in ";MOVE; 
PRINT " Zuegen geloest." 

PRINT :PRINT "Noch ein Spiel J/N "; 
INPUT AS 
IF A$="J" THEN RUN 
PRINT CHR$(125) 
POSITION 10,12 





FIN=0:K=0 

FOR I=1 TO 4 

FOR J=1 TO 4 

K=K+1l 

IF BSCB(I#4+J),BCI*A+J))C>WSCK,K) THEN FIN=1 
NEXT J 

NEXT I 

RETURN 


0 K=0 

0 FOR I=1 TO 4 

0 FOR J=1 TO 4 

0 K=K+l 

0 BSCLEN(B$)+1)=CHRS(64+K) 





Ss sssssssssssss 





| 








152 Wortpuzzle 





SsssssssasE 


1050 B(I*4+J)=K 
1060 NEXT J 
1070 NEXT I 
1080 B$(16)=" " 
1090 w$=B$ 
1100 RETURN 


2000 FOR I=0 TO 3 

2010 FOR J=0 TO 3 

2020 POSITION 10+J*3,4+I*3:PRINT " |"; 

2030 NEXT J 

2040 FOR J=0 TO 3 

2050 POSITION 10+J*3,5+1*3:PRINT " "; 

2055 PRINT BSCB((I+1)*4+J+1) ,B(CI+1)*4+J+1)); 
2056 PRINT "|"; 

2060 NEXT J 

2070 FOR J=0 TO 3 

2080 POSITION 104J*3,6+1*3: PRINT "CRRS>"; 
2090 NEXT J 

2100 NEXT I 

2110 FOR I=0 TO 11 

2120 POSITION 21,4+1:PRINT " "; 

2130 IF INT((I+1)/3)=(I+1)/3 THEN GOTO 2150 
2140 GOTO 2170 

2150 POSITION 21,4+1:PRINT "<R>"; 

2170 NEXT I 

2180 POSITION 12,15:PRINT "<X>"; 
2190 POSITION 15,15:PRINT "<X> 
2200 POSITION 18,15:PRINT "<X>' 
2210 RETURN 





2500 1S=4:J8=4:1Y=0:JY=0 

2510 FOR D=1 TO S 

2520 I=IS:J=JS 

2530 IF RND(0)>0.5 THEN GOTO 2570 
2540 I=IS+INT(RND(0)*2)*2-1 

2550 IF I>4 OR I<1 THEN I=IS:GOTO 2570 
2560 GOTO 2590 

2570 J=JS+INT(RND(0)*2)*2-1 

2580 IF J>3 OR J<1 THEN J=JS:GOTO 2520 
2590 IF I=IY AND J=JY THEN GOTO 25?0 
2600 IY=IS:JY=JS 

2510 GOSUB 6009 

2620 NEXT D 

2630 RETURN 





SssssasE SssssEe 


Wortpuzzle 


153 





Ssssssaaassssssse E 


3090 
3010 
3020 
3030 
3040 
3050 
3060 
3070 


3509 
3510 
3520 
3530 
3540 
3555 
3560 
3570 
3580 
3590 
3600 
3610 


4000 
4001 
4002 
4003 
4005 
4006 
4007 
4010 
4011 
4012 
4013 
4015 
4017 
4020 
4030 
4035 
4040 
4041 
4050 
4051 
4060 
4065 
4070 
4080 


K=0 

FOR I=0 TO 3 

FOR J=0 TO 3 

R=K+l 

POSITION 10+J*3,4+1*3: PRINT K 
NEXT J 

NEXT I 

RETURN 


FOR L=0 TO 3 
FOR P=0 TO 3 

POSITION 10+P*3,4+L*3:PRINT " " 
NEXT P 

NEXT L 

IF ERROR=O THEN RETURN 

POSITION 0,18 

FOR L=1 TO 40*5-4 

PRINT " "; 

NEXT L 

ERROR=O 

RETURN 


POSITION 2,19:PRINT "Bitte Zug eingeben: 


INPUT M$ 

POSITION 2,19: PRINT " 
een ” 20 Leerzeichen 
" THEN GOTO 4000 

IF LEN(M$)>=2 THEN GOTO 4010 
ASC1)=MEC1):MSC1)="0":M$(2)=AS(1) 
IF M$(1,1)<"0" THEN GOTO 4017 

" THEN GOTO 4017 

IF M$(2,2)<"0" THEN GOTO 4017 

IF M$(2,2)>"g" THEN GOTO 4017 
S0TO 4020 

GOSUB 3000:G0T0 4000 

M=VAL(M$) 

IF M>0 AND M<17 THEN GOTO 4070 
ERROR=1 

POSITION 2,20 

PRINT "Als Zug muss eine Nummer von" 
POSITION 2,21 

PRINT "1 bis 16 eingegeben werden" 
GOSUB 3000 

GOTO 4000 

I=INT((M-1)/4) 

J=M-I*4 











". 
; 





SsassasE sassE 


154 Wortpuzzle 





SssssssssssssE: SSEe 


4090 I=I+1 

4100 IF ABS(I-IS)+ABS(J-JS)=1 THEN GOTO 6000 
4110 GOSUB 7090 

4115 ERROR=1 

4120 POSITION 2,20 

4121 PRINT "Ein Spielstein kann nur in die" 
4130 POSITION 2,21 

4131 PRINT "Luecke geschoben werden. Ü 
4132 REM 5 Leerzeichen 

4140 GOSUB 3000 

4150 GOTO 4000 


5000 K=0 

5005 FOR L=0 TO 3 

5010 FOR P=1 TO 4 

5015 K=K+1 

5020 IF B(P+L*3)=16 THEN IS= 
5030 NEXT P 

5040 NEXT L 

5050 RETURN 





5500 PRINT CHR$(125) 

5510 POSITION 10,1 

5520 PRINT "WORTPUZZLE" 
5521 POSITION 10,2 

5522 PRINT "=== 
5530 POSITION 6,10 

5531 PRINT "Eigene Woerter eingeben J/N "; 
5540 INPUT A$ 

5560 IF Ag="J" THEN WR=1:G0TO 5600 

5570 IF AS="N" THEN WR=0:G0T0 5600 

5580 GOTO 5530 

5600 POSITION 6,15 

5605 PRINT "Wie oft Woerter mischen "; 
5610 INPUT S 

5620 IF S<1 THEN GOTO 5600 

5640 RETURN 








6000 GOSUB 3500 

6070 GOSUB 8000 

"6080 POSITION 11+(J-1)*3,5+(1-1)*3 
6081 PRINT B$(B(I*4+J),BÜIX4+J)); 
6090 POSITION 11+(JS-1)*3,5+(IS-1)*3 
6091 PRINT B$(B(IS*4+4JS) B(IS*4+J5)) 
6140 RETURN 











Wortpuzzle 


155 





sale Sssssssssssae: 


6500 
6510 
6511 
6520 
6530 
6540 
6550 
6560 
6570 
6580 
6590 
6800 
6610 
6620 
6630 
6640 
6650 
6660 
6670 
6680 
6690 
6700 
6710 
6720 


7000 
7010 
7020 
7030 
7040 


8000 
8030 
8040 
8050 
8060 


PRINT CHR$(125) 

POSITION 2,4 

PRINT "Bitte 3 Woerter mit 4 Buchstaben" 
PRINT "und 1 Wort mit 3 Buchstaben eingeben." 
PRINT "1. Wort (4 Buchst.) ";:INPUT A$ 
IF LENCA$)<>4 THEN GOTO 6530 

WS=AS 

PRINT "Erstes Wort = ";A$ 

PRINT "2. Wort (4 Buchst.) ";:INPUT A$ 
IF LEN(A$)<>4 THEN GOTO 6570 
WS(LEN(WE)+1)=AS 

PRINT "Zweites Wort = ";A$ 

PRINT "3. Wort (4 Buchst.) ";:INPUT A$ 
IF LEN(A$)<>4 THEN GOTO 6610 
WS(LENCWE)+1)=AS 

PRINT "Drittes Wort = ";A$ 

PRINT "4. Wort (3 Buchst.) ";:INPUT AS 
IF LEN(A$)<>3 THEN GOTO 6650 
WSCLENCWS)+L)=AS 

PRINT "Viertes Wort = ";A$ 

FOR Q=1 TO 100:NEXT Q 

wsC16)=" " 

B$=WS 

RETURN 


SOUND 0,80,10,8 
FOR F=1 TO 50 
NEXT F 

SOUND 0,0,0,0 
RETURN 


BCIS*4+JS)=B(I*4+J) 
BCI*4+J)=16 
T=IS:1S=I:I=T 
T=J:J=JS:JS=T 
RETURN 








SessssssssasssaaE 





19 Spielhölle 





oo 

berall sind sie zu finden: Spielautomaten, bei denen sich für 
einen geringen Einsatz die Räder und Walzen drehen, bei 
bestimmten Kombinationen kann man sich über einen mehr 
oder weniger großen Gewinn freuen. Mit dem Atari kann ein solcher 
Automat vollkommen bargeldlos betrieben werden. Das vom Com- 
puter spendierte Startkapital beträgt 1 DM, jedes Spiel kostet 10 Pfen- 
nig. Als Gewinne werden Beträge zwischen 5 und 50 Pfennig ausge- 
schüttet. Das Spiel kann jederzeit abgebrochen werden; der erspielte 
Geldbetrag wird angezeigt. Wenn das vorhandene Kapitalverbraucht 
ist, beendet der Computer als aufmerksamer Kassenwart das Spiel. 
Obwohl das Programm nicht besonders lang ist, kommen die 
Freunde effektvoller grafischer Darstellung voll auf ihre Kosten. Als 
Spielsymbole laufen am Sichtfenster des Automaten Äpfel, Bana- 
nen, Kirschen und Glocken vorbei. Beijedem Gewinn wird eine kur- 

ze Melodie gespielt. 


SPIELVERLAUF 

Die möglichen Gewinnkombinationen werden auf dem Bild- 
schirm dargestellt. Ein Gewinn wird schon dann zugeteilt, wenn im 
Sichtfenster die Symbole einer Gewinnkombination in irgendeiner 
Reihenfolge auftauchen. Kombinationen wie Apfel-Apfel-Glocke 
und Apfel-Glocke-Apfel sind für die Gewinnentscheidung gleich- 
wertig. 


158 Spielhölle 


GEWINNT 
WINNT 2° 

SEM INNT 

SEWINNT 


ver 


JETZT 3a FFo& 





Leerzeichen in einer Gewinnkombination haben eine besondere 
Bedeutung. Es spielt dann keine Rolle, welches Symbol in dem ent- 
sprechenden Feld erscheint, es darfnurnichtmit denbereits vorgege- 
benen Gewinnsymbolen übereinstimmen. Ist z.B. als Gewinnkom- 
bination Herz-Leer-Herz angezeigt, gewinnen Kombinationen wie 
Herz-Pik-Herz oder Karo-Herz-Herz. 

Das Programm wird mit RUN gestartet. Der Spielautomat muß 
mit «J» auf die entsprechende Frage hin in Gang gesetzt werden. 
Spieleinsatz und Gewinn werden automatisch verbucht. Beim vor- 
zeitigen Beenden des Spiels wird der bis dahin angefallene Gewinn 
angezeigt. 


Spielhölle 159 


PROGRAMMAUFBAU 
20 Anfangswerte 
50 Hauptprogramm 
170 Symbole, mit denen das Spiel startet (Grundstellung der 
Walzen) 
220 Drehen der Walzen 
410 Test auf Gewinn, Buchung des gewonnenen Betrags 
471 Eingerahmtes Titelbild 
481 Kopiert Zeichensatz in den RAM-Bereich 
540 Titelbild 
630 Daten für die grafische Darstellung 
740 Hauptgewinn 
800 Spielabbruch, weil das gesamte Geld verbraucht ist 
1000 Darstellung der benötigten Symbole im RAM-Zeichensatz 
1060 Umschalten auf RAM-Zeichensatz, Abschalten des Cursors, 
Tastatur als Eingabefile eröffnen 
2000 Tonerzeugung 


ERLÄUTERUNGEN 

Durch Anwendung effektvoller Tricks — wie sie die Programmier- 
sprache BASIC ermöglicht - konnte das Programm trotz der zahlrei- 
chen grafischen Darstellungen und der Bewegungsabläufe erstaun- 
lich kurz gehalten werden. 

Die Symbole der Walzen werden in Punktreihen zerlegt (Matrix- 
darstellung). Jede Punktreihe wird als Element eines Feldes gespei- 
chert. Der Effekt der drehenden Walzen wird folgendermaßen er- 
reicht: Die oberste Punktreihe im Sichtfenster wird gelöscht. Alle 
übrigen Punktreihen werden nun um einenach oben geschoben, und 
als letzte Zeile erscheint eine neue Punktreihe. So verschwindet ein 
Symbol langsam nach oben, während ein neues Symbol von unten 
nachgeschoben wird. Dieses Nachschieben geschieht einfach durch 
Erhöhen des Feldindexes. 





160 Spielhölle 


EIGENE ERWEITERUNGEN 

Der Automat könnte durch weitere Grafik zum «Einarmigen Ban- 
diten» vervollständigt werden. Weiter sollte das Drehen der Walzen 
und das Rasseln des Geldes bei der Gewinnauszahlung hörbar ge- 
macht werden. 


Spielhölle 161 








sSsssEe S]S1S1S1S1S1S15 


10 REM Spielhoelle 


20 GOSUB 630 
30 GOSUB 470 
40 M=100 


50 GOSUB 170 

60 M=M-10 

70 GOSUB 229 

80 GOSUB 410 

90 IF M=O THEN GOTO 800 

100 POSITION 1,18 

101 PRINT #6;"du hast jetzt" 
102 POSITION 8,19 

103 PRINT #65" ";M;" PFG " 
110 POSITION 1,21 

111 PRINT #65"noch einmal j/n " 
120 GET #2,A 

130 IF A=32 THEN GOTO 120 

140 IF A=74 THEN GOTO 50 
150 POSITION 1,21 

155 PRINT #6;"du kannst " 
156 REM * 

157 PRINT #6;" mitnehmen" 
160 FOR I=1 TO 1000:NEXT I 
165 STOP 











170 REM Anfangswerte fuer Walzendrehung 
180 X=INT(RND(O)*4)*10+1 

190 Y=INT(RND(O)*4)*10+1. 

200 Z=INT(RND(O)*4)*10+1 

210 RETURN 


220 REM Walzendrehung 
230 S=INT(RND(O)*2)+1 
240 FOR I=0 TO S*10 
250 FOR Q=0 TO 7 
260 PORE CH+LASCL" 





")-32)*8+Q,C(Q+X) 


270 POKE CH+(ASC("%")-32)*8+Q,C(Q+X) 
280 PORE CH+(ASC("#")-32)*8+Q,C(Q+X) 
290 NEXT Q 

310 POSITION 7,16:PRINT #6;"$ % &" 
330 IF X=40 THEN X=0 





162 Spielhölle 





SS seesls sssssaEe 


340 IF Y=40 THEN Y=O 
350 IF Z=40 THEN 2Z=0 
360 X=X+1:Y=Y+1:2=Z+1 
370 NEXT I 
380 X=X-1:Y=Y-1:2=2-1 
390 RETURN 


410 REM Bilanz nach einem Spiel 

420 IF X=1 AND Y=1 AND Z=1 THEN GOSUB 740:RETURN 
430 IF (X=11)+(Y=11)+(Z=11)=2 THEN M=M+25:GOSUB 2000 
440 IF ( 1)+(Y=21)+(2=21)=2 THEN M=M+10:G0SUB 2000 
450 IF (X=1)+(Y=1)+(Z=1)=1 THEN M=M+5:G0OSUB 2000 
460 RETURN 





470 GRAPHICS 1+16 

471 FOR I=1 TO 20:PRINT #65"*";:NEXT I 

472 FOR I=1 TO 20 

473 PRINT #65"*";:POSITION 19,I:PRINT #65"*"; 
474 NEXT I 

475 POSITION 4,2:PRINT #6;"spielhoelle"; 

476 POSITION 3,12 

477 PRINT #6;"gleich geht es"; 

478 POSITION 7,14: PRINT #6;"weiter" 

479 POSITION 0,21 

480 FOR I=1 TO 20:PRINT #65"*"; 
481 CH=(PEEK(106)-8)*256 

490 CHORG=(PEEK(756)*256) 

500 FOR I=0 TO 511 

510 POKE CH+I,PEEK(CHORG+I) 
520 NEXT I 

530 GOSUB 1000 








540 GRAPHICS 1+16:POKE 756,CH/256 

550 POSITION 5,0:PRINT #6; "spiel" 

560 POSITION 4,1:PRINT #6;"n oe 11 e" 

570 POSITION 0,4:PRINT #6;"startkapital 100 PFG" 
580 POSITION 0,6:PRINT #6;" jedes spiel kostet" 
585 POSITION 14,7:PRINT #6;"10 PFG" 

590 POSITION 0, 9:PRINT #65" I 1 GEWINNT 50 PFG" 
600 POSITION 0,10:PRINT #6;"@ @ - GEWINNT 25 PFG" 
610 POSITION O,11:PRINT #65"- [ [ GEWINNT 10 PFG" 








620 POSITION 0,12: PRINT #65"! - - GEWINNT 5 Pre" 
625 RETURN 








Spielhölle 163 





Ss sssssssSsSssss 


630 
640 
650 
860 
670 
680 
690 
700 
710 
730 


740 
750 
760 
770 
780 
790 


800 
810 
815 
820 
825 


DATA 06,10,20,36,68,207,239,230,0,0 
DATA 02,12,28,56,56,28,12,02,0,0 

DATA 24,60,60,60,126,255,24,24,0,0 
DATA 12,24,124,255,255,255,126,60,0,0 
DATA 06,10,20,36,68,207,239,230,0,0 
DIM c(48) 

FOR I=1 TO 48 

READ C:CCI)=C 

NEXT I 

RETURN 





REM Hauptgewinn 

FOR I=50 TO 200 STEP 8 
GOSUB 2000 

NEXT I 

M=M4+50 

RETURN 


REM Geld verspielt 

POSITION 0,21 

PRINT #6;"das geld ist alle" 
FOR I=1 TO 1000:NEXT I 

STOP 


1000 FOR Q=0 TO 7 


1010 POKE CH+(ASCC" 
1015 POKE CH+(ASCC"! 
1020 POKE CH+(ASCC" 








")-32)*8+Q,C(Q+10) 


1025 POKE CH+(ASC("@")-32)*8+Q,C(Q+10) 


1030 PORE CH+(ASC("E" 





-32)*8+Q,C(Q+20) 


1035 PORE CH+(ASCC"[")-32)*8+Q,C(Q+20) 
1050 NEXT Q 


1060 POKE 756,CH/256 
1070 PORE 752,1 

1080 OPEN #2,4,0,"K:" 
1090 RETURN 


2000 SOUND 0,80,10,8 
2010 FOR T=1 TO 50 
2030 NEXT T 

2040 SOUND 0,0,0,0 
2050 RETURN 





S[asssssssassssse 





20 Squash 





mußten mit mehr oder weniger breiten Schlägern über ein 

Spielfeld gebracht werden, jung und alt waren fasziniert von 
diesen neuen Anwendungen des Fernsehapparats. Eines der Spiele 
war dasals Squash bekannte 1-Mann-Tennis, dashieralsschnelleBA- 
SIC-Version für den Atari vorliegt. Alle Ballreflektionen sind aku- 
stisch untermalt. Der Schwierigkeitsgrad ist variabel und hängt von 
der Klasse des Spielers ab: Je besser man spielt, um so schwieriger 
wird es! Der Computer wird hier zum idealen, einfühlsamen Trainer. 


\ Tideospiele der ersten Generation waren Ballspiele. Die Bälle 


SPIELVERLAUF 

Der Schläger befindet sich zu Beginn des Spiels in der Mitte am un- 
teren Bildschirmrand, gesteuert wird er mit der Rechts- und Links- 
pfeiltaste. Bei jedem Treffer bewegt sich der Schläger ein Stückchen 
nach oben, was das Treffen des Balls außerordentlich erschwert. Um- 
gekehrt wird das Spiel leichter, wenn der Ball nicht getroffen wird. 
Zehn Bälle gibt es, jeder Treffer wird gezählt. Der Spielstand ist wäh- 
rend des gesamten Spiels sichtbar. 


PROGRAMMAUFBAU 
15 Initialisierung von Grafik und Variablen 
150 Squash-Spielfeld und Anzahl der Bälle 
200 Hauptprogramm 








166 


450 
620 
770 


890 
1010 
1200 


1250 
1500 


1600 
1700 


Squash 





Einrahmung des Spielfelds 

Ton der Ballreflektionen 

Bewegung des Schlägers um ein Stück nach oben oder 
unten 

Spielende und Ausgabe des Spielstandes 

Steuerung des Schlägers 

Löscht nicht mehr benötigtes Schlägerbild der vorhergehen- 
den Darstellung (linke Seite) 

Löscht nicht mehr benötigtes Schlägerbild der vorhergehen- 
den Darstellung (rechte Seite) 

Darstellung des Schlägers im RAM-Zeichensatz 
Darstellung des Balls im RAM-Zeichensatz 

Umschalten auf den RAM-Zeichensatz 


Squash 167 


2000 Tonerzeugung für Treffer 
2500 Tonerzeugung für Ballverlust 


ERLÄUTERUNGEN 

Das Programm ist klar gegliedert; es dürfte keine Schwierigkeiten 
bereiten, die einzelnen Schritte zu erkennen und verstehen. Die Zei- 
chen $ und % werden zur Darstellung von Schläger und Ball neu defi- 
niert. Zu diesem Zweck wird der Zeichensatz in den RAM-Bereich 
kopiert und entsprechend modifiziert. Die akustische Untermalung 
der Ballreflektionen (Unterprogramm ab Zeile 2000) kann abge- 
schaltet werden, indem die in Zeile 2000 stehenden Anweisungen 
durch RETURN ersetzt werden. 


168 Squash 





Ssasssssste 


10 REM Squash 


15 DIM B$(4) 

20 GRAPHICS 1+16 

21 POSITION 4,5 

22 PRINT #6;"s qua sh" 
30 POSITION 2,13 

31 PRINT #6;"einen augenblick" 
32 POSITION 8,15 

33 PRINT #6;"bitte" 

40 CH=(PEEK(106)-8)*256 
50 CHORG=(PEER(756)*256) 
60 FOR I=0 TO 511 

70 PORE CH+I ,PEEK(CHORG+I) 
80 NEXT I 

90 GOSUB 1500 

95 PRINT #5;CHR$(125) 

100 H=0 

110 TH=0 

120 D=19 

130 BALL=0 

140 c=2 





150 GOSUB 450 
190 X=10 


200 BALL=BALL+1 
210 IF BALL>1O THEN GOTO 890 

220 A=10+INT(RND(0)*6) 

230 B=2 

240 V=1 

250 wel 

260 Y=-D 

270 POSITION 3,21 

280 PRINT #6;"BALL "; 

281 REM * ” 5 Leerzeichen 
282 IF BALI<10 THEN PRINT #65" "; 
283 PRINT #6;BALL; 

290 GOSUB 1010 

300 POSITION X,Y:PRINT #6;B$ 

310 POSITION 3,22 

320 PRINT #6;"TREFFER "; 

321 IF HT<10 THEN PRINT #65" "; 
322 PRINT #6;HT 

340 GOSUB 620 








Gase IS1sls]s S1S1S1S 





Squash 


169 





SiS SE SsaosssssaslE 


360 
370 
380 
390 
400 
410 
420 
430 
440 


450 
480 
490 
500 
510 
520 
530 
540 
550 
560 
570 


620 
650 
660 
670 
680 
690 
700 
710 
740 
750 
760 


770 
780 
790 
800 
810 
820 
830 
840 
850 
860 
870 
880 


IF B+WC>Y THEN Y=D:GOTO 290 
GOSUB 2500 

POSITION X,Y 

PRINT #6;" ";:REM 3 Leerzeichen 
GOSUB 620 

POSITION A,B:PRINT #85" " 

IF D<19 THEN D=D+1 

H=0 

GOTO 200 


REM Spielfeld 

FOR I=0 TO 19 
POSITION I,0:PRINT #6 
NEXT I 

FOR I=0 TO 19 
POSITION 0,1 

PRINT #65"$"; 
POSITION 19,1 
PRINT #63" 8"; 
NEXT I 

RETURN 








REM Ballreflektion 

POSITION A,B 

PRINT #65" " 

A=a+V 

B=B+W 

IF A=18 OR A=1 THEN V=-V:GOSUB 2000 
IF B=1 THEN W=-W:GOSUB 2000 
IF B+W=Y THEN GOTO 770 
POSITION A,B 

PRINT #6;CHR$(5+128) 

RETURN 


R=A-X 

IF R<O OR R>2 THEN GOTO 740 
WW 

GOSUB 2000 

H=H+l 

HT=HT#+1 

IF H<>1 THEN GOTO 720 

H=0 

IF D>3 THEN D=D-1 

POSITION X,Y 

PRINT #65" ";:REM 3 Leerzeichen 
GOTO 760 





SSSsSSSs Ss see 


170 Squash 





SassssE E sslE 


890 FOR Z=1 TO 1000:NEXT Z 
| 900 GRAPHICS O:POSITION 10,10 
| 910 PRINT "Ergebnis:" 
911 POSITION 10,11 
912 PRINT "--————- e 
915 POSITION 10,13 
| 916 PRINT HT;" Treffer" 
940 DIM A$(1) 
950 POSITION 3,20 
955 PRINT "Noch ein Spiel J/N ";: 
970 IF A$="J" THEN RUN 
980 PRINT "" 
1000 END 





1010 K=PEEK(764) 

1040 IF K=7 AND X<16 THEN GOTO 1200 
1050 IF K=6 AND X>1 THEN GOTO 1250 
1060 RETURN 


1200 POSITION X,Y 
1210 PRINT #65" "; 
1220 X=X+1 

1240 RETURN 


1250 POSITION X+2,Y 
1260 PRINT #65" "; 
1270 X=X-1 

1290 RETURN 


1500 FOR Q=0 TO 7 
1510 POKE CH+(ASCC"$")-32)*8+Q,255 
1520 NEXT Q 


1600 POKE CH+(ASC("%")-32)*8+0,60 
1610 PORE CH+(ASC("*")-32)*8+1,126 
1620 POKE CH+(ASC("#")-32)*8+2,255 
1630 POKE CH+(ASC("%")-32)*8+3,255 
1640 POKE CH+(CASC("%")-32)*8+4,255 
1650 POKE CH+(ASC("'%")-32)*8+5,255 
| 1660 POKE CH+(ASC("%")-32)*8+6,126 
1670 POKE CH+(ASC(''%")-32)*8+7,60 




















| SSsSSs SS SS SS SSssneaseasasess 


Squash 171 





Sasse 


1700 
1710 
1720 
1730 


2000 
2010 
2020 
2030 


2500 
2510 
2520 
2530 
2540 


POKE 756,CH/256 
POKE 752,1 
BS="555" 

RETURN 


SOUND 0,80,10,8 
FOR T=1 TO 10:NEXT T 
SOUND 0,0,0,0 
RETURN 





FOR I=1 TO 10 
SOUND 0,160,10,10 
GOSUB 2000 

NEXT I 

RETURN 





SSsSsssssSsSsssssssssss 








21 Ataris Talkshow 





taris Talkshow ist eine Unterhaltungmit dem Computer. Atari 

hört sich geduldig Probleme und Wünsche an und kommen- 

tiert sie entsprechend. 
Das Hauptproblem beidiesem Spielliegt darin, zudem vom Mitspie- 
ler eingegebenen Satz einen passenden Kommentar zu finden. Der 
Kommentar muß nicht nur sinnvoll sein, auch Anrede, Konjugation 
usw. müssen stimmen. Das Beschäftigen mit einem solchen Pro- 
gramm setzt genaue Kenntnisse der verwendeten Sprache voraus. 
Die englische Sprache istaufgrundihresrelativ einfachen Aufbausfür 
ein solches Programm hervorragend geeignet. Der Dialog findet des- 
halb in Englisch statt. Eswird weiter deutlich, nach welchen Gesichts- 
punkten Antworten, auch im rein menschlichen Dialog, gegeben 
werden. Und nun viel Spaß bei «Ataris Talk-Show»! 


SPIELVERLAUF 

Atari eröffnet alle Talkshows mit der Frage nach irgendwelchen 
Problemen. Jede Antwort ist möglich, nach kurzer Denkpause hat 
der Computer eine passende Antwort gefunden, die erüberdenBild- 
schirm ausgibt. Die Eingaben an den Computer sollten mehr sein als 
ein einfaches «yes» oder «no», aber nicht über eine Zeile hinausge- 
hen. Beim Beachten dieser kleinen Regel sind lange interessante Un- 
terhaltungen möglich. 


174 Ataris Talkshow 


me about your prcblems 


ve arı awkward computer 





HINWEISE 

Beim Eingeben des Programms bzw. der Antworten ist unbedingt 
auf korrekte Schreibweise zu achten! Der Computer führt keine or- 
thografischen Tests durch. Bei Tippfehlern wird er daher keine 
Schlüsselwörter finden, nach denen er eine sinnvolle Antwort aus- 
wählen kann. Als einziges Satzzeichen ist der Apostroph erlaubt. Bit- 
te in den Eingabesätzen keine Punkte oder Kommas verwenden. 

«Ataris Talkshow» ist das längste Programm dieser Sammlung. Es 
läuft auf einem 16K-Atari nur, wenn die Diskettenlaufwerke abge- 
schaltet sind. Zum Abspeichern bitte einen Kassettenrecorder ver- 
wenden. 








Ataris Talkshow 175 


PROGRAMMAUFBAU 
20 Hauptprogramm 

1000 Begrüßung und Erläuterung des Spiels 

2000 Antworten des Mitspielers 

3000 Zerlegung der eingegebenen Sätze in Einzelwörter 

3600 Aufbereitung der Computerantworten durch Änderung von 
Konjugation und Pronomen der Eingabe 

3800 Paare von Konjugationen und Pronomen, wie sie in der Ein- 
gabe vorkommen können und für die Ausgabe benötigt 
werden 

5000 Suche nach Schlüsselwörtern im Eingabetext 

6000 Sammlung von Schlüsselwörtern 

7000 Antworten zu den Schlüsselwörtern 

9800 Ausgabe der Computerantwort auf dem Bildschirm 

9900 Aufforderung, sinnvolle Sätze einzugeben 


ERLÄUTERUNGEN 

Jeder eingegebene Satz wird zunächst in Einzelwörter zerlegt. An- 
schließend überprüft der Computer, ob Schlüsselwörter im Eingabe- 
satz vorkommen und stellt die entsprechende Antwort zusammen. 
Das Schlüsselwort «why» z.B. veranlaßt den Atari, als Antwort «So- 
me questions are difficulttoanswer» auszugeben. Wenn ein Eingabe- 
satz keines der vorgesehenen Schlüsselwörter enthält, wird einer der 
allgemeingültigen Sätze über die RND-Funktion ausgewählt. 

Das alles hört sich zwar einfach an, es kostet den Computer aber 
schon einige Mühe, aus einem Eingabesatz die Antwort zusammen- 
zubauen. Konjugation, Deklination, Wahl der Pronomen, alles soll 
stimmen! Entsprechend schwierig ist es, ein solches Programm zu 
schreiben oder zu modifizieren. Obwohl das diesem Programm zu- 
grundeliegende Prinzip nicht sehrkompliziertist, sind die Antworten 
vielfältig und erstaunlich gut auf die Eingabe abgestimmt. 











176 Ataris Talkshow 


EIGENE ERWEITERUNGEN 

Sollen weitere Schlüsselwörter eingefügt werden, ist der Aufbau 
des Unterprogramms ab Zeile 6000 genauestens zu beachten. Jedem 
Schlüsselwort ist eine Zeilennummer zugeordnet, in der die zugehö- 
rige Antwort steht. Bei einem Eingabesatz mit mehreren Schlüssel- 
wörternist daserste gefundene Schlüsselwort fürden Computermaß- 
gebend. 


Ataris Talkshow 177 





SssSsssaaasssssssss 


10 


20 
30 
40 
so 
60 
70 


REM Ataris Talkshow 


GOSUB 1000 
GOSUB 2000 
GOSUB 3000 
GOSUB 5000 
IF NUM< >30 THEN GOSUB NUM 
GOSUB 9800 


100 GOTO 30 


1000 PRINT CHR$(125) 

1005 OPEN #2,4,0,"K:" 

1010 POSITION 2,1:PRINT "Hi there!" 

1030 PRINT 

1040 PRINT "I would like you to talk to me" 
1050 PRINT "but I don’t have ears so will" 
1060 PRINT "you type sentences on ny" 

1070 PRINT "keyboard." 

1074 PRINT 

1075 PRINT "Don’t use any punctuation apart" 
1076 PRINT "from apostrophies which are" 
1078 PRINT "important." 

1080 PRINT 

1110 PRINT "When you have finished typing" 
1115 PRINT "press RETURN" 

1120 POSITION 2,18 

1121 PRINT "Tell me about your problems" 
1125 DIM P$(100),R$(50),M$(50),D$(50),C$(50) 


1130 
1140 
1150 


" 





1160 DIM N$(3*32) 
1165 FOR I=1 TO 3*32:N$(I)=" ":NEXT I 
1170 N$(1,32)="Please go on" 


1180 N$(33,64 
1190 N$(65,96 


I’m not sure I understand you" 





1200 DIM 1$(3*40) 
1205 FOR I=1 TO 3*32:I$(I)=" ":NEXT I 
1210 I$(1,40)="Let“s talk some more about your" 


1220 
1230 1$(81,120)= 





Earlier you spoke of your 
"Does that have anything to do with your 


” 





1235 DIM J$(2*32) 
1236 FOR I=1 TO 2*32:J$(I)=" ":NEXT I 


1240 J$(1,32)=" 
1250 J$(33,64 





re you just being negative" 
I see" 





1260 DIM A$(100),B5(100),2$(100) 
1280 DIM T$(50) 

1290 DIM W(20,2) 

1990 RETURN 





Sie Ssssssasase 


| 178 Ataris Talkshow 


| SasasasE jSsesssssasalals 


| 2000 Ag=" " 
2005 POKE 752,1 
2010 GET #2,B 
2030 IF B=155 THEN GOTO 2200 
2035 IF B=126 AND LENCA$)=1 THEN A$=" ":G0TO 2090 
2040 IF B=126 AND LEN(A$)>1 THEN 
AS=AS(1,LEN(A$)-1):G0TO 2090 
2050 IF B<32 OR B>123 THEN GOTO 2000 
| 2060 ASCLENCA$)+1)=CHR$(B) 
1 2090 POSITION 2,20:PRINT A$;" "; 
| 2100 G0TO 2010 
| 2200 IF A$=" " THEN GOTO 2000 
| 2201 IF A$(LEN(A$),LEN(A$))=" " THEN 
BS=AS(1,LEN(A$)-1):A$=B$:G0TO 2200 
| 2202 IF A$=R$ THEN POSITION 0,21:PRINT 
"You’re repeating yourself!": 
| 
| 
| 











PRINT :PRINT :GOTO 2000 
2203 R$=A$ 
2204 IF A$=" " THEN GOTO 2000 
2215 IF ASC(A$(2,2))<97 THEN A$(2,2)=CHR$(ASC(A$(2,2))+32) 
2220 POSITION 0,21: PRINT : 
2230 RETURN 





3000 FOR I=1 TO 20 

3002 W(I,1)=0:W(I,2)=0 

3004 NEXT I 

3005 N=1 

3010 B=0 

3020 FOR I=1 TO LEN(A$) 

3040 IF (A$(I,I)=" " OR A$(I,I)=",") AND B=0 THEN B=1 

3050 IF (A$C(I,I)c>" " AND AS(I,I)C>",") AND Be=1 THEN 
W(N,1)=1:B=2 

3060 IF (A$(I,I)=" " OR A$CI,I)=",") AND B=2 THEN 
W(N,2)=I-1: 

3070 NEXT I 

3080 W(N,2)=LEN(A$) 

3085 A$(LEN(A$)+1)=" ":REM 3 Leerzeichen 








=N+1:B=0 


3600 FOR I=1 TON 
3605 RESTORE 3800 
3610 READ B$ 
j 3620 IF B$="s" THEN GOTO 3690 
3630 IF B$<C>AS(WCI,1),WCI,2)) THEN GOTO 3680 
3640 READ C$ 
3650 2$=A$(1,W(I,1)-1):2$CLEN(Z$)+1)=C$: 
ZSCLEN(Z$)+1)=AS(WCI,2)+1) 





Ss essassE 


Ataris Talkshow 179 





3654 
3655 
3656 
3660 
3664 
3665 
3670 
3680 
3690 
3700 


3800 
3810 
3820 
3830 
3840 
3850 
3870 
3880 
3885 
3890 


5000 
5010 
5020 
5025 
5030 
5040 
5050 
5700 
5705 
5710 
5720 
5730 
5740 
5800 
5805 
5900 


8000 
6010 
6020 
6024 
6025 
6026 


A$=2$ 
W(I,2)=W(I,2)+LEN(C$)-LEN(B$) 
FOR J=I+1 TO N 
WCJ,2)=WCJ,2)+LEN(C$)-LEN(B$) 
WLI,LI=WCI,L)+LENCC$)-LEN(B$) 
NEXT J 

GOTO 3690 

READ B$ 

NEXT I 

RETURN 


DATA my,your*,I,you*,i,you* 

DATA mum,Mother,dad, Father 

DATA dreams,dream,you,I*,me,you* 

DATA your,my*,myself,yourself*,Im,you’re 
DATA yourself ‚myself*,I’m,you’re* 

DATA you’re,I’m*,am,are* 

DATA I’m,you’re* 

DATA were,was 

DATA are,am 

DATA s,s 


RESTORE 6000 

READ B$ NUM 

IF B$="s" THEN GOTO 5710 

FOR I=1 TO N 

IF A$(WCI,1),W(I,2))<>B$ THEN GOTO 5700 
T$=AS(WCI,2)+1) 

RETURN 

NEXT I 

GOTO 5010 

NUM=0 

IF M$<>"" THEN GOTO 5800 
Z=INT(RND(0)*3): P$=N$(Z*32+1,2*30+32) 
RETURN 
Z=INT(RND(0)*3):P$=1$(Z*32+1 ,X*32+32) 
PS(LEN(P$)+1)=M$ 

RETURN 


DATA computer ‚7000,machine, 7000 
DATA like,7100,same,7100,alike, 7100 
DATA if,7200,everybody 7300 

DATA can,8200,certainly,8250 

DATA how,8100,because, 8150 

DATA always, 7800 





sSsssssssEe sassalt®s 











180 


Ataris Talkshow 





sSeasssssssssssssaae 


6030 
6034 
6035 
6040 
6060 
6070 
8110 
6120 
6130 
6140 
6160 
6900 


7000 
7010 
7100 
7110 
7200 
7210 
7300 
7305 
7306 
7310 
7400 
7410 
7420 


7450 
7460 
7500 
7510 
7515 
7520 
7530 
7535 
7536 
7540 
7550 
7560 
7565 
7570 
7600 
7605 
7610 
7620 
7630 
7640 


DATA everyone, 7300 ,nobody ‚7300 
DATA was,7500 

DATA I*,8800 

DATA n0,7400 

DATA your*,7600 

DATA you’re*,8500,you*,8650 
DATA hello,8300,maybe, 8350 
DATA my* ‚8370,n0,8420 

DATA yes,8250,why,8450 

DATA perhaps, 8350,sorry,8400 
DATA what, 8450 

DATA s,0 


P$="Do computers worry you?" 
RETURN 

P$="In what way ?" 

RETURN 

P$="Why talk of possibilities" 
RETURN 

P$="Really " 

P$(LEN(P$)+1)=B$ 





IF I=N THEN GOTO 7450 

I=I+l 

IF A$(WCI,1),WCI,2))="one"THEN 
B$CLEN(B$)+1)=" one":GOTO 7300 
Z=INT(RND(0)*2): P$=J$(Z*32+1,2*32+32) 

RETURN 

IF I=N THEN GOTO 9900 

I=I+l 

IF I>N THEN GOTO 5720 

IF A$(WCI,1),WCI,2))<>"you*" THEN GOTO 7550 
P$="What if you were " 
PSCLEN(P$)+1)=A$(WCI,2)+1) 

PSCLENCPS)+1)=" ?" 

RETURN 

IF ASCWCI,1),W(I,2))<>"I*" THEN GOTO 5720 
P$="Would you like to believe I was " 
PSCLENCP$)+1)=A$(WCI,2)+1) 

RETURN 

Ill 

IF I>N THEN GOTO 7450 

IF A$(W(I,1),W(I,2))="Mother" THEN GOTO 7700 
Father" THEN G0TO 7700 
"sister" THEN GOTO 7700 
rother" THEN GOTO 7700 


















Ataris Talkshow 181 





SgssssssEe 


7650 
7660 
7670 
7680 
7690 
7692 
7694 
7695 
7700 
7710 
7800 
7810 
7900 
7905 
7920 
7924 
7926 
7930 
8000 
8010 
8030 
8100 
8110 
8150 
8160 


8200 
8205 
8210 


8220 


8230 
8250 
8260 
8300 


8310 
8350 
8360 
8370 
8375 
8380 
8400 
8410 
8450 


IF A$(WCI,1),WCI,2))="wife" THEN GOTO 7700 

IF AS$(WCI,1),W(I,2))="husband" THEN GOTO 7700 
IF A$(W(I,1),W(I,2))="children" THEN GOTO 7700 
IF LEN(T$)>10 THEN M$=T$ 

PS="your " 

P$(LEN(P$)+1)=T$ 

PS(LEN(P$)+1): 
RETURN 
P$="Tell me more about your family" 

RETURN 

P$="Give me a particular example" 

RETURN 

I=I#l 

IF I>N THEN P$="Am I what ?":RETURN 
P$="Why are you interested in whether I am 
P$CLEN(P$)+1)=AS(WCI,1)) 


on 








P$(LEN(P$)+1)=" or not?" 
RETURN 
P$="Do you think you are " 


P$(LEN(P$)+1)=AS(WCI,2)) 

RETURN 

P$="Wny do you ask ?" 

RETURN 

P$="Tell me about any other reasons" 
RETURN 


I=I+l 

IF I>N THEN PS="What ?": RETURN 

IF ASCWCI,1),WCL,2))="I*" THEN 
P$="Do you believe I can": 
P$(CLEN(P$)+1)=A$(W(I,2)+1): RETURN 
IF A$(WCI,1),W(I,2))="you*" THEN 
P$="Do you believe you can ": 
PSCLEN(P$)+1)=A$(WCI,2)+1): RETURN 
GOTO 5720 

P$="You seem very positive" 

RETURN 

P$="Pleased to Meet you - let’s talk" 
about your problems" 

RETURN 

P$="Could you try to be more positive" 
RETURN 

P$="Why are you concerned about my" 
PSCLENCP$)+1)=T$ 

RETURN 

P$="you don’t have to apologise to me" 
RETURN 


P$="Some questions are difficult to answer N 





Sasse 





182 


Ataris Talkshow 





SsasssssssE 


8460 
8500 
8505 
8510 


8520 
8530 
8540 
8550 
8560 


8570 
8580 
8590 
8600 
8610 
8615. 
8616 
8620 


8650 
8654 
8655 
8656 
8660 
8670 


8675 
8680 
8685 
8690 
8700 
8800 
8804 
8805 
8810 
8820 


8830 
8840 


RETURN 

I=I+l 

IF I>N THEN GOTO 5720 

P$="I’m sorry to hear that you are": 

PSCLEN(P$)+1)=A$(WCI,1),WCI,2)) 

IF A$(W(I,1),W(I,2))="sad" THEN RETURN 

IF A$(W(I,1),W(I,2))="unhappy" THEN RETURN 

IF ASCWCL,1),WCL,2))="depressed" 'THEN RETURN 
I,1),W(I,2))="sick" THEN RETURN 

ne you to be ": 

PS(CLEN(P$)+1)=A$CWCI,1),WCI,2)) 

IF A$(W(I,1),W(I,2))="happy" THEN RETURN 

IF AS(WCI,1),W(I,2))="elated" THEN RETURN 

IF A$(WCI,1),WCI,2))="glad" THEN RETURN 

IF A$(W(I,1),WCI,2))="better" THEN RETURN 

P$="Is it because you are " 

P$CLENCP$)+1)=ASCWCI,1)) 

PS(LEN(P$)+1)=" you would like to talk to me" 

RETURN 








IF I=1 THEN GOTO 8655 

IF A$(WCI-1,1),WCI-1,2))="are*" THEN GOTO 8000 
I=I+l 

IF I>N THEN GOTO 9900 

IF A$(W(I,1),W(I,2))="are*" THEN GOTO 8500 
P$="What would it mean if you got ": 
PSCLEN(P$)+1)=A$(W(I,2)+1) 

IF A$(W(I,1),WCI,2))="want" OR 
AS(WCI,1),WCI,2))="need" THEN RETURN 
P$="How do you know you can't": 
PSCLEN(P$)+1)=A$(WCI,2)+1) 

IF A$(W(I,1),W(I,2))="can’t" OR 
AS(WCI,1),WCI,2))="cannot" THEN RETURN 

IF A$(W(I,1),WCI,2))="feel" THEN 

P$="tell me more about how you feel":RETURN 
GOTO 5720 

IF I-1<1 THEN GOTO 8805 

IF A$(W(I,1),WCI,2))="am" THEN GOTO 7790 
I=I+l 

IF I>=N THEN P$="What am I ?":RETURN 

IF A$(W(I,1),W(I,2))="am" THEN 

"Why do you think so ?":RETURN 

"Is that what you think of me I" 
RETURN 








E SS EasEe 


Ataris Talkshow 183 





SSSSsSsSssSsssssssss 


9800 
9810 
9820 
9830 
9840 


9900 
9910 


FOR J=1 TO LEN(P$) 

IF P$(J,J)<>"'*" THEN PRINT P$(J,J); 

NEXT J 

POSITION 0,23:PRINT :PRINT :PRINT :PRINT 
RETURN 


P$="Please talk sensibly !" 
RETURN 





SSSsSssssssssssssssss 











OGEL-BUCHVERLAG WÜRZBURG 


Elektrotechnik - Elektronik - Informatik 





Tatzl, Gerfried 


Vom Taschen- 
rechner zum 
Homecomputer 


ISBN 3-8023-0772-0 


Sacht, Hans-Joachim 
Daten, Disketten, 
Dateien 


ISBN 3-8023-0751-8 


Baumann, Rüdeger 
Grafik mit dem 
Home-Computer 


ISBN 3-8023-0769-0 


Wagenknecht, Fred 
Start in die 
Computergrafik 


ISBN 3-8023-0771-2 


Pomaska, Günter 
Computergrafik 
2D- und 3D- 
Programmierung 


ISBN 3-8023-0759-3 


Guss, Thomas 


Was der ZX Spec- 
trum alles kann 
Grafik, Farbe und Musik 


ISBN 3-8023-0762-3 


Dieser BASIC-Sprachführer für Umsteiger bie: 
tet Hilfestellung beim Übergang von der Be- 
nutzung tastenprogrammierbarer Rechner un- 
terschiedlicher Rechenlogik zu Geräten, die 
mit der Programmiersprache BASIC arbeiten. 
Der Benutzer lernt gleichzeitig das Übersetzen 
von Programmen aus einem Sprachsystem in 
ein anderes. 


Wer anspruchsvollere Programme in BASIC er 
stellen will, muß mit Diskettenspeicherung ar- 
beiten. Der Verfasser erklärt, wie Betriebssy- 
steme funktionieren und wie man Dateien 
aufbaut; er hilft allen, die Programme für 
Tischcomputer entwickeln wollen und deshalb 
die Verarbeitung extern gespeicherter Daten 
benötigen. 


Der Leser dieser Einführung in die Grafik-Pro- 
grammierung benötigt lediglich Grundkennt- 
nisse im Programmieren mit BASIC. Alle Pro- 
gramme wurden auf dem Commodore 64 
entwickelt und getestet. Sie sind aber so ge- 
schrieben, daß sie sich leicht auf andere gra- 
fikfähige Mikrocomputer (z.B. Sinclair Spec- 
trum, Atari 600, Apple Il übertragen lassen). 


Das Handbuch der Computergrafik für Hobby 
und Beruf führt schrittweise in die Program- 
miertechniken zur Bilderzeugung, Animation 
und Klangerzeugung ein. Der Anwender lernt 
schnell, eigene Programme zu erstellen, und 
entdeckt die Freude an diesem Spiel der unbe 
grenzten Möglichkeiten. Detaillierte Anweisuı 
gen in BASIC erleichtern das Programmieren. 


Auch der Hobby-Anwender sollte Vorkennt- 
nisse in einer Programmiersprache und in deı 
analytischen Geometrie haben. Das verwen- 
dete HP-BASIC ist so mächtig, daß eine Impl 
mentierung in Fortran oder Pascal keine 
Schwierigkeiten macht. 


Anhand aktionsgeladener und teils kniffliger 
Spiele werden Sie mit Programmiertechniken 
und Tricks vertraut gemacht. Wenn Maschi- 
nencodeprogramme eingesetzt sind, werden 
hinreichende Erläuterungen gegeben. 


Mein Home-Computer 


Monat über 

30 Seiten 

Und . 2 Programme 
_ das bringt 
Li} _ 


‚Mein Home-Computer | 














jeden Monat: 
»: Programme für alle gängigen Home-Computer 
:* Anwendungsbeispiele aus der Praxis 
’* Marktübersicht, Tests und Kaufberatung für Zusatzgeräte 
und Home-Computer 
* Schnellkurse für Einsteiger zum Sammeln 
’** Tips und Tricks 
** Interessantes, Aktuelles und Unterhaltsames aus der 
Home-Computer-Szene 
** News, Clubnachrichten 
Holen Sie sich die neueste Ausgabe bei Ihrem Zeitschriften- 
händler oder fordern Sie ein Kennenlernheft direkt beim Vogel- 
Verlag, Leserservice HC, Postfach 67 40, 8700 Würzburg, an. 


aktiv und kreativ computern 





Die hier vorgestellten 21 Spiele sind speziell für den Atari 
geschrieben und auf den Modellen 600 XL und 800 XL getestet 
worden. Spannung, Action und bewegte Grafik stehen im 
Vordergrund. Das Buch zeigt einmal die enormen Möglichkeiten 
des Atari-BASIC, zum anderen versetzt es den Leser in die Lage, 
die Programme zu verstehen, zu analysieren und in eigene 
Programme einzubauen. Jedes Programm ist vollständig aufgelistet 
und erläutert; die Spielregeln und mögliche Erweiterungen werden 
ausführlich beschrieben. 

Anhänger bewegter Grafik — Anfänger wie Fortgeschrittene — 
kommen voll auf ihre Kosten. Je intensiver man sich mit diesem 
Buch beschäftigt, um so deutlicher offenbaren sich die hier 
angewendeten raffinierten Programmiertechniken, die die 
außergewöhnlichen Fähigkeiten des Atari voll ausnutzen. 


& VOGEL-BUCHVERLAG 
WÜRZBURG 





ISBN 3-8023-0788-7