Files
akbasic/examples/breakout/sprites/art/element_purple_polygon_glossy.png

5 lines
1.4 KiB
Plaintext
Raw Normal View History

Add two Breakout examples and the tutorials that build them Two complete games in `examples/breakout/`, both 100% BASIC: `characters/` draws its wall in the text grid with two `DATA` sprites for the ball and paddle, and `sprites/` loads CC0 artwork and captures its whole screen with `SSHAPE`/`SPRSAV`. They take opposite shapes for reasons that are entirely this interpreter's, which is what the chapters are for. `docs/17-tutorial-breakout.md` and `docs/18-tutorial-breakout-artwork.md` build each one a step at a time, and end in a checklist of the rules a real program runs into: create every name before the loop starts, write a text row whole, loop with `GOTO` rather than `DO`, put the float on the left. Every trap is a runnable block with its own output rather than a claim -- the value pool dying at four thousand names, the skipped `BEGIN` block that breaks its caller's `RETURN`, `SSHAPE` ignoring a subscript, `READ`'s single cursor. Five figures, generated from the listings beside them by `docs_screenshots`, and a `breakout_art` setup so the ones that load artwork load the example's own. The character game's wall cannot be photographed -- the screenshot host omits the text layer on purpose -- so it is shown as compared output instead. `docs/07-sound.md` never said `SOUND`'s frequency is a SID register value rather than hertz, which both games depend on. It says so now, with the conversion from `src/audio_tables.c:84`. `TODO.md` gains the thirteen defects the two games turned up -- §6 items 30 to 33 and all of §9 -- each with a reduction that fits on a screen, the file and line of the cause, and what a fix would touch. Verified: `docs_examples` passes in both build configurations, `docs_screenshots --check` re-renders all thirteen figures and byte-compares them, the full 109-test suite passes in both builds, every quoted fragment was checked to appear verbatim in the listing it came from, and every relative link and anchor resolves. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-01 22:54:42 -04:00
<EFBFBD>PNG

