BasiCode für Atari ST

Moderatoren: andymanone, tfhh

Antworten
Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

BasiCode für Atari ST

Beitrag von BC-Tom »

1988 schrieb Thomas Mäurer Programme zur Nutzung von BasiCode auf Atari ST: zwei Diskettenabbilder (V 245 und V276) sind unter https://joyce.de/basicode/download/auswahl.htm zu finden.
Mit BasiCode können Computer unterschiedlicher Hersteller Programme in ASCII-Form untereinander austauschen und ohne Änderungen nutzen, es muss lediglich ein für die eigene Maschine geschriebenes Programm ("Bascoder") davorgesetzt werden. Ausführlich kann man sich auf Wikipedia schlau machen und unter http://robhagemans.github.io/basicode/ kann man online BasiCode-Programme ausprobieren.
Thomas' Programme sind noch für den Standard 2 von BasiCode.
Für die 8-bit-Ataris gibt es BasiCode-3, das heißt zusätzlich Sound, Pixelgrafik und Arbeiten mit Dateien.
Weiß jemand, ob es für 16-bit-Ataris eine spätere Version der Programme für den Standard 3 oder 3C gibt?
Ich habe damit begonnen, Thomas' Bascoder zu erweitern, aber vielleicht erfinde ich das Fahrrad neu?
BC3_OMIK.jpg
Heute ist BasiCode übrigens nicht mehr zwingend mit Kassetten-Speichern und -Laden verbunden, jeder andere inzwischen nutzbare Weg ist geeignet, es geht schließlich nur um reine Textdateien.
Die Programme reizen bei weitem nicht die Möglichkeiten der 16- und 32-bit-Maschinen aus, trotzdem sind manche davon sehr interessant.

Benutzeravatar
count
Beiträge: 27
Registriert: 17.08.2021 09:28
Has thanked: 11 times
Been thanked: 5 times
Kontaktdaten:

Re: BasiCode für Atari ST

Beitrag von count »

Mir ist nur der Konverter von Thomas Mäurer bekannt.

Aber interessant ist dabei, wie der Kassettenrekorder an den ST angeschlossen wurde: Und zwar an der Modem-Schnittstelle!
Ich bin mir nicht mehr ganz sicher, aber ich meine, der Ausgang des Rekorders musste mit CTS und Masse verbunden werden.

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

acht Farben

Beitrag von BC-Tom »

Das kannst Du hier
https://joyce.de/basicode/atari/interface.htm
nachlesen. Braucht man aber wie gesagt heute nicht mehr. Im Radio werden heute keine Programme mehr gesendet und ziemlich alle, die es gab, findet man im Internet.
"Mein" Bascoder macht übrigens Fortschritte, auch mit den acht Farben (die wohl auf den kleineren Ataris leider nicht vollständig umgesetzt werden können). 😒
Screenshot des Programms "Farbtest": Farben im Text-Modus
Screenshot des Programms "Farbtest": Farben im Text-Modus

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

TUNE-Befehl in OMIKRON.BASIC

Beitrag von BC-Tom »

Mit der farbigen Pixelgrafik geht es voran:
IMG_20230220_221038.jpg
Für die Sound-Routinen brauche ich einen kleinen Hinweis. Welchen Wert von 1 bis 4095 muss ich verwenden, um den Kammerton a (440 Hz) zu erhalten? Das Handbuch schweigt sich darüber aus.

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

Sperren der BREAK-Taste / Hintergrundfarbe bei der Ausgabe des TEXT-Befehls

Beitrag von BC-Tom »

BC-Tom hat geschrieben:
20.02.2023 22:20
Welchen Wert von 1 bis 4095 muss ich verwenden, um den Kammerton a (440 Hz) zu erhalten?
42 ist die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest - aber die Antwort auf meine Frage fand ich auf einer belgischen Website: 282.
Im 80-Zeichen-Modus leider nur vier Farben nutzbar
Im 80-Zeichen-Modus leider nur vier Farben nutzbar
Der Bascoder gedeiht weiter und ist vielleicht bald auf joyce.de zu finden, doch vorläufig habe ich noch mehr Fragen:

Mit welchem POKE (oder auf welche Weise sonst) kann das Unterbrechen eines Programms blockiert/zugelassen werden?

Im Grafikbetrieb kann Text an beliebige Positionen ausgegeben werden, doch offenbar nur mit weißem Hintergrund. Läßt sich das ändern, kann eine andere Farbe für den Hintergrund des Schriftzeichens gewählt werden?

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

Zurücklesen eines Zeichens aus dem Textbildschirm

Beitrag von BC-Tom »

Da war noch eine Frage...

Einen Basic-Befehl gibt es wohl nicht dafür - gibt es vielleicht einen PEEK, um aus dem Textbildschirm ein Zeichen zurückzulesen, also in eine Stringvariable zu übergeben?
BC_3C.jpg
Es geht weiterhin um OMIKRON Basic auf dem Atari ST, der übrigens eine Supermaschine ist.

Normalerweise können BasiCode-Programme nur bis ca. 18 Kilobyte groß werden oder ein bisschen mehr, je nachdem, wieviel Platz sie noch für Variablen und Felder beanspruchen. Im Bild rechts unten läuft (unter BasiCode!) ein Programm zum Interpretieren der Zeichenbefehle an die "Turtle" der Sprache LOGO. Noch dazu ist der ST so schnell, dass die Geschwindigkeit dieses Programms auch noch im Bereich des sinnvoll Nutzbaren bleibt.

Weder Arbeitsspeicher noch Taktfrequenz der 8-bit-Heimcomputer können da mithalten, es lässt sich erst gar nicht laden oder läuft quälend langsam.

FlorianD
Beiträge: 182
Registriert: 19.08.2021 00:18
Has thanked: 21 times
Been thanked: 55 times
Kontaktdaten:

Re: BasiCode für Atari ST

Beitrag von FlorianD »

Code: Alles auswählen

LOCATE X,Y,A
gibt Dir im ATARI Basic in A das Zeichen zurück, was bei X,Y auf dem Bildschirm ist.
Oder die Farbe, wenn es ein Pixelgrafikbildschirm ist.

oder so

Code: Alles auswählen

SCRMEM=PEEK(88)+256*PEEK(89)
SCRMEM=SCRMEM+SPALTE+ZEILE*40: REM 40 bei GR.0, 20 bei GR.1 oder 2
A=PEEK(SCRMEM)
A ist dann der Bildschirmcode, das ist nicht ATASCII, sondern etwas verschoben.

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

weiter: Zeichen aus Bildschirm zurücklesen

Beitrag von BC-Tom »

Danke für die Antwort!

Auch Turbo-BASIC XL handhabt es noch so, doch beide Basics sind für die 8-bit-Modelle.

Im OMIKRON Basic positioniert LOCATE so wie auch PRINT @ lediglich den Textcursor, zumindest ist es in Version 3.5 noch so.
Anzeige des Biorhythmus
Anzeige des Biorhythmus

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

weiter: Hintergrundfarbe bei der Ausgabe des TEXT-Befehls

Beitrag von BC-Tom »

BC-Tom hat geschrieben:
20.02.2023 22:20
Im Grafikbetrieb kann Text ... offenbar nur mit weißem Hintergrund ausgegeben werden.
Läßt sich das ändern, kann eine andere Farbe für den Hintergrund des Schriftzeichens gewählt werden?
Weiß wirklich niemand eine Antwort? Auch nicht auf die anderen beiden Fragen?

Entgegen der Norm verwende ich erst einmal, um das Problem zu kaschieren, einfach weißen Hintergrund im Grafikbetrieb, das wirkt nur selten störend. Wenn doch, muss einfach der Screenshot im Nachhinein invertiert werden: siehe das Tag- und-Nacht-Bild in der vorletzten Bildreihe.

Ohne diese drei offenen Probleme ist der Bascoder weitgehend "ausgereift". Wenn man sich mit zwei weiteren Farben neben schwarz und weiß zufrieden gibt, kann man auch die feinere 80-Spalten-Auflösung nutzen (USA-Kartoffelstaaten oben im Bild).
ein paar Geografie-Beispiele, Directory, Kurzanleitung
ein paar Geografie-Beispiele, Directory, Kurzanleitung

Online
Benutzeravatar
andymanone
Beiträge: 2498
Registriert: 17.08.2021 12:34
Wohnort: Berlin - Suburban
Has thanked: 491 times
Been thanked: 789 times
Kontaktdaten:

Re: BasiCode für Atari ST

Beitrag von andymanone »

BC-Tom hat geschrieben:
16.03.2023 18:22
Weiß wirklich niemand eine Antwort? Auch nicht auf die anderen beiden Fragen?
Hi Tom,

ja, das ABBUC-Forum ist eher auf die 8-Bitter ausgerichtet, die ST-Sparte ist hier daher nur ein kleiner Teil
und mit Omikron Basic kenne ich mich leider auch nicht aus :( .

Hast du es mal in den anderen Foren:

ATARI-Forum

ATARI Home

oder:

AtariAge

probiert?

Evtl. kann dir dort jemand deine Fragen beantworten?

Beste Grüße,
andY
Ressortleiter Hardware - Save the past and use the future!© andYManOne / Demozoo / Youtube

Benutzeravatar
pps
Beiträge: 529
Registriert: 18.06.2021 23:05
Has thanked: 115 times
Been thanked: 205 times
Kontaktdaten:

Re: BasiCode für Atari ST

Beitrag von pps »

Ja, auch wenn es schon interessant ist mitzulesen. Programmieren am ST und noch dazu in (Omikron)BASIC ist echt lange her. Mein ST Profibuch habe ich auch schon lange abgegeben. Daher bin ich eher nur Mitleser.

Ich kann mich allerdings erinnern, dass die Doku zu Omikron echt dürftig war und auch sehr schade, dass es nicht so ganz für den STE ausgerichtet war, obwohl es mitgeliefert wurde. Ich habe damals schnell zu PurePascal gewechselt. Aber auch da habe ich vieles vergessen/verdrängt.
PP´s of STARSOFTBerlin__________github|meine Webseite|Demozoo

Benutzeravatar
count
Beiträge: 27
Registriert: 17.08.2021 09:28
Has thanked: 11 times
Been thanked: 5 times
Kontaktdaten:

Re: Sperren der BREAK-Taste / Hintergrundfarbe bei der Ausgabe des TEXT-Befehls

Beitrag von count »

BC-Tom hat geschrieben:
07.03.2023 16:45
Im Grafikbetrieb kann Text an beliebige Positionen ausgegeben werden, doch offenbar nur mit weißem Hintergrund. Läßt sich das ändern, kann eine andere Farbe für den Hintergrund des Schriftzeichens gewählt werden?
Ohne es überprüft zu haben, aber du könntest erst mit der Hintergrundfarbe im Reverse-Transparent-Modus Leerzeichen ausgeben und anschließend im Transparent-Modus den Text darüber:

Code: Alles auswählen

Bgcol%=2
Fgcol%=3
X%=100
Y%=100
Text$="Blahfasel"
MODE =4' Reverse Transparent
TEXT COLOR =Bgcol%
TEXT X%,Y%, SPACE$( LEN(Text$))
MODE =2' Transparent
TEXT COLOR =Fgcol%
TEXT X%,Y%,Text$

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

erstes Problem gelöst

Beitrag von BC-Tom »

andymanone hat geschrieben:
16.03.2023 18:43
(...) Hast du es mal in den anderen Foren: ATARI-Forum, ATARI Home oder AtariAge probiert? Evtl. kann dir dort jemand deine Fragen beantworten?
Danke, auch an pps. Nun ja, es ist Hobby. Falls von dort jemand hier mitliest und helfen möchte, ich bin auch hier zu erreichen: basicode@joyce.de .


count hat geschrieben:
17.03.2023 11:03
Ohne es überprüft zu haben, aber du könntest erst mit der Hintergrundfarbe im Reverse-Transparent-Modus Leerzeichen ausgeben und anschließend im Transparent-Modus den Text darüber.
Tausend Dank! Dieser Tipp war goldrichtig. Nun klappt z.B. auch hellblauer und schwarzer Text auf gelbem Untergrund oder weißer auf schwarzem:
Textausgabe im Grafik-Betrieb
Textausgabe im Grafik-Betrieb
Die kyrillische Schrift hat damit nichts zu tun, die ist mit DRAW TO gezeichnet.

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

Vorschläge für Hüllkurve?

Beitrag von BC-Tom »

Der Bascoder wird, bis auf die beiden offenen Fragen*), allmählich "rund".
Es sind noch ein paar Feinheiten einzustellen.
In diesem Zusammenhang eine neue Frage: welche Parameter für den VOLUME-Befehl nehme ich am besten, damit es annehmbar klingt (Hüllkurve, Rauschen...)?
BasiCode.jpg
Das Bild zeigt den Lauf ein und desselben BasiCode-Programms auf drei unterschiedlichen Systemen sowie ein Spiel, das von der Idee "GORILLAS" unter QBasic ähnelt.

*) Sperren von ^C und Zurücklesen von Schriftzeichen aus dem Bildschirm

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

Zeitgenossen: BasiCode und Rubik's Cube

Beitrag von BC-Tom »

Ein Programm, das mich fasziniert, ist "KUBUS" http://robhagemans.github.io/basicode/b ... _Rubik.bc2 , es hat das Lösen des ungarischen Zauberwürfels zum Thema. Wie an der Dateiendung zu sehen ist, ist es sogar noch ein BasiCode-2-Programm.
Heute ist die Entwicklung weit fortgeschritten. Auf gancube.com können wir Nachfolger des "bűvös kocka" finden und einen mit Elektronik ausgestatteten Würfel, zu dem es ein Smartphone-App gibt, die uns den Spaß am Knobeln stiehlt.
Seinerzeit stellte sich ein belgischer BasiCode-Enthusiast das Ziel, seinen 8-bit-Computer zum Hlfsmittel für das räumliche Puzzle zu machen.
Einer der Gründe für die meiner Einschätzung nach unangemessen geringe Verbreitung von BasiCode ist die Sprachbarriere. Die Überzahl der Programme kommt aus den Niederlanden, dem Ursprungsland dieses Computer-Esperantos. Als deutsch oder englisch sprechender Anwender kann man mit gutem Willen noch viel von den Texten deuten, doch ein Spanier, Franzose, Italiener, Nord- oder Osteuropäer hat keine Chance.
Vor ein paar Jahren habe ich für den JOYCE-Club das Programm eingedeutscht, jetzt kam ich auf die Idee, die Möglichkeiten der Farbversion von BasiCode zu nutzen. In den Screenshots ist die ursprüngliche Darstellung des aufgefalteten Würfels mit weißer Schrift zu sehen, dann mit farbiger Schrift und schließlich einfach mit farbigen Sternchen. Das macht das Benutzen sicher angenehmer.
BasiCode.jpg

FlorianD
Beiträge: 182
Registriert: 19.08.2021 00:18
Has thanked: 21 times
Been thanked: 55 times
Kontaktdaten:

Re: BasiCode für Atari ST

Beitrag von FlorianD »

bei ATARI Basic

Code: Alles auswählen

POSITION X,Y
setzt den Cursor auf Stelle X,Y

Code: Alles auswählen

LOCATE X,Y,A
guckt nach, was bei X,Y ist und speichert es in A (entweder Farbe oder ATASCII Code). Achtung: danach steht der Cursor bei X+1,Y

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

ATARI Basic / Omikron.Basic

Beitrag von BC-Tom »

Danke!

Der 8-bit-Atari hat schon lange BasiCode-3 (damit zwar Pixelgrafik, Dateiarbeit, Sound - aber leider, noch?, keine Farbe). Weil das ATARI Basic wohl nicht so geeignet war, schrieb Andreas Grafik einen eigenen Basic-Dialekt. viewtopic.php?p=4853#p4853 Leider habe ich nicht Erfahrung genug, diesen Maschinencode für die Erreichung der Farbfähigkeit auszubauen. Doch ich habe begonnen, einen Bascoder für Turbo Basic XL zu schreiben, wo ich allerdings auch nicht zum Abschluss komme. Buchstaben gibts wohl zunächst mit farbigem Hintergrund, doch für die Vordergrundfarbe im Textbetrieb wird es wieder kniffliger. Unterstützung willkommen, siehe Thread GRATRA02 viewtopic.php?f=7&t=1469&sid=2fdeff6d49 ... 478d8104ab .
Vielleicht kann ich dort aber auch wenigstens das KUBUS-Programm auf Farbe erweitern? Müsste ich mal anschauen. Statt des Sterns einen Punkt (mit farbigem Hintergrund) ausgeben oder gleich ein (farbiges) Leerzeichen, mal schauen.
Auf dem 16-bit-Atari bleibt es aber bei Omikron.Basic; das ST-Basic soll auch nicht so empfehlenswert sein.

Benutzeravatar
count
Beiträge: 27
Registriert: 17.08.2021 09:28
Has thanked: 11 times
Been thanked: 5 times
Kontaktdaten:

Re: BasiCode für Atari ST

Beitrag von count »

Da der ST keinen Textmodus kennt, wirst du nicht festellen können, welches Zeichen an welcher Bildschirmposition ausgegeben wurde.
Zum Sperren von ^C: Wenn du die Ein-/Ausgabe über das BIOS machst, hat ^C keinen Effekt.

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

... auch nicht schlimm

Beitrag von BC-Tom »

Danke, dann muss der Bascoder wohl "unvollständig" bleiben, aber das ist kein Drama – die beiden Funktionen werden nicht ständig gebraucht. Auch beim AMIGA https://basicode.de/sonstige/amiga.htm können wir (bisher?) kein Zeichen aus dem Bildschirm zurücklesen.

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

Vorveröffentlichung

Beitrag von BC-Tom »

Das Kubus-Programm hat noch eine kleinere Änderung bekommen und scheint jetzt fehlerfrei zu laufen. Das nehme ich zum Anlass, es gemeinsam mit dem Bascoder hier vorzustellen. Damit ist es lauffähig, also die beiden Bestandteile sind bereits zusammengefügt. Es ist (wie schon erwähnt) für Omikron.Basic geschrieben.

Code: Alles auswählen

0 REM BASICODE-Subroutinen (c) by Thomas Mäurer, Duisburger Str. 296 D-42 OB 1
1 REM Erweiterung zu Version 3C: Thomas Rademacher, JOYCE-User-AG e.V.
10 XBIOS O9,4:DEFSNG "A-Z": SCREEN 0: MODE "USA":CLIP 0,0,639+320*(O9=0),199: GOTO 1000
11 PRINT CHR$(27)"b"CHR$(CC(0)-15*(CC(0)=0)-3*(CC(0)=1)+(CC(0)=2)-2*(CC(0)=3)+2*(CC(0)=4)-7*(CC(0)=5)+3*(CC(0)=6)+7*(CC(0)=7)-8*(CC(0)=CC(1)));
12 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)+7*(CC(1)=7));
13 RETURN
20 GOSUB 100:CLEAR:XBIOS O9,4
21 SV=7:HO=79+40*(O9=0):VE=24:HG=319:VG=199
22 GOSUB 11
23 DIM CC(4):CC(0)=7:CC(1)=0:CC(2)=CC(0):CC(3)=CC(1):CC(4)=CC(1)
28 GOTO 1010
100 GOSUB 11
101 CC(2)=CC(0):CC(3)=CC(1):CLS :REM LOCATE 25,5:PRINT "BasiCode-3C fr OMIKRON.BASIC";:LOCATE 1,0:RETURN 
102 RETURN
110 GOSUB 11
111 VE=MAX(0,VE):VE=MIN(VE,24):HO=MAX(0,HO):HO=MIN(HO,39):PRINT @(Ve,Ho);
119 RETURN
120 HO= POS(0):Ve= CSRLIN -1: RETURN
150 PRINT CHR$(27)"b"CHR$(CC(0)-15*(CC(0)=0)-3*(CC(0)=1)+(CC(0)=2)-2*(CC(0)=3)+2*(CC(0)=4)-7*(CC(0)=5)+3*(CC(0)=6)+7*(CC(0)=7));
151 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)+7*(CC(1)=7));
152 PRINT " "CHR$(27)"p  ";SR$;"  "CHR$(27)"q ";
153 PRINT CHR$(27)"b"CHR$(CC(2)-15*(CC(2)=0)-3*(CC(2)=1)+(CC(2)=2)-2*(CC(2)=3)+2*(CC(2)=4)-7*(CC(2)=5)+3*(CC(2)=6)+7*(CC(2)=7));
154 PRINT CHR$(27)"c"CHR$(CC(3)-15*(CC(3)=0)-3*(CC(3)=1)+(CC(3)=2)-2*(CC(3)=3)+2*(CC(3)=4)-7*(CC(3)=5)+3*(CC(3)=6)+7*(CC(3)=7));
155 RETURN
200 IN=0:IN$=INKEY$:IF IN$<>"" THEN 211
201 IN=IN+32*((IN>96) AND (IN<127))
202 IN=IN-27*(IN=1):IN=IN-23*(IN=6):IF IN=127 THEN GOSUB 120:IF HO>0 THEN IN$=CHR$(27)+"D "+CHR$(27)+"D" ELSE IN=0:IN$=""
205 RETURN
210 GOSUB 200:IF IN$<>"" THEN RETURN ELSE 210
211 IN$=CHR$(CVIL(IN$) AND $FF):IN=ASC(IN$)
212 IN=IN-8*(IN=20)+(IN=30)-30*(IN=0)-7*(IN=24)-119*(IN=8)
216 CN=0:IF IN>96 AND IN<127 THEN IN=IN-32:CN=32
217 IF IN=127 THEN GOSUB 120:IF HO>0 THEN IN$=CHR$(8)+CHR$(16) ELSE IN$=CHR$(9)+CHR$(9):IN$=IN$+IN$+IN$+IN$:IN$=IN$+IN$+IN$+IN$+IN$+CHR$(16)
218 REM IF PEEK(&195)>&7F AND PEEK(&195)<&8A THEN IN$="":IN=-((IN-&80) MOD 10)+10*(IN=&80)
219 RETURN
220 IF((HO<0) OR (HO>39)) THEN IN=0:GOTO 249
221 IF ((VE<0) OR (VE>24)) THEN IN=0:GOTO 249
222 REM Zeichen aus Bildschirm zurcklesen
249 RETURN 
250 PRINT CHR$(7);:RETURN 
260 RV= RND(1): RETURN
270 FR= FRE(0): RETURN
280 RETURN:REM Sperren / Freigeben der Stoptaste 
300 SR$= RIGHT$( STR$(SR!), LEN( STR$(Sr!))+( LEFT$( STR$(Sr!),1)=" ")): RETURN
310 SR$="": IF SR!>=10^(Ct!-Cn!- SGN(Cn!)) THEN GOTO 318
311 IF SR!<-.5*10^-Cn! THEN Sr$="-"
312 SR$=SR$+ MID$( STR$( INT( ABS(Sr!)+.5*10^-Cn!)),2)
313 IF LEN(SR$)<CT!-CN!+(CN!<>0) THEN Sr$=" "+Sr$: GOTO 313
314 IF CN!=0 OR ABS(Sr!)>=1E+10 THEN GOTO 316
315 SR$=SR$+ MID$( STR$(1+ ABS(Sr!)- INT( ABS(Sr!))+.5*10^-Cn!),3,Cn!+1)
316 IF LEN(SR$)<CT! THEN Sr$=Sr$+" ": GOTO 316
317 IF LEN(SR$)>CT! THEN Sr$=""
318 IF LEN(SR$)<CT! THEN Sr$=Sr$+"*": GOTO 318
319 RETURN
330 FOR OF=1 TO LEN(SR$)
331 IF ASC(MID$(SR$,OF,1))>95 THEN GOSUB 340
332 NEXT OF
333 RETURN
340 OSR=ASC(MID$(SR$,OF,1))-32
341 SR$=LEFT$(SR$,OF-1)+CHR$(OSR)+MID$(SR$,OF+1)
342 RETURN
350 LPRINT SR$;:RETURN 
360 LPRINT :RETURN
400 OSP=282*2^((60-SP)/12):VOLUME 2,SV:VOLUME 2,13,512:TUNE 2,OSP
401 FOR OSD=0 TO 2560*SD:NEXT OSD:TUNE 1,0,2,0,3,0:RETURN
450 OTIME=TIMER
451 OSD=SD*30
452 GOSUB 200:IF IN=0 THEN 453 ELSE 454
453 IF OSD>TIMER-OTIME THEN 452 ELSE 457
454 SD=SD-INT((TIMER-OTIME)/30)
455 RETURN
457 SD=0:GOTO 455
500 ONF=(NF AND 1)+4
501 ON ONF+1 GOTO 502,510,515,520,516,521,516,521
516 OPEN "I",ONF,NF$:INPUT #4,OBESTAND$:IN=0:GOTO 539
521 PRINT NF$:OPEN "O",ONF,NF$:IN=0
539 RETURN
540 IN$="":IN=1:ON (ONF+2)/2 GOTO 541,551,551,551
551 IN$=OBESTAND$:IF EOF(ONF) THEN 558
552 LINE INPUT #ONF,OBESTAND$
554 IF OBESTAND$<>"" THEN OU$=MID$(OBESTAND$,1,1)
555 IF ASC(OU$)=26 THEN OBESTAND$="":IN=1:GOTO 559
557 IN=0:GOTO 559
558 IN=1
559 RETURN
560 IN=1:ON (ONF+1)/2 GOTO 561,575,575,575
575 PRINT #ONF,SR$:IN=0:RETURN
580 ON ONF+1 GOTO 582,585,590,592,591,593,591,593
582 RETURN
591 CLOSE ONF:GOTO 599     
593 PRINT #ONF,CHR$(26):PRINT #ONF,CHR$(26):CLOSE ONF 
599 RETURN
600 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)+7*(CC(1)=5)+3*(CC(1)=6)-7*(CC(1)=7));
618 CLS:REM LOCATE 25,5:PRINT "BasiCode-3C fr OMIKRON.BASIC";:LOCATE 1,0
619 RETURN
620 GOSUB 655:OPH=INT(OHO*HG):OPV=INT(OVE*VG):OPM=CN XOR 1:DRAW OPH,OPV:RETURN
630 GOSUB 655:OPH=INT(OHO*HG):OPV=INT(OVE*VG):OPM=CN XOR 1:DRAW TO OPH,OPV:RETURN
650 GOSUB 655:OVE=MIN(VE,0.972):OPV=INT(VE*VG):FOR OPT=0 TO LEN(SR$)-1:OPH=INT(OHO*HG)+OPT*8
651 OPH=MIN(OPH,631+320*(O9=0)):OPC=ASC(MID$(SR$,OPT+1,1))
652 MODE=2:TEXT OPH,OPV+6," ":TEXT OPH,OPV+6,CHR$(OPC):NEXT OPT:MODE=1:RETURN
655 OHO=MAX(0,HO):OHO=(1-(O9<>0))*MIN(OHO,0.998):OVE=MAX(0,VE):OVE=MIN(OVE,0.995)
656 TEXT COLOR=CC(0)- 1*(CC(0)=0)-3*(CC(0)=1)-4*(CC(0)=3)+(CC(0)=4)-7*(CC(0)=5)+7*(CC(0)=7)
657 LINE COLOR=CC(0)- 1*(CC(0)=0)-3*(CC(0)=1)-4*(CC(0)=3)+(CC(0)=4)-7*(CC(0)=5)+7*(CC(0)=7)
658 IF CN=0 THEN GOTO 949
659 TEXT COLOR=CC(1)-(CC(1)=0)-3*(CC(1)=1)-4*(CC(1)=3)+(CC(1)=4)-7*(CC(1)=5)+7*(CC(1)=7)
660 LINE COLOR=CC(1)-(CC(1)=0)-3*(CC(1)=1)-4*(CC(1)=3)+(CC(1)=4)-7*(CC(1)=5)+7*(CC(1)=7)
949 RETURN
950 GOSUB 100:END
1000 a=500:GOTO 20:REM kubus
1010 DIM a(9,12):a$="":GOTO 3000
1020 IF ke$="H" THEN GOTO 1080
1030 IF ke$="O" THEN GOTO 1340
1040 IF ke$="L" THEN GOTO 1600
1050 IF ke$="U" THEN GOTO 1860
1060 IF ke$="R" THEN GOTO 2120
1070 IF ke$="V" THEN GOTO 2380
1080 l=a(4,10)
1090 a(4,10)=a(6,10)
1100 a(6,10)=a(6,12)
1110 a(6,12)=a(4,12)
1120 a(4,12)=l
1130 l=a(4,11)
1140 a(4,11)=a(5,10)
1150 a(5,10)=a(6,11)
1160 a(6,11)=a(5,12)
1170 a(5,12)=l
1180 l=a(1,4)
1190 a(1,4)=a(4,9)
1200 a(4,9)=a(9,6)
1210 a(9,6)=a(6,1)
1220 a(6,1)=l
1230 l=a(1,6)
1240 a(1,6)=a(6,9)
1250 a(6,9)=a(9,4)
1260 a(9,4)=a(4,1)
1270 a(4,1)=l
1280 l=a(1,5)
1290 a(1,5)=a(5,9)
1300 a(5,9)=a(9,5)
1310 a(9,5)=a(5,1)
1320 a(5,1)=l
1330 RETURN
1340 l=a(1,4)
1350 a(1,4)=a(3,4)
1360 a(3,4)=a(3,6)
1370 a(3,6)=a(1,6)
1380 a(1,6)=l
1390 l=a(1,5)
1400 a(1,5)=a(2,4)
1410 a(2,4)=a(3,5)
1420 a(3,5)=a(2,6)
1430 a(2,6)=l
1440 l=a(4,1)
1450 a(4,1)=a(4,4)
1460 a(4,4)=a(4,7)
1470 a(4,7)=a(4,10)
1480 a(4,10)=l
1490 l=a(4,2)
1500 a(4,2)=a(4,5)
1510 a(4,5)=a(4,8)
1520 a(4,8)=a(4,11)
1530 a(4,11)=l
1540 l=a(4,3)
1550 a(4,3)=a(4,6)
1560 a(4,6)=a(4,9)
1570 a(4,9)=a(4,12)
1580 a(4,12)=l
1590 RETURN
1600 l=a(4,1)
1610 a(4,1)=a(6,1)
1620 a(6,1)=a(6,3)
1630 a(6,3)=a(4,3)
1640 a(4,3)=l
1650 l=a(4,2)
1660 a(4,2)=a(5,1)
1670 a(5,1)=a(6,2)
1680 a(6,2)=a(5,3)
1690 a(5,3)=l
1700 l=a(1,4)
1710 a(1,4)=a(6,12)
1720 a(6,12)=a(7,4)
1730 a(7,4)=a(4,4)
1740 a(4,4)=l
1750 l=a(2,4)
1760 a(2,4)=a(5,12)
1770 a(5,12)=a(8,4)
1780 a(8,4)=a(5,4)
1790 a(5,4)=l
1800 l=a(3,4)
1810 a(3,4)=a(4,12)
1820 a(4,12)=a(9,4)
1830 a(9,4)=a(6,4)
1840 a(6,4)=l
1850 RETURN
1860 l=a(7,4)
1870 a(7,4)=a(9,4)
1880 a(9,4)=a(9,6)
1890 a(9,6)=a(7,6)
1900 a(7,6)=l
1910 l=a(7,5)
1920 a(7,5)=a(8,4)
1930 a(8,4)=a(9,5)
1940 a(9,5)=a(8,6)
1950 a(8,6)=l
1960 l=a(6,1)
1970 a(6,1)=a(6,10)
1980 a(6,10)=a(6,7)
1990 a(6,7)=a(6,4)
2000 a(6,4)=l
2010 l=a(6,2)
2020 a(6,2)=a(6,11)
2030 a(6,11)=a(6,8)
2040 a(6,8)=a(6,5)
2050 a(6,5)=l
2060 l=a(6,3)
2070 a(6,3)=a(6,12)
2080 a(6,12)=a(6,9)
2090 a(6,9)=a(6,6)
2100 a(6,6)=l
2110 RETURN
2120 l=a(4,7)
2130 a(4,7)=a(6,7)
2140 a(6,7)=a(6,9)
2150 a(6,9)=a(4,9)
2160 a(4,9)=l
2170 l=a(4,8)
2180 a(4,8)=a(5,7)
2190 a(5,7)=a(6,8)
2200 a(6,8)=a(5,9)
2210 a(5,9)=l
2220 l=a(1,6)
2230 a(1,6)=a(4,6)
2240 a(4,6)=a(7,6)
2250 a(7,6)=a(6,10)
2260 a(6,10)=l
2270 l=a(2,6)
2280 a(2,6)=a(5,6)
2290 a(5,6)=a(8,6)
2300 a(8,6)=a(5,10)
2310 a(5,10)=l
2320 l=a(3,6)
2330 a(3,6)=a(6,6)
2340 a(6,6)=a(9,6)
2350 a(9,6)=a(4,10)
2360 a(4,10)=l
2370 RETURN
2380 l=a(4,4)
2390 a(4,4)=a(6,4)
2400 a(6,4)=a(6,6)
2410 a(6,6)=a(4,6)
2420 a(4,6)=l
2430 l=a(4,5)
2440 a(4,5)=a(5,4)
2450 a(5,4)=a(6,5)
2460 a(6,5)=a(5,6)
2470 a(5,6)=l
2480 l=a(3,4)
2490 a(3,4)=a(6,3)
2500 a(6,3)=a(7,6)
2510 a(7,6)=a(4,7)
2520 a(4,7)=l
2530 l=a(3,5)
2540 a(3,5)=a(5,3)
2550 a(5,3)=a(7,5)
2560 a(7,5)=a(5,7)
2570 a(5,7)=l
2580 l=a(3,6)
2590 a(3,6)=a(4,3)
2600 a(4,3)=a(7,4)
2610 a(7,4)=a(6,7)
2620 a(6,7)=l
2630 RETURN
3000 GOSUB 100
3010 ve=0:ho=8:GOSUB 110:PRINT"WILLKOMMEN BEI 'KUBUS'!"
3020 ve=1:ho=8:GOSUB 110:PRINT"======================="
3030 PRINT:PRINT:PRINT"BITTE WAEHLEN SIE"
3040 ve=6:ho=4:GOSUB 110:PRINT"A  SELBST ETWAS PROBIEREN"
3050 ve=8:ho=4:GOSUB 110
3060 PRINT"B  ICH LOESE EINE STELLUNG AUF"
3070 ve=10:ho=4:GOSUB 110:PRINT"C  SCHOENE FIGUREN"
3080 ve=12:ho=4:GOSUB 110:PRINT"D  ERKLAERUNG"
3090 ve=14:ho=4:GOSUB 110:PRINT"E  ENDE"
3100 ve=16:ho=4:GOSUB 110:GOSUB 210:t$=in$
3110 IF t$="A" THEN 6550
3120 IF t$="B" THEN 4000
3130 IF t$="C" THEN 6990
3140 IF t$="D" THEN 6060
3150 IF t$<>"E" THEN 3000
3160 GOSUB 100:PRINT"**********************"
3170 PRINT"*                    *"
3180 PRINT"*       KUBUS!       *"
3190 PRINT"*                    *"
3200 PRINT"*    GEMAAKT DOOR    *"
3210 PRINT"*                    *"
3220 PRINT"*    JAN  BROECKX    *"
3230 PRINT"*                    *"
3240 PRINT"* KARMELIETENSTR. 66 *"
3250 PRINT"*                    *"
3260 PRINT"*    2600 BERCHEM    *"
3270 PRINT"*                    *"
3280 PRINT"*       BELGIE       *"
3290 PRINT"*                    *"
3300 PRINT"**********************"
3310 GOSUB 210:GOTO 950
4000 GOSUB 100
4010 PRINT"    1  2  3  4  5  6  7  8  9 10 11 12"
4020 PRINT:PRINT 
4030 FOR i=1 TO 9:ho=0:ve=3+i:GOSUB 110
4040 PRINT i:NEXT i
4050 b=0:c=0:d=0:e=0:g=0:s=0:f=1:a=0
4060 ve=19:ho=0:GOSUB 110
4070 PRINT"GELB=Y / ROT=R / GRUEN=G / MAGENTA=O"
4080 ve=20:ho=0:GOSUB 110
4090 PRINT"WEISS=W / BLAU=B / FEHLER=F / MENU=M"
4100 ON f GOTO 4110,4120,4130,4140,4150,4160,4320
4110 i1=1:i2=3:j1=4:j2=6:GOTO 4170
4120 i1=4:i2=6:j1=1:j2=3:GOTO 4170
4130 i1=4:i2=6:j1=4:j2=6:GOTO 4170
4140 i1=4:i2=6:j1=7:j2=9:GOTO 4170
4150 i1=4:i2=6:j1=10:j2=12:GOTO 4170
4160 i1=7:i2=9:j1=4:j2=6
4170 aa=0:ff=0:FOR i=i1 TO i2:FOR j=j1 TO j2
4175 IF a<0 THEN gt=4000:GOTO 4312:REM NEXT j:NEXT i:GOTO 4000
4180 IF a$="F" THEN gt=4000:aa=1:GOTO 4312:REM NEXT j:NEXT i:a$="":GOTO 4000
4190 IF a$="M" THEN gt=3000:aa=1:GOTO 4312:REM NEXT j:NEXT i:a$="":GOTO 3000
4200 ho=j*3:ve=i+3:GOSUB 110:PRINT"??"
4210 ve=21:ho=0:GOSUB 110
4220 PRINT"WELCHE FARBE HAT DAS FELD (";i;",";j;")  ?";
4230 GOSUB 210:a$=in$:PRINT a$
4231 IF a$="Y" THEN CC(0)=6
4232 IF a$="O" THEN CC(0)=3
4233 IF a$="B" THEN CC(0)=1
4234 IF a$="R" THEN CC(0)=2
4235 IF a$="G" THEN CC(0)=4
4240 ho=j*3:ve=i+3:GOSUB 110:PRINT "**":CC(0)=7
4250 IF a$="F" THEN gt=4000:aa=1:GOTO 4312:REM NEXT j:NEXT i:a$="":GOTO 4000
4260 IF a$="M" THEN gt=3000:aa=1:GOTO 4312:REM NEXT j:NEXT i:a$="":GOTO 3000
4270 GOSUB 10000:IF a=0 THEN 4200
4280 IF a<0 THEN gt=4000:GOTO 4312:REM NEXT j:NEXT i:GOTO 4000
4290 a(i,j)=a
4300 ve=21:ho=35:GOSUB 110:PRINT"  "
4310 gt=4100:ff=1:REM NEXT j:NEXT i:f=f+1:GOTO 4100
4312 NEXT j:NEXT i:IF ff=1 THEN f=f+1:ff=0
4314 IF aa=1 THEN a$="":aa=0
4316 IF gt=3000 THEN GOTO 3000
4318 IF gt=4100 THEN GOTO 4100
4319 GOTO 4000
4320 REM
4330 REM juist zetten van rb
4340 po=a(2,5):p=a(5,5):GOSUB 10130:IF a<0 THEN 4000
4350 IF a>6 THEN 4380
4360 ON a GOSUB 10420,10430,10440,10450,10460,10470
4370 GOTO 4390
4380 ON a-6 GOSUB 10480,10490,10500,10510,10520,10530
4390 GOSUB 10540
4400 po=a(2,5):p=a(5,2):GOSUB 10130:IF a<0 THEN 4000
4410 IF a>6 THEN 4440
4420 ON a GOSUB 10670,10450,10680,1,10690,10700
4430 GOTO 4450
4440 ON a-6 GOSUB 10710,10720,10730,10740,10750,10760
4450 GOSUB 10540
4460 po=a(2,5):p=a(5,11):GOSUB 10130:IF a<0 THEN 4000
4470 IF a>6 THEN 4500
4480 ON a GOSUB 10450,1,10770,1,10780,10790
4490 GOTO 4510
4500 ON a-6 GOSUB 10800,10810,10820,10830,10840,10850
4510 GOSUB 10540
4520 po=a(2,5):p=a(5,8):GOSUB 10130:IF a<0 THEN 4000
4530 IF a>6 THEN 4560
4540 ON a GOSUB 1,1,10450,1,10860,10870
4550 GOTO 4570
4560 ON a-6 GOSUB 10880,10890,10900,10910,10920,10930
4570 GOSUB 10540
4580 po=a(5,2):p=a(5,11):GOSUB 10130:IF a<0 THEN 4000
4590 IF a>6 THEN 4620
4600 ON a GOSUB 1,1,1,1,10450,10940
4610 GOTO 4630
4620 ON a-6 GOSUB 10950,10960,10970,10980,10990,11000
4630 GOSUB 10540
4640 po=a(5,2):p=a(5,5):GOSUB 10130:IF a<0 THEN 4000
4650 IF a>6 THEN 4680
4660 ON a GOSUB 1,1,1,1,1,10450
4670 GOTO 4690
4680 ON a-6 GOSUB 11010,11020,11030,11040,11050,11060
4690 GOSUB 10540
4700 po=a(5,5):p=a(5,8):GOSUB 10130:IF a<0 THEN 4000
4710 IF a>6 THEN 4740
4720 ON a GOSUB 1,1,1,1,1,1
4730 GOTO 4750
4740 ON a-6 GOSUB 10450,11070,11080,11090,11100,11110
4750 GOSUB 10540
4760 po=a(5,8):p=a(5,11):GOSUB 10130:IF a<0 THEN 4000
4770 ON a GOSUB 1,1,1,1,1,1,1,10450,11120,11130,11140,11150
4780 GOSUB 10540
4790 po=a(8,5):p=a(5,5):GOSUB 10130:IF a<0 THEN 4000
4800 ON a GOSUB 1,1,1,1,1,1,1,1,10450,11160,11170,11180
4810 GOSUB 10540
4820 po=a(8,5):p=a(5,2):GOSUB 10130:IF a<0 THEN 4000
4830 ON a GOSUB 1,1,1,1,1,1,1,1,1,10450,11190,11200
4840 GOSUB 10540
4850 po=a(8,5):p=a(5,8):GOSUB 10130:IF a<0 THEN 4000
4860 ON a GOSUB 1,1,1,1,1,1,1,1,1,1,10450,11210
4870 GOSUB 10540
4880 REM juist orienteren van rb
4890 IF a(3,5)<>a(2,5) THEN a$="-VLV-LO-L-OL":GOSUB 10540
4900 IF a(2,4)<>a(2,5) THEN a$="-LHL-HO-H-OH":GOSUB 10540
4910 IF a(1,5)<>a(2,5) THEN a$="-HRH-RO-R-OR":GOSUB 10540
4920 IF a(2,6)<>a(2,5) THEN a$="-VOV-OR-O-RO":GOSUB 10540
4930 IF a(5,6)<>a(5,5) THEN a$="-UVU-VR-V-RV":GOSUB 10540
4940 IF a(6,8)<>a(5,8) THEN a$="-HUH-UR-U-RU":GOSUB 10540
4950 IF a(5,9)<>a(5,8) THEN a$="-URU-RH-R-HR":GOSUB 10540
4960 IF a(6,11)<>a(5,11) THEN a$="-LUL-UH-U-HU":GOSUB 10540
4970 IF a(5,12)<>a(5,11) THEN a$="-UHU-HL-H-LH":GOSUB 10540
4980 IF a(8,4)<>a(8,5) THEN a$="-VUV-UL-U-LU":GOSUB 10540
4990 IF a(5,4)<>a(5,5) THEN a$="-ULU-LV-L-VL":GOSUB 10540
5000 IF a(6,5)<>a(5,5) THEN 5360
5010 REM juist zetten van hb
5020 po=a(2,5):p=a(5,5):m=a(5,2):GOSUB 11220:IF a<0 THEN 4000
5030 IF a>4 THEN 5060
5040 ON a GOSUB 10450,11450,11460,11470
5050 GOTO 5070
5060 ON a-4 GOSUB 11480,11490,11500,11510
5070 GOSUB 10540
5080 po=a(2,5):p=a(5,8):m=a(5,5):GOSUB 11220:IF a<0 THEN 4000
5090 ON a GOSUB 1,10450,11520,11530,11540,11550,11560,11570
5100 GOSUB 10540
5110 po=a(2,5):p=a(5,2):m=a(5,11):GOSUB 11220:IF a<0 THEN 4000
5120 ON a GOSUB 1,1,10450,11580,11590,11600,11610,11620
5130 GOSUB 10540
5140 po=a(5,11):p=a(5,8):m=a(2,5):GOSUB 11220:IF a<0 THEN 4000
5150 ON a GOSUB 1,1,1,10450,11630,11640,11650,11660
5160 GOSUB 10540
5170 po=a(5,2):p=a(5,5):m=a(8,5):GOSUB 11220:IF a<0 THEN 4000
5180 ON a GOSUB 1,1,1,1,10450,11670,11680,11690
5190 GOSUB 10540
5200 po=a(5,5):p=a(5,8):m=a(8,5):GOSUB 11220:IF a<0 THEN 4000
5210 ON a GOSUB 1,1,1,1,1,10450,11700,11710
5220 GOSUB 10540
5230 po=a(5,2):p=a(8,5):m=a(5,11):GOSUB 11220:IF a<0 THEN 4000
5240 ON a GOSUB 1,1,1,1,1,1,10450,11160
5250 IF a$="O" THEN 5360
5260 REM juist orienteren van hb
5270 IF (a(3,4)<>a(2,5)) OR (a(4,4)<>a(5,5)) THEN 5300
5280 IF a(4,3)<>a(5,2) THEN 5300
5290 GOTO 5390
5300 IF (a(3,4)=a(4,4)) OR (a(3,4)=a(4,3)) THEN 5360
5310 IF a(4,4)=a(4,3) THEN 5360
5320 IF a(4,4)=a(2,5) THEN a$="O-H-O-L-HL-V-LHLOH-OV"
5330 IF a(4,4)=a(2,5) THEN GOSUB 10540:GOTO 5270
5340 IF a(4,3)=a(2,5) THEN a$="-VO-H-O-L-HLV-LHLOH-O"
5350 IF a(4,3)=a(2,5) THEN GOSUB 10540:GOTO 5270
5360 GOSUB 100:ve=21:ho=0:GOSUB 110
5370 PRINT"KEINE LOESUNG MOEGLICH!!"
5380 PRINT:PRINT"<RETURN> DRUECKEN";:INPUT T$:GOTO 3000
5390 IF a(3,6)<>a(2,5) OR a(4,7)<>a(5,8) THEN 5420
5400 IF a(4,6)<>a(5,5) THEN 5420
5410 GOTO 5490
5420 IF a(3,6)=a(4,7) OR a(3,6)=a(4,6) THEN 5360
5430 IF a(4,6)=a(4,7) THEN 5360
5440 IF a(4,7)=a(2,5) THEN a$="O-L-O-V-LV-R-VLVOL-OR"
5450 IF a(4,7)=a(2,5) THEN GOSUB 10540:GOTO 5390
5460 IF a(4,6)=a(2,5) THEN a$="-RO-L-O-V-LVR-VLVOL-O"
5470 IF a(4,6)=a(2,5) THEN GOSUB 10540:GOTO 5390
5480 GOTO 5360
5490 IF a(1,6)<>a(2,5) OR a(4,10)<>a(5,11) THEN 5520
5500 IF a(4,9)<>a(5,8) THEN 5520
5510 GOTO 5590
5520 IF a(1,6)=a(4,10) OR a(1,6)=a(4,9) THEN 5360
5530 IF a(4,10)=a(4,9) THEN 5360
5540 IF a(4,10)=a(2,5) THEN a$="O-V-O-R-VR-H-RVROV-OH"
5550 IF a(4,10)=a(2,5) THEN GOSUB 10540:GOTO 5490
5560 IF a(4,9)=a(2,5) THEN a$="-HO-V-O-R-VRH-RVROV-O"
5570 IF a(4,9)=a(2,5) THEN GOSUB 10540:GOTO 5490
5580 GOTO 5360
5590 IF a(1,4)<>a(2,5) OR a(4,1)<>a(5,2) THEN 5620
5600 IF a(4,12)<>a(5,11) THEN 5620
5610 GOTO 5690
5620 IF a(1,4)=a(4,1) OR a(1,4)=a(4,12) THEN 5360
5630 IF a(4,1)=a(4,12) THEN 5360
5640 IF a(4,12)=a(2,5) THEN a$="-HL-V-L-O-VOH-OVOLV-L"
5650 IF a(4,12)=a(2,5) THEN GOSUB 10540:GOTO 5590
5660 IF a(4,1)=a(2,5) THEN a$="L-V-L-O-VO-H-OVOLV-LH"
5670 IF a(4,1)=a(2,5) THEN GOSUB 10540:GOTO 5590
5680 GOTO 5360
5690 IF a(6,1)<>a(5,2) OR a(9,4)<>a(8,5) THEN 5720
5700 IF a(6,12)<>a(5,11) THEN 5720
5710 GOTO 5790
5720 IF a(6,1)=a(9,4) OR a(6,1)=a(6,12) THEN 5360
5730 IF a(9,4)=a(6,12) THEN 5360
5740 IF a(6,12)=a(8,5) THEN a$="U-V-U-L-VL-H-LVLUV-UH"
5750 IF a(6,12)=a(8,5) THEN GOSUB 10540:GOTO 5690
5760 IF a(6,1)=a(8,5) THEN a$="-HU-V-U-L-VLH-LVLUV-U"
5770 IF a(6,1)=a(8,5) THEN GOSUB 10540:GOTO 5690
5780 GOTO 5360
5790 IF a(9,6)<>a(8,5) OR a(6,9)<>a(5,8) THEN 5820
5800 IF a(6,10)<>a(5,11) THEN 5820
5810 GOTO 5890
5820 IF a(9,6)=a(6,9) OR a(9,6)=a(6,10) THEN 5360
5830 IF a(6,9)=a(6,10) THEN 5360
5840 IF a(6,9)=a(8,5) THEN a$="U-L-U-H-LH-R-HLHUL-UR"
5850 IF a(6,9)=a(8,5) THEN GOSUB 10540:GOTO 5790
5860 IF a(6,10)=a(8,5) THEN a$="-RU-L-U-H-LHR-HLHUL-U"
5870 IF a(6,10)=a(8,5) THEN GOSUB 10540:GOTO 5790
5880 GOTO 5360
5890 IF a(6,6)<>a(5,5) OR a(7,6)<>a(8,5) THEN 5920
5900 IF a(6,7)<>a(5,8) THEN 5920
5910 GOTO 5990
5920 IF a(6,6)=a(7,6) OR a(6,6)=a(6,7) THEN 5360
5930 IF a(7,6)=a(6,7) THEN 5360
5940 IF a(6,6)=a(8,5) THEN a$="=-H-U-R-HR-V-RHRUH-UV"
5950 IF a(6,6)=a(8,5) THEN GOSUB 10540:GOTO 5890
5960 IF a(6,7)=a(8,5) THEN a$="-VU-H-U-R-HRV-RHRUH-U"
5970 IF a(6,7)=a(8,5) THEN GOSUB 10540:GOTO 5890
5980 GOTO 5360
5990 IF a(6,3)<>a(5,2) OR a(6,4)<>a(5,5) THEN 5360
6000 IF a(7,4)<>a(8,5) THEN 5360
6010 ho=0:ve=20:GOSUB 110
6020 PRINT"                         "
6030 ho=0:ve=20:GOSUB 110:PRINT"VOILA!!":ho=0
6040 ve=22:GOSUB 110:PRINT"<RETURN> DRUECKEN";
6050 GOSUB 210:GOTO 3000
6060 REM uitleg
6070 GOSUB 100
6080 PRINT"IN DIESEM PROGRAMM WIRD DER WUERFEL"
6090 PRINT"WIE FOLGT ANGEZEIGT:":PRINT 
6100 GOSUB 120:ho=ho+17:GOSUB 110:PRINT"OO":PRINT 
6110 GOSUB 120:ho=ho+14:GOSUB 110:PRINT"LL VV RR HH":PRINT 
6120 GOSUB 120:ho=ho+17:GOSUB 110:PRINT"UU"
6130 PRINT:PRINT"IN DER MITTE SEHEN SIE DIE IHNEN ZU-"
6140 PRINT"GEWANDTE SEITE (V), DARUEBER DIE OBER-"
6150 PRINT"SEITE (O) UND DARUNTER DIE UNTER-"
6160 PRINT"SEITE (U). 'L' UND 'R' STEHEN FUER"
6170 PRINT"LINKE UND RECHTE SEITE. DIE RUECK-"
6180 PRINT"SEITE (H) IST GANZ RECHTS.":PRINT 
6190 PRINT"<RETURN> DRUECKEN";:GOSUB 210:GOSUB 100
6200 PRINT"WENN SIE Z.B. IN DIESEM PROGRAMM 'O'"
6210 PRINT"LESEN, HEISST DAS, DASS SIE DIE OBERE"
6220 PRINT"EBENE UM EINE VIERTELDREHUNG IM UHR-"
6230 PRINT"ZEIGERSINN DREHEN SOLLEN, '-O' GEGEN"
6240 PRINT"DEN UHRZEIGERSINN (JEWEILS AUF DIE"
6250 PRINT"BETREFFENDE SEITE GESEHEN). '-LV' BE-"
6260 PRINT"DEUTET, DIE LINKE EBENE UM 90 GRAD"
6270 PRINT"GEGEN DEN UHRZEIGERSINN UND DIE VORDERE"
6280 PRINT"EBENE IM UHRZEIGERSINN ZU DREHEN.":PRINT
6283 PRINT"BITTE BEACHTEN SIE, DASS SIE DIE"
6286 PRINT"POSITION DER MITTELFELDER DER"
6290 PRINT"WUERFELSEITEN NIE VERAENDERN!":PRINT 
6300 PRINT"<RETURN> DRUECKEN";:GOSUB 210:GOSUB 100
6310 PRINT"WERDEN SIE NICHT UNRUHIG, WENN SIE"
6320 PRINT"LAENGERE ZEIT KEINE VERAENDERUNG"
6330 PRINT"SEHEN. DANN IST DER COMPUTER MIT"
6340 PRINT"AUFWENDIGEREN BERECHNUNGEN"
6343 PRINT"BESCHAEFTIGT (Z.B. BEI DEN"
6346 PRINT"'SCHOENEN FIGUREN')":PRINT
6350 PRINT"DIE FARBEN :":PRINT 
6360 PRINT"R = ROT":PRINT"O = MAGENTA"
6370 PRINT"B = BLAU":PRINT"G = GRUEN"
6380 PRINT"Y = GELB":PRINT"W = WEISS"
6390 ve=20:ho=0:GOSUB 110:PRINT"<RETURN> DRUECKEN";
6400 GOSUB 210:GOTO 3000
6410 REM zelf wat proberen
6420 ho=0:ve=20:GOSUB 110
6430 PRINT"SIND SIE FERTIG ? (J/N)";:GOSUB 210
6440 t$=in$:ho=0:ve=20:GOSUB 110
6450 PRINT"                       "
6460 IF t$="N" THEN 6630
6470 IF t$<>"J" THEN 6420
6480 ho=0:ve=20:GOSUB 110
6490 PRINT"SOLL ICH LOESEN ? (J/N)";:GOSUB 210
6500 t$=in$:ho=0:ve=20:GOSUB 110
6510 PRINT"                             "
6520 IF t$="N" THEN 3000
6530 IF t$<>"J" THEN 6480
6540 GOTO 4320
6550 GOSUB 100:GOSUB 6570:GOSUB 6760
6560 GOTO 6630
6570 FOR i=1 TO 3:FOR j=4 TO 6:a(i,j)=1:NEXT j:NEXT i
6580 FOR i=4 TO 6:FOR j=1 TO 3:a(i,j)=2:NEXT j:NEXT i
6590 FOR i=4 TO 6:FOR j=4 TO 6:a(i,j)=3:NEXT j:NEXT i
6600 FOR i=4 TO 6:FOR j=7 TO 9:a(i,j)=4:NEXT j:NEXT i
6610 FOR i=4 TO 6:FOR j=10 TO 12:a(i,j)=5:NEXT j:NEXT i
6620 FOR i=7 TO 9:FOR j=4 TO 6:a(i,j)=6:NEXT j:NEXT i:RETURN
6630 ho=0:ve=20:GOSUB 110:PRINT"WELCHE EBENE ?";
6640 GOSUB 210:ke$=in$:PRINT ke$;
6650 IF ke$="-" THEN GOSUB 210:t$=in$:PRINT t$:ke$=ke$+t$
6660 IF ke$="H" OR ke$="O" OR ke$="L" THEN 6710
6670 IF ke$="U" OR ke$="R" OR ke$="V" THEN 6710
6680 IF ke$="-H" OR ke$="-O" OR ke$="-L" THEN 6710
6690 IF ke$="-U" OR ke$="-R" OR ke$="-V" THEN 6710
6700 GOTO 6630
6710 ho=0:ve=20:GOSUB 110:PRINT"                "
6720 IF left$(ke$,1)="-" THEN ke$=right$(ke$,1)
6730 FOR h=1 TO 3:GOSUB 1020:NEXT h
6740 GOSUB 6760:GOTO 6410
6750 GOSUB 1020:GOSUB 6760:GOTO 6410
6760 REM tekenroutine
6770 ve=0:ho=0:GOSUB 110
6780 PRINT"    1  2  3  4  5  6  7  8  9 10 11 12"
6790 PRINT:PRINT 
6800 FOR i=1 TO 9:ho=0:ve=3+i:GOSUB 110:PRINT i:NEXT i
6810 FOR i=1 TO 6
6820 ON i GOTO 6830,6840,6850,6860,6870,6880
6830 b=1:c=3:d=4:e=6:GOTO 6890
6840 b=4:c=6:d=1:e=3:GOTO 6890
6850 b=4:c=6:d=4:e=6:GOTO 6890
6860 b=4:c=6:d=7:e=9:GOTO 6890
6870 b=4:c=6:d=10:e=12:GOTO 6890
6880 b=7:c=9:d=4:e=6
6890 FOR j=b TO c:FOR k=d TO e
6900 ho=k*3:ve=j+3:GOSUB 110
6910 ON a(j,k) GOTO 6920,6930,6940,6950,6960,6970
6920 CC(0)=6:GOSUB 110:PRINT"**":CC(0)=7:GOTO 6980
6930 CC(0)=3:GOSUB 110:PRINT"**":CC(0)=7:GOTO 6980
6940 CC(0)=1:GOSUB 110:PRINT"**":CC(0)=7:GOTO 6980
6950 CC(0)=2:GOSUB 110:PRINT"**":CC(0)=7:GOTO 6980
6960 CC(0)=4:GOSUB 110:PRINT"**":CC(0)=7:GOTO 6980
6970 PRINT"**"
6980 GOSUB 110:NEXT k:NEXT j:NEXT i:RETURN
6990 GOSUB 100:GOSUB 6570:ve=0:ho=11
7000 GOSUB 110:PRINT"SCHOENE FIGUREN!":ve=1:ho=11
7010 GOSUB 110:PRINT"================":PRINT 
7020 PRINT"BITTE WAEHLEN SIE":PRINT 
7030 GOSUB 11720:PRINT"A  BLOEMEN":PRINT 
7040 GOSUB 11720:PRINT"B  4-STIP":PRINT 
7050 GOSUB 11720:PRINT"C  6-STIP":PRINT 
7060 GOSUB 11720:PRINT"D  GUIRLANDE":PRINT 
7070 GOSUB 11720:PRINT"E  TTTT":PRINT 
7080 GOSUB 11720:PRINT"F  TEMPELPOORTEN":PRINT 
7090 GOSUB 11720:PRINT"G  SLANG":PRINT 
7100 GOSUB 11720:PRINT"H  WORM":PRINT 
7110 GOSUB 11720:PRINT"I  (WEITER)":PRINT 
7120 GOSUB 11720:GOSUB 210:t$=in$:GOSUB 100
7130 IF t$="A" THEN a$="LLRROOUUVVHH":GOSUB 10540:GOTO 6990
7140 IF t$="B" THEN a$="O-URRLLO-UVVHH":GOSUB 10540:GOTO 6990
7150 IF t$="C" THEN a$="L-RO-UV-HL-R":GOSUB 10540:GOTO 6990
7160 IF t$="D" THEN a$="RLVHRLVHRLVH":GOSUB 10540:GOTO 6990
7170 IF t$="E" THEN a$="U-OVVHH-U-ORRLL-URRLLOORRLL-U"
7180 IF t$="E" THEN GOSUB 10540:GOTO 6990
7190 IF t$="F" THEN a$="U-OVVHH-U-ORRLL-URRLLOORRLL-UOO"
7200 IF t$="F" THEN GOSUB 10540:GOTO 6990
7210 IF t$="G" THEN a$="H-LR-URRUL-R-HRROHHU-ORR-U"
7220 IF t$="G" THEN GOSUB 10540:GOTO 6990
7230 IF t$="H" THEN a$="ROVV-U-LRV-H-U-V-"
7240 IF t$="H" THEN a1$="RVVROOVRR-V-R-O-VOOVR"
7250 IF t$="H" THEN a$=a$+a1$
7260 IF t$="H" THEN GOSUB 10540:GOTO 6990
7270 IF t$<>"I" THEN 6990
7280 GOSUB 100:PRINT"BITTE WAEHLEN SIE":PRINT 
7290 GOSUB 11720:PRINT"A  DUBBELKUBUS":PRINT 
7300 GOSUB 11720:PRINT"B  2-RINGEN":PRINT 
7310 GOSUB 11720:PRINT"C  4-ZETTER":PRINT 
7320 GOSUB 11720:PRINT"D  4-ZETPLUSSER":PRINT 
7330 GOSUB 11720:PRINT"E  4-PLUSSER":PRINT 
7340 GOSUB 11720:PRINT"F  6-PLUSSER":PRINT 
7350 GOSUB 11720:PRINT"G  HAHAHAHAHAHA":PRINT 
7360 GOSUB 11720:PRINT"H  12-ELLER":PRINT 
7370 GOSUB 11720:PRINT"I  PUINHOOP":PRINT 
7380 GOSUB 11720:PRINT"J  (WEITER)":PRINT 
7390 GOSUB 11720:GOSUB 210:t$=in$:GOSUB 100
7400 IF t$="A" THEN a$="H-LUULU-VUUV-U-H-VR"
7410 IF t$="A" THEN a1$="OO-R-OHOO-HOV":a$=a$+a1$
7420 IF t$="A" THEN GOSUB 10540:GOTO 6990
7430 IF t$="B" THEN a$="H-LR-URRUL-R-HRROHHU-OHHLROO-L-RHH-U"
7440 IF t$="B" THEN GOSUB 10540:GOTO 6990
7450 IF t$="C" THEN a$="RLVHRLVHRLVHOOUU"
7460 IF t$="C" THEN GOSUB 10540:GOTO 6990
7470 IF t$="D" THEN a$="-R-LOU-R-LOU-R-LOUVVHH"
7480 IF t$="D" THEN GOSUB 10540:GOTO 6990
7490 IF t$="E" THEN a$="VHRLVHRLVHRRLLVHRLVHRLVH"
7500 IF t$="E" THEN GOSUB 10540:GOTO 6990
7510 IF t$="F" THEN a$="RVVHHRRLLOOVVHHRRLLUU-R"
7520 IF t$="F" THEN GOSUB 10540:GOTO 6990
7530 IF t$="G" THEN a$="RLVHOOUURRLLVH-R-L"
7540 IF t$="G" THEN GOSUB 10540:GOTO 6990
7550 IF t$="H" THEN a$="RLOU-V-HRL":GOSUB 10540:GOTO 6990
7560 IF t$="I" THEN a$="VVHHRRLLOO-UROLU"
7570 IF t$="I" THEN GOSUB 10540:GOTO 6990
7580 IF t$<>"J" THEN 7280
7590 GOSUB 100:PRINT"BITTE WAEHLEN SIE":PRINT 
7600 GOSUB 11720:PRINT"A  MUILKORVEN":PRINT 
7610 GOSUB 11720:PRINT"B  Y-ER":PRINT 
7620 GOSUB 11720:PRINT"C  VLAGGEN":PRINT 
7630 GOSUB 11720:PRINT"D  WIJZER":PRINT 
7640 GOSUB 11720:PRINT"E  MENU":PRINT 
7650 GOSUB 11720:GOSUB 210:t$=in$:GOSUB 100
7660 IF t$="A" THEN a$="LOORRUUOORRUU-L":GOSUB 10540:GOTO 6990
7670 IF t$="B" THEN a$="RRLLUURRLLVVHHUUVVHHUU"
7680 IF t$="B" THEN GOSUB 10540:GOTO 6990
7690 IF t$="C" THEN a$="RRVURR-URHH-RURR-U-VRR"
7700 IF t$="C" THEN a1$="LLHULL-ULVV-LULL-U-H"
7710 IF t$="C" THEN a2$="LLVVRRLLHHR"
7720 IF t$="C" THEN a$=a$+a1$+a2$
7730 IF t$="C" THEN GOSUB 10540:GOTO 6990
7740 IF t$="D" THEN a$="-RV-ULV-LUL-V-L-VRHHRU-R-"
7750 IF t$="D" THEN a1$="URU-R-U-OUR-U-RUR-U-ROHH"
7760 IF t$="D" THEN a$=a$+a1$:GOSUB 10540:GOTO 6990
7770 IF t$<>"E" THEN 7590
7780 GOTO 3000
10000 REM
10010 IF a$="Y" THEN a=1:b=b+1:GOTO 10080
10020 IF a$="B" THEN a=3:c=c+1:GOTO 10080
10030 IF a$="W" THEN a=6:d=d+1:GOTO 10080
10040 IF a$="R" THEN a=4:e=e+1:GOTO 10080
10050 IF a$="G" THEN a=5:g=g+1:GOTO 10080
10060 IF a$="O" THEN a=2:s=s+1:GOTO 10080
10070 a=0:RETURN
10080 IF b>9 OR c>9 OR d>9 THEN 10110
10090 IF e>9 OR g>9 OR s>9 THEN 10110
10100 RETURN
10110 PRINT"NICHT RICHTIG!! NEU ANFANGEN!!"
10120 FOR k=1 TO 1000:NEXT k:a=-1:RETURN
10130 REM zoeken rb
10140 s=0
10150 IF a(1,5)<>po THEN 10170
10160 IF a(4,11)=p THEN a=1:RETURN
10170 IF a(2,4)<>po THEN 10190
10180 IF a(4,2)=p THEN a=2:RETURN
10190 IF a(2,6)<>po THEN 10210
10200 IF a(4,8)=p THEN a=3:RETURN
10210 IF a(3,5)<>po THEN 10230
10220 IF a(4,5)=p THEN a=4:RETURN
10230 IF a(5,1)<>po THEN 10250
10240 IF a(5,12)=p THEN a=5:RETURN
10250 IF a(5,3)<>po THEN 10270
10260 IF a(5,4)=p THEN a=6:RETURN
10270 IF a(5,6)<>po THEN 10290
10280 IF a(5,7)=p THEN a=7:RETURN
10290 IF a(5,9)<>po THEN 10310
10300 IF a(5,10)=p THEN a=8:RETURN
10310 IF a(7,5)<>po THEN 10330
10320 IF a(6,5)=p THEN a=9:RETURN
10330 IF a(8,4)<>po THEN 10350
10340 IF a(6,2)=p THEN a=10:RETURN
10350 IF a(8,6)<>po THEN 10370
10360 IF a(6,8)=p THEN a=11:RETURN
10370 IF a(9,5)<>po THEN 10390
10380 IF a(6,11)=p THEN a=12:RETURN
10390 s=s+1:IF s=1 THEN a=po:po=p:p=a:GOTO 10150
10400 PRINT:PRINT"LEIDER FALSCH!! NOCH EINMAL!!"
10410 FOR k=1 TO 1500:NEXT k:a=-1:RETURN
10420 a$="OO":RETURN
10430 a$="-O":RETURN
10440 a$="O":RETURN
10450 a$="":RETURN
10460 a$="L-O":RETURN
10470 a$="V":RETURN
10480 a$="-V":RETURN
10490 a$="-RO":RETURN
10500 a$="VV":RETURN
10510 a$="-LV":RETURN
10520 a$="R-V":RETURN
10530 a$="UUVV":RETURN
10540 REM uitvoeren van a$
10550 IF LEN(a$)=0 THEN RETURN
10560 FOR n=1 TO LEN(a$)
10570 IF MID$(a$,n,1)="-" THEN ke$=MID$(a$,n+1,1)
10580 IF MID$(a$,n,1)="-" THEN FOR h=1 TO 3:GOSUB 1020
10590 IF NOT (MID$(a$,n,1)="-") THEN 10600
10595 NEXT h
10600 IF MID$(a$,n,1)="-" THEN n=n+1:GOTO 10620
10610 IF MID$(a$,n,1)<>"-" THEN ke$=MID$(a$,n,1):GOSUB 1020
10620 NEXT n:ve=19:ho=0:GOSUB 110:FOR i=1 TO 4
10630 PRINT"                                    ":NEXT i
10640 ve=20:ho=0:GOSUB 110:PRINT a$:GOSUB 6760
10650 ve=22:ho=0:GOSUB 110:PRINT"<RETURN> DRUECKEN";
10660 GOSUB 210:RETURN
10670 a$="HL":RETURN
10680 a$="RHHL":RETURN
10690 a$="L":RETURN
10700 a$="-L":RETURN
10710 a$="-VOV":RETURN
10720 a$="HHL":RETURN
10730 a$="-ULL":RETURN
10740 a$="LL":RETURN
10750 a$="UULL":RETURN
10760 a$="-HL":RETURN
10770 a$="RH":RETURN
10780 a$="-H":RETURN
10790 a$="-O-LO":RETURN
10800 a$="OR-O":RETURN
10810 a$="H":RETURN
10820 a$="UUHH":RETURN
10830 a$="-UHH":RETURN
10840 a$="UHH":RETURN
10850 a$="HH":RETURN
10860 a$="-O-HO":RETURN
10870 a$="OV-O":RETURN
10880 a$="R":RETURN
10890 a$="-R":RETURN
10900 a$="URR":RETURN
10910 a$="UURR":RETURN
10920 a$="RR":RETURN
10930 a$="-URR":RETURN
10940 a$="-VHUUV-H":RETURN
10950 a$="VHUU-V-H":RETURN
10960 a$="RU-R-LUL":RETURN
10970 a$="-L-UL":RETURN
10980 a$="H-U-H":RETURN
10990 a$="HU-H":RETURN
11000 a$="-LUL":RETURN
11010 a$="-RLUU-LR":RETURN
11020 a$="RLUU-R-L":RETURN
11030 a$="L-U-L":RETURN
11040 a$="-VUV":RETURN
11050 a$="-V-UV":RETURN
11060 a$="LU-L":RETURN
11070 a$="V-HUUH-V":RETURN
11080 a$="-RUR":RETURN
11090 a$="VU-V":RETURN
11100 a$="V-U-V":RETURN
11110 a$="-R-UR":RETURN
11120 a$="RU-R":RETURN
11130 a$="-H-UH":RETURN
11140 a$="-HUH":RETURN
11150 a$="R-U-R":RETURN
11160 a$="U":RETURN
11170 a$="-U":RETURN
11180 a$="UU":RETURN
11190 a$="-R-H-R-URUV-U-VHR":RETURN
11200 a$="-R-URUV-U-V":RETURN
11210 a$="-V-UVUL-U-L":RETURN
11220 REM zoeken van hb
11230 s=0
11240 IF a(3,4)<>po OR a(4,4)<>p THEN 11260
11250 IF a(4,3)=m THEN a=1:RETURN
11260 IF a(3,6)<>po OR a(4,7)<>p THEN 11280
11270 IF a(4,6)=m THEN a=2:RETURN
11280 IF a(1,4)<>po OR a(4,1)<>p THEN 11300
11290 IF a(4,12)=m THEN a=3:RETURN
11300 IF a(1,6)<>po OR a(4,10)<>p THEN 11320
11310 IF a(4,9)=m THEN a=4:RETURN
11320 IF a(6,3)<>po OR a(6,4)<>p THEN 11340
11330 IF a(7,4)=m THEN a=5:RETURN
11340 IF a(6,6)<>po OR a(6,7)<>p THEN 11360
11350 IF a(7,6)=m THEN a=6:RETURN
11360 IF a(6,1)<>po OR a(9,4)<>p THEN 11380
11370 IF a(6,12)=m THEN a=7:RETURN
11380 IF a(6,9)<>po OR a(6,10)<>p THEN 11400
11390 IF a(9,6)=m THEN a=8:RETURN
11400 s=s+1:ON s GOTO 11410,11410,11420,11430,11430,11440
11410 a=po:po=p:p=m:m=a:GOTO 11240
11420 a=po:po=m:m=a:GOTO 11240
11430 a=po:po=p:p=m:m=a:GOTO 11240
11440 GOTO 10400
11450 a$="VR-V-LV-R-VL":RETURN
11460 a$="-HLV-LHL-V-L":RETURN
11470 a$="-LOR-OLO-R-O":RETURN
11480 a$="-LVR-VLV-R-V":RETURN
11490 a$="VO-V-UV-O-VU":RETURN
11500 a$="LV-L-HL-V-LH":RETURN
11510 a$="ULV-L-HL-V-LH-U":RETURN
11520 a$="OV-O-HO-V-OH":RETURN
11530 a$="-HOV-OHO-V-O":RETURN
11540 a$="-RVL-VRV-L-V":RETURN
11550 a$="VL-V-RV-L-VR":RETURN
11560 a$="U-RVL-VRV-L-V-U":RETURN
11570 a$="-ORU-ROR-U-R":RETURN
11580 a$="-OHU-HOH-U-H":RETURN
11590 a$="LO-L-UL-O-LU":RETURN
11600 a$="-ULO-L-UL-O-LUU":RETURN
11610 a$="-ULO-LUL-O-L":RETURN
11620 a$="-LHR-HLH-R-H":RETURN
11630 a$="U-HRV-RHR-V-R-U":RETURN
11640 a$="-HRV-RHR-V-R":RETURN
11650 a$="HO-H-UH-O-HU":RETURN
11660 a$="-UHO-HUH-O-H":RETURN
11670 a$="UR-U-LU-R-UL":RETURN
11680 a$="-LUR-ULU-R-U":RETURN
11690 a$="UV-U-HU-V-UH":RETURN
11700 a$="-RUL-URU-L-U":RETURN
11710 a$="UL-U-RU-L-UR":RETURN
11720 GOSUB 120:ho=4:GOSUB 110:RETURN
30000 REM ************************
30010 REM *        kubus!        *
30020 REM *     gemaakt door     *
30030 REM *     jan  broeckx     *
30040 REM *  karmelietenstr. 66  *
30050 REM *     2600 berchem     *
30060 REM *        belgie        *
30061 REM *    deutsch 2019,     *
30062 REM *     farbe 2023:      *
30063 REM *  thomas rademacher   *
30064 REM *  fr.-engels-str. 44  *
30065 REM *     99086 erfurt     *
30066 REM *     deutschland      *
30070 REM ************************
30080 REM
30090 REM copyright  nos hilversum
Um mich nicht mit fremden Federn zu schmücken, möchte ich noch einmal darauf hinweisen, dass das Programm von einem belgischen Autor stammt, ich habe es lediglich ins Deutsche übertragen und nun auch auf Farbbetrieb umgeschrieben.

Der Bascoder ist noch nicht vollständig, wenn es so weit ist, werde ich ein Diskettenabbild mit noch mehr Beispielprogrammen zusammenstellen und mich hier melden.

Das Bild zeigt das gleiche Programm auf dem Amiga, dort natürlich mit dessen Bascoder.
Amiga.png
Amiga.png (21.62 KiB) 2100 mal betrachtet

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

Asche auf mein Haupt ...

Beitrag von BC-Tom »

Das Programm im vorigen Beitrag löst nicht alle unter A erzeugten oder B eingegebenen Aufgaben.
Ein Computerfreund machte mich darauf aufmerksam, dass Zeile 5940 einen Fehler enthalten muss. So ist es tatsächlich - und ich hatte ihn 2007 selbst hineingebracht, als ich das Programm von BasiCode nach ASCII umarbeitete (um es für Computer nutzbar zu machen, deren Basics auf Leerzeichen nach Schlüsselwörtern pochen und dergleichen).

Code: Alles auswählen

0 REM BASICODE-Subroutinen (c) by Thomas Mäurer, Duisburger Str. 296 D-42 OB 1
1 REM Erweiterung zu Version 3C: Thomas Rademacher, JOYCE-User-AG e.V.
10 XBIOS O9,4:DEFSNG "A-Z": SCREEN 0: MODE "USA":CLIP 0,0,639+320*(O9=0),199: GOTO 1000
11 PRINT CHR$(27)"b"CHR$(CC(0)-15*(CC(0)=0)-3*(CC(0)=1)+(CC(0)=2)-2*(CC(0)=3)+2*(CC(0)=4)-7*(CC(0)=5)+3*(CC(0)=6)+7*(CC(0)=7)-8*(CC(0)=CC(1)));
12 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)+7*(CC(1)=7));
13 RETURN
20 GOSUB 100:CLEAR:XBIOS O9,4
21 SV=7:HO=79+40*(O9=0):VE=24:HG=319:VG=199
22 GOSUB 11
23 DIM CC(4):CC(0)=7:CC(1)=0:CC(2)=CC(0):CC(3)=CC(1):CC(4)=CC(1)
28 GOTO 1010
100 GOSUB 11
101 CC(2)=CC(0):CC(3)=CC(1):CLS :REM LOCATE 25,5:PRINT "BasiCode-3C fr OMIKRON.BASIC";:LOCATE 1,0:RETURN 
102 RETURN
110 GOSUB 11
111 VE=MAX(0,VE):VE=MIN(VE,24):HO=MAX(0,HO):HO=MIN(HO,39):PRINT @(Ve,Ho);
119 RETURN
120 HO= POS(0):Ve= CSRLIN -1: RETURN
150 PRINT CHR$(27)"b"CHR$(CC(0)-15*(CC(0)=0)-3*(CC(0)=1)+(CC(0)=2)-2*(CC(0)=3)+2*(CC(0)=4)-7*(CC(0)=5)+3*(CC(0)=6)+7*(CC(0)=7));
151 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)+7*(CC(1)=7));
152 PRINT " "CHR$(27)"p  ";SR$;"  "CHR$(27)"q ";
153 PRINT CHR$(27)"b"CHR$(CC(2)-15*(CC(2)=0)-3*(CC(2)=1)+(CC(2)=2)-2*(CC(2)=3)+2*(CC(2)=4)-7*(CC(2)=5)+3*(CC(2)=6)+7*(CC(2)=7));
154 PRINT CHR$(27)"c"CHR$(CC(3)-15*(CC(3)=0)-3*(CC(3)=1)+(CC(3)=2)-2*(CC(3)=3)+2*(CC(3)=4)-7*(CC(3)=5)+3*(CC(3)=6)+7*(CC(3)=7));
155 RETURN
200 IN=0:IN$=INKEY$:IF IN$<>"" THEN 211
201 IN=IN+32*((IN>96) AND (IN<127))
202 IN=IN-27*(IN=1):IN=IN-23*(IN=6):IF IN=127 THEN GOSUB 120:IF HO>0 THEN IN$=CHR$(27)+"D "+CHR$(27)+"D" ELSE IN=0:IN$=""
205 RETURN
210 GOSUB 200:IF IN$<>"" THEN RETURN ELSE 210
211 IN$=CHR$(CVIL(IN$) AND $FF):IN=ASC(IN$)
212 IN=IN-8*(IN=20)+(IN=30)-30*(IN=0)-7*(IN=24)-119*(IN=8)
216 CN=0:IF IN>96 AND IN<127 THEN IN=IN-32:CN=32
217 IF IN=127 THEN GOSUB 120:IF HO>0 THEN IN$=CHR$(8)+CHR$(16) ELSE IN$=CHR$(9)+CHR$(9):IN$=IN$+IN$+IN$+IN$:IN$=IN$+IN$+IN$+IN$+IN$+CHR$(16)
218 REM IF PEEK(&195)>&7F AND PEEK(&195)<&8A THEN IN$="":IN=-((IN-&80) MOD 10)+10*(IN=&80)
219 RETURN
220 IF((HO<0) OR (HO>39)) THEN IN=0:GOTO 249
221 IF ((VE<0) OR (VE>24)) THEN IN=0:GOTO 249
222 REM Zeichen aus Bildschirm zurcklesen
249 RETURN 
250 PRINT CHR$(7);:RETURN 
260 RV= RND(1): RETURN
270 FR= FRE(0): RETURN
280 RETURN:REM Sperren / Freigeben der Stoptaste 
300 SR$= RIGHT$( STR$(SR!), LEN( STR$(Sr!))+( LEFT$( STR$(Sr!),1)=" ")): RETURN
310 SR$="": IF SR!>=10^(Ct!-Cn!- SGN(Cn!)) THEN GOTO 318
311 IF SR!<-.5*10^-Cn! THEN Sr$="-"
312 SR$=SR$+ MID$( STR$( INT( ABS(Sr!)+.5*10^-Cn!)),2)
313 IF LEN(SR$)<CT!-CN!+(CN!<>0) THEN Sr$=" "+Sr$: GOTO 313
314 IF CN!=0 OR ABS(Sr!)>=1E+10 THEN GOTO 316
315 SR$=SR$+ MID$( STR$(1+ ABS(Sr!)- INT( ABS(Sr!))+.5*10^-Cn!),3,Cn!+1)
316 IF LEN(SR$)<CT! THEN Sr$=Sr$+" ": GOTO 316
317 IF LEN(SR$)>CT! THEN Sr$=""
318 IF LEN(SR$)<CT! THEN Sr$=Sr$+"*": GOTO 318
319 RETURN
330 FOR OF=1 TO LEN(SR$)
331 IF ASC(MID$(SR$,OF,1))>95 THEN GOSUB 340
332 NEXT OF
333 RETURN
340 OSR=ASC(MID$(SR$,OF,1))-32
341 SR$=LEFT$(SR$,OF-1)+CHR$(OSR)+MID$(SR$,OF+1)
342 RETURN
350 LPRINT SR$;:RETURN 
360 LPRINT :RETURN
400 OSP=282*2^((60-SP)/12):VOLUME 2,SV:VOLUME 2,13,512:TUNE 2,OSP
401 FOR OSD=0 TO 2560*SD:NEXT OSD:TUNE 1,0,2,0,3,0:RETURN
450 OTIME=TIMER
451 OSD=SD*30
452 GOSUB 200:IF IN=0 THEN 453 ELSE 454
453 IF OSD>TIMER-OTIME THEN 452 ELSE 457
454 SD=SD-INT((TIMER-OTIME)/30)
455 RETURN
457 SD=0:GOTO 455
500 ONF=(NF AND 1)+4
501 ON ONF+1 GOTO 502,510,515,520,516,521,516,521
516 OPEN "I",ONF,NF$:INPUT #4,OBESTAND$:IN=0:GOTO 539
521 PRINT NF$:OPEN "O",ONF,NF$:IN=0
539 RETURN
540 IN$="":IN=1:ON (ONF+2)/2 GOTO 541,551,551,551
551 IN$=OBESTAND$:IF EOF(ONF) THEN 558
552 LINE INPUT #ONF,OBESTAND$
554 IF OBESTAND$<>"" THEN OU$=MID$(OBESTAND$,1,1)
555 IF ASC(OU$)=26 THEN OBESTAND$="":IN=1:GOTO 559
557 IN=0:GOTO 559
558 IN=1
559 RETURN
560 IN=1:ON (ONF+1)/2 GOTO 561,575,575,575
575 PRINT #ONF,SR$:IN=0:RETURN
580 ON ONF+1 GOTO 582,585,590,592,591,593,591,593
582 RETURN
591 CLOSE ONF:GOTO 599     
593 PRINT #ONF,CHR$(26):PRINT #ONF,CHR$(26):CLOSE ONF 
599 RETURN
600 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)+7*(CC(1)=5)+3*(CC(1)=6)-7*(CC(1)=7));
618 CLS:REM LOCATE 25,5:PRINT "BasiCode-3C fr OMIKRON.BASIC";:LOCATE 1,0
619 RETURN
620 GOSUB 655:OPH=INT(OHO*HG):OPV=INT(OVE*VG):OPM=CN XOR 1:DRAW OPH,OPV:RETURN
630 GOSUB 655:OPH=INT(OHO*HG):OPV=INT(OVE*VG):OPM=CN XOR 1:DRAW TO OPH,OPV:RETURN
650 GOSUB 655:OVE=MIN(VE,0.972):OPV=INT(VE*VG):FOR OPT=0 TO LEN(SR$)-1:OPH=INT(OHO*HG)+OPT*8
651 OPH=MIN(OPH,631+320*(O9=0)):OPC=ASC(MID$(SR$,OPT+1,1))
652 MODE=2:TEXT OPH,OPV+6," ":TEXT OPH,OPV+6,CHR$(OPC):NEXT OPT:MODE=1:RETURN
655 OHO=MAX(0,HO):OHO=(1-(O9<>0))*MIN(OHO,0.998):OVE=MAX(0,VE):OVE=MIN(OVE,0.995)
656 TEXT COLOR=CC(0)- 1*(CC(0)=0)-3*(CC(0)=1)-4*(CC(0)=3)+(CC(0)=4)-7*(CC(0)=5)+7*(CC(0)=7)
657 LINE COLOR=CC(0)- 1*(CC(0)=0)-3*(CC(0)=1)-4*(CC(0)=3)+(CC(0)=4)-7*(CC(0)=5)+7*(CC(0)=7)
658 IF CN=0 THEN GOTO 949
659 TEXT COLOR=CC(1)-(CC(1)=0)-3*(CC(1)=1)-4*(CC(1)=3)+(CC(1)=4)-7*(CC(1)=5)+7*(CC(1)=7)
660 LINE COLOR=CC(1)-(CC(1)=0)-3*(CC(1)=1)-4*(CC(1)=3)+(CC(1)=4)-7*(CC(1)=5)+7*(CC(1)=7)
949 RETURN
950 GOSUB 100:END
1000 a=500:GOTO 20:REM kubus
1010 DIM a(9,12):a$="":GOTO 3000
1020 IF ke$="H" THEN GOTO 1080
1030 IF ke$="O" THEN GOTO 1340
1040 IF ke$="L" THEN GOTO 1600
1050 IF ke$="U" THEN GOTO 1860
1060 IF ke$="R" THEN GOTO 2120
1070 IF ke$="V" THEN GOTO 2380
1080 l=a(4,10)
1090 a(4,10)=a(6,10)
1100 a(6,10)=a(6,12)
1110 a(6,12)=a(4,12)
1120 a(4,12)=l
1130 l=a(4,11)
1140 a(4,11)=a(5,10)
1150 a(5,10)=a(6,11)
1160 a(6,11)=a(5,12)
1170 a(5,12)=l
1180 l=a(1,4)
1190 a(1,4)=a(4,9)
1200 a(4,9)=a(9,6)
1210 a(9,6)=a(6,1)
1220 a(6,1)=l
1230 l=a(1,6)
1240 a(1,6)=a(6,9)
1250 a(6,9)=a(9,4)
1260 a(9,4)=a(4,1)
1270 a(4,1)=l
1280 l=a(1,5)
1290 a(1,5)=a(5,9)
1300 a(5,9)=a(9,5)
1310 a(9,5)=a(5,1)
1320 a(5,1)=l
1330 RETURN
1340 l=a(1,4)
1350 a(1,4)=a(3,4)
1360 a(3,4)=a(3,6)
1370 a(3,6)=a(1,6)
1380 a(1,6)=l
1390 l=a(1,5)
1400 a(1,5)=a(2,4)
1410 a(2,4)=a(3,5)
1420 a(3,5)=a(2,6)
1430 a(2,6)=l
1440 l=a(4,1)
1450 a(4,1)=a(4,4)
1460 a(4,4)=a(4,7)
1470 a(4,7)=a(4,10)
1480 a(4,10)=l
1490 l=a(4,2)
1500 a(4,2)=a(4,5)
1510 a(4,5)=a(4,8)
1520 a(4,8)=a(4,11)
1530 a(4,11)=l
1540 l=a(4,3)
1550 a(4,3)=a(4,6)
1560 a(4,6)=a(4,9)
1570 a(4,9)=a(4,12)
1580 a(4,12)=l
1590 RETURN
1600 l=a(4,1)
1610 a(4,1)=a(6,1)
1620 a(6,1)=a(6,3)
1630 a(6,3)=a(4,3)
1640 a(4,3)=l
1650 l=a(4,2)
1660 a(4,2)=a(5,1)
1670 a(5,1)=a(6,2)
1680 a(6,2)=a(5,3)
1690 a(5,3)=l
1700 l=a(1,4)
1710 a(1,4)=a(6,12)
1720 a(6,12)=a(7,4)
1730 a(7,4)=a(4,4)
1740 a(4,4)=l
1750 l=a(2,4)
1760 a(2,4)=a(5,12)
1770 a(5,12)=a(8,4)
1780 a(8,4)=a(5,4)
1790 a(5,4)=l
1800 l=a(3,4)
1810 a(3,4)=a(4,12)
1820 a(4,12)=a(9,4)
1830 a(9,4)=a(6,4)
1840 a(6,4)=l
1850 RETURN
1860 l=a(7,4)
1870 a(7,4)=a(9,4)
1880 a(9,4)=a(9,6)
1890 a(9,6)=a(7,6)
1900 a(7,6)=l
1910 l=a(7,5)
1920 a(7,5)=a(8,4)
1930 a(8,4)=a(9,5)
1940 a(9,5)=a(8,6)
1950 a(8,6)=l
1960 l=a(6,1)
1970 a(6,1)=a(6,10)
1980 a(6,10)=a(6,7)
1990 a(6,7)=a(6,4)
2000 a(6,4)=l
2010 l=a(6,2)
2020 a(6,2)=a(6,11)
2030 a(6,11)=a(6,8)
2040 a(6,8)=a(6,5)
2050 a(6,5)=l
2060 l=a(6,3)
2070 a(6,3)=a(6,12)
2080 a(6,12)=a(6,9)
2090 a(6,9)=a(6,6)
2100 a(6,6)=l
2110 RETURN
2120 l=a(4,7)
2130 a(4,7)=a(6,7)
2140 a(6,7)=a(6,9)
2150 a(6,9)=a(4,9)
2160 a(4,9)=l
2170 l=a(4,8)
2180 a(4,8)=a(5,7)
2190 a(5,7)=a(6,8)
2200 a(6,8)=a(5,9)
2210 a(5,9)=l
2220 l=a(1,6)
2230 a(1,6)=a(4,6)
2240 a(4,6)=a(7,6)
2250 a(7,6)=a(6,10)
2260 a(6,10)=l
2270 l=a(2,6)
2280 a(2,6)=a(5,6)
2290 a(5,6)=a(8,6)
2300 a(8,6)=a(5,10)
2310 a(5,10)=l
2320 l=a(3,6)
2330 a(3,6)=a(6,6)
2340 a(6,6)=a(9,6)
2350 a(9,6)=a(4,10)
2360 a(4,10)=l
2370 RETURN
2380 l=a(4,4)
2390 a(4,4)=a(6,4)
2400 a(6,4)=a(6,6)
2410 a(6,6)=a(4,6)
2420 a(4,6)=l
2430 l=a(4,5)
2440 a(4,5)=a(5,4)
2450 a(5,4)=a(6,5)
2460 a(6,5)=a(5,6)
2470 a(5,6)=l
2480 l=a(3,4)
2490 a(3,4)=a(6,3)
2500 a(6,3)=a(7,6)
2510 a(7,6)=a(4,7)
2520 a(4,7)=l
2530 l=a(3,5)
2540 a(3,5)=a(5,3)
2550 a(5,3)=a(7,5)
2560 a(7,5)=a(5,7)
2570 a(5,7)=l
2580 l=a(3,6)
2590 a(3,6)=a(4,3)
2600 a(4,3)=a(7,4)
2610 a(7,4)=a(6,7)
2620 a(6,7)=l
2630 RETURN
3000 GOSUB 100
3010 ve=0:ho=8:GOSUB 110:PRINT"WILLKOMMEN BEI 'KUBUS'!"
3020 ve=1:ho=8:GOSUB 110:PRINT"======================="
3030 PRINT:PRINT:PRINT"BITTE WAEHLEN SIE"
3040 ve=6:ho=4:GOSUB 110:PRINT"A  SELBST ETWAS PROBIEREN"
3050 ve=8:ho=4:GOSUB 110
3060 PRINT"B  ICH LOESE EINE STELLUNG AUF"
3070 ve=10:ho=4:GOSUB 110:PRINT"C  SCHOENE FIGUREN"
3080 ve=12:ho=4:GOSUB 110:PRINT"D  ERKLAERUNG"
3090 ve=14:ho=4:GOSUB 110:PRINT"E  ENDE"
3100 ve=16:ho=4:GOSUB 110:GOSUB 210:t$=in$
3110 IF t$="A" THEN 6550
3120 IF t$="B" THEN 4000
3130 IF t$="C" THEN 6990
3140 IF t$="D" THEN 6060
3150 IF t$<>"E" THEN 3000
3160 GOSUB 100:PRINT"**********************"
3170 PRINT"*                    *"
3180 PRINT"*       KUBUS!       *"
3190 PRINT"*                    *"
3200 PRINT"*    GEMAAKT DOOR    *"
3210 PRINT"*                    *"
3220 PRINT"*    JAN  BROECKX    *"
3230 PRINT"*                    *"
3240 PRINT"* KARMELIETENSTR. 66 *"
3250 PRINT"*                    *"
3260 PRINT"*    2600 BERCHEM    *"
3270 PRINT"*                    *"
3280 PRINT"*       BELGIE       *"
3290 PRINT"*                    *"
3300 PRINT"**********************"
3310 GOSUB 210:GOTO 950
4000 GOSUB 100
4010 PRINT"    1  2  3  4  5  6  7  8  9 10 11 12"
4020 PRINT:PRINT 
4030 FOR i=1 TO 9:ho=0:ve=3+i:GOSUB 110
4040 PRINT i:NEXT i
4050 b=0:c=0:d=0:e=0:g=0:s=0:f=1:a=0
4060 ve=19:ho=0:GOSUB 110
4070 PRINT"GELB=Y / ROT=R / GRUEN=G / MAGENTA=O"
4080 ve=20:ho=0:GOSUB 110
4090 PRINT"WEISS=W / BLAU=B / FEHLER=F / MENU=M"
4100 ON f GOTO 4110,4120,4130,4140,4150,4160,4320
4110 i1=1:i2=3:j1=4:j2=6:GOTO 4170
4120 i1=4:i2=6:j1=1:j2=3:GOTO 4170
4130 i1=4:i2=6:j1=4:j2=6:GOTO 4170
4140 i1=4:i2=6:j1=7:j2=9:GOTO 4170
4150 i1=4:i2=6:j1=10:j2=12:GOTO 4170
4160 i1=7:i2=9:j1=4:j2=6
4170 aa=0:ff=0:FOR i=i1 TO i2:FOR j=j1 TO j2
4175 IF a<0 THEN gt=4000:GOTO 4312:REM NEXT j:NEXT i:GOTO 4000
4180 IF a$="F" THEN gt=4000:aa=1:GOTO 4312:REM NEXT j:NEXT i:a$="":GOTO 4000
4190 IF a$="M" THEN gt=3000:aa=1:GOTO 4312:REM NEXT j:NEXT i:a$="":GOTO 3000
4200 ho=j*3:ve=i+3:GOSUB 110:PRINT"??"
4210 ve=21:ho=0:GOSUB 110
4220 PRINT"WELCHE FARBE HAT DAS FELD (";i;",";j;")  ?";
4230 GOSUB 210:a$=in$:PRINT a$
4231 IF a$="Y" THEN CC(0)=6
4232 IF a$="O" THEN CC(0)=3
4233 IF a$="B" THEN CC(0)=1
4234 IF a$="R" THEN CC(0)=2
4235 IF a$="G" THEN CC(0)=4
4240 ho=j*3:ve=i+3:GOSUB 110:PRINT "**":CC(0)=7
4250 IF a$="F" THEN gt=4000:aa=1:GOTO 4312:REM NEXT j:NEXT i:a$="":GOTO 4000
4260 IF a$="M" THEN gt=3000:aa=1:GOTO 4312:REM NEXT j:NEXT i:a$="":GOTO 3000
4270 GOSUB 10000:IF a=0 THEN 4200
4280 IF a<0 THEN gt=4000:GOTO 4312:REM NEXT j:NEXT i:GOTO 4000
4290 a(i,j)=a
4300 ve=21:ho=35:GOSUB 110:PRINT"  "
4310 gt=4100:ff=1:REM NEXT j:NEXT i:f=f+1:GOTO 4100
4312 NEXT j:NEXT i:IF ff=1 THEN f=f+1:ff=0
4314 IF aa=1 THEN a$="":aa=0
4316 IF gt=3000 THEN GOTO 3000
4318 IF gt=4100 THEN GOTO 4100
4319 GOTO 4000
4320 REM
4330 REM juist zetten van rb
4340 po=a(2,5):p=a(5,5):GOSUB 10130:IF a<0 THEN 4000
4350 IF a>6 THEN 4380
4360 ON a GOSUB 10420,10430,10440,10450,10460,10470
4370 GOTO 4390
4380 ON a-6 GOSUB 10480,10490,10500,10510,10520,10530
4390 GOSUB 10540
4400 po=a(2,5):p=a(5,2):GOSUB 10130:IF a<0 THEN 4000
4410 IF a>6 THEN 4440
4420 ON a GOSUB 10670,10450,10680,1,10690,10700
4430 GOTO 4450
4440 ON a-6 GOSUB 10710,10720,10730,10740,10750,10760
4450 GOSUB 10540
4460 po=a(2,5):p=a(5,11):GOSUB 10130:IF a<0 THEN 4000
4470 IF a>6 THEN 4500
4480 ON a GOSUB 10450,1,10770,1,10780,10790
4490 GOTO 4510
4500 ON a-6 GOSUB 10800,10810,10820,10830,10840,10850
4510 GOSUB 10540
4520 po=a(2,5):p=a(5,8):GOSUB 10130:IF a<0 THEN 4000
4530 IF a>6 THEN 4560
4540 ON a GOSUB 1,1,10450,1,10860,10870
4550 GOTO 4570
4560 ON a-6 GOSUB 10880,10890,10900,10910,10920,10930
4570 GOSUB 10540
4580 po=a(5,2):p=a(5,11):GOSUB 10130:IF a<0 THEN 4000
4590 IF a>6 THEN 4620
4600 ON a GOSUB 1,1,1,1,10450,10940
4610 GOTO 4630
4620 ON a-6 GOSUB 10950,10960,10970,10980,10990,11000
4630 GOSUB 10540
4640 po=a(5,2):p=a(5,5):GOSUB 10130:IF a<0 THEN 4000
4650 IF a>6 THEN 4680
4660 ON a GOSUB 1,1,1,1,1,10450
4670 GOTO 4690
4680 ON a-6 GOSUB 11010,11020,11030,11040,11050,11060
4690 GOSUB 10540
4700 po=a(5,5):p=a(5,8):GOSUB 10130:IF a<0 THEN 4000
4710 IF a>6 THEN 4740
4720 ON a GOSUB 1,1,1,1,1,1
4730 GOTO 4750
4740 ON a-6 GOSUB 10450,11070,11080,11090,11100,11110
4750 GOSUB 10540
4760 po=a(5,8):p=a(5,11):GOSUB 10130:IF a<0 THEN 4000
4770 ON a GOSUB 1,1,1,1,1,1,1,10450,11120,11130,11140,11150
4780 GOSUB 10540
4790 po=a(8,5):p=a(5,5):GOSUB 10130:IF a<0 THEN 4000
4800 ON a GOSUB 1,1,1,1,1,1,1,1,10450,11160,11170,11180
4810 GOSUB 10540
4820 po=a(8,5):p=a(5,2):GOSUB 10130:IF a<0 THEN 4000
4830 ON a GOSUB 1,1,1,1,1,1,1,1,1,10450,11190,11200
4840 GOSUB 10540
4850 po=a(8,5):p=a(5,8):GOSUB 10130:IF a<0 THEN 4000
4860 ON a GOSUB 1,1,1,1,1,1,1,1,1,1,10450,11210
4870 GOSUB 10540
4880 REM juist orienteren van rb
4890 IF a(3,5)<>a(2,5) THEN a$="-VLV-LO-L-OL":GOSUB 10540
4900 IF a(2,4)<>a(2,5) THEN a$="-LHL-HO-H-OH":GOSUB 10540
4910 IF a(1,5)<>a(2,5) THEN a$="-HRH-RO-R-OR":GOSUB 10540
4920 IF a(2,6)<>a(2,5) THEN a$="-VOV-OR-O-RO":GOSUB 10540
4930 IF a(5,6)<>a(5,5) THEN a$="-UVU-VR-V-RV":GOSUB 10540
4940 IF a(6,8)<>a(5,8) THEN a$="-HUH-UR-U-RU":GOSUB 10540
4950 IF a(5,9)<>a(5,8) THEN a$="-URU-RH-R-HR":GOSUB 10540
4960 IF a(6,11)<>a(5,11) THEN a$="-LUL-UH-U-HU":GOSUB 10540
4970 IF a(5,12)<>a(5,11) THEN a$="-UHU-HL-H-LH":GOSUB 10540
4980 IF a(8,4)<>a(8,5) THEN a$="-VUV-UL-U-LU":GOSUB 10540
4990 IF a(5,4)<>a(5,5) THEN a$="-ULU-LV-L-VL":GOSUB 10540
5000 IF a(6,5)<>a(5,5) THEN 5360
5010 REM juist zetten van hb
5020 po=a(2,5):p=a(5,5):m=a(5,2):GOSUB 11220:IF a<0 THEN 4000
5030 IF a>4 THEN 5060
5040 ON a GOSUB 10450,11450,11460,11470
5050 GOTO 5070
5060 ON a-4 GOSUB 11480,11490,11500,11510
5070 GOSUB 10540
5080 po=a(2,5):p=a(5,8):m=a(5,5):GOSUB 11220:IF a<0 THEN 4000
5090 ON a GOSUB 1,10450,11520,11530,11540,11550,11560,11570
5100 GOSUB 10540
5110 po=a(2,5):p=a(5,2):m=a(5,11):GOSUB 11220:IF a<0 THEN 4000
5120 ON a GOSUB 1,1,10450,11580,11590,11600,11610,11620
5130 GOSUB 10540
5140 po=a(5,11):p=a(5,8):m=a(2,5):GOSUB 11220:IF a<0 THEN 4000
5150 ON a GOSUB 1,1,1,10450,11630,11640,11650,11660
5160 GOSUB 10540
5170 po=a(5,2):p=a(5,5):m=a(8,5):GOSUB 11220:IF a<0 THEN 4000
5180 ON a GOSUB 1,1,1,1,10450,11670,11680,11690
5190 GOSUB 10540
5200 po=a(5,5):p=a(5,8):m=a(8,5):GOSUB 11220:IF a<0 THEN 4000
5210 ON a GOSUB 1,1,1,1,1,10450,11700,11710
5220 GOSUB 10540
5230 po=a(5,2):p=a(8,5):m=a(5,11):GOSUB 11220:IF a<0 THEN 4000
5240 ON a GOSUB 1,1,1,1,1,1,10450,11160
5250 IF a$="O" THEN 5360
5260 REM juist orienteren van hb
5270 IF (a(3,4)<>a(2,5)) OR (a(4,4)<>a(5,5)) THEN 5300
5280 IF a(4,3)<>a(5,2) THEN 5300
5290 GOTO 5390
5300 IF (a(3,4)=a(4,4)) OR (a(3,4)=a(4,3)) THEN 5360
5310 IF a(4,4)=a(4,3) THEN 5360
5320 IF a(4,4)=a(2,5) THEN a$="O-H-O-L-HL-V-LHLOH-OV"
5330 IF a(4,4)=a(2,5) THEN GOSUB 10540:GOTO 5270
5340 IF a(4,3)=a(2,5) THEN a$="-VO-H-O-L-HLV-LHLOH-O"
5350 IF a(4,3)=a(2,5) THEN GOSUB 10540:GOTO 5270
5360 GOSUB 100:ve=21:ho=0:GOSUB 110
5370 PRINT"KEINE LOESUNG MOEGLICH!!"
5380 PRINT:PRINT"<RETURN> DRUECKEN";:INPUT T$:GOTO 3000
5390 IF a(3,6)<>a(2,5) OR a(4,7)<>a(5,8) THEN 5420
5400 IF a(4,6)<>a(5,5) THEN 5420
5410 GOTO 5490
5420 IF a(3,6)=a(4,7) OR a(3,6)=a(4,6) THEN 5360
5430 IF a(4,6)=a(4,7) THEN 5360
5440 IF a(4,7)=a(2,5) THEN a$="O-L-O-V-LV-R-VLVOL-OR"
5450 IF a(4,7)=a(2,5) THEN GOSUB 10540:GOTO 5390
5460 IF a(4,6)=a(2,5) THEN a$="-RO-L-O-V-LVR-VLVOL-O"
5470 IF a(4,6)=a(2,5) THEN GOSUB 10540:GOTO 5390
5480 GOTO 5360
5490 IF a(1,6)<>a(2,5) OR a(4,10)<>a(5,11) THEN 5520
5500 IF a(4,9)<>a(5,8) THEN 5520
5510 GOTO 5590
5520 IF a(1,6)=a(4,10) OR a(1,6)=a(4,9) THEN 5360
5530 IF a(4,10)=a(4,9) THEN 5360
5540 IF a(4,10)=a(2,5) THEN a$="O-V-O-R-VR-H-RVROV-OH"
5550 IF a(4,10)=a(2,5) THEN GOSUB 10540:GOTO 5490
5560 IF a(4,9)=a(2,5) THEN a$="-HO-V-O-R-VRH-RVROV-O"
5570 IF a(4,9)=a(2,5) THEN GOSUB 10540:GOTO 5490
5580 GOTO 5360
5590 IF a(1,4)<>a(2,5) OR a(4,1)<>a(5,2) THEN 5620
5600 IF a(4,12)<>a(5,11) THEN 5620
5610 GOTO 5690
5620 IF a(1,4)=a(4,1) OR a(1,4)=a(4,12) THEN 5360
5630 IF a(4,1)=a(4,12) THEN 5360
5640 IF a(4,12)=a(2,5) THEN a$="-HL-V-L-O-VOH-OVOLV-L"
5650 IF a(4,12)=a(2,5) THEN GOSUB 10540:GOTO 5590
5660 IF a(4,1)=a(2,5) THEN a$="L-V-L-O-VO-H-OVOLV-LH"
5670 IF a(4,1)=a(2,5) THEN GOSUB 10540:GOTO 5590
5680 GOTO 5360
5690 IF a(6,1)<>a(5,2) OR a(9,4)<>a(8,5) THEN 5720
5700 IF a(6,12)<>a(5,11) THEN 5720
5710 GOTO 5790
5720 IF a(6,1)=a(9,4) OR a(6,1)=a(6,12) THEN 5360
5730 IF a(9,4)=a(6,12) THEN 5360
5740 IF a(6,12)=a(8,5) THEN a$="U-V-U-L-VL-H-LVLUV-UH"
5750 IF a(6,12)=a(8,5) THEN GOSUB 10540:GOTO 5690
5760 IF a(6,1)=a(8,5) THEN a$="-HU-V-U-L-VLH-LVLUV-U"
5770 IF a(6,1)=a(8,5) THEN GOSUB 10540:GOTO 5690
5780 GOTO 5360
5790 IF a(9,6)<>a(8,5) OR a(6,9)<>a(5,8) THEN 5820
5800 IF a(6,10)<>a(5,11) THEN 5820
5810 GOTO 5890
5820 IF a(9,6)=a(6,9) OR a(9,6)=a(6,10) THEN 5360
5830 IF a(6,9)=a(6,10) THEN 5360
5840 IF a(6,9)=a(8,5) THEN a$="U-L-U-H-LH-R-HLHUL-UR"
5850 IF a(6,9)=a(8,5) THEN GOSUB 10540:GOTO 5790
5860 IF a(6,10)=a(8,5) THEN a$="-RU-L-U-H-LHR-HLHUL-U"
5870 IF a(6,10)=a(8,5) THEN GOSUB 10540:GOTO 5790
5880 GOTO 5360
5890 IF a(6,6)<>a(5,5) OR a(7,6)<>a(8,5) THEN 5920
5900 IF a(6,7)<>a(5,8) THEN 5920
5910 GOTO 5990
5920 IF a(6,6)=a(7,6) OR a(6,6)=a(6,7) THEN 5360
5930 IF a(7,6)=a(6,7) THEN 5360
5940 IF a(6,6)=a(8,5) THEN a$="U-H-U-R-HR-V-RHRUH-UV"
5950 IF a(6,6)=a(8,5) THEN GOSUB 10540:GOTO 5890
5960 IF a(6,7)=a(8,5) THEN a$="-VU-H-U-R-HRV-RHRUH-U"
5970 IF a(6,7)=a(8,5) THEN GOSUB 10540:GOTO 5890
5980 GOTO 5360
5990 IF a(6,3)<>a(5,2) OR a(6,4)<>a(5,5) THEN 5360
6000 IF a(7,4)<>a(8,5) THEN 5360
6010 ho=0:ve=20:GOSUB 110
6020 PRINT"                         "
6030 ho=0:ve=20:GOSUB 110:PRINT"VOILA!!":ho=0
6040 ve=22:GOSUB 110:PRINT"<RETURN> DRUECKEN";
6050 GOSUB 210:GOTO 3000
6060 REM uitleg
6070 GOSUB 100
6080 PRINT"IN DIESEM PROGRAMM WIRD DER WUERFEL"
6090 PRINT"WIE FOLGT ANGEZEIGT:":PRINT 
6100 GOSUB 120:ho=ho+17:GOSUB 110:PRINT"OO":PRINT 
6110 GOSUB 120:ho=ho+14:GOSUB 110:PRINT"LL VV RR HH":PRINT 
6120 GOSUB 120:ho=ho+17:GOSUB 110:PRINT"UU"
6130 PRINT:PRINT"IN DER MITTE SEHEN SIE DIE IHNEN ZU-"
6140 PRINT"GEWANDTE SEITE (V), DARUEBER DIE OBER-"
6150 PRINT"SEITE (O) UND DARUNTER DIE UNTER-"
6160 PRINT"SEITE (U). 'L' UND 'R' STEHEN FUER"
6170 PRINT"LINKE UND RECHTE SEITE. DIE RUECK-"
6180 PRINT"SEITE (H) IST GANZ RECHTS.":PRINT 
6190 PRINT"<RETURN> DRUECKEN";:GOSUB 210:GOSUB 100
6200 PRINT"WENN SIE Z.B. IN DIESEM PROGRAMM 'O'"
6210 PRINT"LESEN, HEISST DAS, DASS SIE DIE OBERE"
6220 PRINT"EBENE UM EINE VIERTELDREHUNG IM UHR-"
6230 PRINT"ZEIGERSINN DREHEN SOLLEN, '-O' GEGEN"
6240 PRINT"DEN UHRZEIGERSINN (JEWEILS AUF DIE"
6250 PRINT"BETREFFENDE SEITE GESEHEN). '-LV' BE-"
6260 PRINT"DEUTET, DIE LINKE EBENE UM 90 GRAD"
6270 PRINT"GEGEN DEN UHRZEIGERSINN UND DIE VORDERE"
6280 PRINT"EBENE IM UHRZEIGERSINN ZU DREHEN.":PRINT
6283 PRINT"BITTE BEACHTEN SIE, DASS SIE DIE"
6286 PRINT"POSITION DER MITTELFELDER DER"
6290 PRINT"WUERFELSEITEN NIE VERAENDERN!":PRINT 
6300 PRINT"<RETURN> DRUECKEN";:GOSUB 210:GOSUB 100
6310 PRINT"WERDEN SIE NICHT UNRUHIG, WENN SIE"
6320 PRINT"LAENGERE ZEIT KEINE VERAENDERUNG"
6330 PRINT"SEHEN. DANN IST DER COMPUTER MIT"
6340 PRINT"AUFWENDIGEREN BERECHNUNGEN"
6343 PRINT"BESCHAEFTIGT (Z.B. BEI DEN"
6346 PRINT"'SCHOENEN FIGUREN')":PRINT
6350 PRINT"DIE FARBEN :":PRINT 
6360 PRINT"R = ROT":PRINT"O = MAGENTA"
6370 PRINT"B = BLAU":PRINT"G = GRUEN"
6380 PRINT"Y = GELB":PRINT"W = WEISS"
6390 ve=20:ho=0:GOSUB 110:PRINT"<RETURN> DRUECKEN";
6400 GOSUB 210:GOTO 3000
6410 REM zelf wat proberen
6420 ho=0:ve=20:GOSUB 110
6430 PRINT"SIND SIE FERTIG ? (J/N)";:GOSUB 210
6440 t$=in$:ho=0:ve=20:GOSUB 110
6450 PRINT"                       "
6460 IF t$="N" THEN 6630
6470 IF t$<>"J" THEN 6420
6480 ho=0:ve=20:GOSUB 110
6490 PRINT"SOLL ICH LOESEN ? (J/N)";:GOSUB 210
6500 t$=in$:ho=0:ve=20:GOSUB 110
6510 PRINT"                             "
6520 IF t$="N" THEN 3000
6530 IF t$<>"J" THEN 6480
6540 GOTO 4320
6550 GOSUB 100:GOSUB 6570:GOSUB 6760
6560 GOTO 6630
6570 FOR i=1 TO 3:FOR j=4 TO 6:a(i,j)=1:NEXT j:NEXT i
6580 FOR i=4 TO 6:FOR j=1 TO 3:a(i,j)=2:NEXT j:NEXT i
6590 FOR i=4 TO 6:FOR j=4 TO 6:a(i,j)=3:NEXT j:NEXT i
6600 FOR i=4 TO 6:FOR j=7 TO 9:a(i,j)=4:NEXT j:NEXT i
6610 FOR i=4 TO 6:FOR j=10 TO 12:a(i,j)=5:NEXT j:NEXT i
6620 FOR i=7 TO 9:FOR j=4 TO 6:a(i,j)=6:NEXT j:NEXT i:RETURN
6630 ho=0:ve=20:GOSUB 110:PRINT"WELCHE EBENE ?";
6640 GOSUB 210:ke$=in$:PRINT ke$;
6650 IF ke$="-" THEN GOSUB 210:t$=in$:PRINT t$:ke$=ke$+t$
6660 IF ke$="H" OR ke$="O" OR ke$="L" THEN 6710
6670 IF ke$="U" OR ke$="R" OR ke$="V" THEN 6710
6680 IF ke$="-H" OR ke$="-O" OR ke$="-L" THEN 6710
6690 IF ke$="-U" OR ke$="-R" OR ke$="-V" THEN 6710
6700 GOTO 6630
6710 ho=0:ve=20:GOSUB 110:PRINT"                "
6720 IF left$(ke$,1)="-" THEN ke$=right$(ke$,1)
6730 FOR h=1 TO 3:GOSUB 1020:NEXT h
6740 GOSUB 6760:GOTO 6410
6750 GOSUB 1020:GOSUB 6760:GOTO 6410
6760 REM tekenroutine
6770 ve=0:ho=0:GOSUB 110
6780 PRINT"    1  2  3  4  5  6  7  8  9 10 11 12"
6790 PRINT:PRINT 
6800 FOR i=1 TO 9:ho=0:ve=3+i:GOSUB 110:PRINT i:NEXT i
6810 FOR i=1 TO 6
6820 ON i GOTO 6830,6840,6850,6860,6870,6880
6830 b=1:c=3:d=4:e=6:GOTO 6890
6840 b=4:c=6:d=1:e=3:GOTO 6890
6850 b=4:c=6:d=4:e=6:GOTO 6890
6860 b=4:c=6:d=7:e=9:GOTO 6890
6870 b=4:c=6:d=10:e=12:GOTO 6890
6880 b=7:c=9:d=4:e=6
6890 FOR j=b TO c:FOR k=d TO e
6900 ho=k*3:ve=j+3:GOSUB 110
6910 ON a(j,k) GOTO 6920,6930,6940,6950,6960,6970
6920 CC(0)=6:GOSUB 110:PRINT"**":CC(0)=7:GOTO 6980
6930 CC(0)=3:GOSUB 110:PRINT"**":CC(0)=7:GOTO 6980
6940 CC(0)=1:GOSUB 110:PRINT"**":CC(0)=7:GOTO 6980
6950 CC(0)=2:GOSUB 110:PRINT"**":CC(0)=7:GOTO 6980
6960 CC(0)=4:GOSUB 110:PRINT"**":CC(0)=7:GOTO 6980
6970 PRINT"**"
6980 GOSUB 110:NEXT k:NEXT j:NEXT i:RETURN
6990 GOSUB 100:GOSUB 6570:ve=0:ho=11
7000 GOSUB 110:PRINT"SCHOENE FIGUREN!":ve=1:ho=11
7010 GOSUB 110:PRINT"================":PRINT 
7020 PRINT"BITTE WAEHLEN SIE":PRINT 
7030 GOSUB 11720:PRINT"A  BLOEMEN":PRINT 
7040 GOSUB 11720:PRINT"B  4-STIP":PRINT 
7050 GOSUB 11720:PRINT"C  6-STIP":PRINT 
7060 GOSUB 11720:PRINT"D  GUIRLANDE":PRINT 
7070 GOSUB 11720:PRINT"E  TTTT":PRINT 
7080 GOSUB 11720:PRINT"F  TEMPELPOORTEN":PRINT 
7090 GOSUB 11720:PRINT"G  SLANG":PRINT 
7100 GOSUB 11720:PRINT"H  WORM":PRINT 
7110 GOSUB 11720:PRINT"I  (WEITER)":PRINT 
7120 GOSUB 11720:GOSUB 210:t$=in$:GOSUB 100
7130 IF t$="A" THEN a$="LLRROOUUVVHH":GOSUB 10540:GOTO 6990
7140 IF t$="B" THEN a$="O-URRLLO-UVVHH":GOSUB 10540:GOTO 6990
7150 IF t$="C" THEN a$="L-RO-UV-HL-R":GOSUB 10540:GOTO 6990
7160 IF t$="D" THEN a$="RLVHRLVHRLVH":GOSUB 10540:GOTO 6990
7170 IF t$="E" THEN a$="U-OVVHH-U-ORRLL-URRLLOORRLL-U"
7180 IF t$="E" THEN GOSUB 10540:GOTO 6990
7190 IF t$="F" THEN a$="U-OVVHH-U-ORRLL-URRLLOORRLL-UOO"
7200 IF t$="F" THEN GOSUB 10540:GOTO 6990
7210 IF t$="G" THEN a$="H-LR-URRUL-R-HRROHHU-ORR-U"
7220 IF t$="G" THEN GOSUB 10540:GOTO 6990
7230 IF t$="H" THEN a$="ROVV-U-LRV-H-U-V-"
7240 IF t$="H" THEN a1$="RVVROOVRR-V-R-O-VOOVR"
7250 IF t$="H" THEN a$=a$+a1$
7260 IF t$="H" THEN GOSUB 10540:GOTO 6990
7270 IF t$<>"I" THEN 6990
7280 GOSUB 100:PRINT"BITTE WAEHLEN SIE":PRINT 
7290 GOSUB 11720:PRINT"A  DUBBELKUBUS":PRINT 
7300 GOSUB 11720:PRINT"B  2-RINGEN":PRINT 
7310 GOSUB 11720:PRINT"C  4-ZETTER":PRINT 
7320 GOSUB 11720:PRINT"D  4-ZETPLUSSER":PRINT 
7330 GOSUB 11720:PRINT"E  4-PLUSSER":PRINT 
7340 GOSUB 11720:PRINT"F  6-PLUSSER":PRINT 
7350 GOSUB 11720:PRINT"G  HAHAHAHAHAHA":PRINT 
7360 GOSUB 11720:PRINT"H  12-ELLER":PRINT 
7370 GOSUB 11720:PRINT"I  PUINHOOP":PRINT 
7380 GOSUB 11720:PRINT"J  (WEITER)":PRINT 
7390 GOSUB 11720:GOSUB 210:t$=in$:GOSUB 100
7400 IF t$="A" THEN a$="H-LUULU-VUUV-U-H-VR"
7410 IF t$="A" THEN a1$="OO-R-OHOO-HOV":a$=a$+a1$
7420 IF t$="A" THEN GOSUB 10540:GOTO 6990
7430 IF t$="B" THEN a$="H-LR-URRUL-R-HRROHHU-OHHLROO-L-RHH-U"
7440 IF t$="B" THEN GOSUB 10540:GOTO 6990
7450 IF t$="C" THEN a$="RLVHRLVHRLVHOOUU"
7460 IF t$="C" THEN GOSUB 10540:GOTO 6990
7470 IF t$="D" THEN a$="-R-LOU-R-LOU-R-LOUVVHH"
7480 IF t$="D" THEN GOSUB 10540:GOTO 6990
7490 IF t$="E" THEN a$="VHRLVHRLVHRRLLVHRLVHRLVH"
7500 IF t$="E" THEN GOSUB 10540:GOTO 6990
7510 IF t$="F" THEN a$="RVVHHRRLLOOVVHHRRLLUU-R"
7520 IF t$="F" THEN GOSUB 10540:GOTO 6990
7530 IF t$="G" THEN a$="RLVHOOUURRLLVH-R-L"
7540 IF t$="G" THEN GOSUB 10540:GOTO 6990
7550 IF t$="H" THEN a$="RLOU-V-HRL":GOSUB 10540:GOTO 6990
7560 IF t$="I" THEN a$="VVHHRRLLOO-UROLU"
7570 IF t$="I" THEN GOSUB 10540:GOTO 6990
7580 IF t$<>"J" THEN 7280
7590 GOSUB 100:PRINT"BITTE WAEHLEN SIE":PRINT 
7600 GOSUB 11720:PRINT"A  MUILKORVEN":PRINT 
7610 GOSUB 11720:PRINT"B  Y-ER":PRINT 
7620 GOSUB 11720:PRINT"C  VLAGGEN":PRINT 
7630 GOSUB 11720:PRINT"D  WIJZER":PRINT 
7640 GOSUB 11720:PRINT"E  MENU":PRINT 
7650 GOSUB 11720:GOSUB 210:t$=in$:GOSUB 100
7660 IF t$="A" THEN a$="LOORRUUOORRUU-L":GOSUB 10540:GOTO 6990
7670 IF t$="B" THEN a$="RRLLUURRLLVVHHUUVVHHUU"
7680 IF t$="B" THEN GOSUB 10540:GOTO 6990
7690 IF t$="C" THEN a$="RRVURR-URHH-RURR-U-VRR"
7700 IF t$="C" THEN a1$="LLHULL-ULVV-LULL-U-H"
7710 IF t$="C" THEN a2$="LLVVRRLLHHR"
7720 IF t$="C" THEN a$=a$+a1$+a2$
7730 IF t$="C" THEN GOSUB 10540:GOTO 6990
7740 IF t$="D" THEN a$="-RV-ULV-LUL-V-L-VRHHRU-R-"
7750 IF t$="D" THEN a1$="URU-R-U-OUR-U-RUR-U-ROHH"
7760 IF t$="D" THEN a$=a$+a1$:GOSUB 10540:GOTO 6990
7770 IF t$<>"E" THEN 7590
7780 GOTO 3000
10000 REM
10010 IF a$="Y" THEN a=1:b=b+1:GOTO 10080
10020 IF a$="B" THEN a=3:c=c+1:GOTO 10080
10030 IF a$="W" THEN a=6:d=d+1:GOTO 10080
10040 IF a$="R" THEN a=4:e=e+1:GOTO 10080
10050 IF a$="G" THEN a=5:g=g+1:GOTO 10080
10060 IF a$="O" THEN a=2:s=s+1:GOTO 10080
10070 a=0:RETURN
10080 IF b>9 OR c>9 OR d>9 THEN 10110
10090 IF e>9 OR g>9 OR s>9 THEN 10110
10100 RETURN
10110 PRINT"NICHT RICHTIG!! NEU ANFANGEN!!"
10120 FOR k=1 TO 1000:NEXT k:a=-1:RETURN
10130 REM zoeken rb
10140 s=0
10150 IF a(1,5)<>po THEN 10170
10160 IF a(4,11)=p THEN a=1:RETURN
10170 IF a(2,4)<>po THEN 10190
10180 IF a(4,2)=p THEN a=2:RETURN
10190 IF a(2,6)<>po THEN 10210
10200 IF a(4,8)=p THEN a=3:RETURN
10210 IF a(3,5)<>po THEN 10230
10220 IF a(4,5)=p THEN a=4:RETURN
10230 IF a(5,1)<>po THEN 10250
10240 IF a(5,12)=p THEN a=5:RETURN
10250 IF a(5,3)<>po THEN 10270
10260 IF a(5,4)=p THEN a=6:RETURN
10270 IF a(5,6)<>po THEN 10290
10280 IF a(5,7)=p THEN a=7:RETURN
10290 IF a(5,9)<>po THEN 10310
10300 IF a(5,10)=p THEN a=8:RETURN
10310 IF a(7,5)<>po THEN 10330
10320 IF a(6,5)=p THEN a=9:RETURN
10330 IF a(8,4)<>po THEN 10350
10340 IF a(6,2)=p THEN a=10:RETURN
10350 IF a(8,6)<>po THEN 10370
10360 IF a(6,8)=p THEN a=11:RETURN
10370 IF a(9,5)<>po THEN 10390
10380 IF a(6,11)=p THEN a=12:RETURN
10390 s=s+1:IF s=1 THEN a=po:po=p:p=a:GOTO 10150
10400 PRINT:PRINT"LEIDER FALSCH!! NOCH EINMAL!!"
10410 FOR k=1 TO 1500:NEXT k:a=-1:RETURN
10420 a$="OO":RETURN
10430 a$="-O":RETURN
10440 a$="O":RETURN
10450 a$="":RETURN
10460 a$="L-O":RETURN
10470 a$="V":RETURN
10480 a$="-V":RETURN
10490 a$="-RO":RETURN
10500 a$="VV":RETURN
10510 a$="-LV":RETURN
10520 a$="R-V":RETURN
10530 a$="UUVV":RETURN
10540 REM uitvoeren van a$
10550 IF LEN(a$)=0 THEN RETURN
10560 FOR n=1 TO LEN(a$)
10570 IF MID$(a$,n,1)="-" THEN ke$=MID$(a$,n+1,1)
10580 IF MID$(a$,n,1)="-" THEN FOR h=1 TO 3:GOSUB 1020
10590 IF NOT (MID$(a$,n,1)="-") THEN 10600
10595 NEXT h
10600 IF MID$(a$,n,1)="-" THEN n=n+1:GOTO 10620
10610 IF MID$(a$,n,1)<>"-" THEN ke$=MID$(a$,n,1):GOSUB 1020
10620 NEXT n:ve=19:ho=0:GOSUB 110:FOR i=1 TO 4
10630 PRINT"                                    ":NEXT i
10640 ve=20:ho=0:GOSUB 110:PRINT a$:GOSUB 6760
10650 ve=22:ho=0:GOSUB 110:PRINT"<RETURN> DRUECKEN";
10660 GOSUB 210:RETURN
10670 a$="HL":RETURN
10680 a$="RHHL":RETURN
10690 a$="L":RETURN
10700 a$="-L":RETURN
10710 a$="-VOV":RETURN
10720 a$="HHL":RETURN
10730 a$="-ULL":RETURN
10740 a$="LL":RETURN
10750 a$="UULL":RETURN
10760 a$="-HL":RETURN
10770 a$="RH":RETURN
10780 a$="-H":RETURN
10790 a$="-O-LO":RETURN
10800 a$="OR-O":RETURN
10810 a$="H":RETURN
10820 a$="UUHH":RETURN
10830 a$="-UHH":RETURN
10840 a$="UHH":RETURN
10850 a$="HH":RETURN
10860 a$="-O-HO":RETURN
10870 a$="OV-O":RETURN
10880 a$="R":RETURN
10890 a$="-R":RETURN
10900 a$="URR":RETURN
10910 a$="UURR":RETURN
10920 a$="RR":RETURN
10930 a$="-URR":RETURN
10940 a$="-VHUUV-H":RETURN
10950 a$="VHUU-V-H":RETURN
10960 a$="RU-R-LUL":RETURN
10970 a$="-L-UL":RETURN
10980 a$="H-U-H":RETURN
10990 a$="HU-H":RETURN
11000 a$="-LUL":RETURN
11010 a$="-RLUU-LR":RETURN
11020 a$="RLUU-R-L":RETURN
11030 a$="L-U-L":RETURN
11040 a$="-VUV":RETURN
11050 a$="-V-UV":RETURN
11060 a$="LU-L":RETURN
11070 a$="V-HUUH-V":RETURN
11080 a$="-RUR":RETURN
11090 a$="VU-V":RETURN
11100 a$="V-U-V":RETURN
11110 a$="-R-UR":RETURN
11120 a$="RU-R":RETURN
11130 a$="-H-UH":RETURN
11140 a$="-HUH":RETURN
11150 a$="R-U-R":RETURN
11160 a$="U":RETURN
11170 a$="-U":RETURN
11180 a$="UU":RETURN
11190 a$="-R-H-R-URUV-U-VHR":RETURN
11200 a$="-R-URUV-U-V":RETURN
11210 a$="-V-UVUL-U-L":RETURN
11220 REM zoeken van hb
11230 s=0
11240 IF a(3,4)<>po OR a(4,4)<>p THEN 11260
11250 IF a(4,3)=m THEN a=1:RETURN
11260 IF a(3,6)<>po OR a(4,7)<>p THEN 11280
11270 IF a(4,6)=m THEN a=2:RETURN
11280 IF a(1,4)<>po OR a(4,1)<>p THEN 11300
11290 IF a(4,12)=m THEN a=3:RETURN
11300 IF a(1,6)<>po OR a(4,10)<>p THEN 11320
11310 IF a(4,9)=m THEN a=4:RETURN
11320 IF a(6,3)<>po OR a(6,4)<>p THEN 11340
11330 IF a(7,4)=m THEN a=5:RETURN
11340 IF a(6,6)<>po OR a(6,7)<>p THEN 11360
11350 IF a(7,6)=m THEN a=6:RETURN
11360 IF a(6,1)<>po OR a(9,4)<>p THEN 11380
11370 IF a(6,12)=m THEN a=7:RETURN
11380 IF a(6,9)<>po OR a(6,10)<>p THEN 11400
11390 IF a(9,6)=m THEN a=8:RETURN
11400 s=s+1:ON s GOTO 11410,11410,11420,11430,11430,11440
11410 a=po:po=p:p=m:m=a:GOTO 11240
11420 a=po:po=m:m=a:GOTO 11240
11430 a=po:po=p:p=m:m=a:GOTO 11240
11440 GOTO 10400
11450 a$="VR-V-LV-R-VL":RETURN
11460 a$="-HLV-LHL-V-L":RETURN
11470 a$="-LOR-OLO-R-O":RETURN
11480 a$="-LVR-VLV-R-V":RETURN
11490 a$="VO-V-UV-O-VU":RETURN
11500 a$="LV-L-HL-V-LH":RETURN
11510 a$="ULV-L-HL-V-LH-U":RETURN
11520 a$="OV-O-HO-V-OH":RETURN
11530 a$="-HOV-OHO-V-O":RETURN
11540 a$="-RVL-VRV-L-V":RETURN
11550 a$="VL-V-RV-L-VR":RETURN
11560 a$="U-RVL-VRV-L-V-U":RETURN
11570 a$="-ORU-ROR-U-R":RETURN
11580 a$="-OHU-HOH-U-H":RETURN
11590 a$="LO-L-UL-O-LU":RETURN
11600 a$="-ULO-L-UL-O-LUU":RETURN
11610 a$="-ULO-LUL-O-L":RETURN
11620 a$="-LHR-HLH-R-H":RETURN
11630 a$="U-HRV-RHR-V-R-U":RETURN
11640 a$="-HRV-RHR-V-R":RETURN
11650 a$="HO-H-UH-O-HU":RETURN
11660 a$="-UHO-HUH-O-H":RETURN
11670 a$="UR-U-LU-R-UL":RETURN
11680 a$="-LUR-ULU-R-U":RETURN
11690 a$="UV-U-HU-V-UH":RETURN
11700 a$="-RUL-URU-L-U":RETURN
11710 a$="UL-U-RU-L-UR":RETURN
11720 GOSUB 120:ho=4:GOSUB 110:RETURN
30000 REM ************************
30010 REM *        kubus!        *
30020 REM *     gemaakt door     *
30030 REM *     jan  broeckx     *
30040 REM *  karmelietenstr. 66  *
30050 REM *     2600 berchem     *
30060 REM *        belgie        *
30061 REM *    deutsch 2019,     *
30062 REM *     farbe 2023:      *
30063 REM *  thomas rademacher   *
30064 REM *  fr.-engels-str. 44  *
30065 REM *     99086 erfurt     *
30066 REM *     deutschland      *
30070 REM ************************
30080 REM
30090 REM copyright  nos hilversum
Hier ist dieser Fehler korrigiert. Nun sollten alle legalen Eingaben unter Menüpunkt B zum erfolgreichen Ende führen, also weiterhin nicht die, die auf dem realen Zauberwürfel nur möglich sind, wenn man schummelt (den Würfel zerlegt und falsch wieder zusammensetzt oder Klebeetiketten ablöst und vertauscht wieder anbringt ;) ).
Fehler beseitigt, hier der letzte Schritt
Fehler beseitigt, hier der letzte Schritt
das korrigierte Programm auf dem robotron KC85-4.png (30.75 KiB) 1719 mal betrachtet

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

Othello auf Deutsch

Beitrag von BC-Tom »

Am Bascoder habe ich noch nicht weiter gearbeitet, also wenn Änderungsvorschläge bestehen, bitte einfach äußern!
Hier ein weiteres Programm, mit (aus dem Niederländischen) auf Deutsch umgestellter Bedienung:

Code: Alles auswählen

0 REM BASICODE-Subroutinen (c) by Thomas Mäurer, Duisburger Str. 296 D-42 OB 1
1 REM Erweiterung zu Version 3C: Thomas Rademacher, JOYCE-User-AG e.V.
10 XBIOS O9,4:DEFSNG "A-Z": SCREEN 0: MODE "USA":CLIP 0,0,639+320*(O9=0),199: GOTO 1000
11 PRINT CHR$(27)"b"CHR$(CC(0)-15*(CC(0)=0)-3*(CC(0)=1)+(CC(0)=2)-2*(CC(0)=3)+2*(CC(0)=4)-7*(CC(0)=5)+3*(CC(0)=6)+7*(CC(0)=7)-8*(CC(0)=CC(1)));
12 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)+7*(CC(1)=7));
13 RETURN
20 GOSUB 100:CLEAR:XBIOS O9,4
21 SV=7:HO=79+40*(O9=0):VE=24:HG=319:VG=199
22 GOSUB 11
23 DIM CC(4):CC(0)=7:CC(1)=0:CC(2)=CC(0):CC(3)=CC(1):CC(4)=CC(1)
28 GOTO 1010
100 GOSUB 11
101 CC(2)=CC(0):CC(3)=CC(1):CLS :REM LOCATE 25,5:PRINT "BasiCode-3C fr OMIKRON.BASIC";:LOCATE 1,0:RETURN 
102 RETURN
110 GOSUB 11
111 VE=MAX(0,VE):VE=MIN(VE,24):HO=MAX(0,HO):HO=MIN(HO,39):PRINT @(Ve,Ho);
119 RETURN
120 HO= POS(0):Ve= CSRLIN -1: RETURN
150 PRINT CHR$(27)"b"CHR$(CC(0)-15*(CC(0)=0)-3*(CC(0)=1)+(CC(0)=2)-2*(CC(0)=3)+2*(CC(0)=4)-7*(CC(0)=5)+3*(CC(0)=6)+7*(CC(0)=7));
151 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)+7*(CC(1)=7));
152 PRINT " "CHR$(27)"p  ";SR$;"  "CHR$(27)"q ";
153 PRINT CHR$(27)"b"CHR$(CC(2)-15*(CC(2)=0)-3*(CC(2)=1)+(CC(2)=2)-2*(CC(2)=3)+2*(CC(2)=4)-7*(CC(2)=5)+3*(CC(2)=6)+7*(CC(2)=7));
154 PRINT CHR$(27)"c"CHR$(CC(3)-15*(CC(3)=0)-3*(CC(3)=1)+(CC(3)=2)-2*(CC(3)=3)+2*(CC(3)=4)-7*(CC(3)=5)+3*(CC(3)=6)+7*(CC(3)=7));
155 RETURN
200 IN=0:IN$=INKEY$:IF IN$<>"" THEN 211
201 IN=IN+32*((IN>96) AND (IN<127))
202 IN=IN-27*(IN=1):IN=IN-23*(IN=6):IF IN=127 THEN GOSUB 120:IF HO>0 THEN IN$=CHR$(27)+"D "+CHR$(27)+"D" ELSE IN=0:IN$=""
205 RETURN
210 GOSUB 200:IF IN$<>"" THEN RETURN ELSE 210
211 IN$=CHR$(CVIL(IN$) AND $FF):IN=ASC(IN$)
212 IN=IN-8*(IN=20)+(IN=30)-30*(IN=0)-7*(IN=24)-119*(IN=8)
216 CN=0:IF IN>96 AND IN<127 THEN IN=IN-32:CN=32
217 IF IN=127 THEN GOSUB 120:IF HO>0 THEN IN$=CHR$(8)+CHR$(16) ELSE IN$=CHR$(9)+CHR$(9):IN$=IN$+IN$+IN$+IN$:IN$=IN$+IN$+IN$+IN$+IN$+CHR$(16)
218 REM IF PEEK(&195)>&7F AND PEEK(&195)<&8A THEN IN$="":IN=-((IN-&80) MOD 10)+10*(IN=&80)
219 RETURN
220 IF((HO<0) OR (HO>39)) THEN IN=0:GOTO 249
221 IF ((VE<0) OR (VE>24)) THEN IN=0:GOTO 249
222 REM Zeichen aus Bildschirm zurcklesen
249 RETURN 
250 PRINT CHR$(7);:RETURN 
260 RV= RND(1): RETURN
270 FR= FRE(0): RETURN
280 RETURN:REM Sperren / Freigeben der Stoptaste 
300 SR$= RIGHT$( STR$(SR!), LEN( STR$(Sr!))+( LEFT$( STR$(Sr!),1)=" ")): RETURN
310 SR$="": IF SR!>=10^(Ct!-Cn!- SGN(Cn!)) THEN GOTO 318
311 IF SR!<-.5*10^-Cn! THEN Sr$="-"
312 SR$=SR$+ MID$( STR$( INT( ABS(Sr!)+.5*10^-Cn!)),2)
313 IF LEN(SR$)<CT!-CN!+(CN!<>0) THEN Sr$=" "+Sr$: GOTO 313
314 IF CN!=0 OR ABS(Sr!)>=1E+10 THEN GOTO 316
315 SR$=SR$+ MID$( STR$(1+ ABS(Sr!)- INT( ABS(Sr!))+.5*10^-Cn!),3,Cn!+1)
316 IF LEN(SR$)<CT! THEN Sr$=Sr$+" ": GOTO 316
317 IF LEN(SR$)>CT! THEN Sr$=""
318 IF LEN(SR$)<CT! THEN Sr$=Sr$+"*": GOTO 318
319 RETURN
330 FOR OF=1 TO LEN(SR$)
331 IF ASC(MID$(SR$,OF,1))>95 THEN GOSUB 340
332 NEXT OF
333 RETURN
340 OSR=ASC(MID$(SR$,OF,1))-32
341 SR$=LEFT$(SR$,OF-1)+CHR$(OSR)+MID$(SR$,OF+1)
342 RETURN
350 LPRINT SR$;:RETURN 
360 LPRINT :RETURN
400 OSP=282*2^((60-SP)/12):VOLUME 2,SV:VOLUME 2,13,512:TUNE 2,OSP
401 FOR OSD=0 TO 2560*SD:NEXT OSD:TUNE 1,0,2,0,3,0:RETURN
450 OTIME=TIMER
451 OSD=SD*30
452 GOSUB 200:IF IN=0 THEN 453 ELSE 454
453 IF OSD>TIMER-OTIME THEN 452 ELSE 457
454 SD=SD-INT((TIMER-OTIME)/30)
455 RETURN
457 SD=0:GOTO 455
500 ONF=(NF AND 1)+4
501 ON ONF+1 GOTO 502,510,515,520,516,521,516,521
516 OPEN "I",ONF,NF$:INPUT #4,OBESTAND$:IN=0:GOTO 539
521 PRINT NF$:OPEN "O",ONF,NF$:IN=0
539 RETURN
540 IN$="":IN=1:ON (ONF+2)/2 GOTO 541,551,551,551
551 IN$=OBESTAND$:IF EOF(ONF) THEN 558
552 LINE INPUT #ONF,OBESTAND$
554 IF OBESTAND$<>"" THEN OU$=MID$(OBESTAND$,1,1)
555 IF ASC(OU$)=26 THEN OBESTAND$="":IN=1:GOTO 559
557 IN=0:GOTO 559
558 IN=1
559 RETURN
560 IN=1:ON (ONF+1)/2 GOTO 561,575,575,575
575 PRINT #ONF,SR$:IN=0:RETURN
580 ON ONF+1 GOTO 582,585,590,592,591,593,591,593
582 RETURN
591 CLOSE ONF:GOTO 599     
593 PRINT #ONF,CHR$(26):PRINT #ONF,CHR$(26):CLOSE ONF 
599 RETURN
600 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)+7*(CC(1)=5)+3*(CC(1)=6)-7*(CC(1)=7));
618 CLS:REM LOCATE 25,5:PRINT "BasiCode-3C fr OMIKRON.BASIC";:LOCATE 1,0
619 RETURN
620 GOSUB 655:OPH=INT(OHO*HG):OPV=INT(OVE*VG):OPM=CN XOR 1:DRAW OPH,OPV:RETURN
630 GOSUB 655:OPH=INT(OHO*HG):OPV=INT(OVE*VG):OPM=CN XOR 1:DRAW TO OPH,OPV:RETURN
650 GOSUB 655:OVE=MIN(VE,0.972):OPV=INT(VE*VG):FOR OPT=0 TO LEN(SR$)-1:OPH=INT(OHO*HG)+OPT*8
651 OPH=MIN(OPH,631+320*(O9=0)):OPC=ASC(MID$(SR$,OPT+1,1))
652 MODE=2:TEXT OPH,OPV+6," ":TEXT OPH,OPV+6,CHR$(OPC):NEXT OPT:MODE=1:RETURN
655 OHO=MAX(0,HO):OHO=(1-(O9<>0))*MIN(OHO,0.998):OVE=MAX(0,VE):OVE=MIN(OVE,0.995)
656 TEXT COLOR=CC(0)- 1*(CC(0)=0)-3*(CC(0)=1)-4*(CC(0)=3)+(CC(0)=4)-7*(CC(0)=5)+7*(CC(0)=7)
657 LINE COLOR=CC(0)- 1*(CC(0)=0)-3*(CC(0)=1)-4*(CC(0)=3)+(CC(0)=4)-7*(CC(0)=5)+7*(CC(0)=7)
658 IF CN=0 THEN GOTO 949
659 TEXT COLOR=CC(1)-(CC(1)=0)-3*(CC(1)=1)-4*(CC(1)=3)+(CC(1)=4)-7*(CC(1)=5)+7*(CC(1)=7)
660 LINE COLOR=CC(1)-(CC(1)=0)-3*(CC(1)=1)-4*(CC(1)=3)+(CC(1)=4)-7*(CC(1)=5)+7*(CC(1)=7)
949 RETURN
950 GOSUB 100:END
1000 A=200:GOTO 20:REM   OTHELLO
1010 HO=INT(HO/4):VE=INT(VE/3):GOSUB 110
1020 NM=0:WU=0:CO=0:C2=0:REM DIM CC(2)
1030 SR$="O T H E L L O"
1040 CC(0)=4:GOSUB 150:CC(0)=7
1050 VE=VE+4:HO=HO+1:GOSUB 110
1060 PRINT "J. Simons 1988"
1070 VE=VE+8:GOSUB 110
1080 PRINT "Anleitung lesen ? (J/N)"
1090 GOSUB 210
1100 IF (IN<>74) AND (IN<>78) THEN GOTO 1090
1110 IF IN=74 THEN GOSUB 9010
1120 GOSUB 600:CN=0
1130 HO=.34:VE=.015:CC(0)=2:SR$="O T H E L L O":GOSUB 650
1140 HO=.01:VE=.001:CC(0)=7:GOSUB 620
1150 HO=.99:GOSUB 630:VE=.055:GOSUB 630
1160 HO=.01:GOSUB 630:VE=.001:GOSUB 630
1170 HO=.01:VE=.88
1180 SR$=" LEERTASTE suchen":GOSUB 650
1190 HO=.52
1200 SR$="      ENTER setzen":GOSUB 650
1210 HO=.01:VE=.7:CC(0)=4:SR$="Ich":GOSUB 650
1220 HO=.9:CC(0)=2:SR$="Du":GOSUB 650
1230 HO=.01:VE=.78:CC(0)=7:GOSUB 620
1240 HO=.125:GOSUB 630:VE=.85:GOSUB 630
1250 HO=.01:GOSUB 630:VE=.78:GOSUB 630
1260 HO=.89:VE=.78:GOSUB 620
1270 HO=.99:GOSUB 630:VE=.85:GOSUB 630
1280 HO=.89:GOSUB 630:VE=.78:GOSUB 630
1290 SD=0:DL=0
1300 DIM A(8,8),B(8,8),C(8,8),D(8,8),E(8,8),F(8,8),G(8,8)
1310 DIM P1(60),P2(60),T1(60),T2(60),RG(60),HM(60)
1320 A(4,4)=1:A(5,4)=-1:A(4,5)=-1:A(5,5)=1
1330 PN=0
1340 FOR J1=1 TO 8
1350 FOR J2=1 TO 8
1360 READ C(J1,J2)
1370 NEXT J2
1380 NEXT J1
1390 FOR J1=1 TO 8
1400 FOR J2=1 TO 8
1410 D(J1,J2)=1
1420 NEXT J2
1430 NEXT J1
1440 D(3,3)=0:D(3,4)=0:D(3,5)=0:D(3,6)=0
1450 D(4,3)=0:D(4,6)=0:D(5,3)=0:D(5,6)=0
1460 D(6,3)=0:D(6,4)=0:D(6,5)=0:D(6,6)=0
1470 GOSUB 3000
1475 MZ$=" Ich denke ...    ":DZ$=" Dein Zug?         "
1480 HO=.27:VE=.07:SR$=" Level (1) oder (2) ?":GOSUB 650
1490 GOSUB 210
1500 IF (IN$<>"1") AND (IN$<>"2") THEN GOTO 1490
1510 CN=1:GOSUB 650:CN=0
1520 HE=IN-49
1530 GOSUB 260:PL=RV*10
1540 IF PL<5 THEN PL=-1:GOTO 2000
1550 PL=1
2000 PL=-PL
2010 GOSUB 250
2020 GOSUB 2200
2060 GOSUB 3300
2070 IF PM=0 THEN GA=GA+1:IF GA=2 THEN GOSUB 6600
2080 IF PM=0 THEN GOTO 2000
2090 GA=0
2100 CN=1:GOSUB 650:CN=0
2110 IF PL<>1 THEN GOTO 2130
2120 SR$=DZ$:SL$=DZ$:CC(0)=2:GOSUB 650:CC(0)=7
2125 GOTO 2150
2130 GOSUB 250
2140 SR$=MZ$:SL$=MZ$:CC(0)=4:GOSUB 650:CC(0)=7
2150 IF PL=-1 THEN GOSUB 5800:GOSUB 6000:GOTO 2170
2160 GOSUB 4100
2170 NM=NM+1
2180 IF NM=60 THEN GOSUB 6600:GOTO 3000
2190 GOTO 2000
2200 HO=.01:VE=.07:CN=1:SR$=SL$:GOSUB 650:CN=0
2210 SR$=" Augenblick ...        ":SL$=SR$:GOSUB 650
2220 RETURN
2250 HO=.01:VE=.07:CN=1:SR$=SL$:GOSUB 650:CN=0
2260 SR$=" Mein Zug:              ":SL$=SR$:GOSUB 650
2270 RETURN
3000 FOR HO=.2 TO .8 STEP.075
3010 VE=.13:CN=0:GOSUB 620
3020 VE=.845:GOSUB 630
3030 NEXT HO
3040 FOR VE=.13 TO .85 STEP.09
3050 HO=.2:GOSUB 620
3060 HO=.8:GOSUB 630
3070 NEXT VE
3080 FOR J=1 TO 8
3090 FOR K=1 TO 8
3100 HO=(48+J*24)/320:VE=(14+(9-K)*18)/200
3110 CN=1:SR$=".":GOSUB 650:SR$="X":GOSUB 650
3120 SR$="O":GOSUB 650:CN=0
3130 IF A(J,K)+4=3 THEN SR$="X":CC(0)=4
3140 IF A(J,K)+4=4 THEN SR$=""
3150 IF A(J,K)+4=5 THEN SR$="O":CC(0)=2
3160 GOSUB 650
3170 NEXT K
3180 NEXT J
3190 HO=.03:VE=.8:CN=1:SR=CO:GOSUB 300:GOSUB 650
3200 HO=.91:SR=C2:GOSUB 300:GOSUB 650:CN=0
3210 GOSUB 6500
3220 HO=.03:VE=.8
3230 SR=CO:GOSUB 300:CC(0)=4:GOSUB 650
3240 HO=.91
3250 SR=C2:GOSUB 300:CC(0)=2:GOSUB 650:CC(0)=7:RETURN
3300 PM=0
3310 FOR X=1 TO 8
3320 FOR Y=1 TO 8
3330 IF (A(X,Y)<>0) OR (D(X,Y)=1) THEN GOTO 3350
3340 GOSUB 3400
3350 NEXT Y
3360 NEXT X
3370 IF (PM=0) AND (DL=0) THEN GOSUB 5600
3380 RETURN
3400 KO=0:X1=X:Y1=Y:C=0
3410 C=C+1:GOSUB 4000:J=0
3420 J=J+1
3430 SE=X1+XD:SI=Y1+YD
3440 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN J=8
3450 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN GOTO 3520
3460 X1=X1+XD:Y1=Y1+YD
3470 IF A(X1,Y1)<>-PL THEN J=8:GOTO 3520
3480 SE=X1+XD:SI=Y1+YD
3490 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN J=8
3500 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN GOTO 3520
3510 IF A(X1+XD,Y1+YD)=PL THEN J=8:C=8:KO=1
3520 IF J<8 THEN GOTO 3420
3530 X1=X:Y1=Y:IF C<8 THEN GOTO 3410
3540 IF KO=1 THEN PM=PM+1:P1(PM)=X:P2(PM)=Y
3550 RETURN
4000 ON C GOTO 4010,4020,4030,4040,4050,4060,4070,4080
4010 XD=0:YD=-1:RETURN
4020 XD=1:YD=-1:RETURN
4030 XD=1:YD=0:RETURN
4040 XD=1:YD=1:RETURN
4050 XD=0:YD=1:RETURN
4060 XD=-1:YD=1:RETURN
4070 XD=-1:YD=0:RETURN
4080 XD=-1:YD=-1:RETURN
4100 ZZ=0
4110 N=0
4120 N=N+1
4130 GOSUB 4300
4140 GOSUB 5500
4150 GOSUB 4400:IF AD=2 THEN GOSUB 250:GOTO 4170
4160 IF AD=0 THEN GOTO 4130
4170 IF AD=2 THEN GOSUB 4300:ZZ=N:N=PM
4180 IF N<>PM THEN GOTO 4120
4190 IF ZZ=0 THEN GOTO 4110
4200 A(P1(ZZ),P2(ZZ))=PL
4210 CC(0)=2:GOSUB 2200:CC(0)=7:GOSUB 6100
4220 X=P1(ZZ):Y=P2(ZZ)
4230 GOSUB 5660:GOSUB 4500:GOSUB 3000
4240 AD=0:PN=0:RETURN
4300 GOSUB 250
4310 HO=(48+P1(N)*24)/320
4320 VE=(14+(9-P2(N))*18)/200
4330 SR$=".":GOSUB 650:RETURN
4400 CN=1:GOSUB 650:CN=0:RETURN
4500 GOSUB 4700:KO=0:X1=X:Y1=Y:C=0
4510 C=C+1:GOSUB 4000:J=0
4520 J=J+1
4530 SE=X1+XD:SI=Y1+YD
4540 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN J=8
4550 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN GOTO 4630
4560 X1=X1+XD:Y1=Y1+YD
4570 IF B(X1,Y1)<>-PL THEN J=8:GOTO 4630
4580 B(X1,Y1)=PL
4590 SE=X1+XD:SI=Y1+YD
4600 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN J=8
4610 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN GOTO 4630
4620 IF B(X1+XD,Y1+YD)=PL THEN J=8:KO=1
4630 IF J<8 THEN GOTO 4520
4640 IF KO=1 THEN GOSUB 4800:KO=0
4650 IF KO<>1 THEN GOSUB 4700
4660 X1=X:Y1=Y
4670 IF C<8 THEN GOTO 4510
4680 RETURN
4700 FOR J=1 TO 8
4710 FOR K=1 TO 8
4720 B(J,K)=A(J,K)
4730 NEXT K
4740 NEXT J
4750 RETURN
4800 FOR J=1 TO 8
4810 FOR K=1 TO 8
4820 A(J,K)=B(J,K)
4830 NEXT K
4840 NEXT J
4900 RETURN
4910 FOR J=1 TO 8
4920 FOR K=1 TO 8
4930 E(J,K)=A(J,K)
4940 NEXT K
4950 NEXT J
4960 RETURN
5000 FOR J=1 TO 8
5010 FOR K=1 TO 8
5020 A(J,K)=E(J,K)
5030 NEXT K
5040 NEXT J
5050 RETURN
5100 FOR J=1 TO 8
5110 FOR K=1 TO 8
5120 F(J,K)=D(J,K)
5130 NEXT K
5140 NEXT J
5150 RETURN
5200 FOR J=1 TO 8
5210 FOR K=1 TO 8
5220 D(J,K)=F(J,K)
5230 NEXT K
5240 NEXT J
5250 RETURN
5300 FOR J=1 TO 8
5310 FOR K=1 TO 8
5320 G(J,K)=C(J,K)
5330 NEXT K
5340 NEXT J
5350 RETURN
5400 FOR J=1 TO 8
5410 FOR K=1 TO 8
5420 C(J,K)=G(J,K)
5430 NEXT K
5440 NEXT J
5450 RETURN
5500 GOSUB 210
5510 IF IN$=" " THEN AD=1:RETURN
5520 IF IN$=CHR$(13) THEN AD=2:RETURN
5530 GOTO 5500
5600 GOSUB 250
5610 HO=.01:VE=.07:CN=1:SR$=SL$:GOSUB 650:CN=0
5620 IF PL=-1 THEN SR$=" Ich kann nicht setzen":GOTO 5640
5630 SR$=" Du kannst nicht setzen"
5640 GOSUB 650
5650 SD=40:GOSUB 450
5655 CN=1:GOSUB 650:CN=0
5660 XX=X:YY=Y
5670 FOR C=1 TO 8
5680 GOSUB 4000:NX=XX+XD:NY=YY+YD
5690 IF (NX<1) OR (NX>8) OR (NY<1) OR (NY>8) THEN GOTO 5710
5700 D(NX,NY)=0
5710 NEXT C:RETURN
5800 IF (NM>11) AND (HE=1) THEN GOSUB 6200
5810 BM=-3000
5820 FOR N=1 TO PM
5830 TC=C(P1(N),P2(N)):IF TC>BM THEN BM=TC
5840 NEXT N
5850 FOR N=1 TO PM
5860 RG(N)=N
5870 NEXT N
5880 FOR N=1 TO PM
5890 GOSUB 260
5900 FF=RV*PM:GG=RV*PM:HH=RG(FF):RG(FF)=RG(GG):RG(GG)=HH
5910 NEXT N
5920 N=0
5930 N=N+1
5940 IF C(P1(RG(N)),P2(RG(N)))<>BM THEN GOTO 5930
5950 A(P1(RG(N)),P2(RG(N)))=PL
5960 X=P1(RG(N)):Y=P2(RG(N))
5970 IF (NM>11) AND (HE=1) THEN GOSUB 5400
5980 X=P1(RG(N)):Y=P2(RG(N)):GOSUB 6100:RETURN
6000 N=0
6010 N=N+1:GOSUB 4300:GOSUB 250
6020 FOR WT=1 TO 800
6030 NEXT WT
6040 GOSUB 4400
6050 IF A(P1(N),P2(N))<>PL THEN GOTO 6010
6060 GOSUB 4300:GOSUB 250:CC(0)=4:GOSUB 2250:CC(0)=7
6070 GOSUB 5660:GOSUB 4500:GOSUB 3000:RETURN
6100 IF PL=-1 THEN FH=800:TH=500
6110 IF PL<>-1 THEN FH=500:TH=300
6120 IF (X=1) AND (Y=1) THEN C(2,1)=FH:C(1,2)=FH:C(2,2)=TH
6130 IF (X=1) AND (Y=8) THEN C(1,7)=FH:C(2,8)=FH:C(2,7)=TH
6140 IF (X=8) AND (Y=1) THEN C(7,1)=FH:C(8,2)=FH:C(7,2)=TH
6150 IF (X=8) AND (Y=8) THEN C(8,7)=FH:C(7,8)=FH:C(7,7)=TH
6160 RETURN
6200 DL=1:TP=PM
6210 FOR JJ=1 TO PM
6220 T1(JJ)=P1(JJ):T2(JJ)=P2(JJ)
6230 NEXT JJ
6240 FOR ZZ=1 TO PM
6250 PL=-1:GOSUB 4910:GOSUB 5100:GOSUB 6500
6260 C1=C2:A(T1(ZZ),T2(ZZ))=PL:X=P1(ZZ)
6270 Y=P2(ZZ):GOSUB 5660:GOSUB 4500:GOSUB 6500
6280 CO=C1-C2*NM/50:PL=1
6290 GOSUB 3300
6300 HM(ZZ)=CO
6310 FOR HM=1 TO PM
6320 HM(ZZ)=HM(ZZ)+C(P1(HM),P2(HM))
6330 NEXT HM
6340 HM(ZZ)=HM(ZZ)/(PM+1)
6350 GOSUB 5000:GOSUB 5200
6360 NEXT ZZ
6370 PM=TP
6380 FOR JJ=1 TO PM
6390 P1(JJ)=T1(JJ):P2(JJ)=T2(JJ)
6400 NEXT JJ
6410 GOSUB 5300
6420 FOR Z=1 TO PM
6430 C(P1(Z),P2(Z))=C(P1(Z),P2(Z))-HM(Z)
6440 NEXT Z
6450 DL=0:PL=-1:RETURN
6500 CO=0:C2=0
6510 FOR CC=1 TO 8
6520 FOR CD=1 TO 8
6530 IF A(CC,CD)=1 THEN C2=C2+1
6540 IF A(CC,CD)=-1 THEN CO=CO+1
6550 NEXT CD
6560 NEXT CC
6570 IF (DL=0) AND (CO=0) OR (DL=0) AND (C2=0) THEN WU=1
6580 IF WU=1 THEN GOTO 6600
6590 RETURN
6600 IF (DL=0) AND (CO=0) OR (DL=0) AND (C2=0) THEN GOTO 6620
6610 GOSUB 6500
6620 GOSUB 250:HO=.01:VE=.07
6630 CN=1:SR$=SL$:GOSUB 650:CN=0
6650 IF C2>CO THEN SR$="  Sehr gut !! Du hast gewonnen ."
6660 IF C2<CO THEN SR$="    Schade !! Du hast verloren ."
6670 IF C2=CO THEN SR$="  Unentschieden !"
6680 GOSUB 650
6690 SD=80:GOSUB 450
6695 CN=1:GOSUB 650:CN=0
6700 HO=.01:VE=.07:CN=1:GOSUB 650:CN=0
6710 SR$="Willst du noch ein Spiel (J/N)?  ":GOSUB 650
6720 GOSUB 210:IF IN=74 THEN GOTO 1000
6730 IF IN=78 THEN GOTO 950
6740 GOTO 6720
9000 REM   *** Erklaerung ***
9010 GOSUB 100
9020 SR$="  S p i e l r e g e l n  ":CC(0)=2:GOSUB 150
9030 CC(0)=7:VE=1:GOSUB 110:PRINT 
9040 PRINT "Dieses Programm ist eine BasiCode-"
9050 PRINT "Version des bekannten Spiels ";
9055 PRINT CHR$(34);"Othello";CHR$(34);"."
9060 PRINT "Auf einem Brett mit 8 x 8 Feldern"
9070 PRINT "setzen du und der Computer"
9080 PRINT "abwechselnd einen Spielstein."
9090 PRINT:PRINT "Deine Steine werden mit ";CHR$(34);
9095 GOSUB 120:CC(0)=2:GOSUB 110:PRINT "O";:CC(0)=7
9097 GOSUB 120:GOSUB 110:PRINT CHR$(34);" und die des"
9100 PRINT "Computers  mit ";CHR$(34);:GOSUB 120
9103 CC(0)=4:GOSUB 110:PRINT "X";
9105 CC(0)=7:GOSUB 120:GOSUB 110:PRINT CHR$(34);" angezeigt."
9110 PRINT "Du darfst nur einen Stein auf ein Feld"
9120 PRINT "setzen, wenn du mit diesem Zug einen"
9130 PRINT "oder mehrere Steine des Computers"
9140 PRINT "einschliessen kannst, und zwar in"
9150 PRINT "horizontaler, vertikaler und"
9160 PRINT "diagonaler Richtung."
9170 PRINT "Die Felder, die du eingeschlossen hast,"
9180 PRINT "werden dann mit deinen Steinen besetzt."
9190 PRINT "Das Ziel des Spiels ist, so viele"
9200 PRINT "Felder wie moeglich zu besetzen."
9210 GOSUB 9390
9220 PRINT:PRINT "Das Spiel endet, wenn alle Felder mit"
9230 PRINT "einem Stein besetzt sind oder kein"
9240 PRINT "Zug mehr moeglich ist. Sieger ist, wer"
9250 PRINT "die meisten Felder besetzt hat."
9260 PRINT "Du kannst nicht auf Felder setzen, wenn"
9270 PRINT "du dort keinen Stein des Computers"
9280 PRINT "einschliessen kannst. Der Computer"
9290 PRINT "zeigt mit einem Punkt an, auf welche"
9300 PRINT "Felder du setzen darfst. Mit Druck auf"
9310 PRINT "die Leertaste kannst du nacheinander"
9320 PRINT "alle Felder sehen, auf die du setzen"
9330 PRINT "darfst. Mit der ENTER- oder RETURN-"
9340 PRINT "Taste setzt du den Stein auf das"
9350 PRINT "Feld, auf dem der Punkt gerade steht."
9360 PRINT 
9370 PRINT "Viel Vergnuegen mit dem Spiel ..."
9380 GOSUB 9390:RETURN
9390 PRINT:PRINT "Druecke eine Taste ..."
9400 GOSUB 210
9410 GOSUB 100:RETURN
25000 DATA 1499,-504,118,98,102,121
25010 DATA -499,1504,-510,-999,21,11
25020 DATA 12,19,-1000,-500,119,19
25030 DATA 49,29,31,49,19,119,99
25040 DATA 10,30,0,0,31,11,99,99
25050 DATA 9,31,0,0,29,11,99,119
25060 DATA 21,49,31,29,51,21,121
25070 DATA -501,-999,21,11,9,21
25080 DATA -999,-501,1501,-501
25090 DATA 121,101,99,121,-501,1499
32000 REM   
32010 REM   ************************
32020 REM   *                      *
32030 REM   *  OTHELLO             *
32040 REM   *                      *
32050 REM   *  J.P.M. SIMONS       *
32060 REM   *  STATIONSSTRAAT 11   *
32070 REM   *  4872 TA ETTEN-LEUR  *
32080 REM   *                      *
32090 REM   *  JULI 1991           *
32100 REM   *                      *
32110 REM   ************************
32120 REM
32130 REM TROS-RADIO dd 911225
32140 REM-spezial DS-Kultur 920318
32200 REM *****************************
32210 REM Korrektur T.Ludwig/22.01.2012
32220 REM in Zeile 1020 vor "DIM CC(2)"
32230 REM ein "REM" hinzugefuegt, da
32240 REM Fehlermeldung bei PC-BASCODER
32250 REM *****************************
32260 REM Uebersetzung fuer
32270 REM Bedienung auf Deutsch
32280 REM Th. Rademacher  April 2023
32290 REM *****************************
32300 REM F.Ludwig, Juni 2023:
32310 REM Grafik korrigiert.
32320 REM *****************************
ein Screenshot aus dem SainT-Emulator
ein Screenshot aus dem SainT-Emulator
OTHELLO.png (10.4 KiB) 1707 mal betrachtet

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

Update: Othello auf Deutsch

Beitrag von BC-Tom »

Schon vom Ursprungsprogramm her war ein Fehler enthalten: manchmal wurden die kleinen Kästchen mit der Anzeige der Steine-Anzahl unvollständig gelöscht und dadurch im weiteren Verlauf verwaschen angezeigt.
Frank aus dem Robotrontechnik-Forum kam der Ursache nun auf die Spur und mailte mir:
Die Grafikfehler bei der Anzahl der Steine habe ich gefunden. Sie treten scheinbar nur bei Level 2 auf.
Die Ursache war, dass die Variablen CO und C2 auch für die Berechnung des nächsten Zuges missbraucht werden.

Als Abhilfe führte er erfolgreich die neuen Variablen CL und CR ein. Hier ist das in den Zeilen 1020, 3190, 3200, 3230 und 3250 korrigierte Programm:

Code: Alles auswählen

0 REM BASICODE-Subroutinen (c) by Thomas Mäurer, Duisburger Str. 296 D-42 OB 1
1 REM Erweiterung zu Version 3C: Thomas Rademacher, JOYCE-User-AG e.V.
10 XBIOS O9,4:DEFSNG "A-Z": SCREEN 0: MODE "USA":CLIP 0,0,639+320*(O9=0),199: GOTO 1000
11 PRINT CHR$(27)"b"CHR$(CC(0)-15*(CC(0)=0)-3*(CC(0)=1)+(CC(0)=2)-2*(CC(0)=3)+2*(CC(0)=4)-7*(CC(0)=5)+3*(CC(0)=6)+7*(CC(0)=7)-8*(CC(0)=CC(1)));
12 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)+7*(CC(1)=7));
13 RETURN
20 GOSUB 100:CLEAR:XBIOS O9,4
21 SV=7:HO=79+40*(O9=0):VE=24:HG=319:VG=199
22 GOSUB 11
23 DIM CC(4):CC(0)=7:CC(1)=0:CC(2)=CC(0):CC(3)=CC(1):CC(4)=CC(1)
28 GOTO 1010
100 GOSUB 11
101 CC(2)=CC(0):CC(3)=CC(1):CLS :REM LOCATE 25,5:PRINT "BasiCode-3C fr OMIKRON.BASIC";:LOCATE 1,0:RETURN 
102 RETURN
110 GOSUB 11
111 VE=MAX(0,VE):VE=MIN(VE,24):HO=MAX(0,HO):HO=MIN(HO,39):PRINT @(Ve,Ho);
119 RETURN
120 HO= POS(0):Ve= CSRLIN -1: RETURN
150 PRINT CHR$(27)"b"CHR$(CC(0)-15*(CC(0)=0)-3*(CC(0)=1)+(CC(0)=2)-2*(CC(0)=3)+2*(CC(0)=4)-7*(CC(0)=5)+3*(CC(0)=6)+7*(CC(0)=7));
151 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)+7*(CC(1)=7));
152 PRINT " "CHR$(27)"p  ";SR$;"  "CHR$(27)"q ";
153 PRINT CHR$(27)"b"CHR$(CC(2)-15*(CC(2)=0)-3*(CC(2)=1)+(CC(2)=2)-2*(CC(2)=3)+2*(CC(2)=4)-7*(CC(2)=5)+3*(CC(2)=6)+7*(CC(2)=7));
154 PRINT CHR$(27)"c"CHR$(CC(3)-15*(CC(3)=0)-3*(CC(3)=1)+(CC(3)=2)-2*(CC(3)=3)+2*(CC(3)=4)-7*(CC(3)=5)+3*(CC(3)=6)+7*(CC(3)=7));
155 RETURN
200 IN=0:IN$=INKEY$:IF IN$<>"" THEN 211
201 IN=IN+32*((IN>96) AND (IN<127))
202 IN=IN-27*(IN=1):IN=IN-23*(IN=6):IF IN=127 THEN GOSUB 120:IF HO>0 THEN IN$=CHR$(27)+"D "+CHR$(27)+"D" ELSE IN=0:IN$=""
205 RETURN
210 GOSUB 200:IF IN$<>"" THEN RETURN ELSE 210
211 IN$=CHR$(CVIL(IN$) AND $FF):IN=ASC(IN$)
212 IN=IN-8*(IN=20)+(IN=30)-30*(IN=0)-7*(IN=24)-119*(IN=8)
216 CN=0:IF IN>96 AND IN<127 THEN IN=IN-32:CN=32
217 IF IN=127 THEN GOSUB 120:IF HO>0 THEN IN$=CHR$(8)+CHR$(16) ELSE IN$=CHR$(9)+CHR$(9):IN$=IN$+IN$+IN$+IN$:IN$=IN$+IN$+IN$+IN$+IN$+CHR$(16)
218 REM IF PEEK(&195)>&7F AND PEEK(&195)<&8A THEN IN$="":IN=-((IN-&80) MOD 10)+10*(IN=&80)
219 RETURN
220 IF((HO<0) OR (HO>39)) THEN IN=0:GOTO 249
221 IF ((VE<0) OR (VE>24)) THEN IN=0:GOTO 249
222 REM Zeichen aus Bildschirm zurcklesen
249 RETURN 
250 PRINT CHR$(7);:RETURN 
260 RV= RND(1): RETURN
270 FR= FRE(0): RETURN
280 RETURN:REM Sperren / Freigeben der Stoptaste 
300 SR$= RIGHT$( STR$(SR!), LEN( STR$(Sr!))+( LEFT$( STR$(Sr!),1)=" ")): RETURN
310 SR$="": IF SR!>=10^(Ct!-Cn!- SGN(Cn!)) THEN GOTO 318
311 IF SR!<-.5*10^-Cn! THEN Sr$="-"
312 SR$=SR$+ MID$( STR$( INT( ABS(Sr!)+.5*10^-Cn!)),2)
313 IF LEN(SR$)<CT!-CN!+(CN!<>0) THEN Sr$=" "+Sr$: GOTO 313
314 IF CN!=0 OR ABS(Sr!)>=1E+10 THEN GOTO 316
315 SR$=SR$+ MID$( STR$(1+ ABS(Sr!)- INT( ABS(Sr!))+.5*10^-Cn!),3,Cn!+1)
316 IF LEN(SR$)<CT! THEN Sr$=Sr$+" ": GOTO 316
317 IF LEN(SR$)>CT! THEN Sr$=""
318 IF LEN(SR$)<CT! THEN Sr$=Sr$+"*": GOTO 318
319 RETURN
330 FOR OF=1 TO LEN(SR$)
331 IF ASC(MID$(SR$,OF,1))>95 THEN GOSUB 340
332 NEXT OF
333 RETURN
340 OSR=ASC(MID$(SR$,OF,1))-32
341 SR$=LEFT$(SR$,OF-1)+CHR$(OSR)+MID$(SR$,OF+1)
342 RETURN
350 LPRINT SR$;:RETURN 
360 LPRINT :RETURN
400 OSP=282*2^((60-SP)/12):VOLUME 2,SV:VOLUME 2,13,512:TUNE 2,OSP
401 FOR OSD=0 TO 2560*SD:NEXT OSD:TUNE 1,0,2,0,3,0:RETURN
450 OTIME=TIMER
451 OSD=SD*30
452 GOSUB 200:IF IN=0 THEN 453 ELSE 454
453 IF OSD>TIMER-OTIME THEN 452 ELSE 457
454 SD=SD-INT((TIMER-OTIME)/30)
455 RETURN
457 SD=0:GOTO 455
500 ONF=(NF AND 1)+4
501 ON ONF+1 GOTO 502,510,515,520,516,521,516,521
516 OPEN "I",ONF,NF$:INPUT #4,OBESTAND$:IN=0:GOTO 539
521 PRINT NF$:OPEN "O",ONF,NF$:IN=0
539 RETURN
540 IN$="":IN=1:ON (ONF+2)/2 GOTO 541,551,551,551
551 IN$=OBESTAND$:IF EOF(ONF) THEN 558
552 LINE INPUT #ONF,OBESTAND$
554 IF OBESTAND$<>"" THEN OU$=MID$(OBESTAND$,1,1)
555 IF ASC(OU$)=26 THEN OBESTAND$="":IN=1:GOTO 559
557 IN=0:GOTO 559
558 IN=1
559 RETURN
560 IN=1:ON (ONF+1)/2 GOTO 561,575,575,575
575 PRINT #ONF,SR$:IN=0:RETURN
580 ON ONF+1 GOTO 582,585,590,592,591,593,591,593
582 RETURN
591 CLOSE ONF:GOTO 599     
593 PRINT #ONF,CHR$(26):PRINT #ONF,CHR$(26):CLOSE ONF 
599 RETURN
600 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)+7*(CC(1)=5)+3*(CC(1)=6)-7*(CC(1)=7));
618 CLS:REM LOCATE 25,5:PRINT "BasiCode-3C fr OMIKRON.BASIC";:LOCATE 1,0
619 RETURN
620 GOSUB 655:OPH=INT(OHO*HG):OPV=INT(OVE*VG):OPM=CN XOR 1:DRAW OPH,OPV:RETURN
630 GOSUB 655:OPH=INT(OHO*HG):OPV=INT(OVE*VG):OPM=CN XOR 1:DRAW TO OPH,OPV:RETURN
650 GOSUB 655:OVE=MIN(VE,0.972):OPV=INT(VE*VG):FOR OPT=0 TO LEN(SR$)-1:OPH=INT(OHO*HG)+OPT*8
651 OPH=MIN(OPH,631+320*(O9=0)):OPC=ASC(MID$(SR$,OPT+1,1))
652 MODE=2:TEXT OPH,OPV+6," ":TEXT OPH,OPV+6,CHR$(OPC):NEXT OPT:MODE=1:RETURN
655 OHO=MAX(0,HO):OHO=(1-(O9<>0))*MIN(OHO,0.998):OVE=MAX(0,VE):OVE=MIN(OVE,0.995)
656 TEXT COLOR=CC(0)- 1*(CC(0)=0)-3*(CC(0)=1)-4*(CC(0)=3)+(CC(0)=4)-7*(CC(0)=5)+7*(CC(0)=7)
657 LINE COLOR=CC(0)- 1*(CC(0)=0)-3*(CC(0)=1)-4*(CC(0)=3)+(CC(0)=4)-7*(CC(0)=5)+7*(CC(0)=7)
658 IF CN=0 THEN GOTO 949
659 TEXT COLOR=CC(1)-(CC(1)=0)-3*(CC(1)=1)-4*(CC(1)=3)+(CC(1)=4)-7*(CC(1)=5)+7*(CC(1)=7)
660 LINE COLOR=CC(1)-(CC(1)=0)-3*(CC(1)=1)-4*(CC(1)=3)+(CC(1)=4)-7*(CC(1)=5)+7*(CC(1)=7)
949 RETURN
950 GOSUB 100:END
1000 A=200:GOTO 20:REM   OTHELLO
1010 HO=INT(HO/4):VE=INT(VE/3):GOSUB 110
1020 NM=0:WU=0:CO=0:C2=0:CL=0:CR=0:REM DIM CC(2)
1030 SR$="O T H E L L O"
1040 CC(0)=4:GOSUB 150:CC(0)=7
1050 VE=VE+4:HO=HO+1:GOSUB 110
1060 PRINT "J. Simons 1988"
1070 VE=VE+8:GOSUB 110
1080 PRINT "Anleitung lesen ? (J/N)"
1090 GOSUB 210
1100 IF (IN<>74)AND(IN<>78) THEN GOTO 1090
1110 IF IN=74 THEN GOSUB 9010
1120 GOSUB 600:CN=0
1130 HO=.34:VE=.015:CC(0)=2:SR$="O T H E L L O":GOSUB 650
1140 HO=.01:VE=.001:CC(0)=7:GOSUB 620
1150 HO=.99:GOSUB 630:VE=.055:GOSUB 630
1160 HO=.01:GOSUB 630:VE=.001:GOSUB 630
1170 HO=.01:VE=.88
1180 SR$=" LEERTASTE suchen":GOSUB 650
1190 HO=.52
1200 SR$="      ENTER setzen":GOSUB 650
1210 HO=.01:VE=.7:CC(0)=4:SR$="Ich":GOSUB 650
1220 HO=.9:CC(0)=2:SR$="Du":GOSUB 650
1230 HO=.01:VE=.78:CC(0)=7:GOSUB 620
1240 HO=.11:GOSUB 630:VE=.85:GOSUB 630
1250 HO=.01:GOSUB 630:VE=.78:GOSUB 630
1260 HO=.89:VE=.78:GOSUB 620
1270 HO=.99:GOSUB 630:VE=.85:GOSUB 630
1280 HO=.89:GOSUB 630:VE=.78:GOSUB 630
1290 SD=0:DL=0
1300 DIM A(8,8),B(8,8),C(8,8),D(8,8),E(8,8),F(8,8),G(8,8)
1310 DIM P1(60),P2(60),T1(60),T2(60),RG(60),HM(60)
1320 A(4,4)=1:A(5,4)=-1:A(4,5)=-1:A(5,5)=1
1330 PN=0
1340 FOR J1=1 TO 8
1350 FOR J2=1 TO 8
1360 READ C(J1,J2)
1370 NEXT J2
1380 NEXT J1
1390 FOR J1=1 TO 8
1400 FOR J2=1 TO 8
1410 D(J1,J2)=1
1420 NEXT J2
1430 NEXT J1
1440 D(3,3)=0:D(3,4)=0:D(3,5)=0:D(3,6)=0
1450 D(4,3)=0:D(4,6)=0:D(5,3)=0:D(5,6)=0
1460 D(6,3)=0:D(6,4)=0:D(6,5)=0:D(6,6)=0
1470 GOSUB 3000
1475 MZ$=" Ich denke ...    ":DZ$=" Dein Zug?         "
1480 HO=.27:VE=.07:SR$=" Level (1) oder (2) ?":GOSUB 650
1490 GOSUB 210
1500 IF (IN$<>"1")AND(IN$<>"2") THEN GOTO 1490
1510 CN=1:GOSUB 650:CN=0
1520 HE=IN-49
1530 GOSUB 260:PL=RV*10
1540 IF PL<5 THEN PL=-1:GOTO 2000
1550 PL=1
2000 PL=-PL
2010 GOSUB 250
2020 GOSUB 2200
2060 GOSUB 3300
2070 IF PM=0 THEN GA=GA+1:IF GA=2 THEN GOSUB 6600
2080 IF PM=0 THEN GOTO 2000
2090 GA=0
2100 CN=1:GOSUB 650:CN=0
2110 IF PL<>1 THEN GOTO 2130
2120 SR$=DZ$:SL$=DZ$:CC(0)=2:GOSUB 650:CC(0)=7
2125 GOTO 2150
2130 GOSUB 250
2140 SR$=MZ$:SL$=MZ$:CC(0)=4:GOSUB 650:CC(0)=7
2150 IF PL=-1 THEN GOSUB 5800:GOSUB 6000:GOTO 2170
2160 GOSUB 4100
2170 NM=NM+1
2180 IF NM=60 THEN GOSUB 6600:GOTO 3000
2190 GOTO 2000
2200 HO=.01:VE=.07:CN=1:SR$=SL$:GOSUB 650:CN=0
2210 SR$=" Augenblick ...        ":SL$=SR$:GOSUB 650
2220 RETURN
2250 HO=.01:VE=.07:CN=1:SR$=SL$:GOSUB 650:CN=0
2260 SR$=" Mein Zug ...          ":SL$=SR$:GOSUB 650
2270 RETURN
3000 FOR HO=.2 TO .8 STEP .075
3010 VE=.13:CN=0:GOSUB 620
3020 VE=.845:GOSUB 630
3030 NEXT HO
3040 FOR VE=.13 TO .85 STEP .09
3050 HO=.2:GOSUB 620
3060 HO=.8:GOSUB 630
3070 NEXT VE
3080 FOR J=1 TO 8
3090 FOR K=1 TO 8
3100 HO=(48+J*24)/320:VE=(14+(9-K)*18)/200
3110 CN=1:SR$=".":GOSUB 650:SR$="X":GOSUB 650
3120 SR$="O":GOSUB 650:CN=0
3130 IF A(J,K)+4=3 THEN SR$="X":CC(0)=4
3140 IF A(J,K)+4=4 THEN SR$=""
3150 IF A(J,K)+4=5 THEN SR$="O":CC(0)=2
3160 GOSUB 650
3170 NEXT K
3180 NEXT J
3190 HO=.03:VE=.8:CN=1:SR=CL:GOSUB 300:GOSUB 650
3200 HO=.91:SR=CR:GOSUB 300:GOSUB 650:CN=0
3210 GOSUB 6500
3220 HO=.03:VE=.8
3230 CL=CO:SR=CO:GOSUB 300:CC(0)=4:GOSUB 650
3240 HO=.91
3250 CR=C2:SR=C2:GOSUB 300:CC(0)=2:GOSUB 650:CC(0)=7:RETURN
3300 PM=0
3310 FOR X=1 TO 8
3320 FOR Y=1 TO 8
3330 IF (A(X,Y)<>0)OR(D(X,Y)=1) THEN GOTO 3350
3340 GOSUB 3400
3350 NEXT Y
3360 NEXT X
3370 IF (PM=0)AND(DL=0) THEN GOSUB 5600
3380 RETURN
3400 KO=0:X1=X:Y1=Y:C=0
3410 C=C+1:GOSUB 4000:J=0
3420 J=J+1
3430 SE=X1+XD:SI=Y1+YD
3440 IF (SE<1)OR(SE>8)OR(SI<1)OR(SI>8) THEN J=8
3450 IF (SE<1)OR(SE>8)OR(SI<1)OR(SI>8) THEN GOTO 3520
3460 X1=X1+XD:Y1=Y1+YD
3470 IF A(X1,Y1)<>-PL THEN J=8:GOTO 3520
3480 SE=X1+XD:SI=Y1+YD
3490 IF (SE<1)OR(SE>8)OR(SI<1)OR(SI>8) THEN J=8
3500 IF (SE<1)OR(SE>8)OR(SI<1)OR(SI>8) THEN GOTO 3520
3510 IF A(X1+XD,Y1+YD)=PL THEN J=8:C=8:KO=1
3520 IF J<8 THEN GOTO 3420
3530 X1=X:Y1=Y:IF C<8 THEN GOTO 3410
3540 IF KO=1 THEN PM=PM+1:P1(PM)=X:P2(PM)=Y
3550 RETURN
4000 ON C GOTO 4010,4020,4030,4040,4050,4060,4070,4080
4010 XD=0:YD=-1:RETURN
4020 XD=1:YD=-1:RETURN
4030 XD=1:YD=0:RETURN
4040 XD=1:YD=1:RETURN
4050 XD=0:YD=1:RETURN
4060 XD=-1:YD=1:RETURN
4070 XD=-1:YD=0:RETURN
4080 XD=-1:YD=-1:RETURN
4100 ZZ=0
4110 N=0
4120 N=N+1
4130 GOSUB 4300
4140 GOSUB 5500
4150 GOSUB 4400:IF AD=2 THEN GOSUB 250:GOTO 4170
4160 IF AD=0 THEN GOTO 4130
4170 IF AD=2 THEN GOSUB 4300:ZZ=N:N=PM
4180 IF N<>PM THEN GOTO 4120
4190 IF ZZ=0 THEN GOTO 4110
4200 A(P1(ZZ),P2(ZZ))=PL
4210 CC(0)=2:GOSUB 2200:CC(0)=7:GOSUB 6100
4220 X=P1(ZZ):Y=P2(ZZ)
4230 GOSUB 5660:GOSUB 4500:GOSUB 3000
4240 AD=0:PN=0:RETURN
4300 GOSUB 250
4310 HO=(48+P1(N)*24)/320
4320 VE=(14+(9-P2(N))*18)/200
4330 SR$=".":GOSUB 650:RETURN
4400 CN=1:GOSUB 650:CN=0:RETURN
4500 GOSUB 4700:KO=0:X1=X:Y1=Y:C=0
4510 C=C+1:GOSUB 4000:J=0
4520 J=J+1
4530 SE=X1+XD:SI=Y1+YD
4540 IF (SE<1)OR(SE>8)OR(SI<1)OR(SI>8) THEN J=8
4550 IF (SE<1)OR(SE>8)OR(SI<1)OR(SI>8) THEN GOTO 4630
4560 X1=X1+XD:Y1=Y1+YD
4570 IF B(X1,Y1)<>-PL THEN J=8:GOTO 4630
4580 B(X1,Y1)=PL
4590 SE=X1+XD:SI=Y1+YD
4600 IF (SE<1)OR(SE>8)OR(SI<1)OR(SI>8) THEN J=8
4610 IF (SE<1)OR(SE>8)OR(SI<1)OR(SI>8) THEN GOTO 4630
4620 IF B(X1+XD,Y1+YD)=PL THEN J=8:KO=1
4630 IF J<8 THEN GOTO 4520
4640 IF KO=1 THEN GOSUB 4800:KO=0
4650 IF KO<>1 THEN GOSUB 4700
4660 X1=X:Y1=Y
4670 IF C<8 THEN GOTO 4510
4680 RETURN
4700 FOR J=1 TO 8
4710 FOR K=1 TO 8
4720 B(J,K)=A(J,K)
4730 NEXT K
4740 NEXT J
4750 RETURN
4800 FOR J=1 TO 8
4810 FOR K=1 TO 8
4820 A(J,K)=B(J,K)
4830 NEXT K
4840 NEXT J
4900 RETURN
4910 FOR J=1 TO 8
4920 FOR K=1 TO 8
4930 E(J,K)=A(J,K)
4940 NEXT K
4950 NEXT J
4960 RETURN
5000 FOR J=1 TO 8
5010 FOR K=1 TO 8
5020 A(J,K)=E(J,K)
5030 NEXT K
5040 NEXT J
5050 RETURN
5100 FOR J=1 TO 8
5110 FOR K=1 TO 8
5120 F(J,K)=D(J,K)
5130 NEXT K
5140 NEXT J
5150 RETURN
5200 FOR J=1 TO 8
5210 FOR K=1 TO 8
5220 D(J,K)=F(J,K)
5230 NEXT K
5240 NEXT J
5250 RETURN
5300 FOR J=1 TO 8
5310 FOR K=1 TO 8
5320 G(J,K)=C(J,K)
5330 NEXT K
5340 NEXT J
5350 RETURN
5400 FOR J=1 TO 8
5410 FOR K=1 TO 8
5420 C(J,K)=G(J,K)
5430 NEXT K
5440 NEXT J
5450 RETURN
5500 GOSUB 210
5510 IF IN$=" " THEN AD=1:RETURN
5520 IF IN$=CHR$(13) THEN AD=2:RETURN
5530 GOTO 5500
5600 GOSUB 250
5610 HO=.01:VE=.07:CN=1:SR$=SL$:GOSUB 650:CN=0
5620 IF PL=-1 THEN SR$=" Ich kann nicht setzen":GOTO 5640
5630 SR$=" Du kannst nicht setzen"
5640 GOSUB 650
5650 SD=40:GOSUB 450
5655 CN=1:GOSUB 650:CN=0
5660 XX=X:YY=Y
5670 FOR C=1 TO 8
5680 GOSUB 4000:NX=XX+XD:NY=YY+YD
5690 IF (NX<1)OR(NX>8)OR(NY<1)OR(NY>8) THEN GOTO 5710
5700 D(NX,NY)=0
5710 NEXT C:RETURN
5800 IF (NM>11)AND(HE=1) THEN GOSUB 6200
5810 BM=-3000
5820 FOR N=1 TO PM
5830 TC=C(P1(N),P2(N)):IF TC>BM THEN BM=TC
5840 NEXT N
5850 FOR N=1 TO PM
5860 RG(N)=N
5870 NEXT N
5880 FOR N=1 TO PM
5890 GOSUB 260
5900 FF=RV*PM:GG=RV*PM:HH=RG(FF):RG(FF)=RG(GG):RG(GG)=HH
5910 NEXT N
5920 N=0
5930 N=N+1
5940 IF C(P1(RG(N)),P2(RG(N)))<>BM THEN GOTO 5930
5950 A(P1(RG(N)),P2(RG(N)))=PL
5960 X=P1(RG(N)):Y=P2(RG(N))
5970 IF (NM>11)AND(HE=1) THEN GOSUB 5400
5980 X=P1(RG(N)):Y=P2(RG(N)):GOSUB 6100:RETURN
6000 N=0
6010 N=N+1:GOSUB 4300:GOSUB 250
6020 FOR WT=1 TO 800
6030 NEXT WT
6040 GOSUB 4400
6050 IF A(P1(N),P2(N))<>PL THEN GOTO 6010
6060 GOSUB 4300:GOSUB 250:CC(0)=4:GOSUB 2250:CC(0)=7
6070 GOSUB 5660:GOSUB 4500:GOSUB 3000:RETURN
6100 IF PL=-1 THEN FH=800:TH=500
6110 IF PL<>-1 THEN FH=500:TH=300
6120 IF (X=1)AND(Y=1) THEN C(2,1)=FH:C(1,2)=FH:C(2,2)=TH
6130 IF (X=1)AND(Y=8) THEN C(1,7)=FH:C(2,8)=FH:C(2,7)=TH
6140 IF (X=8)AND(Y=1) THEN C(7,1)=FH:C(8,2)=FH:C(7,2)=TH
6150 IF (X=8)AND(Y=8) THEN C(8,7)=FH:C(7,8)=FH:C(7,7)=TH
6160 RETURN
6200 DL=1:TP=PM
6210 FOR JJ=1 TO PM
6220 T1(JJ)=P1(JJ):T2(JJ)=P2(JJ)
6230 NEXT JJ
6240 FOR ZZ=1 TO PM
6250 PL=-1:GOSUB 4910:GOSUB 5100:GOSUB 6500
6260 C1=C2:A(T1(ZZ),T2(ZZ))=PL:X=P1(ZZ)
6270 Y=P2(ZZ):GOSUB 5660:GOSUB 4500:GOSUB 6500
6280 CO=C1-C2*NM/50:PL=1
6290 GOSUB 3300
6300 HM(ZZ)=CO
6310 FOR HM=1 TO PM
6320 HM(ZZ)=HM(ZZ)+C(P1(HM),P2(HM))
6330 NEXT HM
6340 HM(ZZ)=HM(ZZ)/(PM+1)
6350 GOSUB 5000:GOSUB 5200
6360 NEXT ZZ
6370 PM=TP
6380 FOR JJ=1 TO PM
6390 P1(JJ)=T1(JJ):P2(JJ)=T2(JJ)
6400 NEXT JJ
6410 GOSUB 5300
6420 FOR Z=1 TO PM
6430 C(P1(Z),P2(Z))=C(P1(Z),P2(Z))-HM(Z)
6440 NEXT Z
6450 DL=0:PL=-1:RETURN
6500 CO=0:C2=0
6510 FOR CC=1 TO 8
6520 FOR CD=1 TO 8
6530 IF A(CC,CD)=1 THEN C2=C2+1
6540 IF A(CC,CD)=-1 THEN CO=CO+1
6550 NEXT CD
6560 NEXT CC
6570 IF (DL=0)AND(CO=0)OR(DL=0)AND(C2=0) THEN WU=1
6580 IF WU=1 THEN GOTO 6600
6590 RETURN
6600 IF (DL=0)AND(CO=0)OR(DL=0)AND(C2=0) THEN GOTO 6620
6610 GOSUB 6500
6620 GOSUB 250:HO=.01:VE=.07
6630 CN=1:SR$=SL$:GOSUB 650:CN=0
6650 IF C2>CO THEN SR$="  Sehr gut !! Du hast gewonnen ."
6660 IF C2<CO THEN SR$="    Schade !! Du hast verloren ."
6670 IF C2=CO THEN SR$="  Unentschieden !"
6680 GOSUB 650
6690 SD=80:GOSUB 450
6695 CN=1:GOSUB 650:CN=0
6700 HO=.01:VE=.07:CN=1:GOSUB 650:CN=0
6710 SR$="Willst du noch ein Spiel (J/N)?  ":GOSUB 650
6720 GOSUB 210:IF IN=74 THEN GOTO 1000
6730 IF IN=78 THEN GOTO 950
6740 GOTO 6720
9000 REM   *** Erklaerung ***
9010 GOSUB 100
9020 SR$="  S p i e l r e g e l n  ":CC(0)=2:GOSUB 150
9030 CC(0)=7:VE=1:GOSUB 110:PRINT 
9040 PRINT "Dieses Programm ist eine BasiCode-"
9050 PRINT "Version des bekannten Spiels ";
9055 PRINT CHR$(34);"Othello";CHR$(34);"."
9060 PRINT "Auf einem Brett mit 8 x 8 Feldern"
9070 PRINT "setzen du und der Computer"
9080 PRINT "abwechselnd einen Spielstein."
9090 PRINT :PRINT "Deine Steine werden mit ";CHR$(34);
9095 GOSUB 120:CC(0)=2:GOSUB 110:PRINT "O";:CC(0)=7
9097 GOSUB 120:GOSUB 110:PRINT CHR$(34);" und die des"
9100 PRINT "Computers  mit ";CHR$(34);:GOSUB 120
9103 CC(0)=4:GOSUB 110:PRINT "X";
9105 CC(0)=7:GOSUB 120:GOSUB 110:PRINT CHR$(34);" angezeigt."
9110 PRINT "Du darfst nur einen Stein auf ein Feld"
9120 PRINT "setzen, wenn du mit diesem Zug einen"
9130 PRINT "oder mehrere Steine des Computers"
9140 PRINT "einschliessen kannst, und zwar in"
9150 PRINT "horizontaler, vertikaler und"
9160 PRINT "diagonaler Richtung."
9170 PRINT "Die Felder, die du eingeschlossen hast,"
9180 PRINT "werden dann mit deinen Steinen besetzt."
9190 PRINT "Das Ziel des Spiels ist, so viele"
9200 PRINT "Felder wie moeglich zu besetzen."
9210 GOSUB 9390
9220 PRINT :PRINT "Das Spiel endet, wenn alle Felder mit"
9230 PRINT "einem Stein besetzt sind oder kein"
9240 PRINT "Zug mehr moeglich ist. Sieger ist, wer"
9250 PRINT "die meisten Felder besetzt hat."
9260 PRINT "Du kannst nicht auf Felder setzen, wenn"
9270 PRINT "du dort keinen Stein des Computers"
9280 PRINT "einschliessen kannst. Der Computer"
9290 PRINT "zeigt mit einem Punkt an, auf welche"
9300 PRINT "Felder du setzen darfst. Mit Druck auf"
9310 PRINT "die Leertaste kannst du nacheinander"
9320 PRINT "alle Felder sehen, auf die du setzen"
9330 PRINT "darfst. Mit der ENTER- oder RETURN-"
9340 PRINT "Taste setzt du den Stein auf das"
9350 PRINT "Feld, auf dem der Punkt gerade steht."
9360 PRINT 
9370 PRINT "Viel Vergnuegen mit dem Spiel ..."
9380 GOSUB 9390:RETURN
9390 PRINT :PRINT "Druecke eine Taste ..."
9400 GOSUB 210
9410 GOSUB 100:RETURN
25000 DATA 1499,-504,118,98,102,121
25010 DATA -499,1504,-510,-999,21,11
25020 DATA 12,19,-1000,-500,119,19
25030 DATA 49,29,31,49,19,119,99
25040 DATA 10,30,0,0,31,11,99,99
25050 DATA 9,31,0,0,29,11,99,119
25060 DATA 21,49,31,29,51,21,121
25070 DATA -501,-999,21,11,9,21
25080 DATA -999,-501,1501,-501
25090 DATA 121,101,99,121,-501,1499
32000 REM   
32010 REM   ************************
32020 REM   *                      *
32030 REM   *  OTHELLO             *
32040 REM   *                      *
32050 REM   *  J.P.M. SIMONS       *
32060 REM   *  STATIONSSTRAAT 11   *
32070 REM   *  4872 TA ETTEN-LEUR  *
32080 REM   *                      *
32090 REM   *  JULI 1991           *
32100 REM   *                      *
32110 REM   ************************
32120 REM
32130 REM TROS-RADIO dd 911225
32140 REM - spezial DS-Kultur 920318
32200 REM *****************************
32210 REM Korrektur T.Ludwig/22.01.2012
32220 REM in Zeile 1020 vor "DIMCC(2)"
32230 REM ein "REM" hinzugefuegt, da
32240 REM Fehlermeldung bei PC-BASCODER
32250 REM *****************************
32260 REM Uebersetzung fuer
32270 REM Bedienung auf Deutsch
32280 REM Th. Rademacher  April 2021
32290 REM *****************************
32300 REM Grafik fuer KC85/3..5
32310 REM optimiert, Grafikfehler 
32320 REM beseitigt (Variablen CO,C2)
32330 REM F.Ludwig, Juni 2023
32340 REM *****************************
OTHELLO.png
das gleiche Programm auf dem Sinclair ZX Spectrum
das gleiche Programm auf dem Sinclair ZX Spectrum
Level_2.jpg (78.86 KiB) 1680 mal betrachtet

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

Das Zauberwürfel-Programm noch einmal überarbeitet

Beitrag von BC-Tom »

Im Ursprungs-Programm Kubus war ein Fehler enthalten: gab man ein, eine Seite drehen zu wollen, wurde sie immer linksherum gedreht, auch wenn man rechtsherum gewählt hatte. Das ist nun korrigiert.

Code: Alles auswählen

0 REM BASICODE-Subroutinen (c) by Thomas M„urer, Duisburger Str. 296 D-42 OB 1
10 DEFSNG "A-Z": SCREEN 0: MODE "USA":CLIP 0,0,319,199: GOTO 1000
11 PRINT CHR$(27)"b"CHR$(CC(0)-15*(CC(0)=0)-3*(CC(0)=1)+(CC(0)=2)-2*(CC(0)=3)+2*(CC(0)=4)-7*(CC(0)=5)+3*(CC(0)=6)+7*(CC(0)=7)-8*(CC(0)=CC(1)));
12 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)+7*(CC(1)=7));
13 RETURN
20 GOSUB 100:CLEAR
21 SV=7:HO=39:VE=24:HG=319:VG=199
22 GOSUB 11
23 DIM CC(4):CC(0)=7:CC(1)=0:CC(2)=CC(0):CC(3)=CC(1):CC(4)=CC(1)
28 GOTO 1010
100 GOSUB 11
101 CC(2)=CC(0):CC(3)=CC(1):CLS :LOCATE 25,5:PRINT "BasiCode-3C fr OMIKRON.BASIC";:LOCATE 1,0:RETURN 
110 GOSUB 11
111 VE=MAX(0,VE):VE=MIN(VE,24):HO=MAX(0,HO):HO=MIN(HO,39):PRINT @(Ve,Ho);
119 RETURN
120 HO= POS(0):Ve= CSRLIN -1: RETURN
150 PRINT CHR$(27)"b"CHR$(CC(0)-15*(CC(0)=0)-3*(CC(0)=1)+(CC(0)=2)-2*(CC(0)=3)+2*(CC(0)=4)-7*(CC(0)=5)+3*(CC(0)=6)+7*(CC(0)=7));
151 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)+7*(CC(1)=7));
152 PRINT " "CHR$(27)"p  ";SR$;"  "CHR$(27)"q ";
153 PRINT CHR$(27)"b"CHR$(CC(2)-15*(CC(2)=0)-3*(CC(2)=1)+(CC(2)=2)-2*(CC(2)=3)+2*(CC(2)=4)-7*(CC(2)=5)+3*(CC(2)=6)+7*(CC(2)=7));
154 PRINT CHR$(27)"c"CHR$(CC(3)-15*(CC(3)=0)-3*(CC(3)=1)+(CC(3)=2)-2*(CC(3)=3)+2*(CC(3)=4)-7*(CC(3)=5)+3*(CC(3)=6)+7*(CC(3)=7));
155 RETURN
200 IN=0:IN$=INKEY$:IF IN$<>"" THEN 211
201 IN=IN+32*((IN>96) AND (IN<127))
202 IN=IN-27*(IN=1):IN=IN-23*(IN=6):IF IN=127 THEN GOSUB 120:IF HO>0 THEN IN$=CHR$(27)+"D "+CHR$(27)+"D" ELSE IN=0:IN$=""
205 RETURN
210 GOSUB 200:IF IN$<>"" THEN RETURN ELSE 210
211 IN$=CHR$(CVIL(IN$) AND $FF):IN=ASC(IN$)
212 IN=IN-8*(IN=20)+(IN=30)-30*(IN=0)-7*(IN=24)-119*(IN=8)
216 CN=0:IF IN>96 AND IN<127 THEN IN=IN-32:CN=32
217 IF IN=127 THEN GOSUB 120:IF HO>0 THEN IN$=CHR$(8)+CHR$(16) ELSE IN$=CHR$(9)+CHR$(9):IN$=IN$+IN$+IN$+IN$:IN$=IN$+IN$+IN$+IN$+IN$+CHR$(16)
218 REM IF PEEK(&195)>&7F AND PEEK(&195)<&8A THEN IN$="":IN=-((IN-&80) MOD 10)+10*(IN=&80)
219 RETURN
220 IF((HO<0) OR (HO>39)) THEN IN=0:GOTO 249
221 IF ((VE<0) OR (VE>24)) THEN IN=0:GOTO 249
222 REM Zeichen aus Bildschirm zurcklesen
249 RETURN 
250 PRINT CHR$(7);:RETURN 
260 RV= RND(1): RETURN
270 FR= FRE(0): RETURN
280 RETURN:REM Sperren / Freigeben der Stoptaste 
300 SR$= RIGHT$( STR$(SR!), LEN( STR$(Sr!))+( LEFT$( STR$(Sr!),1)=" ")): RETURN
310 SR$="": IF SR!>=10^(Ct!-Cn!- SGN(Cn!)) THEN GOTO 318
311 IF SR!<-.5*10^-Cn! THEN Sr$="-"
312 SR$=SR$+ MID$( STR$( INT( ABS(Sr!)+.5*10^-Cn!)),2)
313 IF LEN(SR$)<CT!-CN!+(CN!<>0) THEN Sr$=" "+Sr$: GOTO 313
314 IF CN!=0 OR ABS(Sr!)>=1E+10 THEN GOTO 316
315 SR$=SR$+ MID$( STR$(1+ ABS(Sr!)- INT( ABS(Sr!))+.5*10^-Cn!),3,Cn!+1)
316 IF LEN(SR$)<CT! THEN Sr$=Sr$+" ": GOTO 316
317 IF LEN(SR$)>CT! THEN Sr$=""
318 IF LEN(SR$)<CT! THEN Sr$=Sr$+"*": GOTO 318
319 RETURN
330 FOR OF=1 TO LEN(SR$)
331 IF ASC(MID$(SR$,OF,1))>95 THEN GOSUB 340
332 NEXT OF
333 RETURN
340 OSR=ASC(MID$(SR$,OF,1))-32
341 SR$=LEFT$(SR$,OF-1)+CHR$(OSR)+MID$(SR$,OF+1)
342 RETURN
350 LPRINT SR$;:RETURN 
360 LPRINT :RETURN
400 OSP=268*2^((60-SP)/12):VOLUME 2,SV:VOLUME 2,13,256*SD:TUNE 2,OSP
401 FOR OSD=0 TO 2560*SD:NEXT OSD:VOLUME 2,0:RETURN
450 OTIME=TIME
451 OSD=SD*30
452 GOSUB 200:IF IN=0 THEN 453 ELSE 454
453 IF OSD>TIME-OTIME THEN 452 ELSE 457
454 SD=SD-INT((TIME-OTIME)/30)
455 RETURN
457 SD=0:GOTO 455
500 ONF=(NF AND 1)+4
501 ON ONF+1 GOTO 502,510,515,520,516,521,516,521
516 OPEN "I",ONF,NF$:INPUT #4,OBESTAND$:IN=0:GOTO 539
521 PRINT NF$:OPEN "O",ONF,NF$:IN=0
539 RETURN
540 IN$="":IN=1:ON (ONF+2)/2 GOTO 541,551,551,551
551 IN$=OBESTAND$:IF EOF(ONF) THEN 558 ELSE LINE INPUT #ONF,OBESTAND$
552 IF OBESTAND$<>"" THEN OU$=MID$(OBESTAND$,1,1):IF ASC(OU$)=26 THEN OBESTAND$="":IN=1:GOTO 559
553 IF EOF(ONF) THEN 559
554 IN=0:GOTO 559
558 IN=1
559 RETURN
560 IN=1:ON (ONF+1)/2 GOTO 561,575,575,575
575 PRINT #ONF,SR$:IN=0:RETURN
580 ON ONF+1 GOTO 582,585,590,592,591,593,591,593
582 RETURN
591 CLOSE ONF:GOTO 599     
593 PRINT #ONF,CHR$(26):PRINT #ONF,CHR$(26):CLOSE ONF 
599 RETURN
600 PRINT CHR$(27)"c"CHR$(CC(1)-0*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)-8*(CC(1)=7));
618 CLS:LOCATE 25,5:PRINT "BasiCode-3C fr OMIKRON.BASIC";:LOCATE 1,0
619 RETURN
620 GOSUB 655:OPH=INT(OHO*HG):OPV=INT(OVE*VG):OPM=CN XOR 1:DRAW OPH,OPV:RETURN
630 GOSUB 655:OPH=INT(OHO*HG):OPV=INT(OVE*VG):OPM=CN XOR 1:DRAW TO OPH,OPV:RETURN
650 GOSUB 655:OVE=MIN(VE,0.972):OPV=INT(VE*VG):FOR OPT=0 TO LEN(SR$)-1:OPH=INT(OHO*HG)+OPT*8
651 OPH=MIN(OPH,311):OPC=ASC(MID$(SR$,OPT+1,1))
652 TEXT OPH,OPV+6,CHR$(OPC):NEXT OPT:RETURN
655 OHO=MAX(0,HO):OHO=MIN(OHO,0.998):OVE=MAX(0,VE):OVE=MIN(OVE,0.995)
656 TEXT COLOR=CC(0)-9*(CC(0)=0)-3*(CC(0)=1)-4*(CC(0)=3)+(CC(0)=4)-7*(CC(0)=5)+6*(CC(0)=7)
657 LINE COLOR=CC(0)-9*(CC(0)=0)-3*(CC(0)=1)-4*(CC(0)=3)+(CC(0)=4)-7*(CC(0)=5)+6*(CC(0)=7)
658 IF CN=0 THEN GOTO 949
659 TEXT COLOR=0
660 LINE COLOR=CC(1)-0*(CC(1)=0)-3*(CC(1)=1)-4*(CC(1)=3)+(CC(1)=4)-7*(CC(1)=5)+6*(CC(1)=7)
949 RETURN
950 GOSUB 100:END
1000 A=500:GOTO 20:REM kubus
1010 DIM A(9,12):A$="":GOTO 2960
1020 IF KE$="H" THEN GOTO 1080
1030 IF KE$="O" THEN GOTO 1340
1040 IF KE$="L" THEN GOTO 1600
1050 IF KE$="U" THEN GOTO 1860
1060 IF KE$="R" THEN GOTO 2120
1070 IF KE$="V" THEN GOTO 2380
1080 L=A(4,10)
1090 A(4,10)=A(6,10)
1100 A(6,10)=A(6,12)
1110 A(6,12)=A(4,12)
1120 A(4,12)=L
1130 L=A(4,11)
1140 A(4,11)=A(5,10)
1150 A(5,10)=A(6,11)
1160 A(6,11)=A(5,12)
1170 A(5,12)=L
1180 L=A(1,4)
1190 A(1,4)=A(4,9)
1200 A(4,9)=A(9,6)
1210 A(9,6)=A(6,1)
1220 A(6,1)=L
1230 L=A(1,6)
1240 A(1,6)=A(6,9)
1250 A(6,9)=A(9,4)
1260 A(9,4)=A(4,1)
1270 A(4,1)=L
1280 L=A(1,5)
1290 A(1,5)=A(5,9)
1300 A(5,9)=A(9,5)
1310 A(9,5)=A(5,1)
1320 A(5,1)=L
1330 RETURN
1340 L=A(1,4)
1350 A(1,4)=A(3,4)
1360 A(3,4)=A(3,6)
1370 A(3,6)=A(1,6)
1380 A(1,6)=L
1390 L=A(1,5)
1400 A(1,5)=A(2,4)
1410 A(2,4)=A(3,5)
1420 A(3,5)=A(2,6)
1430 A(2,6)=L
1440 L=A(4,1)
1450 A(4,1)=A(4,4)
1460 A(4,4)=A(4,7)
1470 A(4,7)=A(4,10)
1480 A(4,10)=L
1490 L=A(4,2)
1500 A(4,2)=A(4,5)
1510 A(4,5)=A(4,8)
1520 A(4,8)=A(4,11)
1530 A(4,11)=L
1540 L=A(4,3)
1550 A(4,3)=A(4,6)
1560 A(4,6)=A(4,9)
1570 A(4,9)=A(4,12)
1580 A(4,12)=L
1590 RETURN
1600 L=A(4,1)
1610 A(4,1)=A(6,1)
1620 A(6,1)=A(6,3)
1630 A(6,3)=A(4,3)
1640 A(4,3)=L
1650 L=A(4,2)
1660 A(4,2)=A(5,1)
1670 A(5,1)=A(6,2)
1680 A(6,2)=A(5,3)
1690 A(5,3)=L
1700 L=A(1,4)
1710 A(1,4)=A(6,12)
1720 A(6,12)=A(7,4)
1730 A(7,4)=A(4,4)
1740 A(4,4)=L
1750 L=A(2,4)
1760 A(2,4)=A(5,12)
1770 A(5,12)=A(8,4)
1780 A(8,4)=A(5,4)
1790 A(5,4)=L
1800 L=A(3,4)
1810 A(3,4)=A(4,12)
1820 A(4,12)=A(9,4)
1830 A(9,4)=A(6,4)
1840 A(6,4)=L
1850 RETURN
1860 L=A(7,4)
1870 A(7,4)=A(9,4)
1880 A(9,4)=A(9,6)
1890 A(9,6)=A(7,6)
1900 A(7,6)=L
1910 L=A(7,5)
1920 A(7,5)=A(8,4)
1930 A(8,4)=A(9,5)
1940 A(9,5)=A(8,6)
1950 A(8,6)=L
1960 L=A(6,1)
1970 A(6,1)=A(6,10)
1980 A(6,10)=A(6,7)
1990 A(6,7)=A(6,4)
2000 A(6,4)=L
2010 L=A(6,2)
2020 A(6,2)=A(6,11)
2030 A(6,11)=A(6,8)
2040 A(6,8)=A(6,5)
2050 A(6,5)=L
2060 L=A(6,3)
2070 A(6,3)=A(6,12)
2080 A(6,12)=A(6,9)
2090 A(6,9)=A(6,6)
2100 A(6,6)=L
2110 RETURN
2120 L=A(4,7)
2130 A(4,7)=A(6,7)
2140 A(6,7)=A(6,9)
2150 A(6,9)=A(4,9)
2160 A(4,9)=L
2170 L=A(4,8)
2180 A(4,8)=A(5,7)
2190 A(5,7)=A(6,8)
2200 A(6,8)=A(5,9)
2210 A(5,9)=L
2220 L=A(1,6)
2230 A(1,6)=A(4,6)
2240 A(4,6)=A(7,6)
2250 A(7,6)=A(6,10)
2260 A(6,10)=L
2270 L=A(2,6)
2280 A(2,6)=A(5,6)
2290 A(5,6)=A(8,6)
2300 A(8,6)=A(5,10)
2310 A(5,10)=L
2320 L=A(3,6)
2330 A(3,6)=A(6,6)
2340 A(6,6)=A(9,6)
2350 A(9,6)=A(4,10)
2360 A(4,10)=L
2370 RETURN
2380 L=A(4,4)
2390 A(4,4)=A(6,4)
2400 A(6,4)=A(6,6)
2410 A(6,6)=A(4,6)
2420 A(4,6)=L
2430 L=A(4,5)
2440 A(4,5)=A(5,4)
2450 A(5,4)=A(6,5)
2460 A(6,5)=A(5,6)
2470 A(5,6)=L
2480 L=A(3,4)
2490 A(3,4)=A(6,3)
2500 A(6,3)=A(7,6)
2510 A(7,6)=A(4,7)
2520 A(4,7)=L
2530 L=A(3,5)
2540 A(3,5)=A(5,3)
2550 A(5,3)=A(7,5)
2560 A(7,5)=A(5,7)
2570 A(5,7)=L
2580 L=A(3,6)
2590 A(3,6)=A(4,3)
2600 A(4,3)=A(7,4)
2610 A(7,4)=A(6,7)
2620 A(6,7)=L
2630 RETURN
2960 GOSUB 100:VE=12:HO=6:GOSUB 110
2970 PRINT "M=MONOCHROM / F=FARBEN"
2980 GOSUB 210:C$=IN$
2990 IF (IN$<>"M") AND (IN$<>"F") THEN 2960
3000 GOSUB 100
3010 VE=0:HO=8:GOSUB 110:PRINT "WILLKOMMEN BEI 'KUBUS'!"
3020 VE=1:HO=8:GOSUB 110:PRINT "======================="
3030 PRINT:PRINT:PRINT "BITTE WAEHLEN SIE"
3040 VE=6:HO=4:GOSUB 110:PRINT "A  SELBST ETWAS PROBIEREN"
3050 VE=8:HO=4:GOSUB 110
3060 PRINT "B  ICH LOESE EINE STELLUNG AUF"
3070 VE=10:HO=4:GOSUB 110:PRINT "C  SCHOENE FIGUREN"
3080 VE=12:HO=4:GOSUB 110:PRINT "D  ERKLAERUNG"
3090 VE=14:HO=4:GOSUB 110:PRINT "E  ENDE"
3100 VE=16:HO=4:GOSUB 110:GOSUB 210:T$=IN$
3110 IF T$="A" THEN 6550
3120 IF T$="B" THEN 4000
3130 IF T$="C" THEN 6990
3140 IF T$="D" THEN 6060
3150 IF T$<>"E" THEN 3000
3160 GOSUB 100:PRINT "**********************"
3170 PRINT "*                    *"
3180 PRINT "*       KUBUS!       *"
3190 PRINT "*                    *"
3200 PRINT "*    GEMAAKT DOOR    *"
3210 PRINT "*                    *"
3220 PRINT "*    JAN  BROECKX    *"
3230 PRINT "*                    *"
3240 PRINT "* KARMELIETENSTR. 66 *"
3250 PRINT "*                    *"
3260 PRINT "*    2600 BERCHEM    *"
3270 PRINT "*                    *"
3280 PRINT "*       BELGIE       *"
3290 PRINT "*                    *"
3300 PRINT "**********************"
3310 GOSUB 210:GOTO 950
4000 GOSUB 100
4010 PRINT "    1  2  3  4  5  6  7  8  9 10 11 12"
4020 PRINT:PRINT
4030 FOR I=1 TO 3:HO=0:VE=3+I:GOSUB 110
4040 PRINT I:NEXT I
4042 FOR I=4 TO 6:HO=0:VE=4+I:GOSUB 110
4044 PRINT I:NEXT I
4046 FOR I=7 TO 9:HO=0:VE=5+I:GOSUB 110
4048 PRINT I:NEXT I
4050 B=0:C=0:D=0:E=0:G=0:S=0:F=1:A=0
4060 VE=19:HO=0:CC(0)=6:GOSUB 110:PRINT "Y=GELB  ";
4070 GOSUB 120:CC(0)=7:GOSUB 110:PRINT "/";
4072 GOSUB 120:CC(0)=2:GOSUB 110:PRINT " R=ROT  ";
4074 GOSUB 120:CC(0)=7:GOSUB 110:PRINT "/";
4076 GOSUB 120:CC(0)=4:GOSUB 110:PRINT " G=GRUEN  ";
4078 GOSUB 120:CC(0)=7:GOSUB 110:PRINT "/";
4080 GOSUB 120:CC(0)=3:GOSUB 110:PRINT " M=MAGENTA";
4082 VE=20:HO=0:CC(0)=7:GOSUB 110
4090 PRINT "W=WEISS /        / FEHLER=F / Z=ZURUECK"
4092 HO=10:CC(0)=1:GOSUB 110:PRINT "B=BLAU";:CC(0)=7
4094 GOSUB 110
4100 ON F GOTO 4110,4120,4130,4140,4150,4160,4320
4110 I1=1:I2=3:J1=4:J2=6:GOTO 4170
4120 I1=4:I2=6:J1=1:J2=3:GOTO 4170
4130 I1=4:I2=6:J1=4:J2=6:GOTO 4170
4140 I1=4:I2=6:J1=7:J2=9:GOTO 4170
4150 I1=4:I2=6:J1=10:J2=12:GOTO 4170
4160 I1=7:I2=9:J1=4:J2=6
4170 AA=0:FF=0:FOR I=I1 TO I2:FOR J=J1 TO J2
4175 IF A<0 THEN GT=4000:GOTO 4312
4180 IF A$="F" THEN GT=4000:I=I2:J=J2:AA=1:GOTO 4312
4190 IF A$="Z" THEN GT=3000:AA=1:GOTO 4312
4200 HO=J*3:VE=I+3+INT(I1/3):GOSUB 110:PRINT "??"
4210 VE=21:HO=0:GOSUB 110
4220 PRINT "WELCHE FARBE HAT DAS FELD (";I;",";J;") ?";
4230 GOSUB 210:A$=IN$:PRINT A$
4231 IF A$="Y" THEN CC(0)=6
4232 IF A$="M" THEN CC(0)=3
4233 IF A$="B" THEN CC(0)=1
4234 IF A$="R" THEN CC(0)=2
4235 IF A$="G" THEN CC(0)=4
4236 IF A$="W" THEN CC(0)=7
4240 HO=J*3:VE=I+3+INT(I1/3):GOSUB 110
4243 IF C$<>"F" THEN 4248
4245 PRINT "**":CC(0)=7:GOSUB 110:GOTO 4250
4248 PRINT CHR$(ASC(A$));CHR$(ASC(A$)):CC(0)=7:GOSUB 110
4250 IF A$="F" THEN GT=4000:I=I2:J=J2:AA=1:GOTO 4312
4260 IF A$="Z" THEN GT=3000:AA=1:GOTO 4312
4270 GOSUB 10000:IF A=0 THEN 4200
4280 IF A<0 THEN GT=4000:GOTO 4312
4290 A(I,J)=A
4300 VE=21:HO=37:GOSUB 110:PRINT "  "
4310 GT=4100:FF=1
4312 NEXT J:NEXT I:IF FF=1 THEN F=F+1:FF=0
4314 IF AA=1 THEN A$="":AA=0
4316 IF GT=3000 THEN GOTO 3000
4318 IF GT=4100 THEN GOTO 4100
4319 GOTO 4000
4320 REM
4330 REM juist zetten van rb
4340 PO=A(2,5):P=A(5,5):GOSUB 10130:IF A<0 THEN 4000
4350 IF A>6 THEN 4380
4360 ON A GOSUB 10420,10430,10440,10450,10460,10470
4370 GOTO 4390
4380 ON A-6 GOSUB 10480,10490,10500,10510,10520,10530
4390 GOSUB 10540
4400 PO=A(2,5):P=A(5,2):GOSUB 10130:IF A<0 THEN 4000
4410 IF A>6 THEN 4440
4420 ON A GOSUB 10670,10450,10680,1,10690,10700
4430 GOTO 4450
4440 ON A-6 GOSUB 10710,10720,10730,10740,10750,10760
4450 GOSUB 10540
4460 PO=A(2,5):P=A(5,11):GOSUB 10130:IF A<0 THEN 4000
4470 IF A>6 THEN 4500
4480 ON A GOSUB 10450,1,10770,1,10780,10790
4490 GOTO 4510
4500 ON A-6 GOSUB 10800,10810,10820,10830,10840,10850
4510 GOSUB 10540
4520 PO=A(2,5):P=A(5,8):GOSUB 10130:IF A<0 THEN 4000
4530 IF A>6 THEN 4560
4540 ON A GOSUB 1,1,10450,1,10860,10870
4550 GOTO 4570
4560 ON A-6 GOSUB 10880,10890,10900,10910,10920,10930
4570 GOSUB 10540
4580 PO=A(5,2):P=A(5,11):GOSUB 10130:IF A<0 THEN 4000
4590 IF A>6 THEN 4620
4600 ON A GOSUB 1,1,1,1,10450,10940
4610 GOTO 4630
4620 ON A-6 GOSUB 10950,10960,10970,10980,10990,11000
4630 GOSUB 10540
4640 PO=A(5,2):P=A(5,5):GOSUB 10130:IF A<0 THEN 4000
4650 IF A>6 THEN 4680
4660 ON A GOSUB 1,1,1,1,1,10450
4670 GOTO 4690
4680 ON A-6 GOSUB 11010,11020,11030,11040,11050,11060
4690 GOSUB 10540
4700 PO=A(5,5):P=A(5,8):GOSUB 10130:IF A<0 THEN 4000
4710 IF A>6 THEN 4740
4720 ON A GOSUB 1,1,1,1,1,1
4730 GOTO 4750
4740 ON A-6 GOSUB 10450,11070,11080,11090,11100,11110
4750 GOSUB 10540
4760 PO=A(5,8):P=A(5,11):GOSUB 10130:IF A<0 THEN 4000
4770 ON A GOSUB 1,1,1,1,1,1,1,10450,11120,11130,11140,11150
4780 GOSUB 10540
4790 PO=A(8,5):P=A(5,5):GOSUB 10130:IF A<0 THEN 4000
4800 ON A GOSUB 1,1,1,1,1,1,1,1,10450,11160,11170,11180
4810 GOSUB 10540
4820 PO=A(8,5):P=A(5,2):GOSUB 10130:IF A<0 THEN 4000
4830 ON A GOSUB 1,1,1,1,1,1,1,1,1,10450,11190,11200
4840 GOSUB 10540
4850 PO=A(8,5):P=A(5,8):GOSUB 10130:IF A<0 THEN 4000
4860 ON A GOSUB 1,1,1,1,1,1,1,1,1,1,10450,11210
4870 GOSUB 10540
4880 REM juist orienteren van rb
4890 IF A(3,5)<>A(2,5) THEN A$="-VLV-LO-L-OL":GOSUB 10540
4900 IF A(2,4)<>A(2,5) THEN A$="-LHL-HO-H-OH":GOSUB 10540
4910 IF A(1,5)<>A(2,5) THEN A$="-HRH-RO-R-OR":GOSUB 10540
4920 IF A(2,6)<>A(2,5) THEN A$="-VOV-OR-O-RO":GOSUB 10540
4930 IF A(5,6)<>A(5,5) THEN A$="-UVU-VR-V-RV":GOSUB 10540
4940 IF A(6,8)<>A(5,8) THEN A$="-HUH-UR-U-RU":GOSUB 10540
4950 IF A(5,9)<>A(5,8) THEN A$="-URU-RH-R-HR":GOSUB 10540
4960 IF A(6,11)<>A(5,11) THEN A$="-LUL-UH-U-HU":GOSUB 10540
4970 IF A(5,12)<>A(5,11) THEN A$="-UHU-HL-H-LH":GOSUB 10540
4980 IF A(8,4)<>A(8,5) THEN A$="-VUV-UL-U-LU":GOSUB 10540
4990 IF A(5,4)<>A(5,5) THEN A$="-ULU-LV-L-VL":GOSUB 10540
5000 IF A(6,5)<>A(5,5) THEN 5360
5010 REM juist zetten van hb
5020 PO=A(2,5):P=A(5,5):M=A(5,2):GOSUB 11220:IF A<0 THEN 4000
5030 IF A>4 THEN 5060
5040 ON A GOSUB 10450,11450,11460,11470
5050 GOTO 5070
5060 ON A-4 GOSUB 11480,11490,11500,11510
5070 GOSUB 10540
5080 PO=A(2,5):P=A(5,8):M=A(5,5):GOSUB 11220:IF A<0 THEN 4000
5090 ON A GOSUB 1,10450,11520,11530,11540,11550,11560,11570
5100 GOSUB 10540
5110 PO=A(2,5):P=A(5,2):M=A(5,11):GOSUB 11220:IF A<0 THEN 4000
5120 ON A GOSUB 1,1,10450,11580,11590,11600,11610,11620
5130 GOSUB 10540
5140 PO=A(5,11):P=A(5,8):M=A(2,5):GOSUB 11220:IF A<0 THEN 4000
5150 ON A GOSUB 1,1,1,10450,11630,11640,11650,11660
5160 GOSUB 10540
5170 PO=A(5,2):P=A(5,5):M=A(8,5):GOSUB 11220:IF A<0 THEN 4000
5180 ON A GOSUB 1,1,1,1,10450,11670,11680,11690
5190 GOSUB 10540
5200 PO=A(5,5):P=A(5,8):M=A(8,5):GOSUB 11220:IF A<0 THEN 4000
5210 ON A GOSUB 1,1,1,1,1,10450,11700,11710
5220 GOSUB 10540
5230 PO=A(5,2):P=A(8,5):M=A(5,11):GOSUB 11220:IF A<0 THEN 4000
5240 ON A GOSUB 1,1,1,1,1,1,10450,11160
5250 IF A$="O" THEN 5360
5260 REM juist orienteren van hb
5270 IF (A(3,4)<>A(2,5))OR(A(4,4)<>A(5,5)) THEN 5300
5280 IF A(4,3)<>A(5,2) THEN 5300
5290 GOTO 5390
5300 IF (A(3,4)=A(4,4))OR(A(3,4)=A(4,3)) THEN 5360
5310 IF A(4,4)=A(4,3) THEN 5360
5320 IF A(4,4)=A(2,5) THEN A$="O-H-O-L-HL-V-LHLOH-OV"
5330 IF A(4,4)=A(2,5) THEN GOSUB 10540:GOTO 5270
5340 IF A(4,3)=A(2,5) THEN A$="-VO-H-O-L-HLV-LHLOH-O"
5350 IF A(4,3)=A(2,5) THEN GOSUB 10540:GOTO 5270
5360 GOSUB 100:VE=21:HO=0:GOSUB 110
5370 PRINT "KEINE LOESUNG MOEGLICH!!"
5380 PRINT:PRINT "<RETURN> DRUECKEN";:INPUT T$:GOTO 3000
5390 IF (A(3,6)<>A(2,5))OR(A(4,7)<>A(5,8)) THEN 5420
5400 IF A(4,6)<>A(5,5) THEN 5420
5410 GOTO 5490
5420 IF (A(3,6)=A(4,7))OR(A(3,6)=A(4,6)) THEN 5360
5430 IF A(4,6)=A(4,7) THEN 5360
5440 IF A(4,7)=A(2,5) THEN A$="O-L-O-V-LV-R-VLVOL-OR"
5450 IF A(4,7)=A(2,5) THEN GOSUB 10540:GOTO 5390
5460 IF A(4,6)=A(2,5) THEN A$="-RO-L-O-V-LVR-VLVOL-O"
5470 IF A(4,6)=A(2,5) THEN GOSUB 10540:GOTO 5390
5480 GOTO 5360
5490 IF (A(1,6)<>A(2,5))OR(A(4,10)<>A(5,11)) THEN 5520
5500 IF A(4,9)<>A(5,8) THEN 5520
5510 GOTO 5590
5520 IF (A(1,6)=A(4,10))OR(A(1,6)=A(4,9)) THEN 5360
5530 IF A(4,10)=A(4,9) THEN 5360
5540 IF A(4,10)=A(2,5) THEN A$="O-V-O-R-VR-H-RVROV-OH"
5550 IF A(4,10)=A(2,5) THEN GOSUB 10540:GOTO 5490
5560 IF A(4,9)=A(2,5) THEN A$="-HO-V-O-R-VRH-RVROV-O"
5570 IF A(4,9)=A(2,5) THEN GOSUB 10540:GOTO 5490
5580 GOTO 5360
5590 IF (A(1,4)<>A(2,5))OR(A(4,1)<>A(5,2)) THEN 5620
5600 IF A(4,12)<>A(5,11) THEN 5620
5610 GOTO 5690
5620 IF (A(1,4)=A(4,1))OR(A(1,4)=A(4,12)) THEN 5360
5630 IF A(4,1)=A(4,12) THEN 5360
5640 IF A(4,12)=A(2,5) THEN A$="-HL-V-L-O-VOH-OVOLV-L"
5650 IF A(4,12)=A(2,5) THEN GOSUB 10540:GOTO 5590
5660 IF A(4,1)=A(2,5) THEN A$="L-V-L-O-VO-H-OVOLV-LH"
5670 IF A(4,1)=A(2,5) THEN GOSUB 10540:GOTO 5590
5680 GOTO 5360
5690 IF (A(6,1)<>A(5,2))OR(A(9,4)<>A(8,5)) THEN 5720
5700 IF A(6,12)<>A(5,11) THEN 5720
5710 GOTO 5790
5720 IF (A(6,1)=A(9,4))OR(A(6,1)=A(6,12)) THEN 5360
5730 IF A(9,4)=A(6,12) THEN 5360
5740 IF A(6,12)=A(8,5) THEN A$="U-V-U-L-VL-H-LVLUV-UH"
5750 IF A(6,12)=A(8,5) THEN GOSUB 10540:GOTO 5690
5760 IF A(6,1)=A(8,5) THEN A$="-HU-V-U-L-VLH-LVLUV-U"
5770 IF A(6,1)=A(8,5) THEN GOSUB 10540:GOTO 5690
5780 GOTO 5360
5790 IF (A(9,6)<>A(8,5))OR(A(6,9)<>A(5,8)) THEN 5820
5800 IF A(6,10)<>A(5,11) THEN 5820
5810 GOTO 5890
5820 IF (A(9,6)=A(6,9))OR(A(9,6)=A(6,10)) THEN 5360
5830 IF A(6,9)=A(6,10) THEN 5360
5840 IF A(6,9)=A(8,5) THEN A$="U-L-U-H-LH-R-HLHUL-UR"
5850 IF A(6,9)=A(8,5) THEN GOSUB 10540:GOTO 5790
5860 IF A(6,10)=A(8,5) THEN A$="-RU-L-U-H-LHR-HLHUL-U"
5870 IF A(6,10)=A(8,5) THEN GOSUB 10540:GOTO 5790
5880 GOTO 5360
5890 IF (A(6,6)<>A(5,5))OR(A(7,6)<>A(8,5)) THEN 5920
5900 IF A(6,7)<>A(5,8) THEN 5920
5910 GOTO 5990
5920 IF (A(6,6)=A(7,6))OR(A(6,6)=A(6,7)) THEN 5360
5930 IF A(7,6)=A(6,7) THEN 5360
5940 IF A(6,6)=A(8,5) THEN A$="U-H-U-R-HR-V-RHRUH-UV"
5950 IF A(6,6)=A(8,5) THEN GOSUB 10540:GOTO 5890
5960 IF A(6,7)=A(8,5) THEN A$="-VU-H-U-R-HRV-RHRUH-U"
5970 IF A(6,7)=A(8,5) THEN GOSUB 10540:GOTO 5890
5980 GOTO 5360
5990 IF (A(6,3)<>A(5,2))OR(A(6,4)<>A(5,5)) THEN 5360
6000 IF A(7,4)<>A(8,5) THEN 5360
6010 HO=0:VE=20:GOSUB 110
6020 PRINT "                         "
6030 HO=0:VE=20:GOSUB 110:PRINT "VOILA!!":HO=0
6040 VE=22:GOSUB 110:PRINT "<RETURN> DRUECKEN";
6050 GOSUB 210:GOTO 3000
6060 REM uitleg
6070 GOSUB 100
6080 PRINT "IN DIESEM PROGRAMM WIRD DER WUERFEL"
6090 PRINT "WIE FOLGT ANGEZEIGT:":PRINT
6100 GOSUB 120:HO=HO+17:GOSUB 110:PRINT "OO":PRINT
6110 GOSUB 120:HO=HO+14:GOSUB 110:PRINT "LL VV RR HH":PRINT
6120 GOSUB 120:HO=HO+17:GOSUB 110:PRINT "UU"
6130 PRINT:PRINT "IN DER MITTE SEHEN SIE DIE IHNEN ZU-"
6140 PRINT "GEWANDTE SEITE (V), DARUEBER DIE OBER-"
6150 PRINT "SEITE (O) UND DARUNTER DIE UNTER-"
6160 PRINT "SEITE (U). 'L' UND 'R' STEHEN FUER"
6170 PRINT "LINKE UND RECHTE SEITE. DIE RUECK-"
6180 PRINT "SEITE (H) IST GANZ RECHTS.":PRINT
6190 PRINT "<RETURN> DRUECKEN";:GOSUB 210:GOSUB 100
6200 PRINT "WENN SIE Z.B. IN DIESEM PROGRAMM 'O'"
6210 PRINT "LESEN, HEISST DAS, DASS SIE DIE OBERE"
6220 PRINT "EBENE UM EINE VIERTEL DREHUNG IM UHR-"
6230 PRINT "ZEIGERSINN DREHEN SOLLEN, '-O' GEGEN"
6240 PRINT "DEN UHRZEIGERSINN (JEWEILS AUF DIE"
6250 PRINT "BETREFFENDE SEITE GESEHEN). '-LV' BE-"
6260 PRINT "DEUTET, DIE LINKE EBENE UM 90 GRAD"
6270 PRINT "GEGEN DEN UHRZEIGERSINN UND DIE VORDERE"
6280 PRINT "EBENE IM UHRZEIGERSINN ZU DREHEN.":PRINT
6283 PRINT "BITTE BEACHTEN SIE, DASS SIE DIE"
6286 PRINT "POSITION  DER MITTELFELDER DER"
6290 PRINT "WUERFELSEITEN NIE VERAENDERN!":PRINT
6300 PRINT "<RETURN> DRUECKEN";:GOSUB 210:GOSUB 100
6310 PRINT "WERDEN SIE NICHT UNRUHIG, WENN SIE"
6320 PRINT "LAENGERE ZEIT KEINE VERAENDERUNG"
6330 PRINT "SEHEN. DANN IST DER COMPUTER MIT"
6340 PRINT "AUFWENDIGEREN BERECHNUNGEN"
6343 PRINT "BESCHAEFTIGT (Z.B. BEI DEN"
6346 PRINT "'SCHOENEN FIGUREN')":PRINT
6350 PRINT "DIE FARBEN :":PRINT
6360 PRINT "R = ROT":PRINT "M = MAGENTA"
6370 PRINT "B = BLAU":PRINT "G = GRUEN"
6380 PRINT "Y = GELB":PRINT "W = WEISS"
6390 VE=20:HO=0:GOSUB 110:PRINT "<RETURN> DRUECKEN";
6400 GOSUB 210:GOTO 3000
6410 REM zelf wat proberen
6420 HO=0:VE=20:GOSUB 110
6430 PRINT "SIND SIE FERTIG ? (J/N)";:GOSUB 210
6440 T$=IN$:HO=0:VE=20:GOSUB 110
6450 PRINT "                       "
6460 IF T$="N" THEN 6630
6470 IF T$<>"J" THEN 6420
6480 HO=0:VE=20:GOSUB 110
6490 PRINT "SOLL ICH LOESEN ? (J/N)";:GOSUB 210
6500 T$=IN$:HO=0:VE=20:GOSUB 110
6510 PRINT "                             "
6520 IF T$="N" THEN 3000
6530 IF T$<>"J" THEN 6480
6540 GOTO 4320
6550 GOSUB 100:GOSUB 6570:GOSUB 6760
6560 GOTO 6630
6570 FOR I=1 TO 3:FOR J=4 TO 6:A(I,J)=1:NEXT J:NEXT I
6580 FOR I=4 TO 6:FOR J=1 TO 3:A(I,J)=2:NEXT J:NEXT I
6590 FOR I=4 TO 6:FOR J=4 TO 6:A(I,J)=3:NEXT J:NEXT I
6600 FOR I=4 TO 6:FOR J=7 TO 9:A(I,J)=4:NEXT J:NEXT I
6610 FOR I=4 TO 6:FOR J=10 TO 12:A(I,J)=5:NEXT J:NEXT I
6620 FOR I=7 TO 9:FOR J=4 TO 6:A(I,J)=6:NEXT J:NEXT I:RETURN
6630 HO=0:VE=20:GOSUB 110:PRINT "WELCHE EBENE ?";
6640 GOSUB 210:KE$=IN$:PRINT KE$;
6650 IF KE$="-" THEN GOSUB 210:T$=IN$:PRINT T$:KE$=KE$+T$
6660 IF (KE$="H")OR(KE$="O")OR(KE$="L") THEN 6710
6670 IF (KE$="U")OR(KE$="R")OR(KE$="V") THEN 6710
6680 IF (KE$="-H")OR(KE$="-O")OR(KE$="-L") THEN 6710
6690 IF (KE$="-U")OR(KE$="-R")OR(KE$="-V") THEN 6710
6700 GOTO 6630
6710 HO=0:VE=20:GOSUB 110:PRINT "                "
6720 IF LEFT$(KE$,1)="-" THEN KE$=RIGHT$(KE$,1):GOTO 6750
6730 GOSUB 1020
6740 GOSUB 6760:GOTO 6410
6750 FOR H=1 TO 3:GOSUB 1020:NEXT H:GOSUB 6760:GOTO 6410
6760 REM tekenroutine
6770 VE=0:HO=0:GOSUB 110
6780 PRINT "    1  2  3  4  5  6  7  8  9 10 11 12"
6790 PRINT:PRINT
6800 FOR I=1 TO 3:HO=0:VE=3+I:GOSUB 110:PRINT I:NEXT I
6802 FOR I=4 TO 6:HO=0:VE=4+I:GOSUB 110:PRINT I:NEXT I
6804 FOR I=7 TO 9:HO=0:VE=5+I:GOSUB 110:PRINT I:NEXT I
6810 FOR I=1 TO 6
6820 ON I GOTO 6830,6840,6850,6860,6870,6880
6830 B=1:C=3:D=4:E=6:GOTO 6890
6840 B=4:C=6:D=1:E=3:GOTO 6890
6850 B=4:C=6:D=4:E=6:GOTO 6890
6860 B=4:C=6:D=7:E=9:GOTO 6890
6870 B=4:C=6:D=10:E=12:GOTO 6890
6880 B=7:C=9:D=4:E=6
6890 FOR J=B TO C:FOR K=D TO E
6900 HO=K*3:VE=J+3+INT(B/3):GOSUB 110
6910 ON A(J,K) GOTO 6920,6930,6940,6950,6960,6970
6920 CC(0)=6:R1$="YY":GOTO 6975
6930 CC(0)=3:R1$="MM":GOTO 6975
6940 CC(0)=1:R1$="BB":GOTO 6975
6950 CC(0)=2:R1$="RR":GOTO 6975
6960 CC(0)=4:R1$="GG":GOTO 6975
6970 CC(0)=7:R1$="WW"
6975 IF C$="F" THEN R1$="**"
6978 GOSUB 110:PRINT R1$;:CC(0)=7
6980 GOSUB 110:NEXT K:NEXT J:NEXT I:RETURN
6990 GOSUB 100:GOSUB 6570:VE=0:HO=11
7000 GOSUB 110:PRINT "SCHOENE FIGUREN!":VE=1:HO=11
7010 GOSUB 110:PRINT "================":PRINT
7020 PRINT "BITTE WAEHLEN SIE":PRINT
7030 GOSUB 11720:PRINT "A  BLOEMEN":PRINT
7040 GOSUB 11720:PRINT "B  4-STIP":PRINT
7050 GOSUB 11720:PRINT "C  6-STIP":PRINT
7060 GOSUB 11720:PRINT "D  GUIRLANDE":PRINT
7070 GOSUB 11720:PRINT "E  TTTT":PRINT
7080 GOSUB 11720:PRINT "F  TEMPELPOORTEN":PRINT
7090 GOSUB 11720:PRINT "G  SLANG":PRINT
7100 GOSUB 11720:PRINT "H  WORM":PRINT
7110 GOSUB 11720:PRINT "I  (WEITER)":PRINT
7120 GOSUB 11720:GOSUB 210:T$=IN$:GOSUB 100
7130 IF T$="A" THEN A$="LLRROOUUVVHH":GOSUB 10540:GOTO 6990
7140 IF T$="B" THEN A$="O-URRLLO-UVVHH":GOSUB 10540:GOTO 6990
7150 IF T$="C" THEN A$="L-RO-UV-HL-R":GOSUB 10540:GOTO 6990
7160 IF T$="D" THEN A$="RLVHRLVHRLVH":GOSUB 10540:GOTO 6990
7170 IF T$="E" THEN A$="U-OVVHH-U-ORRLL-URRLLOORRLL-U"
7180 IF T$="E" THEN GOSUB 10540:GOTO 6990
7190 IF T$="F" THEN A$="U-OVVHH-U-ORRLL-URRLLOORRLL-UOO"
7200 IF T$="F" THEN GOSUB 10540:GOTO 6990
7210 IF T$="G" THEN A$="H-LR-URRUL-R-HRROHHU-ORR-U"
7220 IF T$="G" THEN GOSUB 10540:GOTO 6990
7230 IF T$="H" THEN A$="ROVV-U-LRV-H-U-V-"
7240 IF T$="H" THEN A1$="RVVROOVRR-V-R-O-VOOVR"
7250 IF T$="H" THEN A$=A$+A1$
7260 IF T$="H" THEN GOSUB 10540:GOTO 6990
7270 IF T$<>"I" THEN 6990
7280 GOSUB 100:PRINT "BITTE WAEHLEN SIE":PRINT
7290 GOSUB 11720:PRINT "A  DUBBELKUBUS 1":PRINT
7293 GOSUB 11720:PRINT "B  DUBBELKUBUS 2":PRINT
7295 GOSUB 11720:PRINT "C  DRIEVOUDIGE KUBUS":PRINT
7300 GOSUB 11720:PRINT "D  2-RINGEN":PRINT
7310 GOSUB 11720:PRINT "E  4-ZETTER":PRINT
7320 GOSUB 11720:PRINT "F  4-ZETPLUSSER":PRINT
7330 GOSUB 11720:PRINT "G  4-PLUSSER":PRINT
7340 GOSUB 11720:PRINT "H  6-PLUSSER":PRINT
7380 GOSUB 11720:PRINT "I  (WEITER)":PRINT
7390 GOSUB 11720:GOSUB 210:T$=IN$:GOSUB 100
7393 IF T$="A" THEN A$="-HOO-VRV-R-VRV-ROOR-V-RVR-V-RVH"
7396 IF T$="A" THEN GOSUB 10540:GOTO 6990
7400 IF T$="B" THEN A$="H-LUULU-VUUV-U-H-VR"
7410 IF T$="B" THEN A1$="OO-R-OHOO-HOV":A$=A$+A1$
7420 IF T$="B" THEN GOSUB 10540:GOTO 6990
7423 IF T$="C" THEN A$="H-LUULU-VUUV-U-H-VROO-R-OHOO"
7425 IF T$="C" THEN A1$="-HOV-HOO-VRV-R-VRV-ROOR":A$=A$+A1$
7427 IF T$="C" THEN A$=A$+"-V-RVR-V-RVH":GOSUB 10540:GOTO 6990
7430 IF T$="D" THEN A$="H-LR-URRUL-R-HRROHHU-OHHLROO-L-RHH-U"
7440 IF T$="D" THEN GOSUB 10540:GOTO 6990
7450 IF T$="E" THEN A$="RLVHRLVHRLVHOOUU"
7460 IF T$="E" THEN GOSUB 10540:GOTO 6990
7470 IF T$="F" THEN A$="-R-LOU-R-LOU-R-LOUVVHH"
7480 IF T$="F" THEN GOSUB 10540:GOTO 6990
7490 IF T$="G" THEN A$="VHRLVHRLVHRRLLVHRLVHRLVH"
7500 IF T$="G" THEN GOSUB 10540:GOTO 6990
7510 IF T$="H" THEN A$="RVVHHRRLLOOVVHHRRLLUU-R"
7520 IF T$="H" THEN GOSUB 10540:GOTO 6990
7580 IF T$<>"I" THEN 7280
7590 GOSUB 100:PRINT "BITTE WAEHLEN SIE":PRINT
7593 GOSUB 11720:PRINT "A  HAHAHAHAHAHA":PRINT
7595 GOSUB 11720:PRINT "B  12-ELLER":PRINT
7597 GOSUB 11720:PRINT "C  PUINHOOP":PRINT
7600 GOSUB 11720:PRINT "D  MUILKORVEN":PRINT
7610 GOSUB 11720:PRINT "E  Y-ER":PRINT
7620 GOSUB 11720:PRINT "F  VLAGGEN":PRINT
7630 GOSUB 11720:PRINT "G  WIJZER":PRINT
7640 GOSUB 11720:PRINT "M  MENU":PRINT
7650 GOSUB 11720:GOSUB 210:T$=IN$:GOSUB 100
7652 IF T$="A" THEN A$="RLVHOOUURRLLVH-R-L"
7654 IF T$="A" THEN GOSUB 10540:GOTO 6990
7655 IF T$="B" THEN A$="RLOU-V-HRL":GOSUB 10540:GOTO 6990
7656 IF T$="C" THEN A$="VVHHRRLLOO-UROLU"
7658 IF T$="C" THEN GOSUB 10540:GOTO 6990
7660 IF T$="D" THEN A$="LOORRUUOORRUU-L":GOSUB 10540:GOTO 6990
7670 IF T$="E" THEN A$="RRLLUURRLLVVHHUUVVHHUU"
7680 IF T$="E" THEN GOSUB 10540:GOTO 6990
7690 IF T$="F" THEN A$="RRVURR-URHH-RURR-U-VRR"
7700 IF T$="F" THEN A1$="LLHULL-ULVV-LULL-U-H"
7710 IF T$="F" THEN A2$="LLVVRRLLHHR"
7720 IF T$="F" THEN A$=A$+A1$+A2$
7730 IF T$="F" THEN GOSUB 10540:GOTO 6990
7740 IF T$="G" THEN A$="-RV-ULV-LUL-V-L-VRHHRU-R-"
7750 IF T$="G" THEN A1$="URU-R-U-OUR-U-RUR-U-ROHH"
7760 IF T$="G" THEN A$=A$+A1$:GOSUB 10540:GOTO 6990
7770 IF T$<>"M" THEN 7590
7780 GOTO 3000
10000 REM
10010 IF A$="Y" THEN A=1:B=B+1:GOTO 10080
10020 IF A$="B" THEN A=3:C=C+1:GOTO 10080
10030 IF A$="W" THEN A=6:D=D+1:GOTO 10080
10040 IF A$="R" THEN A=4:E=E+1:GOTO 10080
10050 IF A$="G" THEN A=5:G=G+1:GOTO 10080
10060 IF A$="M" THEN A=2:S=S+1:GOTO 10080
10070 A=0:RETURN
10080 IF (B>9)OR(C>9)OR(D>9) THEN 10110
10090 IF (E>9)OR(G>9)OR(S>9) THEN 10110
10100 RETURN
10110 PRINT "NICHT RICHTIG!! NEU ANFANGEN!!"
10120 FOR K=1 TO 1000:NEXT K:A=-1:RETURN
10130 REM zoeken rb
10140 S=0
10150 IF A(1,5)<>PO THEN 10170
10160 IF A(4,11)=P THEN A=1:RETURN
10170 IF A(2,4)<>PO THEN 10190
10180 IF A(4,2)=P THEN A=2:RETURN
10190 IF A(2,6)<>PO THEN 10210
10200 IF A(4,8)=P THEN A=3:RETURN
10210 IF A(3,5)<>PO THEN 10230
10220 IF A(4,5)=P THEN A=4:RETURN
10230 IF A(5,1)<>PO THEN 10250
10240 IF A(5,12)=P THEN A=5:RETURN
10250 IF A(5,3)<>PO THEN 10270
10260 IF A(5,4)=P THEN A=6:RETURN
10270 IF A(5,6)<>PO THEN 10290
10280 IF A(5,7)=P THEN A=7:RETURN
10290 IF A(5,9)<>PO THEN 10310
10300 IF A(5,10)=P THEN A=8:RETURN
10310 IF A(7,5)<>PO THEN 10330
10320 IF A(6,5)=P THEN A=9:RETURN
10330 IF A(8,4)<>PO THEN 10350
10340 IF A(6,2)=P THEN A=10:RETURN
10350 IF A(8,6)<>PO THEN 10370
10360 IF A(6,8)=P THEN A=11:RETURN
10370 IF A(9,5)<>PO THEN 10390
10380 IF A(6,11)=P THEN A=12:RETURN
10390 S=S+1:IF S=1 THEN A=PO:PO=P:P=A:GOTO 10150
10400 PRINT:PRINT "LEIDER FALSCH!! NOCH EINMAL!!"
10410 FOR K=1 TO 1500:NEXT K:A=-1:RETURN
10420 A$="OO":RETURN
10430 A$="-O":RETURN
10440 A$="O":RETURN
10450 A$="":RETURN
10460 A$="L-O":RETURN
10470 A$="V":RETURN
10480 A$="-V":RETURN
10490 A$="-RO":RETURN
10500 A$="VV":RETURN
10510 A$="-LV":RETURN
10520 A$="R-V":RETURN
10530 A$="UUVV":RETURN
10540 REM uitvoeren van a$
10550 IF LEN(A$)=0 THEN RETURN
10560 FOR N=1 TO LEN(A$)
10570 IF MID$(A$,N,1)="-" THEN KE$=MID$(A$,N+1,1)
10580 IF MID$(A$,N,1)="-" THEN FOR H=1 TO 3:GOSUB 1020
10590 IF MID$(A$,N,1)<>"-" THEN 10600
10595 NEXT H
10600 IF MID$(A$,N,1)="-" THEN N=N+1:GOTO 10620
10610 IF MID$(A$,N,1)<>"-" THEN KE$=MID$(A$,N,1):GOSUB 1020
10620 NEXT N:VE=19:HO=0:GOSUB 110:FOR I=1 TO 4
10630 PRINT "                                       ":NEXT I
10640 VE=20:HO=0:GOSUB 110:PRINT A$:GOSUB 6760
10650 VE=22:HO=0:GOSUB 110:PRINT "<RETURN> DRUECKEN";
10660 GOSUB 210:RETURN
10670 A$="HL":RETURN
10680 A$="RHHL":RETURN
10690 A$="L":RETURN
10700 A$="-L":RETURN
10710 A$="-VOV":RETURN
10720 A$="HHL":RETURN
10730 A$="-ULL":RETURN
10740 A$="LL":RETURN
10750 A$="UULL":RETURN
10760 A$="-HL":RETURN
10770 A$="RH":RETURN
10780 A$="-H":RETURN
10790 A$="-O-LO":RETURN
10800 A$="OR-O":RETURN
10810 A$="H":RETURN
10820 A$="UUHH":RETURN
10830 A$="-UHH":RETURN
10840 A$="UHH":RETURN
10850 A$="HH":RETURN
10860 A$="-O-HO":RETURN
10870 A$="OV-O":RETURN
10880 A$="R":RETURN
10890 A$="-R":RETURN
10900 A$="URR":RETURN
10910 A$="UURR":RETURN
10920 A$="RR":RETURN
10930 A$="-URR":RETURN
10940 A$="-VHUUV-H":RETURN
10950 A$="VHUU-V-H":RETURN
10960 A$="RU-R-LUL":RETURN
10970 A$="-L-UL":RETURN
10980 A$="H-U-H":RETURN
10990 A$="HU-H":RETURN
11000 A$="-LUL":RETURN
11010 A$="-RLUU-LR":RETURN
11020 A$="RLUU-R-L":RETURN
11030 A$="L-U-L":RETURN
11040 A$="-VUV":RETURN
11050 A$="-V-UV":RETURN
11060 A$="LU-L":RETURN
11070 A$="V-HUUH-V":RETURN
11080 A$="-RUR":RETURN
11090 A$="VU-V":RETURN
11100 A$="V-U-V":RETURN
11110 A$="-R-UR":RETURN
11120 A$="RU-R":RETURN
11130 A$="-H-UH":RETURN
11140 A$="-HUH":RETURN
11150 A$="R-U-R":RETURN
11160 A$="U":RETURN
11170 A$="-U":RETURN
11180 A$="UU":RETURN
11190 A$="-R-H-R-URUV-U-VHR":RETURN
11200 A$="-R-URUV-U-V":RETURN
11210 A$="-V-UVUL-U-L":RETURN
11220 REM zoeken van hb
11230 S=0
11240 IF (A(3,4)<>PO)OR(A(4,4)<>P) THEN 11260
11250 IF A(4,3)=M THEN A=1:RETURN
11260 IF (A(3,6)<>PO)OR(A(4,7)<>P) THEN 11280
11270 IF A(4,6)=M THEN A=2:RETURN
11280 IF (A(1,4)<>PO)OR(A(4,1)<>P) THEN 11300
11290 IF A(4,12)=M THEN A=3:RETURN
11300 IF (A(1,6)<>PO)OR(A(4,10)<>P) THEN 11320
11310 IF A(4,9)=M THEN A=4:RETURN
11320 IF (A(6,3)<>PO)OR(A(6,4)<>P) THEN 11340
11330 IF A(7,4)=M THEN A=5:RETURN
11340 IF (A(6,6)<>PO)OR(A(6,7)<>P) THEN 11360
11350 IF A(7,6)=M THEN A=6:RETURN
11360 IF (A(6,1)<>PO)OR(A(9,4)<>P) THEN 11380
11370 IF A(6,12)=M THEN A=7:RETURN
11380 IF (A(6,9)<>PO)OR(A(6,10)<>P) THEN 11400
11390 IF A(9,6)=M THEN A=8:RETURN
11400 S=S+1:ON S GOTO 11410,11410,11420,11430,11430,11440
11410 A=PO:PO=P:P=M:M=A:GOTO 11240
11420 A=PO:PO=M:M=A:GOTO 11240
11430 A=PO:PO=P:P=M:M=A:GOTO 11240
11440 GOTO 10400
11450 A$="VR-V-LV-R-VL":RETURN
11460 A$="-HLV-LHL-V-L":RETURN
11470 A$="-LOR-OLO-R-O":RETURN
11480 A$="-LVR-VLV-R-V":RETURN
11490 A$="VO-V-UV-O-VU":RETURN
11500 A$="LV-L-HL-V-LH":RETURN
11510 A$="ULV-L-HL-V-LH-U":RETURN
11520 A$="OV-O-HO-V-OH":RETURN
11530 A$="-HOV-OHO-V-O":RETURN
11540 A$="-RVL-VRV-L-V":RETURN
11550 A$="VL-V-RV-L-VR":RETURN
11560 A$="U-RVL-VRV-L-V-U":RETURN
11570 A$="-ORU-ROR-U-R":RETURN
11580 A$="-OHU-HOH-U-H":RETURN
11590 A$="LO-L-UL-O-LU":RETURN
11600 A$="-ULO-L-UL-O-LUU":RETURN
11610 A$="-ULO-LUL-O-L":RETURN
11620 A$="-LHR-HLH-R-H":RETURN
11630 A$="U-HRV-RHR-V-R-U":RETURN
11640 A$="-HRV-RHR-V-R":RETURN
11650 A$="HO-H-UH-O-HU":RETURN
11660 A$="-UHO-HUH-O-H":RETURN
11670 A$="UR-U-LU-R-UL":RETURN
11680 A$="-LUR-ULU-R-U":RETURN
11690 A$="UV-U-HU-V-UH":RETURN
11700 A$="-RUL-URU-L-U":RETURN
11710 A$="UL-U-RU-L-UR":RETURN
11720 GOSUB 120:HO=4:GOSUB 110:RETURN
30000 REM ************************
30010 REM *        kubus!        *
30020 REM *     gemaakt door     *
30030 REM *     jan  broeckx     *
30040 REM *  karmelietenstr. 66  *
30050 REM *     2600 berchem     *
30060 REM *        belgie        *
30061 REM *        2019:         *
30062 REM * umstellung deutsch   *
30063 REM *    2023: farben,     *
30064 REM * korrektur 6720-6750, *
30065 REM *  zwei neue figuren   *
30066 REM *  thomas rademacher   *
30067 REM *  fr.-engels-str. 44  *
30068 REM *     99086 erfurt     *
30069 REM *     deutschland      *
30070 REM ************************
30080 REM
30090 REM copyright  nos hilversum
Außerdem setzen sich jetzt obere und untere Seite besser von der vorderen ab.
Weiterhin habe ich zwei neue Figuren hineingebracht.
Am Anfang wird nun abgefragt, ob der Nutzer an einem Farbbildschirm sitzt oder an einem monochromen (Monitor oder Fernseher). Im ersten Fall können Sternchen (oder Rechtecke, änderbar in den Zeilen 4245 und 6975) angezeigt werden, im zweiten Fall sollten es besser Buchstaben sein, um die Felder auf dem Screen voneinander unterscheiden zu können, siehe das Beispiel vom Amstrad PCW.
Ab Zeile 1000 ist es das absolut identische Programm, das ist die geniale Idee des BasiCode-Konzepts.
Für Omikron.Basic des ST ist es aber hier wieder komplett und ready-to-use.
Bitte beachten, dass nur Großbuchstaben akzeptiert werden und dass je nach Tastatur-Layout "Y" und "Z" vertauscht sein können.
KUBUSNEU.png
Liegt zu Hause ein verdrehter Würfel herum? Dieses Programm kann Abhilfe schaffen, es löst alle legalen eingegebenen Stellungen.
Es lässt sich auch super auf dem Smartphone spielen,
Hagemans-online-Bascoder.jpg
dort im online-Browser von Rob Hagemans http://robhagemans.github.io/basicode/ leider nur zweifarbig. Aber z. B. in BBC Basic for Windows http://www.bbcbasic.uk/bbcwin/bbcwin.html (hier der Bascoder:)

Code: Alles auswählen

    1 REM ***************
    2 REM BASICODE-3 for BBC BASIC for Windows. Version 0.8
    3 REM Based on the BSC3 code for BBC Acorn A/B of Peter Maathuis
    4 REM changes made by Victor Reijs, 2005
    5 REM No BASICODE audio format support,
    6 REM so no loading/saving
    7 REM of program or data files possible
    8 REM help provided by T. Rademacher
    9 REM ***************
   10 GOTO1000
   20 RV=RND(-TIME):CLEAR:MODE20:VDU4:HG=640:VG=400:HO=39:VE=24:SV=7:IN=0
   21 *ESC ON
   22 REM *FX15,0
   23 REM *PRINTERFONT Courier New
   24 DIM CC(2):DIM OC(8):CC(0)=7:CC(1)=0
   25 OC(0)=0:OC(1)=4:OC(2)=1:OC(3)=5:OC(4)=2:OC(5)=6:OC(6)=3:OC(7)=7
   26 GOSUB 90
   28 ONERRORREPORT:ER%=ERL:PRINT"/";ER%:GOTO 952
   29 GOTO1010
   90 REM CONFIGURE COLOR
   91 COLOUR OC(CC(0)): COLOUR OC(CC(1))+128
   92 RETURN
  100 MODE20:GOSUB90:CLS:VDU4:RETURN
  110 GOSUB 90:PRINTTAB(HO,VE);:RETURN
  120 GOSUB 90:HO=POS:VE=VPOS:RETURN
  150 GOSUB 90:PRINT" ";:COLOUR OC(CC(1)):COLOUR OC(CC(0))+128:PRINT "  ";SR$;"  ";:GOSUB 90:PRINT " ";:RETURN
  200 IN$=INKEY$(0):GOTO211
  210 IN$=GET$
  211 IN=ASCIN$:IFIN>135IN=IN-108:RETURN
  212 IFIN>144 AND IN<157 THEN IN=144-IN: RETURN
  213 IFIN=135IN=127:RETURN
  214 IFIN>128IN=32:RETURN
  215 IFIN<32ANDIN<>13IN=0:RETURN
  216 IFIN>95ANDIN<127IN=IN-32:RETURN
  217 RETURN
  220 IFHO<0ORHO>39ORVE<0ORVE>24IN=0:RETURN
  221 H%=POS:V%=VPOS:GOSUB110:A%=135:IN=((USR&FFF4)AND&FF00)DIV256:GOSUB212
  222 PRINTTAB(H%,V%);:RETURN
  250 SOUND 1,-13,190,5:RETURN
  260 RV=RND(1):RETURN
  270 FR=(?5-?3)*256+?4-?2:RETURN
  280 IFFR=1THEN *ESC OFF
  281 IFFR=0THEN *ESC ON
  282 RETURN
  300 SR$=STR$SR:RETURN
  310 @%=&1020000+CN*256+CT:SR$=STR$SR:IFVALSR$=0SR$=STR$0
  311 @%=0:IFCN<>0AND(MID$(SR$,LENSR$-CN,1)<>"."ORINSTR(SR$,"E"))SR$=STRING$(CT,"*"):RETURN
  312 IFCN=0SR$=LEFT$(SR$,LENSR$)
  313 IFLENSR$>CT SR$=STRING$(CT,"*")
  314 SR$=STRING$(CT-LENSR$," ")+SR$:RETURN
  330 IFSR$=""RETURN ELSEO$=SR$:SR$="":FORI%=1TOLENO$:A%=ASCMID$(O$,I%):IFA%>96ANDA%<127SR$=SR$+CHR$(A%-32)ELSESR$=SR$+CHR$A%
  331 NEXT:RETURN
  350 VDU2:VDU21
  351 PRINTSR$;:VDU6:VDU3
  352 RETURN
  360 VDU2:VDU21
  361 PRINT:VDU6:VDU3
  362 RETURN
  400 SOUND1,-SV,(SP-35)*4,SD*2:A%=TIME:REPEATUNTILTIME=A%+SD*10:RETURN
  450 TIME=0:REM *FX21,0
  451 IN$=INKEY$(SD*10):IFIN$=""SD=0:IN=0:RETURN ELSESD=(SD*10-TIME)/10:GOTO211
  500 IN=0
  505 IFNF MOD2=1C%=OPENOUTNF$ ELSEC%=OPENINNF$
  506 IF C%=0 THEN IN=-1: RETURN
  510 IFNF>5H%=C%ELSEIFNF>3G%=C%ELSEIFNF>1F%=C%ELSEE%=C%
  511 RETURN
  540 IN=0:IN$=""
  541 IFNF>5C%=H%ELSEIFNF>3C%=G%ELSEIFNF>1C%=F%ELSEC%=E%
  542 IFEOF#C%IN=1:RETURN
  543 INPUT#C%,IN$
  544 IFEOF#C%IN=1:RETURN ELSERETURN
  560 IN=0
  561 IFNF>5C%=H%ELSEIFNF>3C%=G%ELSEIFNF>1C%=F%ELSEC%=E%
  562 PRINT#C%,SR$:RETURN
  580 IN=0
  581 IFNF>5C%=H%ELSEIFNF>3C%=G%ELSEIFNF>1C%=F%ELSEC%=E%
  582 CLOSE#C%:RETURN
  600 MODE20:GOSUB 90:CLS:VDU5:RETURN
  620 GCOL 0,(-(CN=0)*OC(CC(0))-(CN=1)*OC(CC(1))):MOVE 1+HO*(HG*2-1),(VG*2-1)-VE*(VG*2-1):DRAW 1+HO*(HG*2-1),(VG*2-1)-VE*(VG*2-1)
  622 RETURN
  630 GCOL 0,(-(CN=0)*OC(CC(0))-(CN=1)*OC(CC(1))):DRAW 1+HO*(HG*2),(VG*2-1)-VE*(VG*2-1)
  642 RETURN
  650 GCOL 0,(-(CN=0)*OC(CC(0))-(CN=1)*OC(CC(1))):MOVE 1+HO*(HG*2-1),(VG*2-1)-VE*(VG*2-1):PRINTSR$;:MOVE1+HO*(HG*2-1),(VG*2-1)-VE*(VG*2-1)
  652 RETURN
  950 MODE20:VDU4
  952 *ESC ON
  954 REM *FX15,0
  955 END
funktioniert es auch in Farbe – hierfür die Zeilen ab 1000 zum Bascoder hinzufügen, gilt genauso für andere reale oder emulierte Computer.

Viel Spaß damit!

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

BBC Basic

Beitrag von BC-Tom »

Leider ist die Zeit zum Editieren abgelaufen, hier noch ein kleiner Nachsatz zum Beitrag von gestern abend:

Für BBC Basic muss noch etwas ergänzt werden, sonst wird die linke Spalte um einen Tabulator versetzt ausgegeben.

Code: Alles auswählen

(...)
4030 FOR I=1 TO 3:HO=0:VE=3+I:GOSUB 110
4040 PRINT "";I:NEXT I
4042 FOR I=4 TO 6:HO=0:VE=4+I:GOSUB 110
4044 PRINT "";I:NEXT I
4046 FOR I=7 TO 9:HO=0:VE=5+I:GOSUB 110
4048 PRINT "";INEXT I
(...)
6800 FOR I=1 TO 3:HO=0
6801 VE=3+I:GOSUB 110:PRINT "";I:NEXT I
6802 FOR I=4 TO 6:HO=0
6803 VE=4+I:GOSUB 110:PRINT "";I:NEXT I
6804 FOR I=7 TO 9:HO=0
6805 VE=5+I:GOSUB 110:PRINT "";I:NEXT I
(...)
Also PRINT I jeweils auf PRINT "";I ändern.

Bei den anderen Basics ist die Änderung nicht erforderlich - aber auch nicht schädlich.

FlorianD
Beiträge: 182
Registriert: 19.08.2021 00:18
Has thanked: 21 times
Been thanked: 55 times
Kontaktdaten:

Re: BasiCode für Atari ST

Beitrag von FlorianD »

Code: Alles auswählen

4048 PRINT "";INEXT I
muss bestimmt heissen

Code: Alles auswählen

4048 PRINT "";I:NEXT I

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

bei Copy & Paste übersehen

Beitrag von BC-Tom »

Natürlich, sorry und danke!

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

Othello zu zweit

Beitrag von BC-Tom »

Heute eine andere Othello-Version, diesmal für das Spiel zu zweit.
Es ist aus dem Jahr 1987 und stammt nicht von mir, ich habe es lediglich auf deutsche Ausgaben umgestellt und mit etwas Farbe für eine angenehmere Bedienung gesorgt.
Das Programm weist ungültige Züge zurück, wenn man nicht setzen kann, muss man P für Passen eingeben. Erst daraufhin wird überprüft, ob nicht doch ein Zug möglich ist und ggf. darauf hingewiesen.
Viel Spaß damit!

Code: Alles auswählen

0 REM BASICODE-Subroutinen (c) by Thomas M„urer, Duisburger Str. 296 D-42 OB 1
1 REM Erweiterung zu Version 3C: Thomas Rademacher, JOYCE-User-AG e.V.
10 XBIOS O9,4:DEFSNG "A-Z": SCREEN 0: MODE "USA":CLIP 0,0,639+320*(O9=0),199: GOTO 1000
11 PRINT CHR$(27)"b"CHR$(CC(0)-15*(CC(0)=0)-3*(CC(0)=1)+(CC(0)=2)-2*(CC(0)=3)+2*(CC(0)=4)-7*(CC(0)=5)+3*(CC(0)=6)+7*(CC(0)=7)-8*(CC(0)=CC(1)));
12 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)+7*(CC(1)=7));
13 RETURN
20 GOSUB 100:CLEAR:XBIOS O9,4
21 SV=7:HO=79+40*(O9=0):VE=24:HG=319:VG=199
22 GOSUB 11
23 DIM CC(4):CC(0)=7:CC(1)=0:CC(2)=CC(0):CC(3)=CC(1):CC(4)=CC(1)
28 GOTO 1010
100 GOSUB 11
101 CC(2)=CC(0):CC(3)=CC(1):CLS :REM LOCATE 25,5:PRINT "BasiCode-3C fr OMIKRON.BASIC";:LOCATE 1,0:RETURN 
102 RETURN
110 GOSUB 11
111 VE=MAX(0,VE):VE=MIN(VE,24):HO=MAX(0,HO):HO=MIN(HO,39):PRINT @(Ve,Ho);
119 RETURN
120 HO= POS(0):Ve= CSRLIN -1: RETURN
150 PRINT CHR$(27)"b"CHR$(CC(0)-15*(CC(0)=0)-3*(CC(0)=1)+(CC(0)=2)-2*(CC(0)=3)+2*(CC(0)=4)-7*(CC(0)=5)+3*(CC(0)=6)+7*(CC(0)=7));
151 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)+7*(CC(1)=7));
152 PRINT " "CHR$(27)"p  ";SR$;"  "CHR$(27)"q ";
153 PRINT CHR$(27)"b"CHR$(CC(2)-15*(CC(2)=0)-3*(CC(2)=1)+(CC(2)=2)-2*(CC(2)=3)+2*(CC(2)=4)-7*(CC(2)=5)+3*(CC(2)=6)+7*(CC(2)=7));
154 PRINT CHR$(27)"c"CHR$(CC(3)-15*(CC(3)=0)-3*(CC(3)=1)+(CC(3)=2)-2*(CC(3)=3)+2*(CC(3)=4)-7*(CC(3)=5)+3*(CC(3)=6)+7*(CC(3)=7));
155 RETURN
200 IN=0:IN$=INKEY$:IF IN$<>"" THEN 211
201 IN=IN+32*((IN>96) AND (IN<127))
202 IN=IN-27*(IN=1):IN=IN-23*(IN=6):IF IN=127 THEN GOSUB 120:IF HO>0 THEN IN$=CHR$(27)+"D "+CHR$(27)+"D" ELSE IN=0:IN$=""
205 RETURN
210 GOSUB 200:IF IN$<>"" THEN RETURN ELSE 210
211 IN$=CHR$(CVIL(IN$) AND $FF):IN=ASC(IN$)
212 IN=IN-8*(IN=20)+(IN=30)-30*(IN=0)-7*(IN=24)-119*(IN=8)
216 CN=0:IF IN>96 AND IN<127 THEN IN=IN-32:CN=32
217 IF IN=127 THEN GOSUB 120:IF HO>0 THEN IN$=CHR$(8)+CHR$(16) ELSE IN$=CHR$(9)+CHR$(9):IN$=IN$+IN$+IN$+IN$:IN$=IN$+IN$+IN$+IN$+IN$+CHR$(16)
218 REM IF PEEK(&195)>&7F AND PEEK(&195)<&8A THEN IN$="":IN=-((IN-&80) MOD 10)+10*(IN=&80)
219 RETURN
220 IF((HO<0) OR (HO>39)) THEN IN=0:GOTO 249
221 IF ((VE<0) OR (VE>24)) THEN IN=0:GOTO 249
222 REM Zeichen aus Bildschirm zurcklesen
249 RETURN 
250 PRINT CHR$(7);:RETURN 
260 RV= RND(1): RETURN
270 FR= FRE(0): RETURN
280 RETURN:REM Sperren / Freigeben der Stoptaste 
300 SR$= RIGHT$( STR$(SR!), LEN( STR$(Sr!))+( LEFT$( STR$(Sr!),1)=" ")): RETURN
310 SR$="": IF SR!>=10^(Ct!-Cn!- SGN(Cn!)) THEN GOTO 318
311 IF SR!<-.5*10^-Cn! THEN Sr$="-"
312 SR$=SR$+ MID$( STR$( INT( ABS(Sr!)+.5*10^-Cn!)),2)
313 IF LEN(SR$)<CT!-CN!+(CN!<>0) THEN Sr$=" "+Sr$: GOTO 313
314 IF CN!=0 OR ABS(Sr!)>=1E+10 THEN GOTO 316
315 SR$=SR$+ MID$( STR$(1+ ABS(Sr!)- INT( ABS(Sr!))+.5*10^-Cn!),3,Cn!+1)
316 IF LEN(SR$)<CT! THEN Sr$=Sr$+" ": GOTO 316
317 IF LEN(SR$)>CT! THEN Sr$=""
318 IF LEN(SR$)<CT! THEN Sr$=Sr$+"*": GOTO 318
319 RETURN
330 FOR OF=1 TO LEN(SR$)
331 IF ASC(MID$(SR$,OF,1))>95 THEN GOSUB 340
332 NEXT OF
333 RETURN
340 OSR=ASC(MID$(SR$,OF,1))-32
341 SR$=LEFT$(SR$,OF-1)+CHR$(OSR)+MID$(SR$,OF+1)
342 RETURN
350 LPRINT SR$;:RETURN 
360 LPRINT :RETURN
400 OSP=282*2^((60-SP)/12):VOLUME 2,SV:VOLUME 2,13,512:TUNE 2,OSP
401 FOR OSD=0 TO 2560*SD:NEXT OSD:TUNE 1,0,2,0,3,0:RETURN
450 OTIME=TIMER
451 OSD=SD*30
452 GOSUB 200:IF IN=0 THEN 453 ELSE 454
453 IF OSD>TIMER-OTIME THEN 452 ELSE 457
454 SD=SD-INT((TIMER-OTIME)/30)
455 RETURN
457 SD=0:GOTO 455
500 ONF=(NF AND 1)+4
501 ON ONF+1 GOTO 502,510,515,520,516,521,516,521
516 OPEN "I",ONF,NF$:INPUT #4,OBESTAND$:IN=0:GOTO 539
521 PRINT NF$:OPEN "O",ONF,NF$:IN=0
539 RETURN
540 IN$="":IN=1:ON (ONF+2)/2 GOTO 541,551,551,551
551 IN$=OBESTAND$:IF EOF(ONF) THEN 558
552 LINE INPUT #ONF,OBESTAND$
554 IF OBESTAND$<>"" THEN OU$=MID$(OBESTAND$,1,1)
555 IF ASC(OU$)=26 THEN OBESTAND$="":IN=1:GOTO 559
557 IN=0:GOTO 559
558 IN=1
559 RETURN
560 IN=1:ON (ONF+1)/2 GOTO 561,575,575,575
575 PRINT #ONF,SR$:IN=0:RETURN
580 ON ONF+1 GOTO 582,585,590,592,591,593,591,593
582 RETURN
591 CLOSE ONF:GOTO 599     
593 PRINT #ONF,CHR$(26):PRINT #ONF,CHR$(26):CLOSE ONF 
599 RETURN
600 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)+7*(CC(1)=5)+3*(CC(1)=6)-7*(CC(1)=7));
618 CLS:REM LOCATE 25,5:PRINT "BasiCode-3C fr OMIKRON.BASIC";:LOCATE 1,0
619 RETURN
620 GOSUB 655:OPH=INT(OHO*HG):OPV=INT(OVE*VG):OPM=CN XOR 1:DRAW OPH,OPV:RETURN
630 GOSUB 655:OPH=INT(OHO*HG):OPV=INT(OVE*VG):OPM=CN XOR 1:DRAW TO OPH,OPV:RETURN
650 GOSUB 655:OVE=MIN(VE,0.972):OPV=INT(VE*VG):FOR OPT=0 TO LEN(SR$)-1:OPH=INT(OHO*HG)+OPT*8
651 OPH=MIN(OPH,631+320*(O9=0)):OPC=ASC(MID$(SR$,OPT+1,1))
652 MODE=2:TEXT OPH,OPV+6," ":TEXT OPH,OPV+6,CHR$(OPC):NEXT OPT:MODE=1:RETURN
655 OHO=MAX(0,HO):OHO=(1-(O9<>0))*MIN(OHO,0.998):OVE=MAX(0,VE):OVE=MIN(OVE,0.995)
656 TEXT COLOR=CC(0)- 1*(CC(0)=0)-3*(CC(0)=1)-4*(CC(0)=3)+(CC(0)=4)-7*(CC(0)=5)+7*(CC(0)=7)
657 LINE COLOR=CC(0)- 1*(CC(0)=0)-3*(CC(0)=1)-4*(CC(0)=3)+(CC(0)=4)-7*(CC(0)=5)+7*(CC(0)=7)
658 IF CN=0 THEN GOTO 949
659 TEXT COLOR=CC(1)-(CC(1)=0)-3*(CC(1)=1)-4*(CC(1)=3)+(CC(1)=4)-7*(CC(1)=5)+7*(CC(1)=7)
660 LINE COLOR=CC(1)-(CC(1)=0)-3*(CC(1)=1)-4*(CC(1)=3)+(CC(1)=4)-7*(CC(1)=5)+7*(CC(1)=7)
949 RETURN
950 GOSUB 100:END
1000 A=200:GOTO 20:REM * REVERSI *
1010 N1$="* R E V E R S I *"
1020 N2$="================="
1030 AK$="abcdefgh":AL$="ABCDEFGH"
1040 S$="":P1=0:P2=0:V1$="":V2$=""
1050 DIM B$(8,8),RX(8),RY(8)
1060 B=4:P=0:S1$="o":S2$="x":H=.47:V=.35
1070 RX(1)=1:RX(2)=0:RX(3)=-1:RX(4)=-1
1080 RY(1)=1:RY(2)=1:RY(3)=1:RY(4)=0
1090 RX(5)=-1:RX(6)=0:RX(7)=1:RX(8)=1
1100 RY(5)=-1:RY(6)=-1:RY(7)=-1:RY(8)=0
1110 FOR I=1 TO 8:FOR J=1 TO 8
1120 B$(I,J)="":NEXT J:NEXT I
1130 B$(4,4)=S1$:B$(4,5)=S2$
1140 B$(5,5)=S1$:B$(5,4)=S2$
1150 REM * HOOFD-MENU *
1160 VE=0:HO=11:GOSUB 100:GOSUB 110:PRINT N1$:VE=1:GOSUB 110
1170 PRINT N2$:VE=6:HO=14:GOSUB 110
1180 PRINT "Hauptmenue":VE=7:GOSUB 110
1190 PRINT "==========":VE=10:GOSUB 110
1200 PRINT "1 = Spielregeln":VE=12:GOSUB 110
1210 PRINT "2 = Spielen":VE=14:GOSUB 110
1220 PRINT "3 = Beenden":VE=23:HO=28:GOSUB 110
1230 PRINT "Ihre Wahl";
1240 GOSUB 210:W=VAL(IN$):IF (W<1) OR (W>3) THEN 1240
1250 ON W GOTO 9010,1510,1260
1260 GOSUB 100:GOTO 950
1500 REM * HET SPEL *
1510 GOSUB 100:HO=2:VE=8:GOSUB 110:PRINT "Name Spieler 1";
1520 INPUT P1$
1530 VE=10:GOSUB 110:PRINT "Name Spieler 2";:INPUT P2$
1540 VE=12:GOSUB 110:PRINT P1$;" spielt mit den Nullen"
1550 VE=14:GOSUB 110:PRINT P2$;" spielt mit den Kreuzen"
1560 VE=22:HO=30:GOSUB 110:PRINT "<Taste>"
1570 GOSUB 210:IF IN$="" THEN 1570
1580 GOSUB 3010:REM * TEKEN BORD *
1590 GOSUB 7510:REM * PRINT DE STAND *
1600 S$=S1$:GOSUB 3510
1610 IF F<>3 THEN P=0:GOSUB 7510:B=B+1
1620 IF F=3 THEN P=P+1
1630 IF (B=64) OR (P=2) OR (S1=0) OR (S2=0) THEN 2010
1640 S$=S2$:GOSUB 3510
1650 IF F<>3 THEN P=0:GOSUB 7510:B=B+1
1660 IF F=3 THEN P=P+1
1670 IF (B=64) OR (P=2) OR (S1=0) OR (S2=0) THEN 2010
1680 GOTO 1600
2000 REM * EINDE SPEL *
2010 HO=H:VE=V:IF S2=S1 THEN 2060
2020 IF S1>S2 THEN SR$=LEFT$(P1$,10):CC(0)=6
2030 IF S2>S1 THEN SR$=LEFT$(P2$,10):CC(0)=5
2040 GOSUB 650:HO=.47+(LEN(SR$)+1)*.025
2050 SR$=" gewinnt!!":GOSUB 650:CC(0)=7:GOTO 2070
2060 SR$="Unentschieden":GOSUB 650
2070 HO=H:VE=.45:SR$="   GRATULATION !":GOSUB 650
2080 HO=H:VE=.55:SR$="Noch ein Spiel  <j/n>":GOSUB 650
2090 GOSUB 250:GOSUB 210
2100 IF ((IN$="J") OR (IN$="j")) THEN 1000
2110 GOSUB 100:HO=13:VE=10:GOSUB 110:PRINT "AUF WIEDERSEHEN!!!"
2120 GOSUB 210:GOTO 950
2500 HO=H:VE=.45
2510 SR$="Eine Taste druecken ...":GOSUB 650
2520 IF CN=1 THEN CN=0:RETURN
2530 GOSUB 250:GOSUB 210:IN$="":RETURN
2540 HO=0:VE=23:GOSUB 110
2550 PRINT "Eine Taste druecken...";
2560 REM GOSUB 250
2570 GOSUB 210:PRINT:RETURN
3000 REM * TEKEN SPEELVELD *
3010 GOSUB 100:GOSUB 600:CN=0:C=.045
3020 FOR HO=.05 TO (8*C+.051) STEP C
3030 VE=.2:GOSUB 620:VE=.68:GOSUB 630
3040 NEXT HO:C=.06
3050 FOR VE=.2 TO (8*C+.201) STEP C
3060 HO=.05:GOSUB 620:HO=.41:GOSUB 630
3070 NEXT VE
3080 SR$=N1$:HO=.25:VE=.04:CC(0)=6:GOSUB 650:CC(0)=7
3090 SR$=N2$:VE=.08:CC(0)=5:GOSUB 650:CC(0)=7
3100 A$="87654321":A=1:C=.06
3110 HO=0:FOR VE=.22 TO (8*C+.22) STEP C
3120 SR$=MID$(A$,A,1):GOSUB 650:A=A+1:NEXT VE
3130 A=1:C=.045
3140 VE=.7:FOR HO=.06 TO (9*C+.7) STEP C
3150 SR$=MID$(AL$,A,1):GOSUB 650:A=A+1:NEXT HO
3160 SR$="Am Zug   Stand":HO=.63:VE=.75:GOSUB 650
3170 VE=VE+.07:HO=.35
3180 SR$=LEFT$(P1$,10):CC(0)=6:GOSUB 650:CC(0)=7:VE=VE+.07
3190 SR$=LEFT$(P2$,10):CC(0)=5:GOSUB 650:CC(0)=7:RETURN
3500 REM * VRAAG ZET *
3510 F=1:CN=0:Q=0
3520 GOSUB 3720:GOSUB 6300
3530 GOSUB 4500:CN=1:GOSUB 3720:CN=0:GOSUB 4960
3540 IF (IN$="P") OR (IN$="p") THEN F=3:GOTO 5010
3550 GOSUB 4110:REM * IF <A OR >H *
3560 IF F=2 THEN CN=1:GOSUB 4960:GOSUB 4800:GOTO 3510
3570 REM
3580 F=1:Q=0:CN=0
3590 CN=1:GOSUB 4960:CN=0:GOSUB 3720:GOSUB 6400
3600 GOSUB 4560:CN=1:GOSUB 3720:CN=0:GOSUB 4960
3610 GOSUB 4210:REM * IF <1 OR >8 *
3620 IF F=2 THEN CN=1:GOSUB 4960:GOSUB 4900:GOTO 3580
3630 B2=VAL(IN$)
3640 IF B$(B1,B2)<>"" THEN CN=1:GOSUB 4960:GOSUB 4010
3650 IF B$(B1,B2)<>"" THEN GOSUB 3720:GOTO 3510
3660 GOSUB 6010:REM * IS ZET LEGAAL *
3670 IF ZZ=0 THEN CN=1:GOSUB 4960:GOSUB 7000:GOSUB 7110
3680 IF ZZ=0 THEN GOSUB 4310:GOTO 3510
3690 IF F<>3 THEN B$(B1,B2)=S$
3700 CN=1:GOSUB 4960:CN=0:RETURN
3710 REM * MEDEDELING SPELER *
3720 Q1$=" (o)":Q2$=" (x)"
3730 HO=.47:VE=.35:SR$=LEFT$(P1$,10)+Q1$:CC(0)=6
3740 IF S$=S2$ THEN SR$=LEFT$(P2$,10)+Q2$:CC(0)=5
3750 GOSUB 650:CC(0)=7
3760 HO=.47+(LEN(SR$)+1)*.025
3770 SR$=" setzt!":GOSUB 650
3780 RETURN
4000 REM * VAK BEZET *
4010 GOSUB 6500
4020 SR$="Das Feld ist besetzt!":GOSUB 650
4030 IF Q=2 THEN 4050
4040 SD=8:GOSUB 450:IF Q=1 THEN 4010
4050 GOSUB 7000:GOSUB 7110:Q=0:CN=0:RETURN
4100 REM * TUSSEN A EN H *
4110 B1=0
4120 FOR I=1 TO 8
4130 IF (MID$(AK$,I,1)=IN$) OR (MID$(AL$,I,1)=IN$) THEN B1=I
4140 NEXT I
4150 IF B1=0 THEN F=2:RETURN
4160 F=1:RETURN
4200 REM * TUSSEN 1 EN 8 *
4210 IF (VAL(IN$)<1) OR (VAL(IN$)>8) THEN F=2:RETURN
4220 F=1:RETURN
4300 REM * ONJUISTE ZET *
4310 GOSUB 6500
4320 SR$="Ungueltiger Zug!!":GOSUB 650
4330 IF Q=2 THEN 4350
4340 SD=8:GOSUB 450:IF Q=1 THEN 4310
4350 IF S$=S1$ THEN SR$=W3$:VE=.82
4360 IF S$=S2$ THEN SR$=V3$:VE=.89
4370 GOSUB 7230:CN=0:Q=0:RETURN
4500 HO=.7:VE=.82:IF S$=S2$ THEN VE=.89
4510 GOSUB 210:CN=1:GOSUB 6300
4520 SR$=IN$:CN=0:GOSUB 650
4530 IF S$=S1$ THEN W1$=IN$
4540 IF S$=S2$ THEN V1$=IN$
4550 RETURN
4560 HO=.727:VE=.82:IF S$=S2$ THEN VE=.89
4570 GOSUB 210:CN=1:GOSUB 6400:HO=.727
4580 SR$=IN$:CN=0:GOSUB 650
4590 IF S$=S1$ THEN W2$=IN$:CC(0)=6
4600 IF S$=S2$ THEN V2$=IN$:CC(0)=5
4610 W3$=W1$+W2$:V3$=V1$+V2$
4620 RETURN
4800 GOSUB 6500
4810 SR$="Spalte von A bis H !!":GOSUB 650
4820 IF Q=2 THEN 4840
4830 SD=8:GOSUB 450:IF Q=1 THEN 4800
4840 GOSUB 7000:Q=0:CN=0:RETURN
4900 GOSUB 6500
4910 SR$="Zeile von 1 bis 8 !!":GOSUB 650
4920 IF Q=2 THEN 4940
4930 SD=8:GOSUB 450:IF Q=1 THEN 4900
4940 GOSUB 7110:Q=0:CN=0:RETURN
4950 REM
4960 HO=H:VE=V
4970 SR$="Moment bitte ...":GOSUB 650:RETURN
5000 REM * PASCONTROLE *
5010 Z=0
5020 FOR K=1 TO 8
5030 FOR L=1 TO 8
5040 IF Z=1 THEN 5080
5050 B1=K:B2=L
5060 IF B$(B1,B2)="" THEN GOSUB 6010
5070 IF Z=1 THEN BX=B1:BY=B2
5080 NEXT L
5090 NEXT K
5100 IF Z=1 THEN 5200
5110 IF Z=0 THEN 5300
5120 GOTO 3690
5200 F=1:CN=1:GOSUB 4960
5210 GOSUB 6500
5220 SR$="Passen nicht noetig!!":GOSUB 650:GOSUB 5510
5230 GOSUB 2500:IF Q=1 THEN 5210
5240 GOSUB 7000:GOTO 3510
5300 F=3:CN=1:GOSUB 4960
5310 GOSUB 6500
5320 SR$="Passen erforerlich!!":GOSUB 650
5330 GOSUB 2500:IF Q=1 THEN 5310
5340 GOSUB 7000:CN=0:Q=0:GOTO 5120
5500 REM * MOGELIJKE ZET *
5510 HO=H:VE=.25:SR$="Moeglicher Zug:":GOSUB 650
5520 HO=.9:SR$=MID$(AL$,BX,1):GOSUB 650
5530 SR=BY:GOSUB 300:HO=.925:GOSUB 650
5540 RETURN
6000 REM * ZETCONTROLE *
6010 Z=0:ZZ=0:FOR I=1 TO 8
6020 T=0:IF (F=3) AND (Z=1) THEN 6190
6030 X=B1+RX(I):Y=B2+RY(I)
6040 T=T+1
6050 IF (X<1) OR (X>8) OR (Y<1) OR (Y>8) THEN 6180
6060 IF (B$(X,Y)="") OR (B$(X,Y)=S$) THEN 6180
6070 X=X+RX(I):Y=Y+RY(I)
6080 T=T+1
6090 IF (X<1) OR (X>8) OR (Y<1) OR (Y>8) THEN 6180
6100 IF (B$(X,Y)<>"") AND (B$(X,Y)<>S$) THEN 6070
6110 IF B$(X,Y)="" THEN 6180
6120 Z=1
6130 IF F=3 THEN 6190
6140 FOR J=1 TO (T-1)
6150 X=X-RX(I):Y=Y-RY(I)
6160 B$(X,Y)=S$
6170 NEXT J:ZZ=1:GOTO 6190
6180 Z=0
6190 NEXT I
6200 RETURN
6300 HO=.7:VE=.82:IF S$=S2$ THEN VE=.89
6310 SR$="?":GOTO 6420
6400 HO=.7:VE=.82:IF S$=S2$ THEN VE=.89
6410 SR$=" ":GOTO 6420
6420 GOSUB 650:SR$="?":HO=.727:GOSUB 650:HO=.7:CN=0:RETURN
6500 HO=H:VE=V:CN=0:Q=Q+1
6510 IF Q=2 THEN CN=1:RETURN
6520 RETURN
7000 CN=1:HO=.7:VE=.82:SR$=W1$
7010 IF S$=S2$ THEN VE=.89:SR$=V1$
7020 GOSUB 650:CN=0:RETURN
7100 REM
7110 CN=1:HO=.727:VE=.82:SR$=W2$
7120 IF S$=S2$ THEN VE=.89:SR$=V2$
7130 GOSUB 650:CN=0:RETURN
7140 REM
7150 CN=1:HO=.925:VE=.82:SR=P1:GOSUB 300:GOSUB 650
7160 VE=.89:SR=P2:GOSUB 300:GOSUB 650:CN=0:RETURN
7170 REM
7200 REM * WISSEN STAND *
7210 IF S$=S1$ THEN VE=.89:SR$=V3$
7220 IF S$=S2$ THEN VE=.82:SR$=W3$
7230 S9$=SR$:SR$=LEFT$(S9$,1):HO=.7:CN=1:GOSUB 650
7240 HO=.727:SR$=RIGHT$(S9$,1):GOSUB 650:CN=0:RETURN
7500 REM * ZETTEN+STAND *
7510 S1=0:S2=0
7520 FOR I=1 TO 8:FOR J=1 TO 8:C=.045:C1=.06
7530 HO=.061+((I-1)*C):VE=.63-((J-1)*C1)
7540 IF B$(I,J)="" THEN 7620
7550 IF (S$="o") AND (B$(I,J)="o") THEN SR$="x":CN=1:GOSUB 650
7560 IF (S$="o") AND (B$(I,J)="o") THEN CN=0:GOTO 7590
7570 IF (S$="x") AND (B$(I,J)="x") THEN SR$="o":CN=1:GOSUB 650
7580 IF (S$="x") AND (B$(I,J)="x") THEN CN=0
7590 SR$=B$(I,J)
7594 IF SR$="o" THEN CC(0)=6
7596 IF SR$="x" THEN CC(0)=5
7598 GOSUB 650:CC(0)=7
7600 IF SR$=S1$ THEN S1=S1+1
7610 IF SR$=S2$ THEN S2=S2+1
7620 NEXT J:NEXT I:GOSUB 7150
7630 HO=.925:VE=.82:SR=S1:GOSUB 300:CC(0)=6:GOSUB 650:CC(0)=7
7640 VE=.89:SR=S2:GOSUB 300:CC(0)=5:GOSUB 650:CC(0)=7
7650 P1=S1:P2=S2:P3=P3+1
7660 IF P3>=3 THEN GOSUB 7210
7670 RETURN
9000 REM * UITLEG *
9010 GOSUB 100:VE=0:HO=14:GOSUB 110
9020 PRINT "* REVERSI *":VE=VE+1:GOSUB 110
9030 PRINT "===========":HO=0:VE=2:GOSUB 110
9040 PRINT "Spielregeln":VE=VE+1:GOSUB 110
9050 PRINT "===========":HO=0:VE=6:GOSUB 110
9060 PRINT "Das ist eine Computerversion des"
9070 PRINT "bekannten Spiels Reversi."
9080 PRINT
9090 PRINT "Es wird auf einem Brett mit 64 Fel-"
9100 PRINT "dern gespielt. Am Anfang des Spiels"
9110 PRINT "besitzen beide Spieler zwei Steine."
9120 PRINT
9130 PRINT "Es geht darum, soviele Steine wie"
9140 PRINT "moeglich zu ";CHR$(34);"erobern";CHR$(34);"."
9150 GOSUB 2540:GOSUB 100:VE=2:GOSUB 110
9160 PRINT "Einschliessen / Erobern":VE=3:GOSUB 110
9170 PRINT "=======================":VE=6:GOSUB 110
9180 PRINT "Die Spieler besetzen abwechselnd ein"
9190 PRINT "leeres Feld so, dass es ein oder meh-"
9200 PRINT "rere benachbarte Steine des anderen"
9210 PRINT "Spielers in einer geraden Linie zu"
9220 PRINT "einem eigenen Stein umschliesst."
9230 PRINT "Die eingeschlossenen Steine wechseln"
9240 PRINT "nun den Besitzer. Ein Feld kann also"
9250 PRINT "mehrmals den Besitzer wechseln!"
9260 PRINT "Das Einschliessen kann in alle Rich-"
9270 PRINT "gen erfolgen, sogar gleichzeitig:"
9280 PRINT "vertikal, horizontal und diagonal."
9290 PRINT "Das Setzen eines Steins erfolgt"
9300 PRINT "durch Eingabe einer Koordinate"
9310 PRINT "z.B. ";CHR$(34);"A1";CHR$(34);"."
9320 GOSUB 2540:GOSUB 100:VE=2:HO=0:GOSUB 110
9330 PRINT "Passen":VE=VE+1:GOSUB 110
9340 PRINT "======":VE=6:GOSUB 110
9350 PRINT "Wenn ein Spieler ein Feld nicht beset-"
9360 PRINT "zen kann, dass ein oder mehrere geg-"
9370 PRINT "nerische Steine eingeschlossen wer-"
9380 PRINT "den, muss er passen. Dies kann durch"
9390 PRINT "die Eingabe von ";CHR$(34);"P";CHR$(34)" geschehen. Der"
9400 PRINT "Computer ueberprueft dann, ob dies so"
9410 PRINT "richtig gemacht wurde oder nicht."
9420 PRINT "Wenn es stimmt, ist der andere Spie-"
9430 PRINT "ler an der Reihe. Wenn er doch set-"
9440 PRINT "zen kann, zeigt er an, welcher Zug"
9450 PRINT "noch moeglich ist, der aber nicht der"
9460 PRINT "guenstigste sein muss. Diese Moeglich-"
9470 PRINT "keit kann natuerlich helfen, wenn der"
9480 PRINT "Spieler nicht sofort erkennt, was"
9490 PRINT "ein gueltiger Zug ist."
9500 GOSUB 2540:GOSUB 100:VE=2:HO=0:GOSUB 110
9510 PRINT "Spiel-Ende":VE=VE+1:GOSUB 110
9520 PRINT "==========":VE=6:GOSUB 110
9530 PRINT "Das Spiel endet, wenn alle Felder"
9540 PRINT "besetzt sind oder wenn keine Felder"
9550 PRINT "mehr besetzt werden koennen, weil es"
9560 PRINT "keine Moeglichkeit gibt, sie einzu-"
9570 PRINT "schliessen, so dass beide Spieler"
9580 PRINT "passen muessen."
9590 PRINT
9600 PRINT "Wer die meisten Felder besetzt hat,"
9610 PRINT "gewinnt!"
9620 PRINT
9630 GOSUB 2540:GOTO 1160
32000 REM
32010 REM
32020 REM ************************
32030 REM *                      *
32040 REM *     * REVERSI *      *
32050 REM *                      *
32060 REM * Een programma van:   *
32070 REM *                      *
32080 REM * J.S. ROSMAN          *
32090 REM * Ch.Th.STORKSTRAAT 88 *
32100 REM * 3119 VE  SCHIEDAM    *
32110 REM *                      *
32120 REM * Versie 2 : Feb 1987  *
32130 REM *                      *
32140 REM * Aangepast aan        *
32150 REM * B A S I C O D E - 3  *
32160 REM * door:                *
32170 REM *                      *
32180 REM *   P.A.KESTELOO       *
32190 REM *   REEDE 34           *
32200 REM *   3232 CV  BRIELLE   *
32210 REM *   Tel. 01810-15569   *
32220 REM *                      *
32230 REM *     14 Nov 1987      *
32240 REM *     COMMODORE 64     *
32250 REM *                      *
32260 REM ************************
32270 REM
32280 REM TROS-RADIO dd 880518
32290 REM incl.corr. dd 880922
32300 REM ins Deutsche uebertragen:
32310 REM Thomas Rademacher
32320 REM JOYCE-User-AG e.V.
32340 REM Juli 2023
REVERSIC.png

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

Othello mit variabler Spielfeldgröße

Beitrag von BC-Tom »

... und eine weitere Othello-Version, ebenfalls nicht aus meiner Feder, ich habe nur die Farben ergänzt, weil ich so die Bedienung angenehmer finde.
Wie das vorige ist es nur für Omikron.Basic geeignet.
Die Spielfeldgröße kann von 3 x 3 bis 8 x 8 gewählt werden.
Außerdem hat man die Wahl, dem Computer beim Spiel gegen sich selbst zuzusehen, gegen den Computer (für den man sich zwischen zwei Spielstärken entscheiden kann) zu spielen oder zu zweit zu spielen, der Computer ist dann nur das Spielbrett.
Ist kein Zug möglich, wird hier zweimal "0" (Null) anstelle von Koordinaten eingegeben.
Viel Spaß!
othellov.png
othellov.png (5.21 KiB) 1421 mal betrachtet

Code: Alles auswählen

0 REM BASICODE-Subroutinen (c) by Thomas M„urer, Duisburger Str. 296 D-42 OB 1
1 REM Erweiterung zu Version 3C: Thomas Rademacher, JOYCE-User-AG e.V.
10 XBIOS O9,4:DEFSNG "A-Z": SCREEN 0: MODE "USA":CLIP 0,0,639+320*(O9=0),199: GOTO 1000
11 PRINT CHR$(27)"b"CHR$(CC(0)-15*(CC(0)=0)-3*(CC(0)=1)+(CC(0)=2)-2*(CC(0)=3)+2*(CC(0)=4)-7*(CC(0)=5)+3*(CC(0)=6)+7*(CC(0)=7)-8*(CC(0)=CC(1)));
12 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)+7*(CC(1)=7));
13 RETURN
20 GOSUB 100:CLEAR:XBIOS O9,4
21 SV=7:HO=79+40*(O9=0):VE=24:HG=319:VG=199
22 GOSUB 11
23 DIM CC(4):CC(0)=7:CC(1)=0:CC(2)=CC(0):CC(3)=CC(1):CC(4)=CC(1)
28 GOTO 1010
100 GOSUB 11
101 CC(2)=CC(0):CC(3)=CC(1):CLS :REM LOCATE 25,5:PRINT "BasiCode-3C fr OMIKRON.BASIC";:LOCATE 1,0:RETURN 
102 RETURN
110 GOSUB 11
111 VE=MAX(0,VE):VE=MIN(VE,24):HO=MAX(0,HO):HO=MIN(HO,39):PRINT @(Ve,Ho);
119 RETURN
120 HO= POS(0):Ve= CSRLIN -1: RETURN
150 PRINT CHR$(27)"b"CHR$(CC(0)-15*(CC(0)=0)-3*(CC(0)=1)+(CC(0)=2)-2*(CC(0)=3)+2*(CC(0)=4)-7*(CC(0)=5)+3*(CC(0)=6)+7*(CC(0)=7));
151 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)-7*(CC(1)=5)+3*(CC(1)=6)+7*(CC(1)=7));
152 PRINT " "CHR$(27)"p  ";SR$;"  "CHR$(27)"q ";
153 PRINT CHR$(27)"b"CHR$(CC(2)-15*(CC(2)=0)-3*(CC(2)=1)+(CC(2)=2)-2*(CC(2)=3)+2*(CC(2)=4)-7*(CC(2)=5)+3*(CC(2)=6)+7*(CC(2)=7));
154 PRINT CHR$(27)"c"CHR$(CC(3)-15*(CC(3)=0)-3*(CC(3)=1)+(CC(3)=2)-2*(CC(3)=3)+2*(CC(3)=4)-7*(CC(3)=5)+3*(CC(3)=6)+7*(CC(3)=7));
155 RETURN
200 IN=0:IN$=INKEY$:IF IN$<>"" THEN 211
201 IN=IN+32*((IN>96) AND (IN<127))
202 IN=IN-27*(IN=1):IN=IN-23*(IN=6):IF IN=127 THEN GOSUB 120:IF HO>0 THEN IN$=CHR$(27)+"D "+CHR$(27)+"D" ELSE IN=0:IN$=""
205 RETURN
210 GOSUB 200:IF IN$<>"" THEN RETURN ELSE 210
211 IN$=CHR$(CVIL(IN$) AND $FF):IN=ASC(IN$)
212 IN=IN-8*(IN=20)+(IN=30)-30*(IN=0)-7*(IN=24)-119*(IN=8)
216 CN=0:IF IN>96 AND IN<127 THEN IN=IN-32:CN=32
217 IF IN=127 THEN GOSUB 120:IF HO>0 THEN IN$=CHR$(8)+CHR$(16) ELSE IN$=CHR$(9)+CHR$(9):IN$=IN$+IN$+IN$+IN$:IN$=IN$+IN$+IN$+IN$+IN$+CHR$(16)
218 REM IF PEEK(&195)>&7F AND PEEK(&195)<&8A THEN IN$="":IN=-((IN-&80) MOD 10)+10*(IN=&80)
219 RETURN
220 IF((HO<0) OR (HO>39)) THEN IN=0:GOTO 249
221 IF ((VE<0) OR (VE>24)) THEN IN=0:GOTO 249
222 REM Zeichen aus Bildschirm zurcklesen
249 RETURN 
250 PRINT CHR$(7);:RETURN 
260 RV= RND(1): RETURN
270 FR= FRE(0): RETURN
280 RETURN:REM Sperren / Freigeben der Stoptaste 
300 SR$= RIGHT$( STR$(SR!), LEN( STR$(Sr!))+( LEFT$( STR$(Sr!),1)=" ")): RETURN
310 SR$="": IF SR!>=10^(Ct!-Cn!- SGN(Cn!)) THEN GOTO 318
311 IF SR!<-.5*10^-Cn! THEN Sr$="-"
312 SR$=SR$+ MID$( STR$( INT( ABS(Sr!)+.5*10^-Cn!)),2)
313 IF LEN(SR$)<CT!-CN!+(CN!<>0) THEN Sr$=" "+Sr$: GOTO 313
314 IF CN!=0 OR ABS(Sr!)>=1E+10 THEN GOTO 316
315 SR$=SR$+ MID$( STR$(1+ ABS(Sr!)- INT( ABS(Sr!))+.5*10^-Cn!),3,Cn!+1)
316 IF LEN(SR$)<CT! THEN Sr$=Sr$+" ": GOTO 316
317 IF LEN(SR$)>CT! THEN Sr$=""
318 IF LEN(SR$)<CT! THEN Sr$=Sr$+"*": GOTO 318
319 RETURN
330 FOR OF=1 TO LEN(SR$)
331 IF ASC(MID$(SR$,OF,1))>95 THEN GOSUB 340
332 NEXT OF
333 RETURN
340 OSR=ASC(MID$(SR$,OF,1))-32
341 SR$=LEFT$(SR$,OF-1)+CHR$(OSR)+MID$(SR$,OF+1)
342 RETURN
350 LPRINT SR$;:RETURN 
360 LPRINT :RETURN
400 OSP=282*2^((60-SP)/12):VOLUME 2,SV:VOLUME 2,13,512:TUNE 2,OSP
401 FOR OSD=0 TO 2560*SD:NEXT OSD:TUNE 1,0,2,0,3,0:RETURN
450 OTIME=TIMER
451 OSD=SD*30
452 GOSUB 200:IF IN=0 THEN 453 ELSE 454
453 IF OSD>TIMER-OTIME THEN 452 ELSE 457
454 SD=SD-INT((TIMER-OTIME)/30)
455 RETURN
457 SD=0:GOTO 455
500 ONF=(NF AND 1)+4
501 ON ONF+1 GOTO 502,510,515,520,516,521,516,521
516 OPEN "I",ONF,NF$:INPUT #4,OBESTAND$:IN=0:GOTO 539
521 PRINT NF$:OPEN "O",ONF,NF$:IN=0
539 RETURN
540 IN$="":IN=1:ON (ONF+2)/2 GOTO 541,551,551,551
551 IN$=OBESTAND$:IF EOF(ONF) THEN 558
552 LINE INPUT #ONF,OBESTAND$
554 IF OBESTAND$<>"" THEN OU$=MID$(OBESTAND$,1,1)
555 IF ASC(OU$)=26 THEN OBESTAND$="":IN=1:GOTO 559
557 IN=0:GOTO 559
558 IN=1
559 RETURN
560 IN=1:ON (ONF+1)/2 GOTO 561,575,575,575
575 PRINT #ONF,SR$:IN=0:RETURN
580 ON ONF+1 GOTO 582,585,590,592,591,593,591,593
582 RETURN
591 CLOSE ONF:GOTO 599     
593 PRINT #ONF,CHR$(26):PRINT #ONF,CHR$(26):CLOSE ONF 
599 RETURN
600 PRINT CHR$(27)"c"CHR$(CC(1)-15*(CC(1)=0)-3*(CC(1)=1)+(CC(1)=2)-2*(CC(1)=3)+2*(CC(1)=4)+7*(CC(1)=5)+3*(CC(1)=6)-7*(CC(1)=7));
618 CLS:REM LOCATE 25,5:PRINT "BasiCode-3C fr OMIKRON.BASIC";:LOCATE 1,0
619 RETURN
620 GOSUB 655:OPH=INT(OHO*HG):OPV=INT(OVE*VG):OPM=CN XOR 1:DRAW OPH,OPV:RETURN
630 GOSUB 655:OPH=INT(OHO*HG):OPV=INT(OVE*VG):OPM=CN XOR 1:DRAW TO OPH,OPV:RETURN
650 GOSUB 655:OVE=MIN(VE,0.972):OPV=INT(VE*VG):FOR OPT=0 TO LEN(SR$)-1:OPH=INT(OHO*HG)+OPT*8
651 OPH=MIN(OPH,631+320*(O9=0)):OPC=ASC(MID$(SR$,OPT+1,1))
652 MODE=2:TEXT OPH,OPV+6," ":TEXT OPH,OPV+6,CHR$(OPC):NEXT OPT:MODE=1:RETURN
655 OHO=MAX(0,HO):OHO=(1-(O9<>0))*MIN(OHO,0.998):OVE=MAX(0,VE):OVE=MIN(OVE,0.995)
656 TEXT COLOR=CC(0)- 1*(CC(0)=0)-3*(CC(0)=1)-4*(CC(0)=3)+(CC(0)=4)-7*(CC(0)=5)+7*(CC(0)=7)
657 LINE COLOR=CC(0)- 1*(CC(0)=0)-3*(CC(0)=1)-4*(CC(0)=3)+(CC(0)=4)-7*(CC(0)=5)+7*(CC(0)=7)
658 IF CN=0 THEN GOTO 949
659 TEXT COLOR=CC(1)-(CC(1)=0)-3*(CC(1)=1)-4*(CC(1)=3)+(CC(1)=4)-7*(CC(1)=5)+7*(CC(1)=7)
660 LINE COLOR=CC(1)-(CC(1)=0)-3*(CC(1)=1)-4*(CC(1)=3)+(CC(1)=4)-7*(CC(1)=5)+7*(CC(1)=7)
949 RETURN
950 GOSUB 100:END
1000 A=100:GOTO 20:REM  ** OTHELLO **
1010 DIM F(10,10),I4(8),J4(8),C$(8),D$(3)
1020 HT=HO:VT=VE:CC(0)=0:CC(1)=7
1030 GOSUB 100:PRINT:SR$="OTHELLO":GOSUB 150
1040 PRINT" wird auf einem quadrat."
1050 PRINT" Brett gespielt, dessen Zeilen von 1-8"
1060 PRINT" und dessen Reihen von A-H bezeichnet"
1070 PRINT" sind. Die Ausgangsstellung ist alle"
1080 PRINT" Felder leer, ausser den mittleren"
1090 PRINT" die eine feste Form haben."
1100 PRINT" Versuche deine Steine so zu plazieren"
1110 PRINT" dass sie meine einschliessen indem sie"
1120 PRINT" eine horizontale,vertikale oder eine"
1130 PRINT" diagonale Linie bilden. Dann werden"
1140 PRINT" alle neu eingeschlossenen Steine in"
1150 PRINT" deine umgewandelt - und umgekehrt"
1160 PRINT" geht es natuerlich auch !"
1170 HO=0:VE=VT:GOSUB 110:PRINT"(Taste druecken)";
1180 GOSUB 210:GOSUB 100:PRINT
1190 SR$="Beachte":GOSUB 150
1200 PRINT" Du musst mindestens einen"
1210 PRINT" von meinen Steinen schlagen wenn es"
1220 PRINT" moeglich ist; ansonsten gib fuer"
1230 PRINT" Deinen Zug   0,0   ein."
1240 PRINT"****************************************"
1500 REM *** INITIALISIERUNG ***
1510 D$(1)="X":D$(2)=".":D$(3)="O":SD=40
1520 SR$="Falsche Eingabe"
1530 RESTORE:FOR I=1 TO 8:READ I4(I),J4(I),C$(I):NEXT I
1540 PRINT"  Welche Spielfeldgroesse (3...8) ?":GOSUB 210
1550 IF (IN<51) OR (IN>56) THEN GOSUB 150:PRINT:GOTO 1540
1560 M=IN-48:G=INT(M/2)+1:V=INT(M/2)+2
1570 FOR I=1 TO 8:FOR J=1 TO 8:F(I,J)=0:NEXT J:NEXT I
1580 F(G,G)=1:F(V,V)=1:F(V,G)=-1:F(G,V)=-1
1590 C1=2:H1=2:N1=4:Z=0:XX=0:YY=0
1600 PRINT:PRINT"  Welche Betriebsart :"
1610 PRINT"    1 = gegen den Computer"
1620 PRINT"    2 = Computer gegen sich selbst"
1630 PRINT"    3 = zwei Spieler gegeneinander"
1640 GOSUB 210:IF (IN<49) OR (IN>51) THEN GOSUB 150:GOTO 1600
1650 IF IN=50 THEN XX=1:S2=2:C=1:H=-1:GOSUB 3510:GOTO 2010
1660 IF IN=51 THEN YY=1:C=1:H=-1:GOSUB 3510:GOTO 2510
1670 PRINT:PRINT"Soll ich meine grosse Staerke spielen"
1680 PRINT"   oder nicht (Y/N) ?":GOSUB 210
1690 IF IN=89 THEN S2=2:GOTO 1720
1700 IF IN=78 THEN S2=0:GOTO 1720
1710 GOSUB 150:PRINT:GOTO 1670
1720 PRINT:PRINT"  Willst Du  X oder O  ?":GOSUB 210
1730 IF IN=88 THEN C=1:H=-1:GOTO 1760
1740 IF IN=79 THEN C=-1:H=1:GOTO 1760
1750 GOSUB 150:PRINT:GOTO 1720
1760 PRINT:PRINT"  Willst Du anfangen ? Y/N":GOSUB 210
1770 IF IN=89 THEN GOSUB 3510:GOTO 2510
1780 IF IN=78 THEN GOSUB 3510:GOTO 2010
1790 GOSUB 150:PRINT:GOTO 1760
1800 VE=VT-3:HO=0:CC(0)=0:GOSUB 110:SD=20:GOSUB 450
1810 PRINT"                                    "
1820 PRINT"                                    "
1830 PRINT"                                    "
1840 VE=VT-3:GOSUB 110:RETURN
2000 REM *** COMPUTERZUG ***
2010 T1=C:T2=H
2020 B1=-1:I3=0:J3=0:IF (H1=0) OR (N1=INT(M^2)) THEN 2760
2030 GOSUB 1800
2040 GOSUB 120:CC(0)=4:IF D$(T1+2)="O" THEN CC(0)=2
2042GOSUB 110: PRINT" Bitte warten  '";
2044 PRINT D$(T1+2);:REM CC(0)=0:GOSUB 120
2046 PRINT "'  ist dran":REM CC(0)=0:GOSUB 120:GOSUB 110
2050 FOR I=2 TO M+1
2060 FOR J=2 TO M+1
2070 IF F(I,J)<>0 THEN 2170
2080 GOSUB 2910:IF F1=0 THEN 2170
2090 U=-1:GOSUB 3000
2100 IF S1=0 THEN 2170
2110 IF (I-2)*(I-M+1)=0 THEN S1=S1+S2
2120 IF (J-2)*(J-M+1)=0 THEN S1=S1+S2
2130 IF S1<B1 THEN 2170
2140 IF S1>B1 THEN 2160
2150 GOSUB 260:IF RV<.5 THEN 2170
2160 B1=S1:I3=I:J3=J
2170 NEXT J
2180 NEXT I
2190 IF B1>0 THEN 2230
2200 PRINT"  Ich setze aus !"
2210 IF Z=1 THEN 2860
2220 Z=1:GOSUB 450:GOTO 2290
2230 Z=0:PRINT" Ich ziehe nach   ";I3-1;", ";C$(J3-1)
2240 I=I3:J=J3:U=1:GOSUB 3000
2250 IF T1=C THEN C1=C1+S1+1:H1=H1-S1
2260 IF T1=H THEN H1=H1+S1+1:C1=C1-S1
2270 N1=N1+1
2280 PRINT" Ich bekomme ";S1+1;" Steine dazu":CC(0)=0:GOSUB 120:GOSUB 110:GOSUB 3520
2290 IF (XX=1) AND (T1=C) THEN T1=H:T2=C:GOTO 2020
2300 IF XX=1 THEN 2010
2500 REM *** SPIELERZUG ***
2510 T1=H:T2=C
2520 IF (C1=0) OR (N1=INT(M^2)) THEN 2760
2530 GOSUB 1800
2540 CC(0)=4:IF D$(T1+2)="O" THEN CC(0)=2
2545 GOSUB 120:GOSUB 110:PRINT" Dein Zug (Zeile,Spalte),  ";D$(T1+2);"  ";
2550 GOSUB 210:IF (IN<48) OR (IN>56) THEN 2740
2560 I=IN-48:PRINT I;", ";:GOSUB 210:PRINT IN$
2570 IF I=0 THEN Z=1:GOTO 2710
2580 Q=1
2590 IF C$(Q)=IN$ THEN 2620
2600 IF Q<M THEN Q=Q+1:GOTO 2590
2610 GOTO 2750
2620 J=Q:I=I+1:J=J+1
2630 IF F(I,J)<>0 THEN 2750
2640 GOSUB 2910:IF F1<>1 THEN 2740
2650 U=-1:GOSUB 3000:IF S1=0 THEN 2740
2660 Z=0:U=1:GOSUB 3000
2670 PRINT" Du bekommst ";S1+1;" Steine dazu"
2675 CC(0)=0:GOSUB 110:
2680 IF T1=H THEN H1=H1+S1+1:C1=C1-S1
2690 IF T1=C THEN C1=C1+S1+1:H1=H1-S1
2700 N1=N1+1:GOSUB 3520
2710 IF (YY=1) AND (T1=H) THEN T1=C:T2=H:GOTO 2520
2720 IF YY=1 THEN 2510
2730 GOTO 2010
2740 PRINT:REM fehlerhafte Eingabe
2750 GOSUB 150:GOSUB 450:GOTO 2510
2760 IF (XX=1) OR (YY=1) THEN 2860
2770 GOSUB 1800:IF H1=C1 THEN PRINT" Unentschieden !"
2780 IF H1<C1 THEN PRINT" Diesmal habe ich gewonnen"
2790 IF H1>C1 THEN PRINT" Du hast gewonnen"
2800 PRINT" Das war ein   ";
2810 IF H1>INT(M*M*.9) THEN PRINT"  Super-Spiel":GOTO 2860
2820 IF H1>INT(M*M*.8) THEN PRINT"  perfektes Spiel ":GOTO 2860
2830 IF H1>INT(M*M*.7) THEN PRINT"  grosser Kampf":GOTO 2860
2840 IF H1>INT(M*M*.6) THEN PRINT"  heisses Spiel":GOTO 2860
2850 PRINT"  Mist - Spiel"
2860 SR$=" Ein neues  Spiel ?   Y/N   "
2870 GOSUB 1800:GOSUB 150:GOSUB 210
2880 IF IN=89 THEN GOSUB 100:GOTO 1510
2890 IF IN=78 THEN 950
2900 PRINT:GOTO 2870
2910 F1=0:FOR I1=-1 TO 1:FOR J1=-1 TO 1
2920 IF F(I+I1,J+J1)=T2 THEN F1=1
2930 NEXT J1:NEXT I1
2940 RETURN
3000 S1=0:FOR K=1 TO 8
3010 I5=I4(K):J5=J4(K):I6=I+I5:J6=J+J5:S3=0
3020 IF F(I6,J6)<>T2 THEN 3120
3030 S3=S3+1:I6=I6+I5:J6=J6+J5
3040 IF F(I6,J6)=T1 THEN 3070
3050 IF F(I6,J6)=0 THEN 3120
3060 GOTO 3030
3070 S1=S1+S3:IF U<>1 THEN 3120
3080 I6=I:J6=J
3090 FOR K1=0 TO S3
3100 F(I6,J6)=T1:I6=I6+I5:J6=J6+J5
3110 NEXT K1
3120 NEXT K
3130 RETURN
3500 REM *** SPIELFELD ***
3510 GOSUB 100
3520 VE=9-M:HO=9-M:GOSUB 110
3530 IF (XX=1) OR (YY=1) THEN PRINT"   ";:GOTO 3560
3540 IF S2=0 THEN PRINT"k) ";
3550 IF S2=2 THEN PRINT"g) ";
3560 FOR Q=1 TO M:PRINT C$(Q);" ";:NEXT Q
3570 FOR I=M+1 TO 2 STEP -1:VE=VE+2:HO=9-M:GOSUB 110
3580 SR=I-1:GOSUB 300:PRINT" ";SR$;" ";
3590 FOR J=2 TO M+1:T$=D$(F(I,J)+2)
3591 IF ((T$<>"X") AND (T$<>"O")) THEN 3594
3592 CC(0)=2:IF T$="X" THEN CC(0)=4
3593 GOSUB 120:GOSUB 110:PRINT T$;" ";:CC(0)=0:GOSUB 120:GOSUB 110:GOTO 3595
3594 PRINT T$;" ";
3595 NEXT J
3600 PRINT:PRINT:NEXT I
3610 IF (XX=1) OR (YY=1) THEN 3630
3620 VE=5:HO=26:GOSUB 110:PRINT"DU   ICH"
3630 VE=7:HO=26:GOSUB 110
3640 IF H<>1 THEN 3650
3645 CC(0)=2:GOSUB 120:GOSUB 110:PRINT"O     ";:CC(0)=4:GOSUB 120
3647 GOSUB 110:PRINT"X":CC(0)=0:GOSUB 110:GOTO 3660
3650 IF H<>-1 THEN 3660
3655 CC(0)=4:GOSUB 120:GOSUB 110:PRINT"X     ";:CC(0)=2:GOSUB 120
3657 GOSUB 110:PRINT"O":CC(0)=0:GOSUB 110
3660 VE=13:HO=25:CC(0)=4:IF C=-1 THEN CC(0)=2
3665 GOSUB 110:SR=H1:CT=2:CN=0:GOSUB 310:PRINT SR$:CC(0)=0:GOSUB 110
3670 HO=31:CC(0)=2:IF C=-1 THEN CC(0)=4
3675 GOSUB 110:SR=C1:GOSUB 310:PRINT SR$:CC(0)=0:GOSUB 110
3680 RETURN
25000 DATA 0,1,"A",-1,1,"B",-1,0,"C",-1,-1,"D"
25010 DATA 0,-1,"E",1,-1,"F",1,0,"G",1,1,"H"
32000 REM ****************************
32010 REM *                          *
32020 REM *  STRATEGIESPIEL OTHELLO  *
32030 REM * geschrieben auf  KC 85/4 *
32040 REM *                          *
32050 REM *      Wolfgang Pohle      *
32060 REM *     Waldpromenade  3     *
32070 REM *       Erkner  1250       *
32080 REM *                          *
32090 REM *     Stand 02.02.1990     *
32100 REM *                          *
32110 REM ****************************
32120 REM
32130 REM Erstausstrahlung: DS-Kultur
32140 REM -spezial 900725
32200 REM 
32210 REM auf Farbbetrieb abgeaendert
32220 REM
32230 REM       Thomas Rademacher
32240 REM      JOYCE-User-AG e. V.
32250 REM
32260 REM           Juli 2023

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

das LOGO-Programm für BasiCode

Beitrag von BC-Tom »

Ein Computerfreund ist wegen der Screenshots weiter oben neugierig auf das LOGO-Programm und bat mich, es zu posten:

Code: Alles auswählen

1000 A=5000:GOTO20:REM Basicode-3c logo versie 3.5
1010 REM **
1020 REM instel-waarden
1030 REM **
1040 M1=4:REM max. aantal variabelen
1050 A1=25:REM max. opdrachten
1060 A2=75:REM max. progr. regels
1070 A3=50:REM max. recursies
1080 G=150:REM max.'lijnen'in geheugen
1090 REM **
1100 REM beginschermen
1110 REM **
1120 FR=1:GOSUB280:IFA1<7 THENA1=7
1130 B1=25:C1=11:E1=B1:B2=2:B3=0
1140 A1=A1+B1:IFG<2 THENG=2
1150 E8=1:E9=VE-1:IFE9>25 THENE9=25
1160 A$="              ":SR$="Een ogenblik":GOSUB150:PRINT
1170 PRINT"  Basicode-3c LOGO versie 3.5"
1180 REM **
1190 REM dimensies
1200 REM **
1210 DIMT1(A1,1):REM a1=50           Logo opdrachten
1215 DIMT1$(A1,M1):REM a1=50,m1=4    Logo opdrachten
1220 DIMT2(A2,M1*3):REM a2=75,m1*3=12 Logo programma's
1225 DIMT3(A3,M1):REM DIM a3=50,m1=4 Logo StackRe: BasiCode für Atari ST
1230 DIMSG(G,3):REM g=150            Onthoud lijnen
1235 DIME$(A1):REM a1=50              Leer editor
1240 DIML(A3):REM a3=50               Lus teller
1245 DIMA$(M1+4):REM m1+4=8         Logo regel vertaler
1250 DIMW(M1+1):REM m1+1=5          Waardes van logo var.
1255 DIMH(M1):REM m1=4                Hulp logo variabelen
1260 DIMQ(4):REM                      Animatie coordinaten
1265 FORN=1 TOE1
1270 READT1$(N,0)
1275 READT1(N,1),T1$(N,1)
1280 T1$(N,2)="":T1(N,0)=-1
1285 NEXTN:T2(1,0)=0
1290 REM **
1300 REM beginscherm
1310 REM **
1320 GOSUB1460
1330 ET=2:A$(2)="LOGO":GOSUB12020:REM leesin
1340 ET=1:A$(1)="LOGO"
1350 K=0:FORN=1 TOB1
1360 IFA$(1)=T1$(N,0) THENK=N:N=B1
1370 NEXTN:ZS=1:GOSUB15310:REM schoon
1380 IFK<>0 THEN GOSUB13020:REM voeruit
1390 E$(0)="  Basicode-3c LOGO versie 3.5"
1400 SR$=E$(0):HO=0:VE=.05:CC(0)=7:GOSUB650
1410 GOSUB1460:B1=E1:B2=2:B3=0
1415 MD=2:KK=-1:GOSUB14520:KK=0:REM schildpad
1420 SI=3:ZS=0:MD=99:IFK=0 THENSI=2:ZS=1:MD=2
1425 GOSUB2020:GOTO950
1430 REM **
1440 REM beginwaarden
1450 REM **
1460 DH=150/HG:DV=100/VG
1470 RX=0:RY=1:RZ=0:SX=1:SY=0:SZ=0:TX=0:TY=0:TZ=1
1480 XX=75:YY=50:KK=0:MD=1:KL=7:HO=.5:VE=.5
1490 FF=0:F$=E$(0):BR=0:G1=0:G2=1:RD=ATN(1)/45
1500 SG(0,0)=.5:SG(0,1)=.5:SG(0,2)=620:SG(0,3)=7
1510 SR$=" ":GOSUB330:TT$=SR$:NO=0:NO$=""
1520 RETURN
1530 REM **
2000 REM hoofd-programma
2010 REM **
2020 T1$(0,0)=" "
2030 FORC=0 TO99:C=1:A$="                          "
2040 VE=0:ET=0:IN$="":IN=0:A=0:GOSUB4520
2050 IFET=0 THENET=1:A$(1)="HELP"
2060 IFF>0 THENFF=8:GOTO2250
2070 IN=ASC(A$(1))
2080 IF(IN>42)AND(IN<58) THENFF=12:F1=1:GOTO2250
2090 REM **
2100 REM welk commando
2110 REM **
2120 K=0:FORN=1 TOB1
2130 IFA$(1)=T1$(N,0) THENK=N:N=B1
2140 NEXTN
2150 IFK=0 THENFF=5:F1=1:GOTO2250
2160 IFK>C1 THEN GOSUB13020:GOTO2250
2170 IFK=C1 THENC=99:GOTO2370
2180 FF=0:FORN=1 TOET
2190 IN=ASC(A$(N)):IF(IN>42)AND(IN<58) THENFF=12:F1=N:NT
2200 NEXTN:IFFF<>0 THEN2250
2210 IFK>5 THEN2220
2215 ONK GOSUB3020,5020,6020,7020,8020:GOTO2250
2220 ONK-5 GOSUB9020,10020,11020,12020,12520
2225 REM **
2230 REM einde commando
2240 REM **
2250 IFF$<>"" THEN GOSUB18520
2260 IFFF<>0 THEN GOSUB18020
2270 IFSI<>MD THENSI=MD:GOTO2370
2280 SR$="  "+A$:HO=0:VE=0
2290 IFMD<>1 THENCN=1:CC(0)=7:GOSUB650
2300 SR$="                                      "
2310 SR$=LEFT$(SR$,LEN(A$)+3)
2330 IFMD=1 THEN GOSUB110:PRINTSR$;
2340 REM **
2350 REM doe tot 'eind'
2360 REM **
2370 A$=""
2380 NEXTC
2390 IFNO<>0 THENNF=NO:GOSUB580
2395 GOSUB100:RETURN
2400 REM **
2500 REM omschakelen naar scherm 1
2510 REM **
2520 GOSUB100:MD=1:SI=3:PRINT:PRINT:F$=""
2530 E$="":FORN=1 TOET:E$=E$+A$(N)+" ":NEXTN
2540 PRINT": ";E$:E$(0)=E$:E$(1)="":E8=2
2550 PRINT:RETURN
2560 REM **
3000 REM leer nw commando
3010 REM **
3020 IFET=1 THENFF=99:RETURN
3025 IFET>M1+2 THENFF=8:RETURN
3030 FORN=0 TOE9:E$(N)="":NEXTN
3040 K=0:FORN=C1+1 TOB1
3050 IFA$(2)=T1$(N,0) THENK=N:N=B1
3060 NEXTN
3070 L=K:IFK<>0 THEN3100
3080 IFB1>=A1-1 THENFF=15:RETURN
3090 GOSUB2520:B1=B1+1:K=B1
3100 IFK<=E1 THENFF=7:F1=2:RETURN
3110 FORN=0 TOET-2:T1$(K,N)=A$(N+2):NEXTN
3120 IFET-2>T1(K,1) THENT1(K,1)=ET-2
3130 IFL<>0 THEN GOSUB8020:FF=0:GOSUB10520
3140 GOSUB4020
3145 SR$=E$(0):ET=0:GOSUB4900
3150 IFET>M1+2 THENFF=8:ET=M1+2
3155 IFA$(2)<>T1$(K,0) THEN GOSUB3920
3160 FORN=0 TOET-2:T1$(K,N)=A$(N+2):NEXTN
3170 T1(K,0)=B2:T1(K,1)=ET-2:H=0
3180 REM **
3190 REM leer-invoer
3200 REM **
3210 FOREV=1 TOE8-1
3230 SR$=E$(EV):ET=0:GOSUB4900:IFET>=M1+2 THENFF=8:GOTO5
3240 IFA$(1)="" THEN3725
3250 IFA$(1)="EIND" THENEV=E8:GOTO3725
3260 ET=ET-1
3265 IF(A$(ET+1)<>")")OR(ET=0) THENET=ET+1:A$(ET+1)=""
3270 IN=ASC(A$(1))
3280 IF(IN>42)AND(IN<58) THENFF=12:F1=1:GOTO3725
3290 L=0:FORN=C1+1 TOB1
3300 IFA$(1)=T1$(N,0) THENL=N:N=B1
3310 NEXTN
3320 IFL<>0 THEN3350
3330 IFB1>=A1-1 THENFF=15:GOTO3725
3340 B1=B1+1:L=B1:H=H+1
3345 T1$(B1,0)=A$(1):T1(B1,0)=0:T1(B1,1)=0
3350 IFL<=C1 THENFF=7:F1=1:GOTO3725
3360 T2(B2,0)=L
3370 REM **
3380 REM variabelen
3390 REM **
3400 FORN=1 TOM1*3:T2(B2,N)=-1:NEXTN
3410 IFET<2 THEN3630
3420 F=0:FORM=2 TOET
3430 FORZ1=1 TOLEN(A$(M))
3440 M$=MID$(A$(M),Z1,1):Z2=-1:H0=0
3450 IFM$="+" THENZ2=1
3460 IFM$="-" THENZ2=2
3470 IFM$="*" THENZ2=3
3480 IFM$="/" THENZ2=4
3490 IFM$="<" THENZ2=5
3500 IFM$="=" THENZ2=6
3510 IFM$=">" THENZ2=7
3520 IFM$="#" THENZ2=8
3525 IFZ2<>-1 THENH0=Z1:Z1=LEN(A$(M))
3530 NEXTZ1
3535 N$="0":IF(Z2=2)AND(H0=1) THEN3565
3540 IF(H0=1)OR(H0=LEN(A$(M))) THENFF=11:F1=M:GOTO3725
3550 IFH0=0 THENN$=A$(M):M$="":GOTO3570
3560 N$=LEFT$(A$(M),H0-1)
3565 M$=RIGHT$(A$(M),LEN(A$(M))-H0)
3570 T2(B2,M*3-4)=Z2
3580 IFN$="" THENN$="0":IFZ2>2 THENN$="1"
3590 E$=N$:GOSUB3810:T2(B2,M*3-5)=H0
3600 IFZ2<>-1 THENE$=M$:GOSUB3810:T2(B2,M*3-3)=H0
3610 NEXTM
3620 IFF<>0 THENFF=5:F1=F:GOTO3725
3630 IFB2>=A2-1 THENFF=16:GOTO3725
3640 B2=B2+1:IFA$(ET+1)<>")" THEN3725
3650 FORN=1 TOM1*3:T2(B2,N)=-1:NEXTN
3660 FORN=C1+1 TOB1
3670 IFT1$(N,0)=")" THENT2(B2,0)=N:N=B1
3680 NEXTN:B2=B2+1
3690 IFB2>=A2-1 THENFF=16:B2=B2-1:A$=""
3700 REM **
3710 REM doe tot 'eind'
3720 REM **
3725 IFFF<>0 THEN GOSUB18020:SD=50:GOSUB450:GOSUB18520
3730 NEXTEV
3740 IFB2=T1(K,0) THENT1(K,0)=0:RETURN
3750 T2(B2,0)=0:T2(B2,1)=-1
3760 B2=B2+1
3770 IFB2>=A2 THENFF=16:A$=""
3775 RETURN
3780 REM **
3790 REM sub leer variabelen
3800 REM **
3810 L=0:FORN=0 TOT1(K,1)
3820 IFE$=T1$(K,N) THENL=N:N=M1
3830 NEXTN
3840 IFL=0 THENIF(E$<>"0")AND(VAL(E$)=0) THENF=M:M=ET
3850 IF(M<>2)OR(T2(B2,0)<>20) THEN3870
3860 IF(L=0)OR(Z2<>-1) THENF=2
3870 H0=-L-1:IFL=0 THENH0=ABS(VAL(E$))
3880 RETURN
3890 REM **
3900 REM sub rename
3910 REM **
3920 IN=ASC(A$(2))
3930 IF(IN>42)AND(IN<58) THEN3970
3940 EV=0:FORN=C1+1 TOB1
3950 IFA$(2)=T1$(N,0) THENEV=N:N=B1
3960 NEXTN:IFEV=0 THEN3980
3970 A$(2)=T1$(K,0)
3980 RETURN
3990 REM **
4000 REM scherm editor
4010 REM **
4020 HO=0:VE=E9+1:GOSUB110
4025 PRINT"  RETURN=Einde F2=Wissen F3=toevoegen";
4030 HO=0:EV=3:A=0
4040 FORZ=1 TO99:Z=1
4050 A$=E$(EV-2):ET=-1:VE=EV:GOSUB4520
4060 E$(EV-2)=SR$
4070 IFIN<0 THEN GOSUB4160:GOTO4110
4090 IFIN=13 THENZ=99:GOTO4110
4100 EV=EV+61-IN*2
4110 IFEV<2 THENEV=2
4120 IFEV>E9-1 THENEV=E9-1
4130 IFE8<EV-1 THENE8=EV-1
4140 NEXTZ
4150 RETURN
4160 IFIN<>-2 THEN4190
4170 FORN=VE-2 TOE9-1:E$(N)=E$(N+1):NEXTN
4180 E$(E9)="":E8=E8-1
4190 IFIN<>-3 THEN4220
4200 FORN=E9-3 TOVE-2 STEP-1:E$(N)=E$(N-1):NEXTN
4210 E$(VE-2)="":E8=E8+1
4215 IFE8=E9 THENE8=E8-1:E$(E9-2)="":E$(E9-1)=""
4220 CC(0)=7:GOSUB100:PRINT:PRINT:SI=3:E$=": "
4230 FORN=0 TOE8-1:PRINTE$;E$(N):E$="  ":NEXTN
4240 HO=0:VE=E9+1:GOSUB110
4250 PRINT"  RETURN=Einde F2=Wissen F3=toevoegen";
4260 RETURN
4270 REM **
4500 REM regel editor
4510 REM **
4520 FORE=0 TO99:E=1
4530 GOSUB200:IFIN$="" THENE=99
4540 NEXTE:IFA>LEN(A$) THENA=LEN(A$)
4550 HO=0:B$=""
4560 IFMD=1 THEN GOSUB110
4570 FORE=0 TO99:E=1
4580 SR$=B$:H1$="":H2$="":H3$="":H4$="":F=0
4585 H0$="> ":IFA=0 THENH0$=">"
4590 IFA>1 THENH1$=LEFT$(A$,A-1)
4600 IFA>0 THENH2$=MID$(A$,A,1)
4610 IFA<LEN(A$) THENH3$=MID$(A$,A+1,1)
4620 IFA<LEN(A$)-1 THENH4$=RIGHT$(A$,LEN(A$)-A-1)
4630 IFMD<>1 THENCN=1:CC(0)=7:GOSUB650
4640 SR$=H0$+H1$+H2$+"."+H3$+H4$:B$=SR$
4650 IFMD=1 THENPRINTSR$;"  ";:GOSUB110
4660 IFMD<>1 THENCN=0:CC(0)=7:GOSUB650
4670 GOSUB210
4680 IFIN=34 THEN4750
4690 IF(IN>31)AND(IN<91) THENH3$=IN$+H3$:A=A+1:GOTO4750
4700 IFIN=28 THENA=A-1:A=(A+ABS(A))/2:GOTO4750
4710 IFIN=29 THENA=A+1:H3$=LEFT$(H3$+" ",1):GOTO4750
4720 IFIN=13 THENE=99:GOTO4750
4730 IF(IN=30)OR(IN=31) THENE=99:GOTO4750
4735 IF(IN=-2)OR(IN=-3) THENE=99:GOTO4750
4740 IFIN=127 THENH2$="":A=A-1:A=(A+ABS(A))/2
4750 A$=H1$+H2$+H3$+H4$
4760 NEXTE
4770 IFMD<>1 THENCN=1:CC(0)=7:GOSUB650
4780 IFA$="" THENA$=" "
4790 SR$=A$:GOSUB330:A$=SR$
4800 SR$="  "+A$:IFMD<>1 THENCN=0:CC(0)=7:GOSUB650
4810 SI=MD:IFMD=1 THENPRINTSR$;" "
4820 SR$=A$:IFET<>-1 THEN GOSUB4900
4830 RETURN
4850 REM **
4860 REM bewerk regel
4870 REM **
4900 FORET=1 TOM1+4:A$(ET)="":NEXTET:ET=1
4910 FORN=1 TOLEN(SR$)
4920 M$=MID$(SR$,N,1)
4930 IFM$<>TT$ THENA$(ET)=A$(ET)+M$
4940 IF(A$(ET)<>"")AND(M$=TT$) THENET=ET+1
4950 IFET>M1+3 THENF=1:N=LEN(SR$)+1:ET=M1+3
4960 NEXTN
4970 IFA$(ET)="" THENET=ET-1
4980 RETURN
4990 REM **
5000 REM print scherm op printer
5010 REM **
5020 IFMD=1 THEN5070
5030 SR$="  "+A$:HO=0:VE=0
5040 CN=1:CC(0)=7:GOSUB650
5050 IFF$<>"" THEN GOSUB18520
5060 GOSUB20000:RETURN
5070 FORN=0 TOE8-1
5080 SR$=E$(N):GOSUB350:GOSUB360
5090 NEXTN
5100 GOSUB360:RETURN
5110 REM **
6000 REM voorbeeld ( balk )
6010 REM **
6020 GOSUB2520
6025 E$(E8)="Voorbeeld Basicode-3 LOGO":E$(E8+1)=""
6030 PRINT"  ";E$(E8):PRINT:E8=E8+2
6040 B1=E1+2:B2=10
6050 T1$(B1-1,0)="ZIJDE"
6055 T1$(B1-1,1)="XX"
6060 T1$(B1,0)="BALK":T1$(B1,1)="X":T1$(B1,2)="Y"
6070 T1(B1-1,0)=2:T1(B1-1,1)=1
6080 T1(B1,0)=5:T1(B1,1)=2
6090 FORN=0 TO8:FORM=1 TO4:T2(N,M)=-1:NEXTM:NEXTN
6100 T2(4,0)=0:T2(9,0)=0
6110 T2(2,0)=C1+3:T2(2,1)=-2
6120 T2(3,0)=C1+1:T2(3,1)=90
6130 T2(5,0)=B1-1:T2(5,1)=-2
6140 T2(6,0)=B1-1:T2(6,1)=-3
6150 T2(7,0)=B1-1:T2(7,1)=-2
6160 T2(8,0)=B1-1:T2(8,1)=-3
6170 K=B1-1:GOSUB8210:PRINT:E$(E8)="":E8=E8+1
6180 K=B1:GOSUB8210:PRINT:E$(E8)="":E8=E8+1
6190 E$(E8)="Probeer eens BALK 10 20"
6200 PRINT"  ";E$(E8):E8=E8+1
6210 E$(E8)="             BALK 20 10"
6220 PRINT"  ";E$(E8):E8=E8+1
6230 E$(E8)="             BALK 30 30"
6235 E$(E8+1)=""
6240 PRINT"  ";E$(E8):PRINT:E8=E8+2
6250 E$(E8)="             ZIJDE 40"
6260 PRINT"  ";E$(E8):E8=E8+1
6270 E$(E8)="             LEER ZIJDE"
6280 PRINT"  ";E$(E8);:E8=E8+1:RETURN
6290 REM **
7000 REM spoor
7010 REM **
7020 IFET<>2 THENFF=99:RETURN
7030 IFA$(2)="AAN" THENBR=1:RETURN
7040 IFA$(2)="UIT" THENBR=0:RETURN
7050 FF=11:F1=2:RETURN
7060 REM **
8000 REM lijst
8010 REM **
8020 IFA$(2)<>"" THEN8150
8030 GOSUB2520
8040 FORN=C1+1 TOB1:E$=""
8050 FORM=0 TOT1(N,1)
8060 E$=E$+T1$(N,M)+" "
8070 NEXTM
8080 PRINT"  ";E$:E$(E8)=E$:E8=E8+1
8090 GOSUB200:IFIN$<>"" THEN GOSUB210
8100 NEXTN
8110 GOSUB8540:RETURN
8120 REM **
8130 REM lijst van opdracht
8140 REM **
8150 K=0:FORN=C1+1 TOB1
8160 IFA$(2)=T1$(N,0) THENK=N:N=B1
8170 NEXTN
8180 IFK=0 THENFF=5:F1=2:RETURN
8190 IFK<=E1 THENFF=7:F1=2:RETURN
8200 GOSUB100:PRINT:PRINT:MD=1:SI=3:E8=0
8205 GOSUB8210:RETURN
8210 E$="LEER "
8220 FORN=0 TOT1(K,1)
8230 E$=E$+T1$(K,N)+" "
8240 NEXTN:PRINT": ";E$:E$(E8)=E$:E8=E8+1
8250 N=T1(K,0):CM=T2(N,0):ET=0
8260 IFN=0 THEN GOSUB8540:RETURN
8270 REM **
8280 REM lijst-regels
8290 REM **
8300 FORZ=0 TO99:Z=1
8310 E$="":IFET>0 THENE$=LEFT$("              ",ET)
8320 E$=E$+T1$(CM,0)+" "
8330 IF(CM=C1+8)OR(CM=C1+11) THENET=ET+2
8340 IF(CM=C1+9) THENET=ET-2
8350 IFET<0 THENET=0
8360 REM **
8370 REM variabelen
8380 REM **
8390 FORM=1 TOM1*3 STEP3
8400 V=T2(N,M)
8410 IFV=-1 THENM=M1*3:GOTO8460
8420 IFV>=0 THENSR=V:GOSUB300
8430 IFV<0 THENSR$=T1$(K,-V-1)
8440 IFT2(N,M+1)<>-1 THEN GOSUB8590
8450 E$=E$+SR$+" "
8460 NEXTM
8470 N=N+1:ZT=T2(N,0)
8475 IFT1$(ZT,0)=")" THENE$=E$+") ":N=N+1:ET=ET-2
8480 PRINT"  ";E$:E$(E8)=E$:E8=E8+1:CM=T2(N,0)
8490 IFCM=0 THENZ=99
8500 REM **
8510 REM doe tot 'eind'
8520 REM **
8530 NEXTZ:GOSUB8540:RETURN
8540 E$(E8)="EIND ":PRINT"  ";E$(E8):E8=E8+1
8550 RETURN
8560 REM **
8570 REM sub lijst reken-functie
8580 REM **
8590 Z1=T2(N,M+1)
8600 IF(Z1<3)AND(SR$="0") THENSR$=""
8610 L$=SR$+MID$("+-*/<=>#",Z1,1)
8620 H2=T2(N,M+2)
8630 IFH2>=0 THENSR=H2:GOSUB300
8640 IFH2<0 THENZ2=-H2-1:SR$=T1$(K,Z2)
8650 SR$=L$+SR$:RETURN
8660 REM **
9000 REM help
9010 REM **
9020 GOSUB2520
9030 E$(E8)="Programmeer-funkties:"
9040 PRINT"  ";E$(E8):E$(E8+1)="":E8=E8+2:PRINT
9050 FORN=1 TOC1:E$=""
9060 FORM=0 TOT1(N,1)
9070 E$=E$+T1$(N,M)+" "
9080 NEXTM:PRINT"  ";E$:E$(E8)=E$:E8=E8+1
9090 NEXTN:PRINT:E$(E8)="":E8=E8+1
9100 E$(E8)="Opdrachten:"
9110 PRINT"  ";E$(E8):E$(E8+1)="":E8=E8+2:PRINT
9120 E$(E8)="  Basis-opdrachten en"
9130 PRINT"  ";E$(E8):E8=E8+1
9140 E$(E8)="  eigen opdrachten; zie LIJST."
9150 PRINT"  ";E$(E8):E8=E8+1
9160 RETURN
9990 REM **
10000 REM opdracht - weg -
10010 REM **
10020 IFET=1 THENFF=99:RETURN
10030 K=0
10040 FORN=C1+1 TOB1
10050 IFA$(2)=T1$(N,0) THENK=N:N=B1
10060 NEXTN
10070 IFK=0 THENFF=5:F1=2:RETURN
10080 IFK<=E1 THENFF=7:F1=2:RETURN
10090 IFT1(K,0)=0 THEN10150
10100 GOSUB10520
10110 T1(K,0)=0
10120 REM **
10130 REM controle aanroep
10140 REM **
10150 L=0
10160 FORN=0 TOB2-1
10170 IFT2(N,0)=K THENL=1:N=B2
10180 NEXTN
10190 IFL=1 THENRETURN
10200 REM **
10210 REM sub weg uit tabel 1
10220 REM **
10230 FORN=K TOB1
10240 FORM=0 TOM1:T1$(N,M)=T1$(N+1,M):NEXTM
10250 FORM=0 TO1:T1(N,M)=T1(N+1,M):NEXTM
10260 NEXTN:B1=B1-1
10270 FORN=0 TOB2-1
10280 IFT2(N,0)>=K THENT2(N,0)=T2(N,0)-1
10290 NEXTN
10300 RETURN
10310 REM **
10500 REM sub weg uit tabel 2
10510 REM **
10520 Z8=T1(K,0):Z9=Z8
10530 IFZ8=0 THENRETURN
10540 FORZ=0 TO99:Z=1
10550 IFT2(Z9,0)=0 THENZ=99:GOTO10570
10560 Z9=Z9+1
10570 NEXTZ
10580 Z9=Z9+1
10590 FORN=Z9 TOB2:FORM=0 TOM1*3
10600 T2(N+Z8-Z9,M)=T2(N,M)
10610 NEXTM:NEXTN
10620 B2=B2+Z8-Z9:T1(K,0)=0
10630 FORN=C1+1 TOB1
10640 IFT1(N,0)>Z8 THENT1(N,0)=T1(N,0)+Z8-Z9
10650 NEXTN:RETURN
10660 REM **
11000 REM bewaar
11010 REM **
11020 IFET=2 THENA$(3)="D":ET=3
11025 IFET<>3 THENFF=99:RETURN
11030 NF$="m"+LEFT$(A$(2)+"      ",6)
11040 NF=0:T$=LEFT$(A$(3),1):IN=0
11050 IFT$="B" THENNF=1
11060 IFT$="C" THENNF=3
11070 IFT$="D" THENNF=5
11080 IFNF=0 THENFF=11:F1=3:RETURN
11090 GOSUB500
11095 IFIN<>0 THENFF=17:GOSUB580:RETURN
11100 SR=B1:GOSUB300:GOSUB560
11105 SR=B2:GOSUB300:GOSUB560
11110 SR=C1:GOSUB300:GOSUB560
11115 SR=E1:GOSUB300:GOSUB560
11120 L$="            "
11130 REM **
11140 REM bewaren tabel 1
11150 REM **
11160 FORN=E1+1 TOB1:E$=""
11170 FORM=0 TOT1(N,1)
11180 SR$=T1$(N,M)
11190 E$=E$+LEFT$(SR$+L$,12)
11200 NEXTM
11210 SR=T1(N,0):GOSUB300
11220 E$=E$+LEFT$(SR$+L$,5)
11230 SR$=E$:GOSUB560:E$=""
11240 NEXTN
11250 REM **
11260 REM bewaren tabel 2
11270 REM **
11280 FORN=2 TOB2-1
11290 SR=T2(N,0):GOSUB300
11300 E$=E$+LEFT$(SR$+L$,5)
11310 FORM=1 TOM1*3-1 STEP3
11320 IFT2(N,M)=-1 THENM=M1*3:GOTO11370
11330 FORET=0 TO2
11340 SR=T2(N,M+ET):GOSUB300
11350 E$=E$+LEFT$(SR$+L$,5)
11360 NEXTET
11370 NEXTM
11380 SR$=E$:GOSUB560:E$=""
11390 NEXTN
11400 SR$="EIND":GOSUB560:GOSUB560
11410 GOSUB580:RETURN
11420 REM **
12000 REM leesin
12010 REM **
12020 IFET=2 THENA$(3)="D":ET=3
12025 IFET<>3 THENFF=99:RETURN
12030 NF$="m"+LEFT$(A$(2)+"      ",6)
12040 NF=1:T$=LEFT$(A$(3),1):IN=0:Z3=0:Z4=0
12050 IFT$="B" THENNF=0
12060 IFT$="C" THENNF=2
12070 IFT$="D" THENNF=4
12080 IFNF=1 THENFF=11:F1=3:RETURN
12090 GOSUB500:IFIN=0 THEN12110
12095 IFZ3<>0 THENFF=14:GOSUB580:RETURN
12100 NF$="l"+LEFT$(A$(2)+"      ",6):Z3=10:Z4=23
12105 GOSUB580:GOTO12090
12110 GOSUB540:Z1=VAL(IN$)
12115 GOSUB540:Z2=VAL(IN$)
12120 IFZ3=0 THEN GOSUB540:Z3=VAL(IN$)
12125 IFZ4=0 THEN GOSUB540:Z4=VAL(IN$)
12130 L$="          ":Z1=Z1+E1-Z4
12135 IFB1+Z1-E1>=A1 THENFF=15:GOTO12420
12140 IFB2+Z2-2>=A2 THENFF=16:GOTO12420
12150 REM **
12160 REM inlezen tabel 1
12170 REM **
12180 FORN=B1+1 TOB1+Z1-E1:GOSUB540
12190 T1(N,1)=INT((LEN(IN$)-1)/12-1)
12200 FORM=0 TOT1(N,1)
12210 SR$=MID$(IN$,M*12+1,12)
12220 FORET=1 TO12:M$=MID$(SR$,ET,1)
12230 IFM$=" " THENSR=ET-1:ET=12
12240 NEXTET
12250 T1$(N,M)=LEFT$(SR$,SR)
12260 NEXTM
12265 SR$=MID$(IN$+L$,T1(N,1)*12+13,5)
12270 T1(N,0)=VAL(SR$)+B2-2
12280 NEXTN
12290 REM **
12300 REM inlezen tabel 2
12310 REM **
12320 FORN=B2 TOB2+Z2-3:GOSUB540
12330 T2(N,0)=VAL(MID$(IN$+L$,1,5))
12335 IFT2(N,0)=0 THEN12355
12340 IFT2(N,0)>Z4 THENT2(N,0)=T2(N,0)+B1-Z4:GOTO12355
12350 IFC1<>Z3 THENT2(N,0)=T2(N,0)+C1-Z3
12355 L=INT((LEN(IN$)+4)/5-1)
12360 IFL>M1*3 THENFF=8:GOTO12400
12365 FORM=1 TOL
12370 T2(N,M)=VAL(MID$(IN$+L$,M*5+1,5))
12380 NEXTM
12390 IFL<M1*3 THENFORM=L+1 TOM1*3:T2(N,M)=-1:NEXTM
12400 NEXTN
12410 GOSUB540
12420 IFIN$<>"EIND" THENFF=14:GOTO12440
12430 B1=B1+Z1-E1:B2=B2+Z2-2
12440 GOSUB580:RETURN
12450 REM **
12500 REM animatie
12510 REM **
12520 IN=0:NF=7:IFET>2 THENFF=99:RETURN
12525 IFET=2 THENNF$=A$(2):GOTO12540
12530 IFNO<>0 THEN12545
12535 IFNO=0 THENNF$="RONDFL"
12540 IFNO$<>NF$ THEN GOSUB580:NO=0
12545 IFNO=0 THEN GOSUB500:NO=NF:NO$=NF$
12550 IFIN<>0 THENFF=17:GOTO12760
12555 SR=0
12560 N=G1:FORM=1 TO99:M=1
12570 IFSG(N,2)=630 THENSR=SR+1
12580 IFN=G2-1 THENM=99
12590 N=N+1:IFN>G THENN=0
12600 NEXTM
12610 GOSUB300:GOSUB560:SR$="5":GOSUB560
12620 IFIN<>0 THENFF=17:GOTO12760
12630 N=G1:FORM=1 TO99:M=1
12640 Q(4)=SG(N,3)
12650 IFSG(N,2)=630 THEN12670
12660 Q(0)=SG(N,0):Q(1)=SG(N,1):GOTO12730
12670 Q(2)=SG(N,0):Q(3)=SG(N,1)
12680 FORQM=0 TO4:SR=Q(QM)
12690 GOSUB300:IN=0:GOSUB560
12700 IFIN<>0 THENFF=17:M=99:QM=4
12710 NEXTQM
12720 Q(0)=Q(2):Q(1)=Q(3)
12730 IFN=G2-1 THENM=99
12740 N=N+1:IFN>G THENN=0
12750 NEXTM
12760 RETURN
12770 REM **
13000 REM uitvoeren van logo
13010 REM **
13020 CM=K:ZW=0:B3=0:LT=0
13025 IFZS=0 THEN GOSUB15310:ZS=1
13030 IFET-1<>T1(CM,1) THENFF=99:RETURN
13060 IF(MD<>1)AND(KK=0) THENKK=1:GOSUB14520:KK=0
13070 FORN=0 TOM1*3:T2(0,N)=-1:NEXTN
13080 FORN=1 TOET-1
13090 V=VAL(A$(N+1)+" ")
13100 IFV>=0 THENT2(0,N*3-2)=V
13110 IFV<0 THENT2(0,N*3-2)=0:T2(0,N*3-1)=2:T2(0,NV
13120 NEXTN
13130 IFET<>M1+1 THENT2(0,ET*3-2)=-1
13140 IFBR=1 THENBR$="Spoor aan; druk op Toets."
13150 REM **
13160 REM besturing logo opdrachten
13170 REM **
13180 FORZ=0 TO99:Z=1
13190 REM TOETS E = EINDE
13200 GOSUB200:IFIN=69 THENFF=9:IN=4:GOTO13260
13210 IFBR<>1 THEN13220
13215 GOSUB14270:IFIN=69 THENFF=9:IN=4:GOTO13260
13220 IN=1
13230 IFCM<=E1 THENIN=2
13240 IFCM=0 THENIN=3
13250 ONIN GOSUB13330,13530,13720
13260 IFIN>3 THENZ=99
13270 NEXTZ
13275 IFBR=1 THEN GOSUB14270
13280 IF(MD<>1)AND(KK<>2) THENKK=-1:GOSUB14520:KK=0
13290 RETURN
13300 REM **
13310 REM eigen logo opdracht
13320 REM **
13330 B3=B3+1:IFB3>A3 THENFF=1:IN=4:RETURN
13340 T3(B3,0)=ZW:FORN=1 TOM1:T3(B3,N)=W(N):NEXTN
13350 AV=T1(CM,1)
13360 IFAV=0 THEN13450
13370 F=0:FORN=1 TOAV
13380 H(N)=T2(ZW,N*3-2)
13390 ZH=H(N):IFZH=-1 THENF=1
13400 IFZH<0 THENH(N)=W(-ZH-1)
13410 IFT2(ZW,N*3-1)<>-1 THEN GOSUB14020
13420 IFBR=1 THENSR=H(N):GOSUB300:BR$=BR$+" "+SR$
13430 NEXTN
13440 IFF=1 THENK=CM:FF=99:IN=4:RETURN
13450 IFAV=M1 THEN13460
13455 IFT2(ZW,AV*3+1)<>-1 THENK=CM:FF=99:IN=4:RETURN
13460 FORN=1 TOM1:W(N)=H(N):NEXTN
13470 ZW=T1(CM,0)
13480 IFZW=0 THENFF=4:IN=4:RETURN
13490 CM=T2(ZW,0):RETURN
13500 REM **
13510 REM basis logo opdracht
13520 REM **
13530 AV=T1(CM,1)
13540 IFAV=0 THEN13630
13550 F=0:FORN=1 TOAV
13560 H(N)=T2(ZW,N*3-2)
13570 ZH=H(N):IFZH=-1 THENF=1
13580 IFZH<0 THENH(N)=W(-ZH-1)
13590 IFT2(ZW,N*3-1)<>-1 THEN GOSUB14020
13600 IFBR=1 THENSR=H(N):GOSUB300:BR$=BR$+" "+SR$
13610 NEXTN
13620 IFF=1 THENK=CM:FF=99:IN=4:RETURN
13630 IFAV=M1 THEN13640
13635 IFT2(ZW,AV*3+1)<>-1 THENK=CM:FF=99:IN=4:RETURN
13640 IFCM-C1>9 THEN13665
13645 IFCM-C1>5 THEN13660
13650 ONCM-C1 GOSUB15030,15060,15140,15170,15250:GOTO13670
13660 ONCM-C1-5 GOSUB15280,15310,15390,15420:GOTO13670
13665 ONCM-C1-9 GOSUB15510,15550,15690,15770,15850
13670 IFFF<>0 THENIN=4:RETURN
13680 ZW=ZW+1:CM=T2(ZW,0):RETURN
13690 REM **
13700 REM einde logo-subroutine
13710 REM **
13720 ZW=T3(B3,0):FORN=1 TOM1:W(N)=T3(B3,N):NEXTN
13730 B3=B3-1
13740 IFB3<0 THENFF=0:IN=4:RETURN
13750 ZW=ZW+1
13760 CM=T2(ZW,0)
13770 BR$="EIND":RETURN
13780 REM **
14000 REM sub rekenen
14010 REM **
14020 H2=T2(ZW,N*3):IFH2=-1 THENF=1
14030 IFH2<0 THENZ2=-H2-1:H2=W(Z2)
14040 Z1=T2(ZW,N*3-1)
14050 IFZ1=1 THENH(N)=H(N)+H2
14060 IFZ1=2 THENH(N)=H(N)-H2
14070 IFZ1=3 THENH(N)=H(N)*H2
14080 IF(Z1=4)AND(H2<>0) THENH(N)=H(N)/H2
14090 IFZ1<5 THENRETURN
14100 H2=SGN(H(N)-H2):H(N)=1
14110 IFZ1=5 THENIFH2<0 THENH(N)=0
14120 IFZ1=6 THENIFH2=0 THENH(N)=0
14130 IFZ1=7 THENIFH2>0 THENH(N)=0
14140 IFZ1=8 THENIFH2<>0 THENH(N)=0
14150 RETURN
14160 REM **
14250 REM sub print trace
14260 REM **
14270 SR$=BR$:HO=0
14280 IFMD<>1 THENCN=0:VE=.05:CC(0)=7:GOSUB650
14290 IFMD=1 THENVE=1:GOSUB110:PRINTSR$;
14300 SD=50:GOSUB450
14310 IFMD<>1 THENCN=1:VE=.05:CC(0)=7:GOSUB650
14320 SR$="                               ":CN=0
14330 SR$=LEFT$(SR$,LEN(BR$))
14340 IFMD<>1 THENCN=0:VE=.05:CC(0)=7:GOSUB650
14350 IFMD=1 THENVE=1:GOSUB110:PRINTSR$;
14360 BR$=T1$(CM,0)
14370 IFMD=1 THENRETURN
14380 HO=XX/150:VE=YY/100:CN=KK
14390 IFKK<>2 THENCC(0)=KL:GOSUB620
14400 RETURN
14410 REM **
14500 REM teken schildpad
14510 REM **
14520 SS=KK:KK=2:H=XX:H0=YY
14530 W1=RX:RX=SX:SX=-W1
14540 W1=RY:RY=SY:SY=-W1
14550 W1=RZ:RZ=SZ:SZ=-W1
14560 H(1)=3.54:GOSUB15140
14570 HO=XX/150:VE=YY/100
14580 CN=0:CC(0)=KL:GOSUB620:KK=SS
14590 H(1)=135:GOSUB15030
14600 H(1)=5:GOSUB15140
14610 W1=RX:RX=-SX:SX=W1
14620 W1=RY:RY=-SY:SY=W1
14630 W1=RZ:RZ=-SZ:SZ=W1
14640 H(1)=5:GOSUB15140
14650 H(1)=225:GOSUB15030
14660 XX=H:YY=H0
14670 HO=XX/150:VE=YY/100
14680 CN=0:GOSUB620:KK=SS
14690 RX=INT(RX*100000+.5)/100000
14700 RY=INT(RY*100000+.5)/100000
14710 RETURN
14720 REM **
15000 REM basis opdrachten
15010 REM **
15020 REM basis opdracht 1 links
15030 H(1)=-H(1)
15040 GOSUB15060:RETURN
15050 REM basis opdracht 2 rechts
15060 IF(MD<>2)AND(KK<>2) THEN GOSUB16020
15070 W1=SIN(H(1)*RD):W2=COS(H(1)*RD)
15080 UX=W2*RX+W1*SX:VX=W2*SX-W1*RX
15090 UY=W2*RY+W1*SY:VY=W2*SY-W1*RY
15100 UZ=W2*RZ+W1*SZ:VZ=W2*SZ-W1*RZ
15110 RX=UX:RY=UY:RZ=UZ:SX=VX:SY=VY:SZ=VZ
15120 RETURN
15130 REM basis opdracht 3 vooruit
15140 H(1)=-H(1)
15150 GOSUB15170:RETURN
15160 REM basis opdracht 4 achteruit
15170 IFMD<>2 THEN GOSUB16020
15180 X2=XX-H(1)*RX-.4*H(1)*RZ
15190 Y2=YY+H(1)*RY+.2*H(1)*RZ
15200 IFABS(X2-75)>75-DH THEN GOSUB17020:RETURN
15205 IFABS(Y2-50)>50-DV THEN GOSUB17020:RETURN
15210 XX=X2:YY=Y2
15220 IFKK<>2 THENLS=630:GOSUB17520
15230 RETURN
15240 REM basis opdracht 5 pen op
15250 IFMD<>2 THEN GOSUB16020
15260 KK=2:RETURN
15270 REM basis opdracht 6 pen neer
15280 IFMD<>2 THEN GOSUB16020
15290 KK=0:LS=620:GOSUB17520:RETURN
15300 REM basis opdracht 7 schoon
15310 SG(0,0)=.5:SG(0,1)=.5:SG(0,2)=620:SG(0,3)=7
15320 G1=0:G2=1
15330 RX=0:RY=1:RZ=0:SX=1:SY=0:SZ=0:TX=0:TY=0:TZ=1
15340 XX=75:YY=50:KK=0:KL=7
15350 CC(0)=7:GOSUB600:MD=2:SI=3:F$=""
15360 HO=.5:VE=.5:CN=0:GOSUB620
15370 RETURN
15380 REM basis opdracht 8 herhaal(
15390 IFLT>=A3 THENFF=1:RETURN
15400 LT=LT+1:L(LT)=H(1):RETURN
15410 REM basis opdracht 9 ')'
15420 IFLT=0 THENFF=6:RETURN
15430 L(LT)=L(LT)-1:IFL(LT)<1 THENLT=LT-1:RETURN
15440 M=1
15450 FORN=ZW-1 TO1 STEP-1
15460 IFT2(N,0)=C1+9 THENM=M+1
15470 IFT2(N,0)=C1+11 THENM=M-1
15480 IFT2(N,0)=C1+8 THENM=M-1:IFM=0 THENZW=N:N=0
15490 NEXTN:RETURN
15500 REM basis opdracht 10 maak
15510 IFB3=0 THENRETURN
15520 ZT=-T2(ZW,1)-1:W(ZT)=H(2)
15530 RETURN
15540 REM basis opdracht 11 als(
15550 IFH(1)<>0 THEN15580
15560 IFLT>=A3 THENFF=1:RETURN
15570 LT=LT+1:L(LT)=0:RETURN
15580 N=ZW+1:M=1
15590 FORE=0 TO99:E=1
15600 Z1=T2(N,0)
15610 IF(Z1=C1+8)OR(Z1=C1+11) THENM=M+1
15620 IFZ1=C1+9 THENM=M-1:IFM=0 THENZW=N:N=0:E=99
15640 IFZ1=0 THENFF=10:N=0:E=99
15650 IFN<>0 THENN=N+1
15660 NEXTE
15670 RETURN
15680 REM basis opdracht 12 draai
15690 IF(MD<>2)AND(KK<>2) THEN GOSUB16020
15700 W1=SIN(H(1)*RD):W2=COS(H(1)*RD)
15710 UX=W2*SX+W1*TX:VX=W2*TX-W1*SX
15720 UY=W2*SY+W1*TY:VY=W2*TY-W1*SY
15730 UZ=W2*SZ+W1*TZ:VZ=W2*TZ-W1*SZ
15740 SX=UX:SY=UY:SZ=UZ:TX=VX:TY=VY:TZ=VZ
15750 RETURN
15760 REM basis opdracht 13 kantel
15770 IF(MD<>2)AND(KK<>2) THEN GOSUB16020
15780 W1=SIN(H(1)*RD):W2=COS(H(1)*RD)
15790 UX=W2*RX+W1*TX:VX=W2*TX-W1*RX
15800 UY=W2*RY+W1*TY:VY=W2*TY-W1*RY
15810 UZ=W2*RZ+W1*TZ:VZ=W2*TZ-W1*RZ
15820 RX=UX:RY=UY:RZ=UZ:TX=VX:TY=VY:TZ=VZ
15830 RETURN
15840 REM basis opdracht 14 kleur
15850 IFMD<>2 THEN GOSUB16020
15860 KL=INT(H(1)-INT((H(1)-1)/7)*7)
15870 RETURN
15880 REM **
16000 REM terughalen tekening
16010 REM **
16020 CC(0)=7:GOSUB600:MD=2:SI=3:F$=""
16030 HO=.5:VE=.5:CN=0:GOSUB620
16040 N=G1:FORM=1 TO99:M=1
16060 HO=SG(N,0):VE=SG(N,1):CC(0)=SG(N,3)
16070 IFSG(N,2)=620 THEN GOSUB620
16080 IFSG(N,2)=630 THEN GOSUB630
16090 IFN=G2-1 THENM=99
16100 N=N+1:IFN>G THENN=0
16110 NEXTM
16120 HO=XX/150:VE=YY/100:CN=KK
16130 IFKK<>2 THENCC(0)=KL:GOSUB620
16140 RETURN
16150 REM **
17000 REM sub schermrand
17010 REM **
17020 X1=XX:Y1=YY
17030 JY=YY-Y2:JX=XX-X2:CN=KK
17040 IFJY=0 THENJX=999999
17050 IFJX=0 THENJY=999999
17060 IF(JY<>0)AND(JX<>0) THENJY=JY/JX:JX=1/JY
17070 FORE=0 TO99:E=1
17080 F=0:IFX2<2*DH THENF=1
17090 IFX2>=150-2*DH THENF=2
17100 IFF=0 THENX3=X2:Y3=Y2
17110 IFF=1 THENX3=2*DH:Y3=Y1-(X1-X3)*JY
17120 IFF=1 THENDX=150-4*DH:DY=0
17130 IFF=2 THENX3=150-2*DH:Y3=Y1-(X1-X3)*JY
17140 IFF=2 THENDX=-150+4*DH:DY=0
17150 F=0:IFY3<2*DV THENF=1
17160 IFY3>=100-2*DV THENF=2
17170 IFF=0 THENX4=X3:Y4=Y3
17180 IFF=1 THENY4=2*DV:X4=X3-(Y3-Y4)*JX
17190 IFF=1 THENDX=0:DY=100-4*DV
17200 IFF=2 THENY4=100-2*DV:X4=X3-(Y3-Y4)*JX
17210 IFF=2 THENDX=0:DY=-100+4*DV
17220 X1=X4+DX:Y1=Y4+DY
17230 X2=X2+DX:Y2=Y2+DY
17240 HO=X4/150:VE=Y4/100
17250 IFKK<>2 THENLS=630:GOSUB17530
17260 HO=X1/150:VE=Y1/100
17270 IFKK<>2 THENLS=620:GOSUB17530
17280 IF(ABS(X2-75)<=75-DH)AND(ABS(Y2-50)<=50-DV) THENE9
17290 NEXTE
17300 XX=X2:YY=Y2
17310 IFKK<>2 THENLS=630:GOSUB17520
17320 RETURN
17330 REM **
17500 REM sub lijnen bewaren
17510 REM **
17520 HO=XX/150:VE=YY/100:CN=KK:CC(0)=KL
17525 GOSUB17530:RETURN
17530 IFCN=-1 THENCN=0
17540 IFLS=620 THEN GOSUB620
17550 IFLS=630 THEN GOSUB630
17560 IFKK<>0 THENRETURN
17570 IFG1=G2 THENG1=G1+1:IFG1>G THENG1=G1-G-1
17580 SG(G2,0)=HO:SG(G2,1)=VE:SG(G2,2)=LS:SG(G2,3)=KL
17590 G2=G2+1:IFG2>G THENG2=G2-G-1
17600 SG(G2,2)=620
17610 RETURN
17620 REM **
18000 REM sub foutmeldingen
18010 REM **
18020 IFFF=1 THENF$="Opdracht is afgebroken.":REM A3
18030 IFFF=4 THENF$=T1$(CM,0)+" is een lege opdracht."
18040 IFFF=5 THENF$="Ik ken (nog) geen "+A$(F1)+"."
18050 IFFF=6 THENF$="')' zonder HERHAAL( of ALS(."
18060 IFFF=7 THENF$=A$(F1)+" is een basis-opdracht."
18070 IFFF=8 THENF$="Te lange zin!!":REM m1
18080 IFFF=9 THENF$="Einde."
18090 IFFF=10 THENF$="Geen ')' na ALS(."
18100 IFFF=11 THENF$="Ik begrijp "+A$(F1)+" niet."
18110 IFFF=12 THENF$=A$(F1)+" is geen goede naam."
18120 IFFF=13 THENF$=A$(F1)+" is geen getal."
18130 IFFF=14 THENF$=A$(2)+" is niet ingelezen."
18140 IFFF=15 THENF$="Teveel opdrachten.":REM A1
18150 IFFF=16 THENF$="Teveel programma regels.":REM A2
18160 IFFF=17 THENF$=A$(2)+" is niet goed bewaard."
18165 IFFF<>99 THEN18220
18170 F$="? ":FORM=0 TOT1(K,1):F$=F$+T1$(K,M)+" ":NEXTM
18180 F$=F$+"?"
18190 REM **
18200 REM print f$ op scherm 1 of 2
18210 REM **
18220 SR$=F$:HO=0:CN=0:FF=0
18230 IFMD=1 THENVE=1:GOSUB110:PRINTSR$;
18240 IFMD<>1 THENVE=.05:CC(0)=7:GOSUB650
18250 RETURN
18260 REM **
18500 REM sub wissen foutmelding
18510 REM **
18520 SR$=F$:HO=0
18530 IFMD<>1 THENCN=1:VE=.05:CC(0)=7:GOSUB650
18540 SR$="                                    "
18550 SR$=LEFT$(SR$,LEN(F$))
18570 IFMD=1 THENVE=1:GOSUB110:PRINTSR$;
18580 F$=""
18590 RETURN
18600 REM **
20000 REM print grafisch scherm
20010 REM **
20020 REM
20030 REM
20040 REM PRINT GRAFISCH SCHERM
20050 REM
20060 REM EVENTUEEL ZELF TE SCHRIJVEN
20070 REM
20080 RETURN
20090 REM **
21000 REM herstart punt
21010 REM **
21020 GOSUB2520:A$=""
21030 GOSUB2020:GOTO950
21040 REM **
25000 REM opdrachten
25010 REM **
25020 DATA"LEER",1,"  opdracht (variabelen)"
25030 DATA"PRINT",0,""
25040 DATA"VOORBEELD",0,""
25050 DATA"SPOOR",1," AAN/UIT"
25060 DATA"LIJST",1," (opdracht)"
25070 DATA"HELP",0,""
25080 DATA"WEG",1,"   opdracht"
25090 DATA"BEWAAR",2,"naam B/C/D"
25100 DATA"LEESIN",2,"naam B/C/D"
25105 DATA"ANIMATIE",1,"(naam)"
25110 DATA"EIND",0,""
25120 DATA"LINKS",1," hoek"
25130 DATA"RECHTS",1,"hoek"
25140 DATA"VOORUIT",1,"  afstand"
25150 DATA"ACHTERUIT",1,"afstand"
25160 DATA"PENOP",0,""
25170 DATA"PENNEER",0,""
25180 DATA"SCHOON",0,""
25190 DATA"HERHAAL(",1,"maal"
25200 DATA")",0,""
25210 DATA"MAAK",2,"variabele getal"
25220 DATA"ALS(",1,"formule"
25230 DATA"DRAAI",1," hoek"
25240 DATA"KANTEL",1,"hoek"
25250 DATA"KLEUR",1,"nummer"
25260 REM
25270 REM **************************
30000 REM BASICODE-3C  LOGO  (3.5)
30010 REM **************************
30020 REM
30030 REM Een logo programma
30040 REM
30050 REM in basicode-3c, geschikt
30060 REM
30070 REM voor vele computers.
30080 REM
30090 REM Literatuur
30100 REM
30110 REM H. Pinxteren logo inleiding
30120 REM
30130 REM alle A, B, C, E, F, G, I,
30140 REM K, L, M, N en Z
30150 REM zijn gehele getallen (int)
30160 REM
30170 REM Voor gwbasic kan
30180 REM DEFINT A-C, E-G, I, K-N, Z
30190 REM worden toegevoegd.
30200 REM
30210 REM **************************
30220 REM Enkele variabelen
30230 REM **************************
30240 REM hk hoek in graden
30250 REM xx horizontaal (0-75-150)
30260 REM yy verticaal   (0-50-100)
30270 REM kk pen 0=neer   1=weg
30280 REM 2=op    -1=neer(2)
30290 REM **************************
32000 REM Geschreven door
32010 REM **************************
32020 REM Henk  van  Deelen  1990/92
32030 REM Rudolphlaan    28
32040 REM 3794 MZ  De Glind
32050 REM **************************
32060 REM
Diesmal stelle ich nur den übertragbaren Teil des Listings ein, am Bascoder (der davorgesetzt werden muss) habe ich noch nichts geändert (weil hier leider kein Feedback zu eventuellen erforderlichen Korrekturen kommt), die Bascoder-Zeilen können aus einem der anderen Listings ausgeschnitten werden.

Enjoy it!

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

Korrektur: das LOGO-Programm für BasiCode

Beitrag von BC-Tom »

Mir sind zwei Fehler aufgefallen:

Code: Alles auswählen

(...)

1225 DIMT3(A3,M1):REM DIM a3=50,m1=4 Logo Stack

(...)

13110 IFV<0 THENT2(0,N*3-2)=0:T2(0,N*3-1)=2:T2(0,N*3)=-V

(...) 
Diese beiden Zeilen müssen im vorangegangenen Listing getauscht werden.

In die erste war mit copy and paste etwas anderes hineingeraten, ohne Auswirkung, da es hinter REM stand.

Die zweite hatte die BasiCode-Festlegung verletzt, dass die Zeilenlänge maximal 60 (mit Zeilennummer und Leerzeichen) betragen darf, deswegen stand am Schluss Unfug, der einen syntax error verursachte.

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

leicht verspätet: ein Weihnachtsgruß

Beitrag von BC-Tom »

Für BasiCode-Programme wurde jetzt ein Java-Interpreter in Angriff genommen.

https://github.com/mhaupt/basicode

Dabei entstand zum Testen Ausgabe von farbigem Text im Grafik-Modus dieses kleine Demo-Programm:

Code: Alles auswählen

1000 GOTO 20: REM XMAS2021
1010 KU=6:DIM CC(2):CC(0)=4:CC(1)=0:GOSUB 600
1015 VE=0:HO=0.5: CC(0)=6: :SR$="*":GOSUB 650
1020 FOR PA = 1 TO 20
1025 IF PA>16 THEN 1062
1030 FOR PB=0 TO (PA / 2)
1031 VE=(PA/26):HO=((16+PB)/32):CC(0)=4 
1034 GOSUB 260:REM RND Ergebnis in RV
1035 IF RV<0.9 THEN 1041
1036 SR$="O":GOSUB 20000:CC(0)=KU:GOSUB 650:CC(0)=4
1037 GOTO 1042
1041 SR$="#":GOSUB 650
1042 VE=(PA/26):HO=((16-PB)/32):IF PB=0 THEN 1060
1043 GOSUB 260:IF RV<0.9 THEN 1050
1045 SR$="O":GOSUB 20000:CC(0)=KU:GOSUB 650:CC(0)=4
1046 GOTO 1060
1050 IF PB<>0 THEN SR$ = "#" : GOSUB 650
1060 NEXT PB
1061 GOTO 1070
1062 VE=(PA/26):HO=(15/32):SR$="####": GOSUB 650
1070 NEXT PA
1080 VE=(21/26):HO=(8/26):CC(0)=7:SR$="Joyex Noel!":GOSUB 650
1090 GOSUB 210:REM Warten auf Tastendruck = <E>nde
1100 IF IN<>69 THEN GOSUB 600:GOTO 1015
1999 GOSUB 100:GOTO 950
20000 KU=KU-2*(KU=1)-2*(KU=3)-2*(KU=5)+5*(KU=7)-4*(KU=2)+5*(KU=6):RETURN
30000 REM evtl. DIM in 1010 entfernen (in manchen Bascodern bereits enthalten)
30010 REM
30020 REM 20000 ggf. anpassen, wenn logisch wahr nicht den Wert -1 hat
30030 REM
32000 REM nach einer Idee von John Kennedy fuer ZX81
32010 REM
32020 REM angepasst fuer BasiCode von Paul Veltjens JOYCE-User-AG e.V.
32030 REM
32040 REM Ergaenzungen fuer Farb-Betrieb Thomas Rademacher JOYCE-User-AG e.V.
32050 REM
32060 REM Dezember 2023
Es muss zum Bascoder hinzugeMERGEt werden. Beim Druck auf die Leertaste werden die Kugeln immer wieder neu angehängt, mit "E" wird das Programm beendet.

Viel Spaß damit!
ATARI.png
ATARI.png (3.03 KiB) 524 mal betrachtet
XMAS2021.mp4
eine Animation mit mehreren Phasen
(245.79 KiB) 11-mal heruntergeladen

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

noch eine Korrektur: das LOGO-Programm für BasiCode

Beitrag von BC-Tom »

BC-Tom hat geschrieben:
22.11.2023 21:46
Mir sind zwei Fehler aufgefallen: (...)
Ich habe leider einen weiteren Fehler gefunden - tauscht diese Zeile aus:

Code: Alles auswählen

(...)
17280 IF(ABS(X2-75)<=75-DH)AND(ABS(Y2-50)<=50-DV) THENE=99
(...)
Und mit dieser kleinen Änderung könnt Ihr in Hintergrundfarbe zeichnen (also Vorhandenes löschen):

Code: Alles auswählen

(...)
 15860 KL=INT(H(1)-INT((H(1)-1)/8)*8)
 (...)

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

eine hoffentlich letzte Korrektur: das LOGO-Programm für BasiCode

Beitrag von BC-Tom »

Langsam wirds mir ja peinlich: habe noch einen Fehler gefunden...

Code: Alles auswählen

3230 SR$=E$(EV):ET=0:GOSUB4900:IFET>=M1+2 THENFF=8:GOTO3725
Zu meiner Entschuldigung - das Originalprogramm ist sehr verschwenderisch mit der Verwendung von Leerzeichen, zum Beispiel so:

Code: Alles auswählen

17280 IF (ABS(X2 - 75) <= 75 - DH) AND (ABS(Y2 - 50) <= 50 - DV) THEN e = 99
Dabei gibt es eine Vorgabe, die Zeilenlänge solle 60 Schriftzeichen nicht überschreiten, einschließlich Zeilennummer und dem Zeichen für das Zeilenende.

Beim Bearbeiten des sehr langen Programms sind mir leider die angeführten Zeilen durch die Finger gerutscht und so wurden die Enden verstümmelt.

Ich hoffe, nun stimmts...

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast