blob: 65c8d787ae767f2904472b8037b08185aec2f8cd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# Chapter 31: Software Drawing and Graphical Games
English | [日本語](README.ja.md)
[Previous: Chapter 30 — Text Formatting and Diagnostics](../chapter30/README.md)
Small graphical games drive this chapter's language and library work, starting
with a pixel window for a Simple-written 2-D graphics library. MiniFB supplies
the optional native window/input backend; drawing stays in Simple.
The [drawing library](docs/drawing.md) provides a pixel canvas, colors,
rectangles, circles, thick lines, and bitmap labels. The
[graphical tic-tac-toe game](docs/examples/TicTacToeGraphical.smp) uses it for
mouse/keyboard play against the terminal game's CPU strategy.
The optional [audio library](docs/audio.md) adds soft move sounds and rising
or falling win/loss cues, played in the background by miniaudio.
Hexadecimal colors (`0xe47b57`) and leading-zero octal font masks (`025755`)
are supported by this chapter's integer literal syntax.
```sh
make -C chapter31 libs CTAGS= # Once while online (also: init or lib).
make -C chapter31 run-graphical-tictactoe CTAGS=
```
This explicitly builds the optional graphics/audio backends and opens a window. Use
`graphical-tictactoe` instead to build the executable without starting it or
requiring MiniFB.
Dependencies stay cached under `chapter31/lib`, including across `make clean`.
Only explicit `libs`/`init`/`lib` setup targets access the internet; other
targets use local files and fail promptly if something needs downloading.
The default build and test suite need no graphics dependencies. See
[optional graphics](docs/graphics.md) for building MiniFB, running the pixel
example, and handling a missing backend. `make tests_nographics CTAGS=` runs
all ordinary tests with graphics explicitly disabled.
The inherited language and library are described in [Chapter 30](../chapter30/README.md).
The [grammar and code map](docs/31-grammar.md),
[source layout](src/main/java/com/seaofnodes/simple/README.md), and
[runnable examples](docs/examples/) describe this snapshot.
From the repository root:
```sh
make lib tests release CHAPTERS=chapter31 CTAGS=
make -C chapter31 tictactoe CTAGS=
```
The game binary is `chapter31/build/examples/x86_64_v2_win64/TicTacToe.exe`
on Windows and `chapter31/build/examples/x86_64_v2_SystemV/TicTacToe` on Linux.
For a WSL build in the same checkout, use `CLZDIR=build/classes-linux` to keep
Linux Java outputs separate from Windows outputs.
IntelliJ has a `chapter31` module and a **chapter31 tests** run configuration.
Inherited Java test names retain their historical chapter numbers.
|