Unten finden sich weitere kurze BASIC-Programme mit Vorschlägen zum Experimentieren und Verändern. Sie dürfen die Programme und ihre modifizierten Fassungen gern weiter publizieren. Bitte geben Sie dabei aber immer den Namen des Autors der Ursprungsversion und die Creative-Commons-Lizenz mit an. Alle hier angegebenen Programme stehen unter der Lizenz CC BY NC-SA 4.0.
»Rasen mit 310 km/h«
Autor: Peter Dassow, Quelle: Classic-Computing, für IBM-PC mit BASICA 3.30 oder GW-BASIC
5 REM ORIGINAL-VERSION VON PETER DASSOW (CC BY-NC-SA 4.0) 10 DEFINT A-Z:RANDOMIZE TIMER:D!=TIMER:S=RND*40!+20:C=S+4:O=C:CLS 20 LOCATE 11,1:FOR I=1 TO 12:PRINT SPC(S);"|";SPC(10);"|":NEXT I:Z=0:V!=.3 30 R=RND*7:IF R<3 THEN M=-1 ELSE IF R=3 THEN M=0 ELSE M=1 40 LOCATE 2,1:PRINT "KM:";Z;" VMAX:";310-CINT(V!*1000!):S=S+M 50 LOCATE 23,1:IF S>58 THEN S=58 ELSE IF S<1 THEN S=1 60 PRINT SPC(S%);"| |";" ":PRINT:Z=Z+10:T=SCREEN(10,C):LOCATE 10,C 70 PRINT "*";:LOCATE 9,O:PRINT " ";:IF T=32 THEN O=C:IF TIMER<D!+1 THEN 110 ELSE 90 80 LOCATE 3,1:PRINT "CRASH!":SOUND 37,5:LOCATE 23,1:END 90 IF V!>.1 THEN V!=V!-.01 ELSE IF V!>.05 THEN V!=V!-.005 ELSE V!=V!-.001 100 D!=TIMER:SOUND Z/10+100,2:IF V!<0 THEN V!=0 110 K$=INKEY$:T!=TIMER+V!:WHILE TIMER<T!:WEND 120 IF K$="" THEN 30 130 IF K$="n" THEN C=C-1:GOTO 30 140 IF K$="m" THEN C=C+1:GOTO 30 150 IF K$="q" THEN LOCATE 23,1:END
Modifizieren Sie dieses Programm so, dass es auch auf anderen Homecomputern funktioniert. Dabei sind besonders zeitsparende Algorithmen wichtig, denn sie bestimmen, wie schnell ihr Auto im Spiel fährt. Hier finden Sie die Befehlsreferenzen von BASICA bzw. GW-BASIC.
»Avoider«
Autor: Andy C. Spencer, Quelle: retrocomputermuseum.co.uk, für Sinclair ZX Spectrum (ab 16K)
10 BORDER 0: PAPER 0: INK 7: CLS: LET sc=0: LET n=22703 20 POKE 23692,255: PRINT AT 21,INT (RND*32); INK 6;".": PRINT: POKE n,45: LET sc=sc+1: IF INKEY$="z" THEN LET n=n-1 30 IF INKEY$="x" THEN LET n=n+1 40 IF PEEK (n+32)<>7 THEN PRINT AT 2,2;"CRASHED - YOU SCORED ";sc: PRINT AT 4,2;"PRESS ENTER TO PLAY AGAIN": INPUT i$: LET sc=0 50 GO TO 20
Das Programm stellt ein kleines Geschicklichkeitsspiel dar. Sie steuern die Spielfigur mit den Tasten z und x. Das Programm ist so geschrieben, dass es beim Auflisten auf eine Bildschirmseite passt – das führt zu vielen Programmzeilen mit durch Doppelpunkte getrennten Befehlen … und damit zu Spaghetti-Code. Modifizieren Sie das Programm nach der Philosophie des „Strukturierten Programmierens“, indem Sie jedem Befehl eine eigene Zeile geben, erklärende REM-Kommentare einfügen und die Kontrollstrukturen sichtbar machen.
»Uhr«
Autor: Volker Pohlers für Z9001/KC-87 und MSX
1 !UHR V.POHLERS 03.06.2009 FUER GRAF14 5 CLS:SCREEN1:GCLS:ZERO(40,24):CIRCLE(0,0),22 100 !ZEIT HOLEN 110 H=PEEK(29)+PEEK(30)/60:M=PEEK(30):S=PEEK(31) 200 !SEKUNDE 210 IFS0=STHENGOTO260 220 A=S0*PI/30:X=SIN(A)*16:Y=COS(A)*16:LINE(0,0)-(X,Y),0:S0=S 260 A=S*PI/30:X=SIN(A)*16:Y=COS(A)*16:LINE(0,0)-(X,Y) 300 !MINUTE 310 IFM0=MTHENGOTO360 320 A=M0*PI/30:X=SIN(A)*16:Y=COS(A)*16:LINE(0,0)-(X,Y),0:M0=M 360 A=M*PI/30:X=SIN(A)*16:Y=COS(A)*16:LINE(0,0)-(X,Y) 400 !STUNDE 410 IFH0=HTHENGOTO460 420 A=H0*PI/6:X=SIN(A)*12:Y=COS(A)*12:LINE(0,0)-(X,Y),0:H0=H 460 A=H*PI/6:X=SIN(A)*12:Y=COS(A)*12:LINE(0,0)-(X,Y) 900 T$=INKEY$:IFT$<>""GOTO1000 910 GOTO100 1000 SCREEN0
Das Programm stellt eine analoge Uhr auf dem Bildschirm dar. Zeile 110 holt die Uhrzeit aus Systemzellen des Z9001. Zeile 5 ist die Initialisierung der Grafik. Prinzipiell sollte das Programm auf MSX-Rechnern laufen.
»Code-Wort«
Autor: Björn Benner für Commodore 64
1 PRINT"{Clear/Home}":POKE 53280,0:POKE 53281,0:PRINT"(White)" 2 PRINT SPC(10)"{RVS ON}-=LAUFENDER CODE=-" 3 PRINT:PRINT:PRINT"UEBER DEN BILDSCHIRM LAEUFT EIN" 4 PRINT"VERSCHLUESSELTES WORT, WELCHES" 5 PRINT"RICHTIG EINGEGEBEN WERDEN MUSS!" 6 PRINT:PRINT"LEICHTE STUFE = L / SCHWERE STUFE = S":INPUT"WELCHE STUFE";A$ 7 IF A$ = "L" THEN GOTO 9 8 IF A$ = "S" THEN GOTO 14 9 PRINT"{Clear/Home}":FOR L=1 TO 500:PRINT" C64{CRSR Links}{CRSR Links}{CRSR Links}";:FOR I=1TO80:NEXT I:NEXT L 10 PRINT"ìENTSCHLUESSELE DEN CODE!":INPUT"KLARTEXT";L$ 11 IF L$ <> "C64" THEN 19 12 IF L$ = "C64" THEN 13 13 PRINT:PRINT"RICHTIG!":CLR:FOR X = 1 TO 900:NEXT X:GOTO 1 14 PRINT"{Clear/Home}":FOR L=1TO500:PRINT" CLASSIC COMPUTING{CRSR Links x 17}";:FORI=1TO80 15 NEXT I:NEXT L 16 PRINT"ìENTSCHLUESSELE DEN CODE!":INPUT"KLARTEXT";S$ 17 IF S$ <>"CLASSIC COMPUTING" THEN 19 18 IF S$ = "CLASSIC COMPUTING" THEN 13 19 PRINT"FALSCHER CODE!":FOR X = 1 TO 900:NEXT X:CLR:GOTO 1
Die in geschweiften Klammern angegebenen Anweisungen in den Zeilen 1, 2, 9 und 14 sind Steuercodes. Die Anführungszeichen müssen gesetzt werden. Für die genaue Anwendung / Funktion bitte im Commodore C64 Handbuch nachsehen.
Der String / Text C64 in Zeile 9 und der String / Text CLASSIC COMPUTING in Zeile 14 müssen mit gedrückter SHIFT-Taste eingegeben werden, damit der Text als Sonderzeichen dargestellt wird. Leerstellen bei den Strings bitte beachten.
»Farb-Sprite-Demo«
Autor: Simon Stelling-de San Antonio für Commodore 64
10 DIMA$(64):FORI=0TO30:X$=X$+CHR$(29):NEXT:V=53248:POKE32+V,0:POKE28+V,255 20 FORI=0TO7:POKEI+I+V,308-I*39AND255:POKEI+I+1+V,90:POKE2040+I,13:READK(I) 30 POKE39+I+V,8+I:NEXT:POKE16+V,3:POKE21+V,255:POKE33+V,0:POKE37+V,RND(-78) 40 POKE38+V,1:W$="PLEASE WAIT... ":PRINTCHR$(142)CHR$(8)CHR$(5)CHR$(147)W$ 50 FORI=832TO894:READY:POKEI,255ANDY+164:NEXT:D=54272:G=12:Q=64:Z=3.1415/64 60 FORI=0TO63:P=RND(1)*947+1071:POKEP,90:POKED+P,K(7ANDI):POKED+19+P,G:G=27-G 70 POKE19+P,46:NEXT:R=18+V:H=7:G=10:J=9:FORI=0TO63:PRINTCHR$(19)W$I+1" / 64" 80 ON1ANDIGOTO100:P=RND(1)*911+1071:POKED+1+P,H:POKED+40+P,G:POKEP,233:H=20-H 90 POKE1+P,223:POKE40+P,95:POKE41+P,105:POKED+P,1:POKED+41+P,J:G=13-G:J=15-J 100 S$=CHR$(19):FORX=0TO7:Y=229-SIN((I+X*4AND63)*Z)*179:C=127ANDY 110 S$=S$+CHR$(29)+CHR$(18-128*(Y<128))+CHR$(C-Q*(C<32)-32*(C>63)-32*(C>95)) 120 NEXT:A$(I)=S$+LEFT$(X$,23+(IAND7))+CHR$(48+K(I/8+IAND7)):NEXT:POKE788,52 130 PRINTCHR$(19)CHR$(144)W$W$:POKE648,208:B$=CHR$(9)+CHR$(154)+CHR$(147) 140 FORI=0TO63:WAITR,Q:PRINTA$(I);:NEXT:IFPEEK(198)=0THEN140 150 POKE648,4:POKE21+V,0:PRINTB$;:POKE32+V,14:POKE33+V,6:POKE788,49:POKE198,0 160 DATA10,8,2,4,3,5,14,15,95,91,220,106,6,12,106,6,-4,150,6,8,150,6,4,70,6,6 170 DATA70,6,5,70,6,6,70,6,5,70,6,6,70,6,5,70,6,6,70,6,5,70,6,5,6,6,5,6,6,5 180 DATA150,6,0,134,6,0,106,6,236,102,6,236,94,177,156 190 REM WRITTEN 5/2016 BY 200 REM SIMON STELLING-DE SAN ANTONIO
Das Basic-Programm demonstriert die besonderen Grafikfähigkeiten des Commodore 64, indem es zeigt, wie sich acht verschiedenfarbige Multicolor-Sprites sehr schnell und flüssig über einen farbigen Hintergrund bewegen. Das Basic-Programm zeigt die Sprites zunächst statisch an und beginnt damit, den farbigen Hintergrund aufzubauen. Dies dauert einen Moment, was das Programm auch durch die Anzeige von „PLEASE WAIT“ und einen Zähler, der von 1 bis 64 läuft, deutlich macht. Danach startet die Bewegung der Sprites. Wenn man dann genug gesehen hat, kann man das Programm durch Drücken einer beliebigen Taste wieder beenden. Das Programm ist in BASIC geschrieben und verwendet keinen Maschinensprache-Teil. Das Programm enthält keinen SYS-Befehl und verwendet nur die normalen BASIC-Befehl des Commodore Basic 2.0 auf dem Commodore 64. Natürlich verwendet das Programm oft den POKE-Befehl, da dies auf dem Commodore 64 mit Basic 2.0 der normale Weg ist, um z.B. Sprites darzustellen. Das Programm enthält ausschließlich Befehle und Zeichen, die problemlos in einem Buch abgedruckt und über eine normale Tastatur (sowohl C64-Tastatur als auch heutige PC-Tastatur) eingegeben werden können. Beispielsweise verwendet es den Ausdruck CHR$(147) anstelle der (kürzeren) Zeichenfolge Anführungszeichen – „Inverses Herz“ – Anführungszeichen. Jede Zeile des BASIC-Programms ist kürzer als 80 Zeichen. Das Programm enthält genau 20 Zeilen, von denen aber die letzten 2 Zeilen reine Kommentar-Zeilen sind.
»Moiré«
Autor: Jochen Emmes für Apple II mit Applesoft-BASIC
5 REM MOIREE-FARBE OHNE BEFEHL 10 PRINT "SCHRITTWEITE: "; 20 INPUT X 30 HGR2 40 FOR I=40 TO 240 STEP X 50 HPLOT I,1 TO 140,100 60 HPLOT I,190 TO 140,100 70 NEXT 80 FOR I=1 TO 190 STEP X 90 HPLOT 40,I TO 140,100 100 HPLOT 240,I TO 140,100 110 NEXT 120 GET A$ 130 TEXT
Das Programm generiert auf dem Monitor eine Moiré-Grafik im HiRes-Grafikmodus.
»Jump Ball«
Autor: Dirk Schneider, Quelle: Forum64 für Commodore 64
10 X=21 : XX=1.8 : DIM Y(104) : V=53248 :SI=54272 : POKE V+32,13 : POKEV+33,5 20 POKE SI+24,15 : POKE SI+4,129 : POKE SI+5,9 : POKE SI+6,15 : POKE SI,100 30 PRINT CHR$(147) CHR$(5) : PRINT : PRINT : PRINT " MOMENT BITTE..." 40 FOR I=0 TO 3.1416 STEP 0.03 : Y(J)=233-SIN(I)*150 : J=J+1 50 PRINT CHR$(19) : PRINT " " CHR$(19) : PRINT 105-J : NEXT I 60 FOR I=0 TO 62 :READ A : POKE 832+I,A : NEXT I 70 POKE 2040,13 : POKE V+39,7 : POKEV+21,1 : PRINT CHR$(147) 80 PRINT : PRINT TAB(4)"JUMPBALL BY DIRK 'HEXWORX' SCH." 90 FH=233 : GOSUB 170 : FOR I=0 TO 104 : POKE V+1,Y(I) 100 X=X+XX : IF X>321 THEN GOTO 160 110 IF X<21 GOTO 160 120 IF X>255 THEN XP=X-255 : POKE V+16,1 : GOTO 140 130 XP=X : POKE V+16,0 140 POKE V,XP : NEXT : F=F+1 AND 15 : IF F=5 THEN F=6 150 POKE V+39,F : GOTO 90 160 XX=XX*-1 : FH=Y(I) : GOSUB 170 : POKE V+32,PEEK(V+32)+1 AND 255 : GOTO 100 170 POKE SI+1,(233-FH)/32 : POKE SI+4,0 : POKE SI+4,129 : RETURN : DATA 0,62,, 180 DATA 255,128,3,207,224,7,63,240,14,255,248,29,255,252,27,255,252,59,255,254 190 DATA 63,255,254,127,255,255,127,255,255,127,255,255,63,255,254,63,255,254 200 DATA 31,255,252,31,255,252,15,255,248,7,255,240,3,255,224,0,255,128,,62,,13
Der berühmte „Boing“-Ball hier in BASIC nachprogrammiert. Die Daten für das Ball-Sprite finden sich in den DATA-Zeilen 180-200. Ändern Sie diese Angaben, um eine andere Grafik springen zu lassen. Die Flugkurve wird hier übrigens durch eine Sinusfunktion bestimmt. In der Natur findet der schiefe Wurf auf Basis einer Parabelfunktion statt. Gelingt es Ihnen, die physikalisch korrektere Fallbewegung in das Programm einzubauen?
»Dreiklang«
Autor: Ingolf Ihrig für Acorn Archimedes A3000
10 COLOUR 127:VDU 28,10,18,50,4:CLS 20 PRINT TAB(2,2) "3klang in Stereo / Doc Phura 2016" 30 COLOUR 125:PRINT:GOSUB 100:GOSUB 170 40 PRINT:PRINT TAB(4,4) "Bitte auswaehlen:" 50 PRINT:PRINT TAB(6) "1) Ouinte in Mono" 60 PRINT:PRINT TAB(6) "2) Ouinte in Stereo" 70 PRINT:PRINT TAB(6) "3) Ton aus":PRINT:PRINT TAB(6) "4) Ende" 80 W$ = GET$ 90 ON VAL(W$) GOSUB 170,160,200,150 ELSE 80:GOTO 80 100 SOUND OFF:VOICES 4 110 *CHANNELVOICE 2 StringLib-Soft 120 *CHANNELVOICE 3 StringLib-Soft 130 *CHANNELVOICE 4 StringLib-Soft 140 RETURN 150 VDU 26:SOUND OFF:CLS:END 160 SOUND ON:STEREO 2,-127:STEREO 3,0:STEREO 4,127:GOTO 180 170 SOUND ON:STEREO 2,0:STEREO 3,0:STEREO 4,0 180 SOUND 2,-15,53,400,100:SOUND 3,-15,61,400,200:SOUND 4,-15,81,400,300 190 RETURN 200 SOUND 2,0,0,0:SOUND 3,0,0,0:SOUND 4,0,0,0:RETURN
Das Programm spielt einen Dreiklang dreistimmig (na, so was!) und in Stereo oder Mono. Das konnte damals nicht jeder Heimcomputer.
»SAY«
Autor: Henrik Kühn für Commodore Amiga mit AmigaBASIC
SAY TRANSLATE$("It was just a one liner to do speech synthesis with Amiga Basic.") FOR i=0 to 8 READ how%(i) NEXT i SAY TRANSLATE$("It could even talk with different speed or tune or gender."), how% DATA 140,0,160,0,22000,64,11,1,0
Das Programm demonstriert die Sprachsynthese des Amiga unter BASIC. Hierbei können sogar verschiedenen Stimmen/Stimmlagen gewählt werden. Experimentieren Sie mit den how%-Werten in der DATA-Zeile.
»Langton’s Ant«
Autor: Simon Ferré, Quelle: Facebook für Sinclair ZX Spectrum
10 BORDER 2: INK 0: PAPER 6: CLS 20 RANDOMIZE 30 LET x=128: LET y=88: LET g=0 40 DIM t(2) 50 LET xd=1: LET yd=0 60 IF POINT (x,y) THEN GO TO 100 70 PLOT OVER 1;x,y 80 IF xd=0 THEN LET t(1)=yd: LET t(2)=0: GO TO 130 90 LET t(1)=0: LET t(2)=0-xd: GO TO 130 100 PLOT OVER 1;x,y 110 IF xd=0 THEN LET t(1)=0-yd: LET t(2)=0: GO TO 130 120 LET t(1)=0: LET t(2)=xd 130 LET xd=t(1): LET yd=t(2) 140 LET x=x+xd: IF x<1 OR x>254 THEN LET x=128 150 LET y=y+yd: IF y<1 OR y>174 THEN LET y=88 160 LET g=g+1: PRINT #0;AT 0,0;"Generations: ";g 170 GO TO 60
Langtons Ameise ist die Simulation eines einfachen Turing-Automaten, also eines Computermodells. Das Programm steht in der Tradition der zellulären Automaten (zu denen auch das bekannte »Game of Life« gehört). Auf der oben verlinkten Facebook-Seite finden sich weitere Beispiele und Adaptionen des Programms.