https://github.com/thepriben/quantum-tetris
A Rust/Bevy/WASM experiment where Tetris gameplay decisions are driven by simulated quantum circuits.
https://github.com/thepriben/quantum-tetris
2026 bevy-engine preprint programmez-magazine quantum-computing quantum-game quantum-simulation rust-lang rustqip tetris tetris-game wasm webassembly
Last synced: 1 day ago
JSON representation
A Rust/Bevy/WASM experiment where Tetris gameplay decisions are driven by simulated quantum circuits.
- Host: GitHub
- URL: https://github.com/thepriben/quantum-tetris
- Owner: thepriben
- License: mit
- Created: 2026-05-30T01:56:53.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2026-06-26T23:45:35.000Z (2 days ago)
- Last Synced: 2026-06-27T01:21:28.806Z (2 days ago)
- Topics: 2026, bevy-engine, preprint, programmez-magazine, quantum-computing, quantum-game, quantum-simulation, rust-lang, rustqip, tetris, tetris-game, wasm, webassembly
- Language: Rust
- Homepage: https://thepriben.github.io/quantum-tetris/
- Size: 920 KB
- Stars: 3
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.fr.md
- License: LICENSE
Awesome Lists containing this project
README
# Quantum Tetris
đŹđ§ English · đ«đ· Français

