ターミナルだけで完結
描画は curses、ゲームロジックは標準ライブラリのみ。ウィンドウを開かず、SSH 越しの端末でもそのまま遊べます。
$./invaders.py
RETRO INVADERS は、Python の標準ライブラリ curses だけで描く
スペースインベーダー・オマージュ。ハーフブロック文字でドット絵を表現し、
8bit 風の効果音は起動時にその場で合成します。音声ファイルも画像ファイルも不要です。
uv run invaders.py
// gameplay
タイトル画面からウェーブ1の攻略まで、約1分半の録画です。音声はミュートで再生しています。
// features
外部アセットに頼らず、端末の中だけで完結するように設計しています。
描画は curses、ゲームロジックは標準ライブラリのみ。ウィンドウを開かず、SSH 越しの端末でもそのまま遊べます。
1文字を上下2ピクセルとして扱うハーフブロック(▀▄█)描画。5×4 の敵スプライトが、ブロックの継ぎ目なく動きます。
pygame-ce のミキサーで、ショット・行進・UFO・被弾などの効果音を起動時に生成。音声ファイルは同梱していません。
4基のバンカーは当たったピクセルだけが円形に削れます。敵が降りてくると踏み潰され、防御はどんどん薄くなります。
スコアとサウンド設定は ~/.retro_invaders.json に保存。次に起動したときも、前回の記録から始まります。
--ascii で ASCII 文字のみ、--no-sound で消音。UTF-8 でない端末では自動的に ASCII 描画へ切り替わります。
// how to play
| ←→ / AD | 自機を左右に移動 |
|---|---|
| Space / W / ↑ | ショット(同時に1発) |
| P / Esc | ポーズ(再開も同じキー) |
| M | サウンドのオン/オフ |
| Q | タイトルへ戻る/終了 |
ゲームオーバー画面では Space または R でリトライ、Q でタイトルへ。
// under the hood
1ファイル・約1,600行の Python スクリプトです。先頭の PEP 723 ブロックが依存関係と Python バージョンを宣言しているので、
uv run invaders.py だけで環境が整います。Game クラスは curses に依存しないため、ヘッドレスでテストできます。
invaders.py(PEP 723)Game クラス~/.retro_invaders.json--ascii / --sound / --no-sound# uv があればこれだけ
uv run invaders.py
# pygame-ce が無い環境でも遊べます(音はベル)
python3 invaders.py
# ASCII 描画 / 消音で起動
uv run invaders.py --ascii --no-sound
初回は pygame-ce が uv のキャッシュ環境に自動で入ります。ターミナルは UTF-8・56×24 以上(推奨 80×24 以上)で。