Add two Breakout examples and the tutorials that build them
Some checks failed
akbasic CI Build / cmake_build (push) Failing after 3m10s
akbasic CI Build / sanitizers (push) Failing after 4m5s
akbasic CI Build / coverage (push) Failing after 3m29s
akbasic CI Build / akgl_build (push) Failing after 21s
akbasic CI Build / mutation_test (push) Failing after 3m19s
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>
21
examples/breakout/sprites/art/License.txt
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
|
||||
Puzzle Pack (1.1)
|
||||
|
||||
Created/distributed by Kenney (www.kenney.nl)
|
||||
|
||||
------------------------------
|
||||
|
||||
License: (Creative Commons Zero, CC0)
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
|
||||
This content is free to use in personal, educational and commercial projects.
|
||||
Support us by crediting Kenney or www.kenney.nl (this is not mandatory)
|
||||
|
||||
------------------------------
|
||||
|
||||
Donate: http://support.kenney.nl
|
||||
Patreon: http://patreon.com/kenney/
|
||||
|
||||
Follow on Twitter for updates:
|
||||
http://twitter.com/KenneyNL
|
||||
35
examples/breakout/sprites/art/PROVENANCE.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Where this art came from
|
||||
|
||||
Every PNG in this directory is from **Kenney's Puzzle Pack 1**, released into the public
|
||||
domain under [Creative Commons Zero](http://creativecommons.org/publicdomain/zero/1.0/).
|
||||
`License.txt` is the pack's own licence file, copied here unedited.
|
||||
|
||||
* Source: <https://kenney.nl/assets/puzzle-pack-1>
|
||||
* Downloaded: 2026-08-01, `kenney_puzzle-pack-1.zip`
|
||||
* Author: Kenney (<https://www.kenney.nl>)
|
||||
* Licence: CC0 1.0. Crediting is not required; it is here because it should be.
|
||||
|
||||
The files are the pack's `PNG/Default/` versions, byte for byte — nothing is resized,
|
||||
recoloured or re-encoded, so the checksum of any of them still matches the distributed
|
||||
archive.
|
||||
|
||||
| File | Size | Used for |
|
||||
|---|---|---|
|
||||
| `paddleBlu.png` | 104x24 | the player's paddle |
|
||||
| `paddleRed.png` | 104x24 | the second paddle, from the CATCHER powerup |
|
||||
| `ballBlue.png` | 22x22 | the ball |
|
||||
| `ballGrey.png` | 22x22 | the extra balls from MULTIBALL |
|
||||
| `element_red_polygon_glossy.png` | 48x46 | the EXPAND powerup |
|
||||
| `element_yellow_polygon_glossy.png` | 48x46 | the MULTIBALL powerup |
|
||||
| `element_green_polygon_glossy.png` | 48x46 | the SLOW powerup |
|
||||
| `element_blue_polygon_glossy.png` | 48x46 | the STICKY powerup |
|
||||
| `element_purple_polygon_glossy.png` | 48x46 | the CATCHER powerup |
|
||||
|
||||
The pack's `PNG/Double/` versions are twice these sizes and are the wrong scale for an
|
||||
800x600 field. `SPRITE`'s x- and y-expand bits would double them again, which is the only
|
||||
scaling this interpreter has — there is no way to make a sprite *smaller* — so the
|
||||
`Default` set is the one that fits.
|
||||
|
||||
Everything else on screen — the bricks, the walls, the HUD lettering, the title — is drawn
|
||||
by the program with `DRAW` and `BOX`. See `README-sprites.md` for why only eight things in
|
||||
this game can be made of artwork.
|
||||
BIN
examples/breakout/sprites/art/ballBlue.png
Normal file
|
After Width: | Height: | Size: 513 B |
BIN
examples/breakout/sprites/art/ballGrey.png
Normal file
|
After Width: | Height: | Size: 495 B |
BIN
examples/breakout/sprites/art/element_blue_polygon_glossy.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
examples/breakout/sprites/art/element_green_polygon_glossy.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
examples/breakout/sprites/art/element_purple_polygon_glossy.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
examples/breakout/sprites/art/element_red_polygon_glossy.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
examples/breakout/sprites/art/element_yellow_polygon_glossy.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
examples/breakout/sprites/art/paddleBlu.png
Normal file
|
After Width: | Height: | Size: 762 B |
BIN
examples/breakout/sprites/art/paddleRed.png
Normal file
|
After Width: | Height: | Size: 578 B |