From f5c2c05b402f1130d7bbcda9afe623b43da7b11d Mon Sep 17 00:00:00 2001 From: Christian Johannesen Date: Wed, 7 Oct 2026 20:03:59 +0200 Subject: [PATCH] Add first C64 BASIC program collection --- README.md | 48 ++++++++++++++++++++++++++++++ code-breaker/code-breaker.bas | 23 ++++++++++++++ code-breaker/code-breaker.prg | Bin 0 -> 769 bytes lunar-lander/lunar-lander.bas | 20 +++++++++++++ lunar-lander/lunar-lander.prg | Bin 0 -> 715 bytes memory-matrix/memory-matrix.bas | 25 ++++++++++++++++ memory-matrix/memory-matrix.prg | Bin 0 -> 923 bytes meteor-dodge/meteor-dodge.bas | 25 ++++++++++++++++ meteor-dodge/meteor-dodge.prg | Bin 0 -> 824 bytes music-box/music-box.bas | 23 ++++++++++++++ music-box/music-box.prg | Bin 0 -> 743 bytes pixel-painter/pixel-painter.bas | 17 +++++++++++ pixel-painter/pixel-painter.prg | Bin 0 -> 534 bytes robot-maze/robot-maze.bas | 33 ++++++++++++++++++++ robot-maze/robot-maze.prg | Bin 0 -> 953 bytes starfield/starfield.bas | 16 ++++++++++ starfield/starfield.prg | Bin 0 -> 566 bytes stock-trader/stock-trader.bas | 25 ++++++++++++++++ stock-trader/stock-trader.prg | Bin 0 -> 888 bytes submarine-hunt/submarine-hunt.bas | 27 +++++++++++++++++ submarine-hunt/submarine-hunt.prg | Bin 0 -> 975 bytes 21 files changed, 282 insertions(+) create mode 100644 README.md create mode 100644 code-breaker/code-breaker.bas create mode 100644 code-breaker/code-breaker.prg create mode 100644 lunar-lander/lunar-lander.bas create mode 100644 lunar-lander/lunar-lander.prg create mode 100644 memory-matrix/memory-matrix.bas create mode 100644 memory-matrix/memory-matrix.prg create mode 100644 meteor-dodge/meteor-dodge.bas create mode 100644 meteor-dodge/meteor-dodge.prg create mode 100644 music-box/music-box.bas create mode 100644 music-box/music-box.prg create mode 100644 pixel-painter/pixel-painter.bas create mode 100644 pixel-painter/pixel-painter.prg create mode 100644 robot-maze/robot-maze.bas create mode 100644 robot-maze/robot-maze.prg create mode 100644 starfield/starfield.bas create mode 100644 starfield/starfield.prg create mode 100644 stock-trader/stock-trader.bas create mode 100644 stock-trader/stock-trader.prg create mode 100644 submarine-hunt/submarine-hunt.bas create mode 100644 submarine-hunt/submarine-hunt.prg diff --git a/README.md b/README.md new file mode 100644 index 0000000..4575e4d --- /dev/null +++ b/README.md @@ -0,0 +1,48 @@ +# C64 BASIC Collection + +Ten 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. + +## Programs + +| Program | Type | Controls | Description | +| --- | --- | --- | --- | +| [Meteor Dodge](meteor-dodge/meteor-dodge.bas) | Arcade | `A`, `D`, `Q` | Dodge falling meteors and build your score. | +| [Code Breaker](code-breaker/code-breaker.bas) | Logic | Digits, `Q` | Deduce a four-digit secret in ten guesses. | +| [Submarine Hunt](submarine-hunt/submarine-hunt.bas) | Strategy | Coordinates, `Q` | Find three hidden submarines with limited sonar shots. | +| [Lunar Lander](lunar-lander/lunar-lander.bas) | Simulation | `0`-`9`, `Q` | Choose engine burns and touch down gently. | +| [Memory Matrix](memory-matrix/memory-matrix.bas) | Memory | `1`-`4`, `Q` | Repeat a growing sequence of flashing quadrants. | +| [Robot Maze](robot-maze/robot-maze.bas) | Puzzle | `W`, `A`, `S`, `D`, `Q` | Navigate a freshly generated maze to its exit. | +| [Music Box](music-box/music-box.bas) | Music | `A`-`K`, `1`-`3`, `Q` | Play the SID chip as a small computer keyboard. | +| [Pixel Painter](pixel-painter/pixel-painter.bas) | Creative | Cursor keys, Space, `C`, `Q` | Draw character-cell pictures on the screen. | +| [Stock Trader](stock-trader/stock-trader.bas) | Simulation | `B`, `S`, `W`, `Q` | Trade a volatile stock over twenty market days. | +| [Starfield](starfield/starfield.bas) | Demo | `1`-`3`, `Q` | Watch and control a layered animated starfield. | + +## Running the programs + +Each directory contains an editable, line-numbered `.bas` listing and a matching +tokenized `.prg` file. The PRGs use the normal C64 BASIC load address, `$0801`. + +On a Commodore 64, transfer a PRG to disk or another supported medium, then use: + +```text +LOAD"METEOR-DODGE.PRG",8 +RUN +``` + +Substitute the filename and device number as needed. In VICE or another C64 +emulator, drag a PRG into the emulator window or use its autostart command. + +## Source format + +The `.bas` files are plain ASCII for comfortable reading and editing on a modern +computer. They use uppercase BASIC V2 keywords and avoid embedded control-code +glyphs. Their corresponding `.prg` files contain the tokenized PETSCII program +that the C64 loads directly. + +All programs are self-contained and designed for an ordinary PAL or NTSC +Commodore 64. Randomized programs seed BASIC's random-number generator from the +machine clock, so every session is different. + diff --git a/code-breaker/code-breaker.bas b/code-breaker/code-breaker.bas new file mode 100644 index 0000000..0453124 --- /dev/null +++ b/code-breaker/code-breaker.bas @@ -0,0 +1,23 @@ +10 PRINT CHR$(147):PRINT " CODE BREAKER":PRINT +20 PRINT "GUESS THE FOUR DIFFERENT DIGITS.":PRINT "RIGHT PLACE = HIT, WRONG PLACE = NEAR":PRINT +30 PRINT "PRESS ANY KEY":GET A$:IF A$="" THEN 30 +35 R=RND(-TI) +40 DIM C(4),G(4),U(9):FOR I=1 TO 4 +50 C(I)=INT(RND(1)*10):IF U(C(I)) THEN 50 +60 U(C(I))=1:NEXT:PRINT CHR$(147) +70 FOR T=1 TO 10:PRINT "GUESS";T;"OF 10 (OR Q)";:INPUT G$ +80 IF G$="Q" THEN 190 +90 IF LEN(G$)<>4 THEN PRINT "ENTER FOUR DIGITS.":GOTO 70 +100 FOR I=1 TO 4:G(I)=ASC(MID$(G$,I,1))-48:IF G(I)<0 OR G(I)>9 THEN PRINT "DIGITS ONLY.":GOTO 70 +110 NEXT:H=0:N=0 +120 FOR I=1 TO 4:IF G(I)=C(I) THEN H=H+1 +130 FOR J=1 TO 4:IF I<>J AND G(I)=C(J) THEN N=N+1 +140 NEXT J,I:PRINT H;"HIT ";N;"NEAR":PRINT +150 IF H=4 THEN PRINT "CODE BROKEN IN";T;"GUESSES!":GOTO 180 +160 NEXT +170 PRINT "THE CODE WAS";:FOR I=1 TO 4:PRINT C(I);:NEXT:PRINT +180 PRINT:PRINT "R=REPLAY Q=QUIT" +190 GET A$:IF A$="R" THEN RUN +200 IF A$<>"Q" THEN 190 +210 PRINT CHR$(147):END + diff --git a/code-breaker/code-breaker.prg b/code-breaker/code-breaker.prg new file mode 100644 index 0000000000000000000000000000000000000000..f0e32996cf525b11bb82258ca21f836e6dc84d74 GIT binary patch literal 769 zcmYjPO^Xvj5G`*rbMoL>$~H(h2AR>wZe|QPW_xBjS!R-+2}?YC_Pi(A4XmK+S;$R6 zP_lxieYL7!MW~uFvYJtXswBGiVRO*x7d() zPs_M3H4CS(<6NRjmX2guVwFiuijl?*l_XNjyrL*oRe6I-k!h7?6%IDzuEY*zs%qkv zF7os=mCLvWedAoVpaX3|<9v*LIcDKYj2q!TeTFf7jkkO_bgqInNBp2t0)9Ch9%Glc zL^HMDh_^+!i^>G}3S02Uxd~maggN9#JP>aKUl7=c+ngY{+df=$@4zZyf^b5VmkPjL zH-TNOYNWuotJM3lsESyTVBjM!G!6xe!aYnIP`U%yr@*kGWg4`7*m3Vu>Jv{JVli(~ zl0ZlwsZRu3$@B!*eE8u$pm{6iVQN`_;oqsZshWWh2d#CYZqo}N-`Bysy@XuKjYYmW zCe3TGWA`CU!p!(#ZhZLbZl8l*q8O_I^=BrV1#r!qP(^Pk8_iLRc@N*!Q>d_K3v-iG zVd6c53HF+b1j!;sej}=BV;oyIMtAUa?GrbsrviFJJ;Q zZ)V-M$5i)h#U%-QrpJ^_RwA+n!DsISOzYd~Xi1kfMjUpABULdt_CCV7lhM|Rr|{eR WMx^4#Vt(e$Kkp|ETwVJP0Q?89 OR B>F THEN PRINT "INVALID BURN.":GOTO 60 +90 F=F-B:V=V+2-B*.45:H=H-V:T=T+1 +100 FOR I=1 TO 12:PRINT:PRINT TAB(19);"*":NEXT +110 IF H>0 THEN 50 +120 PRINT CHR$(147):PRINT "TOUCHDOWN SPEED";INT(ABS(V)*10)/10:PRINT +130 IF ABS(V)<=3 THEN PRINT "PERFECT LANDING, COMMANDER!":GOTO 170 +140 IF ABS(V)<=6 THEN PRINT "ROUGH LANDING. THE CREW IS SAFE.":GOTO 170 +150 PRINT "CRASH! A NEW CRATER APPEARS." +170 PRINT:PRINT "R=REPLAY Q=QUIT" +180 GET A$:IF A$="R" THEN RUN +190 IF A$<>"Q" THEN 180 +200 PRINT CHR$(147):END + diff --git a/lunar-lander/lunar-lander.prg b/lunar-lander/lunar-lander.prg new file mode 100644 index 0000000000000000000000000000000000000000..997613f726d9765a6b72153d4f87ab7564a2856d GIT binary patch literal 715 zcmY*XF>ljA6n<>B=g!sZse=P;xJ#OrICMBW=i0)xo%7jM7?_xu7#Q0~3{WICL>43j z2q|d=aR7;hmHrC;1}k@t2-L&L_ul*Nec$)q4eOTWz!ZPFZ114uO_AXGOUjf>On5pJ zl6X^?SR1;M2p&YJN||C1WmzH6H~$n>hW)m#Lt-Gv6&AS=L+oOvUlB!Nk|v!?eLVr1%;AMZY;iozri{X~mOx*w~?^KEr(qr}lja>u~OC71gXW_b=Le zJuj-Gd8Os38G|?WLpZ~@X80air!nXq>$e8vCh;b4X+P5Kq6O70dK7-yPp+v~Ss6sb z>?B=TZ6tqltJYdIY&a8*H?d{iUD3>i3`L-txyI?y4hGrraWmsBLz*2>$eb5z)cy)3 zv+^kVi)o{Z1O`%^U|e9qL(%9p(8taz<7*&!5p5yIRM+T>5)yfy3oi8*z)NQa%_hi0 tDe{Dm5l4r{b^;%qFaIxtG~4hTzB@lOA-=s_kdcX)NnANs|GYQ_fIm1R!u9|F literal 0 HcmV?d00001 diff --git a/memory-matrix/memory-matrix.bas b/memory-matrix/memory-matrix.bas new file mode 100644 index 0000000..39374f6 --- /dev/null +++ b/memory-matrix/memory-matrix.bas @@ -0,0 +1,25 @@ +10 PRINT CHR$(147):PRINT " MEMORY MATRIX":PRINT +20 PRINT "WATCH THE NUMBERS, THEN REPEAT THEM.":PRINT "THE PATTERN GROWS EVERY ROUND." +25 PRINT:PRINT "PRESS ANY KEY" +30 GET A$:IF A$="" THEN 30 +35 R=RND(-TI) +40 DIM S(30):L=1:FOR I=1 TO 30:S(I)=INT(RND(1)*4)+1:NEXT +50 PRINT CHR$(147):PRINT "ROUND";L:FOR I=1 TO L:GOSUB 130:NEXT +60 FOR D=1 TO 250:NEXT:PRINT CHR$(147) +70 FOR I=1 TO L:PRINT "STEP";I;" (1-4, Q QUITS)"; +80 GET A$:IF A$="" THEN 80 +90 IF A$="Q" THEN 180 +100 IF VAL(A$)<>S(I) THEN PRINT:PRINT "WRONG! SCORE";L-1:GOTO 170 +110 PRINT A$:NEXT:L=L+1:IF L<=30 THEN 50 +120 PRINT "AMAZING! YOU COMPLETED ALL 30.":GOTO 170 +130 PRINT CHR$(147):PRINT:PRINT:PRINT +140 IF S(I)=1 THEN PRINT " 1111":PRINT " 1111" +145 IF S(I)=2 THEN PRINT " 2222":PRINT " 2222" +150 IF S(I)=3 THEN PRINT:PRINT:PRINT " 3333":PRINT " 3333" +155 IF S(I)=4 THEN PRINT:PRINT:PRINT " 4444":PRINT " 4444" +160 FOR D=1 TO 220:NEXT:PRINT CHR$(147):FOR D=1 TO 60:NEXT:RETURN +170 PRINT:PRINT "R=REPLAY Q=QUIT" +180 GET A$:IF A$="R" THEN RUN +190 IF A$<>"Q" THEN 180 +200 PRINT CHR$(147):END + diff --git a/memory-matrix/memory-matrix.prg b/memory-matrix/memory-matrix.prg new file mode 100644 index 0000000000000000000000000000000000000000..be798cfd841c40f5bf3f4e2519f84ee9122f3ba5 GIT binary patch literal 923 zcmZWozi-n(6n<=WEWyG819}`8Y$%nTq!c++=tz#%!oPBM8q%c;BVt2BVt{5qDg^{W zLPRVeAt71@>Hte6whAWx3jPZg-r2e)fj9Ws@4oNd`|gMk!LkbM+oA5*(R=q&&}sjB!;a zgAB#Gpo}u<$K6E+FO5?$R=`w>EJGd-@rD>O_-LGgcgXAh4m}FS@B=no_-32~Ssd7V zdEmfr!-hwg*-h8+!@~2oFep5HPdGob1E=_EAK0Grspaf?{s>N(jky-f0$4jdqJ{ob z^oTox^X3)U!fu(Yu|yH7ubK_4o7d^6x+hd+XSqmOJ7_bsy^E~{>|w7Tr5>N<)#0F7hy>3DI(@RL5(hnX&kE zEnKZVp>oO*da9DC96Yjet6Cmq0G`)gXhLJ2pmEwa$mSC01MN!y9M)dxgw1LeYSbFj zB%4c82H>>yMw43qlQdcT7TH`9eV}~_fUfm+Duu?Z6i7FfLN2N3GuX6tD_`c(t)J6vJOqHh_ju)q literal 0 HcmV?d00001 diff --git a/meteor-dodge/meteor-dodge.bas b/meteor-dodge/meteor-dodge.bas new file mode 100644 index 0000000..a3a4383 --- /dev/null +++ b/meteor-dodge/meteor-dodge.bas @@ -0,0 +1,25 @@ +10 PRINT CHR$(147):POKE 53280,0:POKE 53281,0 +20 PRINT " METEOR DODGE":PRINT:PRINT " A=LEFT D=RIGHT Q=QUIT" +25 PRINT:PRINT " PRESS ANY KEY" +30 GET A$:IF A$="" THEN 30 +35 R=RND(-TI) +40 DIM X(5),Y(5):FOR I=1 TO 5:X(I)=INT(RND(1)*38)+1:Y(I)=-I*4:NEXT +50 P=20:S=0:L=3:PRINT CHR$(147) +60 GET A$:IF A$="A" AND P>1 THEN P=P-1 +70 IF A$="D" AND P<38 THEN P=P+1 +80 IF A$="Q" THEN 190 +90 FOR I=1 TO 5:IF Y(I)>=0 THEN POKE 1024+Y(I)*40+X(I),32 +100 Y(I)=Y(I)+1:IF Y(I)>22 THEN Y(I)=0:X(I)=INT(RND(1)*38)+1:S=S+1 +110 IF Y(I)=22 AND ABS(X(I)-P)<2 THEN L=L-1:Y(I)=0:X(I)=INT(RND(1)*38)+1 +120 IF Y(I)>=0 THEN POKE 1024+Y(I)*40+X(I),42:POKE 55296+Y(I)*40+X(I),8 +125 NEXT +130 POKE 1024+22*40+P,1:POKE 55296+22*40+P,1 +140 PRINT CHR$(19);" SCORE";S;" SHIELDS";L;" " +150 FOR D=1 TO 55:NEXT:POKE 1024+22*40+P,32 +160 IF L>0 THEN 60 +170 PRINT CHR$(147):PRINT "FINAL SCORE:";S:PRINT +180 PRINT "R=REPLAY Q=QUIT" +190 GET A$:IF A$="R" THEN RUN +200 IF A$<>"Q" THEN 190 +210 POKE 53280,14:POKE 53281,6:PRINT CHR$(147):END + diff --git a/meteor-dodge/meteor-dodge.prg b/meteor-dodge/meteor-dodge.prg new file mode 100644 index 0000000000000000000000000000000000000000..1df135b0a80c3502325a084107346a128537af13 GIT binary patch literal 824 zcmZ`&zl+pR5FWcEXCv6y$nd-(fi2#9N!Go$ZV^oOE*NjK$qKg?R+eI`2!gkTg{Q5@ z3W9=gu)A>VTeUf`)ym@j2EoREL2%wC?w)X_7$)=co0;!ju$bk*7{9tAxbCS#41L++ z4PI-a!Qq~DnF1Kr-|b|O^a_l7@pi)0SQ%H;$&&5>G42%U_6{liPXA6iVDQMg0#!&} zBxQ-w?htP!Lk6#`tMDG9O?5y*Gloa#b9iH2gF>IU(?RONspZ0R+;c;(F(je(G1US; zV5s)o)YG5b6IXaMzvWGY8XC(qods$Hzbpy4mRyyZt4#ZZu$m4o+BeQNjTjzdJ{QzG z*ZEX{Yj>f-6E9s0zg77r0@`+7`}zi~*y8ZOz6)zm2WUXdH7D;O3NC|*G0Xx!F?buk zgd_VtERh;PsOuCdDP?Kr=ZseBlG^{UA5!~e5QQJ(XV(;+=H9|2XF8kKOE{+lFz0cd z{C{|XG$#+`R`XxjEpVNuFoK>lf_f||%}{wmtTI*>c;dXQ*tF%f8J0JDMZ(%8saWo$ zNfwu^otZym@YZ=v>x-+KhH6CBmRtK zjp3*B(Qvis6iJ>%!!;3qJ73P8zA!g@0hczuQT=FhF=wl*h8w3eX!Q(4uzCm06^+z0 G0Qdvob>@2j literal 0 HcmV?d00001 diff --git a/music-box/music-box.bas b/music-box/music-box.bas new file mode 100644 index 0000000..68f50c2 --- /dev/null +++ b/music-box/music-box.bas @@ -0,0 +1,23 @@ +10 PRINT CHR$(147):PRINT " MUSIC BOX":PRINT +20 PRINT "PLAY NOTES WITH A S D F G H J K":PRINT "1=SQUARE 2=SAW 3=TRIANGLE Q=QUIT":PRINT +30 S=54272:FOR I=0 TO 24:POKE S+I,0:NEXT:POKE S+5,9:POKE S+6,240:POKE S+24,15 +40 W=65:DIM F(8):F(1)=4291:F(2)=4817:F(3)=5407:F(4)=5730 +45 F(5)=6434:F(6)=7217:F(7)=8103:F(8)=8581 +50 GET A$:IF A$="" THEN 50 +60 IF A$="Q" THEN 160 +70 IF A$="1" THEN W=65:PRINT "SQUARE WAVE":GOTO 50 +80 IF A$="2" THEN W=33:PRINT "SAW WAVE":GOTO 50 +90 IF A$="3" THEN W=17:PRINT "TRIANGLE WAVE":GOTO 50 +100 N=0:IF A$="A" THEN N=1 +105 IF A$="S" THEN N=2 +110 IF A$="D" THEN N=3 +115 IF A$="F" THEN N=4 +120 IF A$="G" THEN N=5 +125 IF A$="H" THEN N=6 +130 IF A$="J" THEN N=7 +135 IF A$="K" THEN N=8 +140 IF N=0 THEN 50 +145 POKE S,F(N)-INT(F(N)/256)*256:POKE S+1,INT(F(N)/256):POKE S+4,W +150 FOR D=1 TO 80:NEXT:POKE S+4,W-1:GOTO 50 +160 FOR I=0 TO 24:POKE S+I,0:NEXT:PRINT CHR$(147):END + diff --git a/music-box/music-box.prg b/music-box/music-box.prg new file mode 100644 index 0000000000000000000000000000000000000000..51f5447024113102f147832ac929ad7660e27190 GIT binary patch literal 743 zcmZvaF^kkd6vv-kW(q4iL7u@PkqDW|Op*(35#7yh?#|rpW!LD{Hdkn4BZA;vp@=pj zDBGPN2%a_rVkdTf0>6QUogcu)m&|x<;S@7}e)FHl<3I0=ciH2x!ta4lSy-&l$F+51 z+1A(b+RiP%SiwW@92x!H?eaD@JBvw+UA>rLi7k$?!YR&h6Sv5Tz8JOhWw|#&Icm!e zlhIo4oxl6p!g$)W)`I|)D(c`He+`E?HiD)j|2GwMaUyJ_Klw4;|7Utm JXZkS!`~`Md$Or%c literal 0 HcmV?d00001 diff --git a/pixel-painter/pixel-painter.bas b/pixel-painter/pixel-painter.bas new file mode 100644 index 0000000..80e62c3 --- /dev/null +++ b/pixel-painter/pixel-painter.bas @@ -0,0 +1,17 @@ +10 PRINT CHR$(147):POKE 53280,11:POKE 53281,0 +20 PRINT "PIXEL PAINTER - CURSORS MOVE, SPACE DRAWS":PRINT "C=CLEAR Q=QUIT":PRINT "PRESS ANY KEY" +30 GET A$:IF A$="" THEN 30 +40 PRINT CHR$(147):X=20:Y=12:D=1 +50 P=1024+Y*40+X:O=PEEK(P):POKE P,160:POKE 55296+Y*40+X,1 +60 GET A$:IF A$="" THEN 60 +70 POKE P,O:NX=X:NY=Y +80 IF ASC(A$)=145 AND Y>0 THEN NY=Y-1 +90 IF ASC(A$)=17 AND Y<24 THEN NY=Y+1 +100 IF ASC(A$)=157 AND X>0 THEN NX=X-1 +110 IF ASC(A$)=29 AND X<39 THEN NX=X+1 +120 IF A$=" " THEN POKE P,160:O=160:GOTO 150 +130 IF A$="C" THEN PRINT CHR$(147):O=32:GOTO 50 +140 IF A$="Q" THEN 180 +150 X=NX:Y=NY:GOTO 50 +180 POKE 53280,14:POKE 53281,6:PRINT CHR$(147):END + diff --git a/pixel-painter/pixel-painter.prg b/pixel-painter/pixel-painter.prg new file mode 100644 index 0000000000000000000000000000000000000000..1e67629586bc79767076618c9578423bf33e6d63 GIT binary patch literal 534 zcmZ9KJxjwt7{?#CTvwgtAr?#_!rkSiZLmW~Qz+IXOoxBd9g8=p$yoWyObVyknl$vJ zn}o`V>!c;Ss_2hz6uMmuTZNcDE@2$$*x>k Jc?He@;0O5bmJk2{ literal 0 HcmV?d00001 diff --git a/robot-maze/robot-maze.bas b/robot-maze/robot-maze.bas new file mode 100644 index 0000000..4f4f585 --- /dev/null +++ b/robot-maze/robot-maze.bas @@ -0,0 +1,33 @@ +10 PRINT CHR$(147):PRINT " ROBOT MAZE":PRINT +20 PRINT "REACH E. MOVE WITH W A S D.":PRINT "THE MAZE CHANGES EVERY GAME." +25 PRINT:PRINT "PRESS ANY KEY" +30 GET A$:IF A$="" THEN 30 +35 R=RND(-TI) +40 DIM M(19,19):FOR Y=1 TO 19:FOR X=1 TO 19:M(X,Y)=1:NEXT X,Y +50 X=2:Y=2:M(X,Y)=0:FOR I=1 TO 160:D=INT(RND(1)*4):NX=X:NY=Y +60 IF D=0 THEN NX=X+1 +70 IF D=1 THEN NX=X-1 +80 IF D=2 THEN NY=Y+1 +90 IF D=3 THEN NY=Y-1 +100 IF NX<2 OR NX>18 OR NY<2 OR NY>18 THEN 50 +110 X=NX:Y=NY:M(X,Y)=0:NEXT:FOR I=2 TO 18:M(I,2)=0:M(18,I)=0:NEXT:X=2:Y=2 +120 PRINT CHR$(147):FOR J=1 TO 19:FOR I=1 TO 19 +130 IF I=X AND J=Y THEN PRINT "R";:GOTO 160 +140 IF I=18 AND J=18 THEN PRINT "E";:GOTO 160 +150 IF M(I,J) THEN PRINT "#";:GOTO 160 +155 PRINT " "; +160 NEXT:PRINT:NEXT:PRINT "WASD MOVE, Q QUITS" +170 GET A$:IF A$="" THEN 170 +180 NX=X:NY=Y:IF A$="W" THEN NY=Y-1 +190 IF A$="S" THEN NY=Y+1 +200 IF A$="A" THEN NX=X-1 +210 IF A$="D" THEN NX=X+1 +220 IF A$="Q" THEN 280 +230 IF M(NX,NY)=0 THEN X=NX:Y=NY +240 IF X<>18 OR Y<>18 THEN 120 +250 PRINT CHR$(147):PRINT "THE ROBOT FOUND THE EXIT!":PRINT +260 PRINT "R=REPLAY Q=QUIT" +280 GET A$:IF A$="R" THEN RUN +290 IF A$<>"Q" THEN 280 +300 PRINT CHR$(147):END + diff --git a/robot-maze/robot-maze.prg b/robot-maze/robot-maze.prg new file mode 100644 index 0000000000000000000000000000000000000000..47e24c51c349d575a7e8ae40341ca934488eae17 GIT binary patch literal 953 zcmZ8gJ#5oJ6n>Ey{Ih}t1L$#Ou#pw{+|niv9ZYj=T!@p{Y2)jL)EO2A79^U1zp^1A zMFYSjzyAS5J|i&B!j2g8F-GtIe(vC8DluaMHddV1&FgFYt#*G z_^w%S2b&hJI=pK8dnhxGFOXL$Os8SfN*!ru-0vd=a64=40x*RN-9 zts{%uFPCgTO0(3DWG2DVFTy_7GnZs2^ngQ6U(X?4KqC&3-p(OUL3E5*SM{A7S}Y)9 z-P3moiqf%%uW32t6}8IAR;uj~FSzhozeY-aSu1A9hp^I1=Hx0lrT&273C#;Sk05w{QJn4U2u$td731te6EZLVn%2f zkBOjEY}%8<3$t8eJW=jIR)ZVHGwAyR(ndfpNb0#&9PD6cE9@o=_Kk!8hs{@97#VM1 zHiN>+|T4{slIeIdG?}kMrGH!>D^U+%XtI*3b9~5VGT)gF{Y7z0Zv((zC%z9u literal 0 HcmV?d00001 diff --git a/starfield/starfield.bas b/starfield/starfield.bas new file mode 100644 index 0000000..ef46dec --- /dev/null +++ b/starfield/starfield.bas @@ -0,0 +1,16 @@ +10 PRINT CHR$(147):POKE 53280,0:POKE 53281,0 +20 PRINT " STARFIELD":PRINT:PRINT "1=SLOW 2=MEDIUM 3=FAST Q=QUIT" +25 PRINT:PRINT "PRESS ANY KEY" +30 GET A$:IF A$="" THEN 30 +35 R=RND(-TI) +40 DIM X(30),Y(30),Z(30):FOR I=1 TO 30:X(I)=INT(RND(1)*40) +45 Y(I)=INT(RND(1)*24):Z(I)=INT(RND(1)*3)+1:NEXT:V=2:PRINT CHR$(147) +50 FOR I=1 TO 30:P=1024+Y(I)*40+X(I):POKE P,32 +60 X(I)=X(I)+Z(I)*V:IF X(I)>39 THEN X(I)=0:Y(I)=INT(RND(1)*24):Z(I)=INT(RND(1)*3)+1 +70 P=1024+Y(I)*40+X(I):POKE P,46:POKE 55296+Y(I)*40+X(I),Z(I)+10 +80 NEXT +90 GET A$:IF A$="1" THEN V=1 +100 IF A$="2" THEN V=2 +110 IF A$="3" THEN V=3 +120 IF A$<>"Q" THEN 50 +130 POKE 53280,14:POKE 53281,6:PRINT CHR$(147):END diff --git a/starfield/starfield.prg b/starfield/starfield.prg new file mode 100644 index 0000000000000000000000000000000000000000..0cd759b469fc493060dd13bcd6db1088f142e0bc GIT binary patch literal 566 zcmah{ze~eF6n<{GE-o%E@`w%zM7SSmwTBr3O(EE7+O)OpEVwy42x z2tvWtzd-*7{|5)}l3L;*-tckndyn_N_uVZSrcr`1zFExOvgHky1>dF)o!^*4;mBA~ z1tu0w-0|D>Flf|FIhHENytuJ{fXKaOPz$?FMB&x_xP#d8THUZ?!kMuOS!vV`;u!tC z0qzC^6RwRlxJ7?MUMWaT6CY4exHHzFozASsPH4lsVZkN#EkSK(kl|3HyudJJc(3YZ z-wN&Y*_v6*p19NoLN;Mg;J9ncVIdZF!sJNyQm)kJtAijM3N53QQSK(Xi)xwZ3Cfem z5gbm*4rCKGB)adUr}XP+DynLOEJ@{m3gCs*;jcMvML$8AS1Z3XIC@;dD7=ygM({y~ zMf;fcua`3TB!`eY%5#dt7df6&BBul_mrgS3X==7KSEe9JBl!6Q%w7C~%EBjk4glYT CESZ}C literal 0 HcmV?d00001 diff --git a/stock-trader/stock-trader.bas b/stock-trader/stock-trader.bas new file mode 100644 index 0000000..0763604 --- /dev/null +++ b/stock-trader/stock-trader.bas @@ -0,0 +1,25 @@ +10 PRINT CHR$(147):PRINT " STOCK TRADER":PRINT +20 PRINT "MAKE THE MOST MONEY IN 20 DAYS.":PRINT "B=BUY S=SELL W=WAIT Q=QUIT" +25 PRINT:PRINT "PRESS ANY KEY" +30 GET A$:IF A$="" THEN 30 +35 R=RND(-TI) +40 C=1000:N=0:P=50:FOR D=1 TO 20 +50 P=P+INT(RND(1)*21)-10:IF P<5 THEN P=5 +60 PRINT CHR$(147):PRINT "DAY";D;"OF 20":PRINT "PRICE $";P:PRINT "CASH $";C +65 PRINT "SHARES ";N:PRINT "VALUE $";C+N*P +70 PRINT:PRINT "B, S, W, OR Q?" +80 GET A$:IF A$="" THEN 80 +90 IF A$="Q" THEN 180 +100 IF A$="W" THEN 150 +110 IF A$="B" THEN PRINT "HOW MANY";:INPUT Q:IF Q>=0 AND Q*P<=C THEN C=C-Q*P:N=N+Q:GOTO 150 +120 IF A$="S" THEN PRINT "HOW MANY";:INPUT Q:IF Q>=0 AND Q<=N THEN C=C+Q*P:N=N-Q:GOTO 150 +130 PRINT "TRADE NOT POSSIBLE.":FOR T=1 TO 500:NEXT:GOTO 70 +150 NEXT:C=C+N*P:N=0:PRINT CHR$(147):PRINT "MARKET CLOSED.":PRINT "FINAL WEALTH $";C +160 IF C>=1500 THEN PRINT "WALL STREET LEGEND!" +165 IF C>=1000 AND C<1500 THEN PRINT "A SOLID PROFIT." +170 IF C<1000 THEN PRINT "BETTER LUCK NEXT MARKET." +175 PRINT:PRINT "R=REPLAY Q=QUIT" +180 GET A$:IF A$="R" THEN RUN +190 IF A$<>"Q" THEN 180 +200 PRINT CHR$(147):END + diff --git a/stock-trader/stock-trader.prg b/stock-trader/stock-trader.prg new file mode 100644 index 0000000000000000000000000000000000000000..4b1ca6676e9be71fd6df16d02837fd91018b7e1c GIT binary patch literal 888 zcmah{F>ljA6n<=Wva+zC*P}xss_I;bikwF1Vqb_A$3EX(2ti^)9T||27#L_I2Fk#O zl&v5TQc_gafvFNJ9rzXzCba(zTONv=L zY_qgS?@Q%MM}fq3)>ehYK$t!jw*ZE&DBPRAAlb;;N%8-#h({$lm?wt{cHLfOt-FC{ z1IHVfYRqmkc;>2qz1`yQ+Px2z*{pEuQR$uga8(+Yr51-D?xR(yTa>74KON(c=EmCo z3(Ux1cARrO!t78j^MEix9xUiWLrUhE{}Mf-*{nTX(U||yEc2uynXgC|e@GtGro|A- zOkk2)RH-phH?;IOu{t=ziJ;=I7$c2B3Pb35NOgk3Q_5_ z7uih)YxQ{nUKUBJIJ?qXsWBc=;uCp~a$Sle>`wit+NthnsbVp~vn1>K=Zjm_#a#Dc XxBivL#rpD?ovrmr{q#I{&jH{!wZQg6 literal 0 HcmV?d00001 diff --git a/submarine-hunt/submarine-hunt.bas b/submarine-hunt/submarine-hunt.bas new file mode 100644 index 0000000..eb06c11 --- /dev/null +++ b/submarine-hunt/submarine-hunt.bas @@ -0,0 +1,27 @@ +10 PRINT CHR$(147):PRINT " SUBMARINE HUNT":PRINT +20 PRINT "THREE SUBS HIDE IN AN 8 BY 8 SEA.":PRINT "ENTER ROW,COLUMN. YOU HAVE 15 SHOTS.":PRINT +25 R=RND(-TI) +30 DIM S(8,8),F(8,8):FOR I=1 TO 3 +40 R=INT(RND(1)*8)+1:C=INT(RND(1)*8)+1:IF S(R,C) THEN 40 +50 S(R,C)=1:NEXT:H=0 +60 FOR T=1 TO 15:GOSUB 150:PRINT "SHOT";T;" ROW,COLUMN (0,0 QUITS)";:INPUT R,C +70 IF R=0 AND C=0 THEN 210 +80 IF R<1 OR R>8 OR C<1 OR C>8 THEN PRINT "OUTSIDE THE SEA.":GOTO 60 +90 IF F(R,C) THEN PRINT "ALREADY CHECKED.":GOTO 60 +100 F(R,C)=1:IF S(R,C) THEN H=H+1:PRINT "DIRECT HIT!":GOTO 120 +110 PRINT "MISS. SONAR RANGE";:GOSUB 190:PRINT D +120 IF H=3 THEN PRINT "ALL SUBMARINES FOUND!":GOTO 200 +130 NEXT:PRINT "OUT OF SHOTS. THE FLEET ESCAPED." +140 GOTO 200 +150 PRINT CHR$(147):PRINT " 1 2 3 4 5 6 7 8":FOR Y=1 TO 8:PRINT Y;" "; +160 FOR X=1 TO 8:IF F(Y,X)=0 THEN PRINT ". "; +170 IF F(Y,X)=1 AND S(Y,X)=0 THEN PRINT "O "; +180 IF F(Y,X)=1 AND S(Y,X)=1 THEN PRINT "X "; +185 NEXT:PRINT:NEXT:PRINT "SUBS";H;"/3":RETURN +190 D=9:FOR Y=1 TO 8:FOR X=1 TO 8:IF S(Y,X)=1 AND F(Y,X)=0 THEN Q=ABS(Y-R)+ABS(X-C):IF Q"Q" THEN 210 +230 PRINT CHR$(147):END + diff --git a/submarine-hunt/submarine-hunt.prg b/submarine-hunt/submarine-hunt.prg new file mode 100644 index 0000000000000000000000000000000000000000..b98d66acbab5830cbc62f1419b7ee09ff2fa2839 GIT binary patch literal 975 zcmZuvy>HV%6n|`qy|N%7^f+~}g$Z`j5983`YG1HLYBy&aVg@Eg#9WD`jRaCDWkDci z1F2F)g9LS<0#&duz`(==QfDUq1ti`%L8OQb7yJBs@BKdBiQ2iE21ER0II|0;H$;Y$ zUz#s1a~Z_~!#vKIH-xp?NkXzLltLhVPBDxEfl-V+Mi-X~I#R(KgheLeOh}Z;HOo)B z`EuOABFQo2R|PtAn1)G~Dj;mtPJt{BjZqevFshw_dzc!o<(gKf`t#N?DjnR$7JRQ6 z1bt&18jktGHFq7)KlZjsmD2J}+`(BJe%6{WelHzw;Dx0P=j)eX9kZ&PGv{p)6I*dr zY*;&Mvnjr4*p`jGJjzm&wY|GYox!hnU=w9&<4g4E+`*<}!=3tyy4`p170NxAPQQBg z>3IjKf0AdZaw-eSx5}UmoVQ`Sex2$%e>fA6cctJ#fqp3bD{^n71nZ;rVUJ!m{S-$zAQ)!>At9R2ViQe#2_qNW1hU* zRk@C1PqCBaaZojE+BRg`00wFpsllW(iLlbt=?amdNPWJdNW%^70c@ZudaOP9cexyF zVhd++4(D+JT}A;HRU$4mFDL`nhPT>N3aUT3Rvr~r->eKL0u2Q@(snEJst*q3ksiY& z3IqD<|6-i6+`ht`*54^vv?0`4Ej4S0ZFZr>yoYd0{{TUGaf;zIsmVY!dx~GLJTQup zGV2euHJq?^MbMmtNKS6VBadJ_apr?4Ao4zD8)*b7l^$@wQdZa>tEp+@)@e- hGbNLZ%J0K_{fNZynf*Q1Q#We!zUV*x+Pek-zX2(63vd7c literal 0 HcmV?d00001