IHDR0.Yj^gAMA<00><> <0B>a<02>PLTEY=eY;cX=eW<eW<eX<dW<eW=dZ:cW<bX=eU3fW=dW=dcFpjMx<4D>r<EFBFBD><72>u<EFBFBD><75>h<EFBFBD><68>_<EFBFBD>gIu<49>]<5D>\Ai<41>g<EFBFBD>yY<79><59>u<EFBFBD>sQ<73><51>e<EFBFBD><65>i<EFBFBD><69>]<5D>tT<74><54>h<EFBFBD>[@i<>m<EFBFBD><6D>j<EFBFBD>^BlfIt`Dm<44>^<5E><>c<EFBFBD><63>r<EFBFBD>}[<5B>X>eiIxeHs<48>r<EFBFBD>lN{pQ~<7E>a<EFBFBD>rR<72><52>d<EFBFBD>~]<5D><>p<EFBFBD>wT<77><54>l<EFBFBD>uV<75><56>e<EFBFBD>dGr<47>c<EFBFBD>cEq<45>p<EFBFBD>_<7F>[?hnP|<7C>v<EFBFBD><76>_<EFBFBD>pO<70>bDpZ<7F>fGt<47>c<EFBFBD>fHuiKwyT<79>`Dn<44>m<EFBFBD>{[<5B>yW<79>jKy<4B>h<EFBFBD>_BmuS<75><53>a<EFBFBD><61>_<EFBFBD>kJ{qN<71>sS<73><53>`<60><>i<EFBFBD>oLvQ<76>\?i<>k<EFBFBD>{V<><56>`<60><>`<60><>p<EFBFBD><70>r<EFBFBD><72>j<EFBFBD><6A>i<EFBFBD><69>w<EFBFBD><77><EFBFBD><7F>k<EFBFBD><6B>k<EFBFBD><6B>g<EFBFBD><67>m<EFBFBD><6D>f<EFBFBD><66>l<EFBFBD><6C>j<EFBFBD><6A>h<EFBFBD><68>e<EFBFBD><65>s<EFBFBD><73>f<EFBFBD><66>e<EFBFBD><65>h<EFBFBD><68>u<EFBFBD><75>b<EFBFBD><62>y<EFBFBD><79>h<EFBFBD><68>d<EFBFBD><64>e<EFBFBD><65>a<EFBFBD><61>w<EFBFBD><77>g<EFBFBD><67>W<EFBFBD>}U<>zS<7A><53>W<EFBFBD>V<7F>xR<78>|T<>wR<77><52>X<EFBFBD>oP~<7E>f<EFBFBD><66>v<EFBFBD>`Cm<43>|<7C>wX<77>[?i<>c<EFBFBD>~Z<>nL~zU<7A>lJ{rN<72>^AkfFu<46>`<60><>`<60><>e<EFBFBD><65>c<EFBFBD><63>m<EFBFBD>\<5C><>s<EFBFBD>|V<>pM<70>zT<7A>W<7F>\@idErtP<74>fFt<46>X<EFBFBD>~V<>|U<><55>v<EFBFBD><76>f<EFBFBD>Z>glJ|cDq<44>`<60>jIy<49>_<EFBFBD><5F>g<EFBFBD>vQ<76><51>~<7E><>h<EFBFBD><68>a<EFBFBD><61>_<EFBFBD><5F>~<7E><>x<EFBFBD><78>h<EFBFBD><68>c<EFBFBD><63>x<EFBFBD><78>b<EFBFBD><62>}<7D><>}<7D><>n<EFBFBD><6E>{<7B><>z<EFBFBD><7A>j<EFBFBD><6A>k<EFBFBD><6B>w<EFBFBD><77>`<60><>n<EFBFBD><6E>m<EFBFBD><6D>o<EFBFBD><6F>b<EFBFBD><62>a<EFBFBD><61>a<EFBFBD><61>c<EFBFBD>rN<72><4E>i<EFBFBD><69>y<EFBFBD><79>l<EFBFBD><6C>|<7C><>e<EFBFBD><65>f<EFBFBD><66>g<EFBFBD><67>f<EFBFBD><66>d<EFBFBD>bCpX=eyS<79><53>Y<EFBFBD>8W<38>tRNS?_<><5F>ϿoO/<2F><0F><>Ά%<25><02>IDATHǍ<48>e{<7B>@F<><46><EFBFBD>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[]<5D>z -<2D><><EFBFBD><EFBFBD>Cq(<28>R(in<69>9Lf&;<3B><>$<24><>8sO<73><4F><EFBFBD>wf<77><66>tl6<6C><36><EFBFBD><EFBFBD><EFBFBD><01>^{<7B>Т<19>M<EFBFBD><4D><EFBFBD><EFBFBD>B<EFBFBD><42>-<2D>w<EFBFBD> <0C><>6B<36>=<3D><><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD><03><>Q"a<>໘;<3B><>`u<> .7L<1C>@<40>Ta<54>p#<23>;<3B><>ǔR<C794>P<EFBFBD>H<EFBFBD>Hl<>8<EFBFBD><05>9cX<01>]<5D>n<><6E>)<29>*/UFM  <09>6~%<25>g<>v$<24>7ނ<0F>m<EFBFBD>5<EFBFBD><35>|$(<28><>9s?r<><72><EFBFBD>o<6F>760Ě<>8<EFBFBD>'gá<67><C3A1>=<3D><>qF<71>#A<><41>#Gh<47>w?<3F><><EFBFBD><EFBFBD><EFBFBD> <0C>EG<45>H<EFBFBD><48>ְ<7F>U<EFBFBD>l<EFBFBD>Q<EFBFBD>@F<><46>6hץ<68><D7A5><EFBFBD>h<EFBFBD><68><EFBFBD>'<27>pZ57B6h<36><68>-g<><67>`<60>s_s<5F><73><05>B<EFBFBD><06><>0ʎT<CA8E><54><1D><>_<> <1E><><EFBFBD>,#<23>;wT<77>p<EFBFBD><70>#<23><>m<EFBFBD><6D>h<EFBFBD>"<17>=Ŭٿkݖ_<06>n><3E><>B<EFBFBD><42>v%B<>O<EFBFBD><4F><EFBFBD><EFBFBD><64>Ne<><65>_)<29><> <0A>dm<><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
J<EFBFBD><03>XA'|l<><6C>DXX<58>9<EFBFBD><39><EFBFBD>π<EFBFBD><CF80><EFBFBD>JE<4A><1E>T ,IZ<49><5A>Z<EFBFBD><5A>S<EFBFBD><53>7<EFBFBD>Vj<56>?)<01><>h8<68><38>*N<> <0B><><EFBFBD><EFBFBD><EFBFBD>ʉł<00><>.<2E><><17><>]<5D>\<5C><>F<EFBFBD>=<3D>t<EFBFBD>(<28>B<EFBFBD><42><EFBFBD> <20><><EFBFBD>&<26><>Br<42><14>g<EFBFBD>kLDo<1C>t<EFBFBD>8<EFBFBD>e<EFBFBD><65>
v<EFBFBD>Lj<EFBFBD><EFBFBD><EFBFBD>V<13>i<EFBFBD><69><02>YI<12>W<EFBFBD>j<EFBFBD><6A>Rp"&<26>d:<17><> <<3C><><EFBFBD>!<21>Y<EFBFBD><59>D<EFBFBD>C<EFBFBD>V3K!x/<2F><>,<2C>*x<><78><EFBFBD><EFBFBD>Ka<14><05>|<7C>-<2D>"<22>_<> <20><>D<EFBFBD><44><EFBFBD><EFBFBD> )x٫S/<2F>V(<28>ĐכdJ<64>t<EFBFBD>*<2A>,!™K<06><>8B(",<2C> <09><>@".X<>K<> <20>f<EFBFBD>b<EFBFBD><62><EFBFBD><1F>J<EFBFBD><4A>[nIEND<4E>B`<60>