Tetris oĂč les Ă©vĂ©nements stochastiques (piĂšce, Ă©tat dâapparition, cadence, bonusâŠ) sont pilotĂ©s par des circuits quantiques mesurĂ©s en mode par dĂ©faut. Le joueur garde les commandes â â â â et Espace ; le jeu tire le reste depuis les mesures.
> **Le joueur :** â â â â et Espace · **Le jeu :** tout le reste.
**ExĂ©cution.** Bevy (Rust), en binaire desktop ou WASM dans le navigateur. Mode quantum par dĂ©faut : simulation statevector [**RustQIP**](https://github.com/Renmusxd/RustQIP), avec les mĂȘmes circuits en local et en ligne.
---
## Publications & releases
Chaque release taguée fige un état reproductible du code.
| Publication | Release |
| --- | --- |
| **Article *Programmez!*** â BenoĂźt Prieur, *« Quantum Tetris : Rust, Bevy, WebAssembly et circuits quantiques dans la boucle de jeu »*, hors-sĂ©rie n°23, 2026, pp. 7â11. [Lien](https://www.programmez.com/magazine/article/quantum-tetris-rust-bevy-webassembly-et-circuits-quantiques-dans-la-boucle-de-jeu) | [`programmez-hs23`](https://github.com/thepriben/quantum-tetris/releases/tag/programmez-hs23) |
| **Hasard auditable (C5/C6)** â reçus chaĂźnĂ©s, journal de session commit-reveal, export Ă la game over. Voir [`docs/AUDIT.md`](docs/AUDIT.md). | [`preprint-randomness`](https://github.com/thepriben/quantum-tetris/releases/tag/preprint-randomness) |
**Reproduire une release**
```bash
git checkout programmez-hs23 # code de l'article *Programmez!*
git checkout preprint-randomness # journal d'audit + pile C5/C6
```
---
## Hasard auditable
Chaque tirage stochastique en mode quantum par défaut est consigné dans un **journal d'audit chaßné par hash** (couches C5 et C6). En desktop, à la game over, la session est révélée et exportée vers `audit/{session_id}.json`.
| Ătape | Commande / action |
| --- | --- |
| Jouer (desktop) | `cargo run -p quantum-tetris-game` â journal finalisĂ© Ă la game over |
| VĂ©rifier l'export | `./scripts/verify_audit.sh audit/qt-âŠ.json` |
| Lire la pile | [`docs/AUDIT.md`](docs/AUDIT.md) â contexte six couches, schĂ©ma JSON, chaĂźne de hash, tests |
| Biais de mapping (C4) | PiĂšce **T** Ă P=ÂŒ sous tirages 3 bits uniformes (`010` et `111`) â [`docs/QUANTUM.md`](docs/QUANTUM.md) |
---
## Gameplay & circuits
Ă chaque moment stochastique, le moteur invoque un circuit de la liste partagĂ©e (voir [`docs/QUANTUM.md`](docs/QUANTUM.md)). Les diagrammes sont gĂ©nĂ©rĂ©s depuis les mĂȘmes dĂ©finitions de portes, recopiĂ©es dans [`scripts/render_circuit_diagrams.py`](scripts/render_circuit_diagrams.py).
### Tirage de la piĂšce
| | |
|---|---|
| **En jeu** | Détermine le tétromino en chute. |
| **Circuit** | `quantum-teleportation-gate-v1` â une mesure de Bell inspirĂ©e de la tĂ©lĂ©portation ; le rĂ©sultat 3 bits choisit directement le tĂ©tromino actif. |

### Rotation & colonne
| | |
|---|---|
| **En jeu** | Fixe lâorientation Ă lâapparition et la colonne dâentrĂ©e. |
| **Circuit** | `imp-brain-v1` â 2 qubits mesurĂ©s â rotation (0â3) et colonne d'apparition. |

### Cadence de chute
| | |
|---|---|
| **En jeu** | Intervalle entre deux descentes ; diminue avec le niveau. |
| **Circuit** | `enemy-profile-hunter-v1` â 2 qubits mesurĂ©s â intervalle de chute pour la piĂšce en cours. |

### Espace â chute forcĂ©e
| | |
|---|---|
| **En jeu** | Pose immédiate ; bonus de score, parfois une ligne supplémentaire. |
| **Circuit** | `observation-pulse-v1` â mesure Ă la pose forcĂ©e ; les bits choisissent le bonus. |

### Ligne complétée
| | |
|---|---|
| **En jeu** | Multiplicateur de points Ă1 Ă Ă4 selon le tirage. |
| **Circuit** | `q-shard-stabilizer-v1` â aprĂšs effacement d'une ligne ; les bits fixent le multiplicateur (Ă1âĂ4). |

---
## Démarrage rapide
**Desktop**
```bash
cp .env.example .env # optionnel ; QUANTUM_MODE=quantum est le défaut
cargo run -p quantum-tetris
```
| Mode | Commande |
| --- | --- |
| Quantum â RustQIP (dĂ©faut) | `cargo run -p quantum-tetris` |
| Classique | `QUANTUM_MODE=classic cargo run -p quantum-tetris` |
**Navigateur** (nĂ©cessite ~3 Go dâespace libre pour le build WASM release)
```bash
cargo install wasm-bindgen-cli # une fois
./scripts/build_wasm.sh
python3 -m http.server 8080 --directory docs
# â http://localhost:8080/
```
**ContrĂŽles :** â â dĂ©placer · â rotation · â chute douce · **Espace** chute forcĂ©e + observe (`observation-pulse-v1`).
---
## Architecture
Le dĂ©pĂŽt sĂ©pare le **moteur de jeu** (Bevy), la **couche quantique** (IR + backends) et **lâoutillage** (rendu des diagrammes, build WASM, Pages).
```mermaid
flowchart TB
subgraph clients["Clients"]
DESK["Binaire desktop
cargo run"]
WASM["Navigateur
docs/index.html"]
end
subgraph game["crates/game â Bevy 0.18"]
APP["app.rs â TetrisPlugin"]
TET["tetris.rs â boucle & spawn"]
FX["measurement_fx.rs â bits â gameplay"]
UI["ui.rs â grille + HUD + i18n"]
CFG["config.rs â QuantumSession"]
end
subgraph quantum["crates/quantum â simulation"]
IR["circuit.rs â QuantumCircuit + Gate"]
BE["backends/ â Classic · RustQIP"]
end
DESK --> APP
WASM --> APP
APP --> TET
TET --> FX
TET --> CFG
CFG --> BE
BE --> IR
```
**Principe :** le jeu nâappelle que `QuantumBackend::run(circuit) â Measurement`, puis dĂ©code les bitstrings via `measurement_fx.rs`. Passer de Classic Ă RustQIP ne modifie jamais la logique Tetris.
### Pipeline au spawn
Trois mesures sâenchaĂźnent avant chaque piĂšce :
```mermaid
sequenceDiagram
participant T as tetris.rs
participant Q as QuantumSession
participant M as measurement_fx.rs
T->>Q: piece_circuit() â tirage 3 bits inspirĂ© de la tĂ©lĂ©portation
Q-->>T: bits â piĂšce active
T->>Q: rotation_circuit() â imp-brain-v1
Q-->>M: rotation + colonne spawn
T->>Q: speed_circuit() â hunter-profile-v1
Q-->>M: intervalle de chute
M-->>T: ActivePiece + HUD
```
### Backends
| Backend | OĂč | MĂ©canisme |
| --- | --- | --- |
| **Classic** | partout | `rand` uniforme â baseline sans simulateur |
| **RustQIP** | desktop + navigateur | simulateur statevector in-process |
- `QUANTUM_MODE=classic|quantum` (alias `QUANTUM_BACKEND`)
- Bascule **CLASSIQUE** / **RUSTQIP** in-game
---
## Arborescence
```
quantum-tetris/
âââ crates/
â âââ game/ # Bevy â binaire + cdylib WASM
â âââ quantum/ # IR circuits + backends + tests
âââ docs/
â âââ index.html # Jeu + guide (anglais par dĂ©faut)
â âââ circuits/*.png # Diagrammes de circuits
â âââ QUANTUM.md # RĂ©fĂ©rence circuits & mappings
â âââ AUDIT.md # Journal d'audit C5/C6 & vĂ©rification
â âââ WASM.md # Notes build navigateur
âââ scripts/
â âââ build_wasm.sh
â âââ clean_build.sh
â âââ render_circuit_diagrams.py
âââ .github/workflows/
âââ ci.yml
âââ pages.yml # WASM + diagrammes â GitHub Pages
```
---
## CI / déploiement
| Workflow | Déclencheur | Actions |
| --- | --- | --- |
| **CI** | push / PR `main` | fmt, clippy, tests, check WASM |
| **Pages** | push `main` | Build WASM release, PNG circuits, deploy `docs/` |
En ligne : [thepriben.github.io/quantum-tetris/](https://thepriben.github.io/quantum-tetris/)
---
## Projets liés
- [**RustQIP**](https://github.com/Renmusxd/RustQIP) â le simulateur statevector `qip` qui alimente le backend quantique par dĂ©faut (`RustQipBackend`). Quantum Tetris en est une vitrine ludique, exĂ©cutĂ©e nativement comme dans le navigateur via WASM.
---
## Licence
MIT â [LICENSE](LICENSE)