From 06c16f80f0a2e7b482773ac4ed7771d528f03753 Mon Sep 17 00:00:00 2001 From: Christian Johannesen Date: Wed, 7 Oct 2026 22:43:29 +0200 Subject: [PATCH] Expand collection to twenty programs --- README.md | 12 ++++- cipher-wheel/cipher-wheel.bas | 23 ++++++++++ cipher-wheel/cipher-wheel.prg | Bin 0 -> 647 bytes dice-poker/dice-poker.bas | 35 +++++++++++++++ dice-poker/dice-poker.prg | Bin 0 -> 1102 bytes kaleidoscope/kaleidoscope.bas | 19 ++++++++ kaleidoscope/kaleidoscope.prg | Bin 0 -> 572 bytes life-lab/life-lab.bas | 28 ++++++++++++ life-lab/life-lab.prg | Bin 0 -> 903 bytes morse-trainer/morse-trainer.bas | 25 +++++++++++ morse-trainer/morse-trainer.prg | Bin 0 -> 871 bytes nim-challenge/nim-challenge.bas | 20 +++++++++ nim-challenge/nim-challenge.prg | Bin 0 -> 637 bytes programs.json | 70 ++++++++++++++++++++++++++++++ public/app.js | 8 +++- reaction-timer/reaction-timer.bas | 24 ++++++++++ reaction-timer/reaction-timer.prg | Bin 0 -> 802 bytes snake-trail/snake-trail.bas | 34 +++++++++++++++ snake-trail/snake-trail.prg | Bin 0 -> 1227 bytes word-scramble/word-scramble.bas | 30 +++++++++++++ word-scramble/word-scramble.prg | Bin 0 -> 1063 bytes world-quiz/world-quiz.bas | 35 +++++++++++++++ world-quiz/world-quiz.prg | Bin 0 -> 1347 bytes 23 files changed, 361 insertions(+), 2 deletions(-) create mode 100644 cipher-wheel/cipher-wheel.bas create mode 100644 cipher-wheel/cipher-wheel.prg create mode 100644 dice-poker/dice-poker.bas create mode 100644 dice-poker/dice-poker.prg create mode 100644 kaleidoscope/kaleidoscope.bas create mode 100644 kaleidoscope/kaleidoscope.prg create mode 100644 life-lab/life-lab.bas create mode 100644 life-lab/life-lab.prg create mode 100644 morse-trainer/morse-trainer.bas create mode 100644 morse-trainer/morse-trainer.prg create mode 100644 nim-challenge/nim-challenge.bas create mode 100644 nim-challenge/nim-challenge.prg create mode 100644 reaction-timer/reaction-timer.bas create mode 100644 reaction-timer/reaction-timer.prg create mode 100644 snake-trail/snake-trail.bas create mode 100644 snake-trail/snake-trail.prg create mode 100644 word-scramble/word-scramble.bas create mode 100644 word-scramble/word-scramble.prg create mode 100644 world-quiz/world-quiz.bas create mode 100644 world-quiz/world-quiz.prg diff --git a/README.md b/README.md index ac75c93..b427c54 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # C64 BASIC Collection -Ten small, polished programs for the Commodore 64, written entirely in stock +Twenty small, polished programs for the Commodore 64, written entirely in stock Commodore BASIC V2. The collection mixes arcade action, puzzles, simulations, creative tools, sound, and visual effects. No cartridge, BASIC extension, or machine-language payload is required. @@ -19,6 +19,16 @@ machine-language payload is required. | [Pixel Painter](pixel-painter/pixel-painter.bas) | Creative | Cursor keys, Space, `C`, `Q` | Draw character-cell pictures on the screen. | [Run program](http://localhost:8134/program/pixel-painter) | | [Stock Trader](stock-trader/stock-trader.bas) | Simulation | `B`, `S`, `W`, `Q` | Trade a volatile stock over twenty market days. | [Run program](http://localhost:8134/program/stock-trader) | | [Starfield](starfield/starfield.bas) | Demo | `1`, `2`, `3`, `Q` | Watch and control a layered animated starfield. | [Run program](http://localhost:8134/program/starfield) | +| [Snake Trail](snake-trail/snake-trail.bas) | Arcade | `W`, `A`, `S`, `D`, `Q` | Guide a growing snake through a field of food and danger. | [Run program](http://localhost:8134/program/snake-trail) | +| [Dice Poker](dice-poker/dice-poker.bas) | Dice | `1`-`5`, Return, `Q` | Keep your best dice and chase a winning poker combination. | [Run program](http://localhost:8134/program/dice-poker) | +| [Word Scramble](word-scramble/word-scramble.bas) | Word | `A`-`Z`, Return, `Q` | Unscramble five computer-themed words from helpful clues. | [Run program](http://localhost:8134/program/word-scramble) | +| [Nim Challenge](nim-challenge/nim-challenge.bas) | Strategy | `1`, `2`, `3`, `0` | Outthink the computer in the classic game of twenty-one sticks. | [Run program](http://localhost:8134/program/nim-challenge) | +| [Reaction Timer](reaction-timer/reaction-timer.bas) | Reflex | Any key, `Q` | Test your reactions across five unpredictable timed rounds. | [Run program](http://localhost:8134/program/reaction-timer) | +| [Morse Trainer](morse-trainer/morse-trainer.bas) | Educational | `A`-`Z`, Return, `Q` | Learn Morse letters by reading and hearing their signals. | [Run program](http://localhost:8134/program/morse-trainer) | +| [Kaleidoscope](kaleidoscope/kaleidoscope.bas) | Demo | Space, `C`, `Q` | Grow colorful symmetrical patterns across the character screen. | [Run program](http://localhost:8134/program/kaleidoscope) | +| [World Quiz](world-quiz/world-quiz.bas) | Trivia | `1`, `2`, `3`, `Q` | Take a seven-stop tour of world geography and landmarks. | [Run program](http://localhost:8134/program/world-quiz) | +| [Life Lab](life-lab/life-lab.bas) | Simulation | Space, `R`, `Q` | Observe generations of Conway's cellular automaton evolve. | [Run program](http://localhost:8134/program/life-lab) | +| [Cipher Wheel](cipher-wheel/cipher-wheel.bas) | Utility | `E`, `D`, `N`, `Q` | Encode and decode secret messages with a Caesar shift. | [Run program](http://localhost:8134/program/cipher-wheel) | ## Running the programs diff --git a/cipher-wheel/cipher-wheel.bas b/cipher-wheel/cipher-wheel.bas new file mode 100644 index 0000000..ce2bd60 --- /dev/null +++ b/cipher-wheel/cipher-wheel.bas @@ -0,0 +1,23 @@ +10 PRINT CHR$(147):PRINT " CIPHER WHEEL":PRINT +20 PRINT "ENCODE OR DECODE A SECRET MESSAGE" +30 PRINT "WITH A CLASSIC CAESAR SHIFT.":PRINT +40 PRINT "PRESS ANY KEY" +50 GET A$:IF A$="" THEN 50 +60 PRINT CHR$(147):PRINT "E=ENCODE D=DECODE Q=QUIT" +70 GET M$:IF M$="" THEN 70 +80 IF M$="Q" THEN 230 +90 IF M$<>"E" AND M$<>"D" THEN 70 +100 INPUT "SHIFT (1-25)";S:IF S<1 OR S>25 THEN 100 +110 IF M$="D" THEN S=-S +120 INPUT "MESSAGE";A$:B$="" +130 FOR I=1 TO LEN(A$):C=ASC(MID$(A$,I,1)) +140 IF C<65 OR C>90 THEN B$=B$+CHR$(C):GOTO 170 +150 C=C+S:IF C>90 THEN C=C-26 +160 IF C<65 THEN C=C+26 +165 B$=B$+CHR$(C) +170 NEXT:PRINT:PRINT "RESULT:":PRINT B$:PRINT +180 PRINT "N=NEW MESSAGE R=RESTART Q=QUIT" +190 GET A$:IF A$="N" THEN 120 +200 IF A$="R" THEN RUN +210 IF A$<>"Q" THEN 190 +230 PRINT CHR$(147):END diff --git a/cipher-wheel/cipher-wheel.prg b/cipher-wheel/cipher-wheel.prg new file mode 100644 index 0000000000000000000000000000000000000000..50dfe3f5dca3405935e820b90894844d53e29a75 GIT binary patch literal 647 zcmY*WF>ljA6n<=XURanI(9>~4EjK{vbvK+)?6nOIK ztlu#OjylG4MLdQfJ4Z-ia=non+$bMk##(jV2zbaYIOHfRJE%~1m9?2h zt&CL#+D^7!UUGzc%y+PUL360`O}t??1st#lUZQHnyL41S;6AoP_{OgNC(|U24os6q z2M&_KFe?T8Wb4Gxa}2$PVL61~tPg)11IHO%4&gk%RkvnSVFVr#nyS?OC49>7zz&L9 zF8XpYY6oJ~5~rO>e1moxwFxN05N`6j4Rbwft3wO-_yadRw`7&xv*xtG9^Zn;m{k&A z;Rj!}f>>7{{m)b_WD7C~;2nQPYE+2mt;7g*C7e literal 0 HcmV?d00001 diff --git a/dice-poker/dice-poker.bas b/dice-poker/dice-poker.bas new file mode 100644 index 0000000..da20544 --- /dev/null +++ b/dice-poker/dice-poker.bas @@ -0,0 +1,35 @@ +10 PRINT CHR$(147):PRINT " DICE POKER":PRINT +20 PRINT "ROLL FIVE DICE. KEEP ANY DICE TWICE." +30 PRINT "ENTER POSITIONS TO KEEP, LIKE 135.":PRINT +40 PRINT "PRESS ANY KEY" +50 GET A$:IF A$="" THEN 50 +60 R=RND(-TI):DIM D(5),C(6):K$="" +70 FOR T=1 TO 3:FOR I=1 TO 5:H=0 +75 FOR J=1 TO LEN(K$):IF VAL(MID$(K$,J,1))=I THEN H=1 +80 NEXT:IF T=1 OR H=0 THEN D(I)=INT(RND(1)*6)+1 +90 NEXT I:PRINT CHR$(147):PRINT "ROLL";T;"OF 3":PRINT +100 FOR I=1 TO 5:PRINT " [";D(I);"]";:NEXT:PRINT:PRINT +110 IF T=3 THEN 150 +120 PRINT "KEEP WHICH POSITIONS? (Q QUITS)";:INPUT K$ +130 IF K$="Q" THEN 270 +140 NEXT +150 FOR I=1 TO 6:C(I)=0:NEXT:SM=0 +160 FOR I=1 TO 5:C(D(I))=C(D(I))+1:SM=SM+D(I):NEXT +170 P=0:TR=0:F=0:FOR I=1 TO 6 +180 IF C(I)=2 THEN P=P+1 +190 IF C(I)=3 THEN TR=1 +200 IF C(I)=4 THEN F=1 +210 IF C(I)=5 THEN F=2 +220 NEXT:SC=SM:N$="HIGH DICE" +230 IF P=1 THEN SC=SM+10:N$="ONE PAIR" +235 IF P=2 THEN SC=SM+25:N$="TWO PAIRS" +240 IF TR THEN SC=SM+30:N$="THREE OF A KIND" +245 IF TR AND P THEN SC=40:N$="FULL HOUSE" +250 IF F=1 THEN SC=60:N$="FOUR OF A KIND" +255 IF F=2 THEN SC=75:N$="FIVE OF A KIND" +257 ST=C(1)*C(2)*C(3)*C(4)*C(5)+C(2)*C(3)*C(4)*C(5)*C(6) +260 IF ST THEN SC=50:N$="STRAIGHT" +265 PRINT N$:PRINT "SCORE";SC:PRINT:PRINT "R=PLAY AGAIN Q=QUIT" +270 GET A$:IF A$="R" THEN RUN +280 IF A$<>"Q" THEN 270 +290 PRINT CHR$(147):END diff --git a/dice-poker/dice-poker.prg b/dice-poker/dice-poker.prg new file mode 100644 index 0000000000000000000000000000000000000000..f9533da2bc205450640c952b7e1eeec29e26d9cd GIT binary patch literal 1102 zcmZvbKZw&%9LIkJha@cya>GsXvL$o>8X*K}8fD1aT4<7Z(Rzba2t%OWNxV7W$fg-{<}QeDiw+>7b;*5Z|bJ zV_q|d$Z+~;d$xm7=sPhphp;Nm5Xj=N+r^G|)IqU5hrZ)PXa#H8Urbho$l#K+U%*a~ zI5CCbUgCuT$0W@73U)o;LA`FwiO9DlRlrf~aGr(ooizqqQVs5+RW>(hNg2aUG^+4H zT7Wp+Rv#puW?sRzYG@T(ZEB`382B!AU>%cG$9q^e*U`(K4AV`kFeCf4x11@jRKKiI z2LAS|U`7onS3f)%Mi9~2B&MZ9-$_SJ;L1}+By-cGazX&sVoC?6-1kx4bUuY4inxlPHSHZcQ6dNpIh zfM(S4Vg^5y?-?R0$&s3oA<1f(A)LW%@h34!yo1#9D2W?84$^D0(D#BigT>;n9DIaP z4mWbL)2I1&!#;NyoGShyh?>cX=9mck@$OJpi+?j}T-SVFRCa}SC45;d6nH}KfCkJ~ zYhtO3r6CqW8~sP4jiv@)i+c(i$dkMVBd>ucu|?)34EB}e!VrV9xZB(gV~4f4E#{7{ z@?zAr*3eqAya2JcC15 THEN C=1 +160 IF A$=" " THEN PRINT CHR$(147):I=80 +170 NEXT:GOTO 80 +220 P=1024+Y*40+X:POKE P,Z:POKE 55296+Y*40+X,C:RETURN +260 POKE 53280,14:POKE 53281,6:PRINT CHR$(147):END diff --git a/kaleidoscope/kaleidoscope.prg b/kaleidoscope/kaleidoscope.prg new file mode 100644 index 0000000000000000000000000000000000000000..6e7a124d15814e5e6919598250855a379b4bd8d4 GIT binary patch literal 572 zcmYk4u}i~16vm&Rkn60gJc2_CMRJ$4HisR;88uj&G>Nw9?5eY)Iw@5L2gOZ6sI)E~ zI0+6e{tFI*yMKjuu`S*Z?)&AtmwfNtjA0rjxWx~Px+`UVgH?ys?MiLDqZJ#3F|Q0J zPS=*-48pZ26;T|R{1*0&MQ!N#nb<@h(|mh7$dXX_O^p343z8OYBvEJCge$|+&NTK# z&}ao6M9~mYGfEKKjrLBM>2i+-)228H(iHtxj$1))!ke)Q_vkP2zIsU0!~xc9_%zlb zk+0S$3(H(c$|p%+j>K?`p``eLb(?qPi}h;J@)PySL(221q)NgP>A~&~BA3h=Jg>P~t7aTmdV11T=GDfqBKReErP-OuRiN(lF4U&&.72):NEXT X,Y +90 G=0 +100 PRINT CHR$(147):FOR Y=0 TO 19:FOR X=0 TO 39:P=1064+Y*40+X:POKE P,32 +110 IF A(X,Y) THEN POKE P,81:POKE 55336+Y*40+X,13 +130 NEXT X,Y:PRINT CHR$(19);"GENERATION";G;" SPACE PAUSES" +140 GET K$:IF K$="Q" THEN 280 +150 IF K$="R" THEN 80 +160 IF K$=" " THEN GOSUB 250 +170 FOR Y=0 TO 19:FOR X=0 TO 39:N=0 +180 FOR DY=-1 TO 1:FOR DX=-1 TO 1 +190 IF DX=0 AND DY=0 THEN 210 +200 XX=X+DX:YY=Y+DY:IF XX>=0 AND XX<=39 AND YY>=0 AND YY<=19 THEN N=N+A(XX,YY) +210 NEXT DX,DY:B(X,Y)=0 +220 IF N=3 OR A(X,Y) AND N=2 THEN B(X,Y)=1 +230 NEXT X,Y:FOR Y=0 TO 19:FOR X=0 TO 39:A(X,Y)=B(X,Y):NEXT X,Y +240 G=G+1:GOTO 100 +250 PRINT:PRINT "PAUSED - SPACE CONTINUES, Q QUITS" +260 GET K$:IF K$="Q" THEN 280 +270 IF K$<>" " THEN 260 +275 RETURN +280 POKE 53280,14:POKE 53281,6:PRINT CHR$(147):END diff --git a/life-lab/life-lab.prg b/life-lab/life-lab.prg new file mode 100644 index 0000000000000000000000000000000000000000..bd58868c1c2528a85101a8051edafcf8e3437d97 GIT binary patch literal 903 zcmZ{j!E4k&6vp3*ha@XrRPdraf`~j+gu4IExX7%fmQ};|OuEJQybId$mNFy%LP&EJDv*<^!u(7sE2Q(D*Q~S-_h3iggtB8$cJb{cvm2-JFdQYTskzi$BI+e9EMa9P9O}"Q" THEN 210 +250 FOR I=0 TO 24:POKE S+I,0:NEXT:PRINT CHR$(147):END +300 DATA A,.-,B,-...,C,-.-.,D,-..,E,.,F,..-. +310 DATA G,--.,H,....,I,..,J,.---,K,-.-,L,.-.. diff --git a/morse-trainer/morse-trainer.prg b/morse-trainer/morse-trainer.prg new file mode 100644 index 0000000000000000000000000000000000000000..dc8ebd9e4cb66bf778ca02a8c83702efe238d5f2 GIT binary patch literal 871 zcmZuvJ#W-N5S?_kPokoZhE)n%T3cSnPQo53jO|>UTzrXlqbO7qsi`PPM=k;cL81et z<5Nfn4F)8nNC-gzqNJdrp@g4+gv6{5PKksI&+N>b-8XM$%Hoy-hxpMI@w_Jwk>TW9 z8`P>mU8iML)Jz_NwoVh2^-HCT3ezgbx=3@>%LR_H*&r_h2D{d@!Syx^rO-h8h1Nx_ z0^C^K*erEmF1us72DDxqP+D!{YO&4Wi50;EOlRZ){TjybDJCJjx6VP`9J$YQ>B;NZ zpK(Rx@wL{#4{HhbuxtcAMiI#yCSA5!0uQBXk~o@=VA@`9VIjeySl&Z5DtSl%<0brT zYv*_rhpiXITttxC7eHlADECm09|&dDympUV;XNk~BLTbi&I$cg*{jk%>*_8WETIUg z*JHA>F0rmiXn15_n$Z5>woy-JGtK9*&r2>mnKy9)Z|o~@fRtjs(IaofYy#iyArNz( zL@iyx#eD0;e0G-DZnbQ4IfUQ#Z37%pBAO)Pgc={hv~w4((Lmeru1mn-XS-YI96yE;M=% z;i2>PgkemdV; z-Y;LUaW5i-Q=MP`Ux3N>UxkGZpW4Ti2R=W~{U8W3 OR P>N THEN PRINT "CHOOSE 1, 2, OR 3.":GOTO 90 +120 N=N-P:IF N=0 THEN PRINT "YOU TOOK THE LAST STICK!":GOTO 210 +130 C=INT(RND(1)*3)+1:IF C>N THEN C=N +150 PRINT "THE COMPUTER TAKES";C:FOR D=1 TO 700:NEXT +160 N=N-C:IF N=0 THEN PRINT "THE COMPUTER WINS.":GOTO 210 +170 PRINT CHR$(147):GOTO 70 +210 PRINT:PRINT "R=PLAY AGAIN Q=QUIT" +230 GET A$:IF A$="R" THEN RUN +240 IF A$<>"Q" THEN 230 +250 PRINT CHR$(147):END diff --git a/nim-challenge/nim-challenge.prg b/nim-challenge/nim-challenge.prg new file mode 100644 index 0000000000000000000000000000000000000000..2429ef898300ff1df31357dc4664c3c5374c9d72 GIT binary patch literal 637 zcmZ8fzi-n(6n-$-o*0z3<&Qr{j3Ez-K?Y-Vfvg0)LlDcaRKK zmT9xCgNFWuUDRr%5p@uEkeBFn1wC^vS@d+6>pQw^0Tq~w zOjY%ohiPi6u9be}_!eB0x~ibe3?n@gv~ps41GOO!cx!~fJKPBAi*t+0=GZ@~(?FUg zj=1b~{q)1xvNG$Ukm;>jih*JM^KL~vU3$u0wGCYD!4EN> zq;(aDK|$Btdvt)J3E4XCg>=__V9%=vA5biN?QZyv6_a6}S7$Sj`?wj>OZOp}#vB#g zhG~@;J7|>>hc){z*R}qTfT5s~Z3S literal 0 HcmV?d00001 diff --git a/programs.json b/programs.json index 143861e..af63b2b 100644 --- a/programs.json +++ b/programs.json @@ -68,6 +68,76 @@ "description": "Watch and control a layered animated starfield.", "controls": ["1", "2", "3", "Q"], "path": "starfield/starfield.prg" + }, + { + "title": "Snake Trail", + "type": "Arcade", + "description": "Guide a growing snake through a field of food and danger.", + "controls": ["W", "A", "S", "D", "Q"], + "path": "snake-trail/snake-trail.prg" + }, + { + "title": "Dice Poker", + "type": "Dice", + "description": "Keep your best dice and chase a winning poker combination.", + "controls": ["1-5", "RETURN", "Q"], + "path": "dice-poker/dice-poker.prg" + }, + { + "title": "Word Scramble", + "type": "Word", + "description": "Unscramble five computer-themed words from helpful clues.", + "controls": ["A-Z", "RETURN", "Q"], + "path": "word-scramble/word-scramble.prg" + }, + { + "title": "Nim Challenge", + "type": "Strategy", + "description": "Outthink the computer in the classic game of twenty-one sticks.", + "controls": ["1", "2", "3", "0"], + "path": "nim-challenge/nim-challenge.prg" + }, + { + "title": "Reaction Timer", + "type": "Reflex", + "description": "Test your reactions across five unpredictable timed rounds.", + "controls": ["ANY KEY", "Q"], + "path": "reaction-timer/reaction-timer.prg" + }, + { + "title": "Morse Trainer", + "type": "Educational", + "description": "Learn Morse letters by reading and hearing their signals.", + "controls": ["A-Z", "RETURN", "Q"], + "path": "morse-trainer/morse-trainer.prg" + }, + { + "title": "Kaleidoscope", + "type": "Demo", + "description": "Grow colorful symmetrical patterns across the character screen.", + "controls": ["SPACE", "C", "Q"], + "path": "kaleidoscope/kaleidoscope.prg" + }, + { + "title": "World Quiz", + "type": "Trivia", + "description": "Take a seven-stop tour of world geography and landmarks.", + "controls": ["1", "2", "3", "Q"], + "path": "world-quiz/world-quiz.prg" + }, + { + "title": "Life Lab", + "type": "Simulation", + "description": "Observe generations of Conway's cellular automaton evolve.", + "controls": ["SPACE", "R", "Q"], + "path": "life-lab/life-lab.prg" + }, + { + "title": "Cipher Wheel", + "type": "Utility", + "description": "Encode and decode secret messages with a Caesar shift.", + "controls": ["E", "D", "N", "Q"], + "path": "cipher-wheel/cipher-wheel.prg" } ] diff --git a/public/app.js b/public/app.js index e2c67c0..08d778b 100644 --- a/public/app.js +++ b/public/app.js @@ -28,7 +28,13 @@ const typeIcons = { Puzzle: '⌘', Music: '♪', Creative: '✎', - Demo: '✦' + Demo: '✦', + Dice: '⚄', + Word: 'Aa', + Reflex: '⚡', + Educational: '⌁', + Trivia: '?', + Utility: '⚒' }; function renderPrograms() { diff --git a/reaction-timer/reaction-timer.bas b/reaction-timer/reaction-timer.bas new file mode 100644 index 0000000..4860afa --- /dev/null +++ b/reaction-timer/reaction-timer.bas @@ -0,0 +1,24 @@ +10 PRINT CHR$(147):PRINT " REACTION TIMER":PRINT +20 PRINT "WAIT FOR NOW! THEN PRESS ANY KEY." +30 PRINT "PRESSING EARLY COSTS THE ROUND.":PRINT +40 PRINT "PRESS ANY KEY TO BEGIN" +50 GET A$:IF A$="" THEN 50 +60 R=RND(-TI):S=0:FOR T=1 TO 5 +70 PRINT CHR$(147):PRINT "ROUND";T;"OF 5":PRINT:PRINT "GET READY..." +80 W=INT(RND(1)*180)+120:FOR D=1 TO W +90 GET A$:IF A$<>"" THEN PRINT "TOO SOON!":RT=300:GOTO 140 +100 NEXT:PRINT CHR$(147):PRINT:PRINT:PRINT " NOW!" +110 T0=TI +120 GET A$:IF A$="Q" THEN 210 +130 IF A$="" THEN 120 +135 RT=TI-T0:IF RT<0 THEN RT=RT+5184000 +140 PRINT:PRINT "TIME:";INT(RT*100/60)/100;"SECONDS" +150 S=S+RT:FOR D=1 TO 700:NEXT:NEXT +160 AV=INT(S*100/300)/100:PRINT CHR$(147):PRINT "AVERAGE:";AV;"SECONDS":PRINT +170 IF AV<.3 THEN PRINT "LIGHTNING FAST!" +180 IF AV>=.3 AND AV<.6 THEN PRINT "SHARP REACTIONS!" +190 IF AV>=.6 THEN PRINT "KEEP PRACTICING!" +200 PRINT:PRINT "R=TRY AGAIN Q=QUIT" +210 GET A$:IF A$="R" THEN RUN +220 IF A$<>"Q" THEN 210 +230 PRINT CHR$(147):END diff --git a/reaction-timer/reaction-timer.prg b/reaction-timer/reaction-timer.prg new file mode 100644 index 0000000000000000000000000000000000000000..c2597234d98df07660768c9804e414b07f22c5f4 GIT binary patch literal 802 zcmY*X&1(}u6o2AncYE>R#f!d9I zM1_Kowv=wnso>QfMX#RwSBUs#W0Jau9TQ&(rinZts{c^_eGuAnL_a1`IFG|NYDMu#f z(IMJA#3QW3O~3tLoI;5;Y=fyb)=AN2jHN}2*BVqRWcI$_g?>IQU6jJ|Nw~$!L*mCMb+X*Ku-Do?mhg&tyIsEb8LJ`vq zE@F*oN!yc<^V1DpKBcq4jBKj3WfvXm$T4%+v)*|SR^T8Z@agbSO&j?AJ+@kuHe^j WYvq^YU89*UD!;dKwcMWr0Qd`?%H1LW literal 0 HcmV?d00001 diff --git a/snake-trail/snake-trail.bas b/snake-trail/snake-trail.bas new file mode 100644 index 0000000..2fb6c77 --- /dev/null +++ b/snake-trail/snake-trail.bas @@ -0,0 +1,34 @@ +10 PRINT CHR$(147):POKE 53280,5:POKE 53281,0 +20 PRINT " SNAKE TRAIL":PRINT +30 PRINT "EAT THE DOTS. AVOID WALLS AND YOUR TAIL." +40 PRINT "W A S D=MOVE Q=QUIT":PRINT:PRINT "PRESS ANY KEY" +50 GET A$:IF A$="" THEN 50 +60 R=RND(-TI):DIM X(900),Y(900):L=4:DX=1:DY=0:S=0 +70 FOR I=1 TO L:X(I)=21-I:Y(I)=12:NEXT:GOSUB 240 +80 PRINT CHR$(147):FOR I=0 TO 39:POKE 1024+I,160:POKE 1984+I,160:NEXT +90 FOR I=1 TO 23:POKE 1024+I*40,160:POKE 1063+I*40,160:NEXT +100 FOR I=1 TO L:POKE 1024+Y(I)*40+X(I),81:NEXT:GOSUB 250 +110 GET A$:IF A$="Q" THEN 330 +120 IF A$="W" AND DY=0 THEN DX=0:DY=-1 +130 IF A$="S" AND DY=0 THEN DX=0:DY=1 +140 IF A$="A" AND DX=0 THEN DX=-1:DY=0 +150 IF A$="D" AND DX=0 THEN DX=1:DY=0 +160 NX=X(1)+DX:NY=Y(1)+DY:IF NX<1 OR NX>38 OR NY<1 OR NY>23 THEN 300 +170 FOR I=1 TO L:IF NX=X(I) AND NY=Y(I) THEN 300 +180 NEXT:E=0:IF NX=FX AND NY=FY THEN E=1 +190 IF E=0 THEN POKE 1024+Y(L)*40+X(L),32 +200 IF E THEN L=L+1:S=S+10 +210 FOR I=L TO 2 STEP -1:X(I)=X(I-1):Y(I)=Y(I-1):NEXT +220 X(1)=NX:Y(1)=NY:POKE 1024+NY*40+NX,81 +230 IF E THEN GOSUB 240:GOSUB 250 +235 PRINT CHR$(19);" SCORE";S;" LENGTH";L;" ":FOR D=1 TO 45:NEXT:GOTO 110 +240 FX=INT(RND(1)*38)+1:FY=INT(RND(1)*23)+1:F=0 +245 FOR J=1 TO L:IF FX=X(J) AND FY=Y(J) THEN F=1 +247 NEXT:IF F THEN 240 +248 RETURN +250 POKE 1024+FY*40+FX,46:POKE 55296+FY*40+FX,7:RETURN +300 PRINT CHR$(147):PRINT "SNAKE CRASHED! SCORE";S:PRINT +310 PRINT "R=REPLAY Q=QUIT" +320 GET A$:IF A$="R" THEN RUN +325 IF A$<>"Q" THEN 320 +330 POKE 53280,14:POKE 53281,6:PRINT CHR$(147):END diff --git a/snake-trail/snake-trail.prg b/snake-trail/snake-trail.prg new file mode 100644 index 0000000000000000000000000000000000000000..d6c648875233611d2febef4bb123251d77f50959 GIT binary patch literal 1227 zcmZuxJ&4p$5S}fB{j0=U#$b_PINnQk_jccTVz?w;?qc>XS-m_v!NST)P{cyF5d6hT zxlZ9k+&$2XTAf%4+SpiYtDudID1zd=B)gvA7I`x}-@ME>^JOYkty+h5e691=tRe1V z+qSyQY?l@{87x%y5J1Dfza(;&JsiYN5Ncu_&Q|v-faeTwu;`)NA0#vA9PbA%t~p_t zpcA<$`^RD&P{xb~530IKSVIRBbmx!uk9&x#^Q*^#0o^Akv=V!X%9FV4Ne#BE7TiZ? zzqn41Ow;fowi$e`9)vjC*2jau5LYnOdyE;T%nuP}E#ama7p}~hNHPYyYd&1YAmg}! zp-A<>$Sgh%gj5!{#8BKstHr>tt^93>N??>=_oySBS*=lE@(xo@uRC#uaISV@dbedy zp_?r>L9>oM3MT##HfpD)3E>27)n;~iQ4tY+Q9HAf{;J|{+YCO`&O_0WH4Pu5 zVoDKW%@pe~hhMc}2}u3};IOxTql`OwoHC0G#zo)YQ2kB`aQ_9A@r(6)5T#kFb7SPD zB9fWRO-YlA(x)7s(6MEA)hP>CZdtafpE1~|k9IUcWzbE5K~(aK$SQEJ>d#;(Jff9j z{Io#$lHy**;Zyx3RY`I3%PC1cEL#~GrftFR`WpoyK$wLiPJ&2AoWX&{yS##sMr`3D zB;L6&=rQI-Aq|>}vWE~i-h*PAMJYwpDJPSQq?%il($wH|<74@%Tu(|>G{XmtFNLal z#+-)9LO=Gjxr9s%z39kbQJV{ugPOREZm!W*n*?wbIhFag@fG|ud#-QOYd7t#K@5C3 z@hv;|N#frc--ymqDe>z_IjO#+8cJxXtcU1R!*(^lQ$s0EzLI>S`2%jjZ1X3S?elX! zermQlM6unrdY#eqzgck$PBzWTbZgKDTdahI*hv;Wci)sBZHEiZ4k5L8KK52ZM@~O< yxZONl+3``wO4Zk3qv=(Yrk`$Uh0ZMoZ<lzZzE0Q>>WXJIe^ literal 0 HcmV?d00001 diff --git a/word-scramble/word-scramble.bas b/word-scramble/word-scramble.bas new file mode 100644 index 0000000..fad0da4 --- /dev/null +++ b/word-scramble/word-scramble.bas @@ -0,0 +1,30 @@ +10 PRINT CHR$(147):PRINT " WORD SCRAMBLE":PRINT +20 PRINT "UNSCRAMBLE FIVE C64 WORDS.":PRINT "TYPE Q TO QUIT.":PRINT +30 PRINT "PRESS ANY KEY" +40 GET A$:IF A$="" THEN 40 +50 R=RND(-TI):DIM W$(12),H$(12),U(12),P(20) +60 FOR I=1 TO 12:READ W$(I),H$(I):NEXT:S=0 +70 FOR T=1 TO 5 +80 N=INT(RND(1)*12)+1 +85 IF U(N) THEN 80 +90 U(N)=1:L=LEN(W$(N)):FOR I=1 TO L:P(I)=I:NEXT +100 FOR I=1 TO L:J=INT(RND(1)*L)+1:X=P(I):P(I)=P(J):P(J)=X:NEXT +110 A$="":FOR I=1 TO L:A$=A$+MID$(W$(N),P(I),1):NEXT +120 IF A$=W$(N) THEN 100 +130 PRINT CHR$(147):PRINT "WORD";T;"OF 5":PRINT:PRINT " ";A$:PRINT +140 PRINT "HINT: ";H$(N):PRINT:INPUT "YOUR ANSWER";G$ +150 IF G$="Q" THEN 230 +160 IF G$=W$(N) THEN PRINT "CORRECT!":S=S+1:GOTO 190 +170 PRINT "THE WORD WAS ";W$(N) +190 FOR D=1 TO 700:NEXT:NEXT +200 PRINT CHR$(147):PRINT "FINAL SCORE";S;"OUT OF 5":PRINT +210 PRINT "R=PLAY AGAIN Q=QUIT" +230 GET A$:IF A$="R" THEN RUN +240 IF A$<>"Q" THEN 230 +250 PRINT CHR$(147):END +300 DATA COMMODORE,THE COMPANY,JOYSTICK,GAME CONTROLLER +310 DATA SPRITE,MOVING GRAPHIC,CASSETTE,TAPE STORAGE +320 DATA FLOPPY,DISK TYPE,KEYBOARD,TYPING DEVICE +330 DATA MONITOR,VIDEO DISPLAY,PROGRAM,LIST OF COMMANDS +340 DATA MEMORY,COMPUTER STORAGE,CURSOR,SCREEN MARKER +350 DATA MODEM,PHONE CONNECTION,PIXEL,TINY PICTURE DOT diff --git a/word-scramble/word-scramble.prg b/word-scramble/word-scramble.prg new file mode 100644 index 0000000000000000000000000000000000000000..a24a9dc7f2503d4b8f810dc3d3ed2eed937420af GIT binary patch literal 1063 zcmY*YF^tqk6#Ymkyk62pqKiJ(7Pc56dpVB88zcsMc6avd8Q;wK?iMMjD5FT}qEz8f z0)!N)5LX~2QY54U3LK?K5NT2*N)@Fs|Nk5bP6Qzw z;O}v^aVE(RFv9h3SDO-TVR(JM5>b8t7lU^Q8MSJCh*P;Eu-M!{kF_TWgppe|0=Lm= z+-{}wXYhIOt|vA|Sc_aOaZ4;C_%?{)d*q}1Iz755!rQo!!q34NO!pwZ<7AS5g}b9T z8z*eO`fK~3iN|RIkAn~363Q;aA21u|S3FeqNFwg%woBokU`i0zLr%kspaIqW6hDZw z*nAS=&in%l43qO{BxznJd z*neYIzU|S(O(H$T)70tJ{Gtgp^#I-qzwuq4OXYHmCe%Vj1J1w1XsKI6bFjO@M3dPF zj)gZ!YeqxZ_EQ+2N`Z&pt&Z06l&R3hh{7F@sJWJmUc>DD6g~_Oy^NcSehYAyTT<(3 z@M-ufwW;g}a3)P@Ecl1Gd!~(uCYG$U4*#@nwu^1F*^EDuTzSeHFK?clZwVFwPKCj T6BToku4p3**BXJPb^!1aV_+Ww literal 0 HcmV?d00001 diff --git a/world-quiz/world-quiz.bas b/world-quiz/world-quiz.bas new file mode 100644 index 0000000..c199750 --- /dev/null +++ b/world-quiz/world-quiz.bas @@ -0,0 +1,35 @@ +10 PRINT CHR$(147):PRINT " WORLD QUIZ":PRINT +20 PRINT "ANSWER SEVEN QUESTIONS ABOUT OUR WORLD." +30 PRINT "PRESS 1, 2, OR 3. Q=QUIT.":PRINT +40 PRINT "PRESS ANY KEY" +50 GET A$:IF A$="" THEN 50 +60 R=RND(-TI):DIM Q$(10),A$(10),B$(10),C$(10),K(10),U(10) +70 FOR I=1 TO 10:READ Q$(I),A$(I),B$(I),C$(I),K(I):NEXT:S=0 +80 FOR T=1 TO 7 +85 N=INT(RND(1)*10)+1:IF U(N) THEN 85 +90 U(N)=1:PRINT CHR$(147):PRINT "QUESTION";T;"OF 7":PRINT +100 PRINT Q$(N):PRINT:PRINT "1. ";A$(N):PRINT "2. ";B$(N):PRINT "3. ";C$(N) +110 GET X$:IF X$="" THEN 110 +120 IF X$="Q" THEN 230 +130 IF VAL(X$)<1 OR VAL(X$)>3 THEN 110 +140 IF VAL(X$)=K(N) THEN PRINT:PRINT "CORRECT!":S=S+1:GOTO 160 +150 PRINT:PRINT "NOT THIS TIME. ANSWER";K(N) +160 FOR D=1 TO 700:NEXT:NEXT +170 PRINT CHR$(147):PRINT "FINAL SCORE";S;"OUT OF 7":PRINT +180 IF S=7 THEN PRINT "PERFECT WORLD TOUR!" +190 IF S>=4 AND S<7 THEN PRINT "SEASONED TRAVELLER!" +200 IF S<4 THEN PRINT "ANOTHER JOURNEY AWAITS." +210 PRINT:PRINT "R=PLAY AGAIN Q=QUIT" +230 GET X$:IF X$="R" THEN RUN +240 IF X$<>"Q" THEN 230 +250 PRINT CHR$(147):END +300 DATA WHICH OCEAN IS LARGEST?,ATLANTIC,PACIFIC,INDIAN,2 +310 DATA CAPITAL OF CANADA?,TORONTO,VANCOUVER,OTTAWA,3 +320 DATA THE NILE FLOWS THROUGH?,EGYPT,SPAIN,INDIA,1 +330 DATA MOUNT FUJI IS IN?,CHINA,JAPAN,NEPAL,2 +340 DATA BRAZIL SPEAKS MAINLY?,SPANISH,PORTUGUESE,FRENCH,2 +350 DATA SAHARA IS A?,RIVER,FOREST,DESERT,3 +360 DATA CAPITAL OF DENMARK?,AARHUS,ODENSE,COPENHAGEN,3 +370 DATA MACHU PICCHU IS IN?,PERU,MEXICO,CHILE,1 +380 DATA THE ALPS ARE IN?,EUROPE,AFRICA,ASIA,1 +390 DATA NEW ZEALAND LIES IN?,PACIFIC,ARCTIC,ATLANTIC,1 diff --git a/world-quiz/world-quiz.prg b/world-quiz/world-quiz.prg new file mode 100644 index 0000000000000000000000000000000000000000..f608ac5fc6f6385fb2114f99dd412fd69c8193e4 GIT binary patch literal 1347 zcmYjR&u<$=7@gkyBfTMngg{?cIoM)kd6Tq3HdXq0J@!t#nc2+D#&M81ao_|JCk~Z> zAQct3f|MIbh)OLI#DP;qZwRjCA3);3wOrxE8*kFYhZ)b#_ujtuzR$kac&*VAC-hq< z-P-OBPAH)(pSg9#nD#4ulnhS9n~fJxnXvJ5<;bf8WpJl_(AIe3k*xyR%FzndOT>qb zS7UwYl=qZM+K^-&ZT4vYHYh_ca(>z9T-LBz&`d27@u;yOz9C*8e2!(AB=mr8_QhX~ zH-uY0?mP;*JGe*t>z%aUm0WM5dduoJ<(vU|4~| zI>RzJ9{6QntT#(w!V0r3vSuaB^5@RuPTKt*ln+w~t2(9&U9aC1?=_D^JS|h?cNyeG zG|4aw6FZ^p==VYMZTN)(gRo=VX^)a2Jj6348}S59^$AfWLufNy@uc}K5;=^C9G)kV zrhW0W`GKgP?8lHcHv8gP^B9kQ?HsOm&rF+X#52^~J^Qat2~NUdhO;b1Dlr z64>|fcc0Q*eKBf%C05tQ1`4_M6!f0zQ9T05FfxdP*4M~tTxZqqBf(>F+KAVZ? zwg0{vxQp?ACPwXlKz_J>cA7j7e82tQrPq(d{kFXJ3C(kzVT*aPR54Eyd#5k)&wgL*krakP)^zqU_)+-XYD({ zz#kc1D4G;@juz$4R?~b(s_CK((wFd6zec9w<+WWP_H1PWO{!fT#c8u6vm70gyIewx zQ6(2pw zr=#u(+V6uLquK??KV5qVg;y+(mDyuALrm=Q%1es}V9so*OwLnf0Qz(7{pf(RyrNQP zaXa^b$*JU?I@FnsehLM@?dx|@9TVcBgcPS%c2(uTDS6^_#*)2e)ZV#%54A?k=}0l! WG^RqUI-ZMevCCrfo_8@7Li`Ws_+g;{ literal 0 HcmV?d00001