An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          

# Quantum Tetris


🇬🇧 English · đŸ‡«đŸ‡· Français


▶ Jouer en ligne

image

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. |

quantum-teleportation-gate-v1

### 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. |

imp-brain-v1

### 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. |

enemy-profile-hunter-v1

### 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. |

observation-pulse-v1

### 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). |

q-shard-stabilizer-v1

---

## 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)