# TGL 2048 > A free, no-install, browser-based 2048. Slide tiles to merge matching > numbers, chase the 2048 tile (and beyond). Seeded deterministic runs, > server-validated replays, and a global leaderboard. Tagline: Merge Numbers. Reach The Top. Beat Your Best. Site: https://tglgames.com/ Play: https://tglgames.com/2048/ About: https://tglgames.com/2048/about/ Leaderboard: https://tglgames.com/api/leaders?game=2048 ## What it is 2048 is a single-page browser implementation of the 2014 sliding-tile puzzle by Gabriele Cirulli. Free, no signup, no install, no ads, no in-app purchases. Plays on every modern browser — desktop, tablet, phone, foldable. ## Rules (the standard 2048) - 4×4 grid of integer tiles (powers of two; 0 = empty). - Two starter tiles spawn from the seeded PRNG before move one. - Each move slides the entire board one of four directions: U / D / L / R. - Within each row/column along the move direction: 1. Compress: drop empties, keeping order. 2. Merge equal adjacent pairs into one tile of doubled value (`v + v → 2v`). At most one merge per tile per move (`[2,2,2,2] → [4,4]`, never `[8]`). 3. Compress again; pad with empties. - If anything changed, one new tile spawns (90% chance 2, 10% chance 4) in a uniformly random empty cell. - Score = sum of values produced by every merge in the run. - Game over when no move in any direction changes the board. ## Determinism + replay Mulberry32 PRNG, bit-identical between the JS client and the PHP validator. The seed is issued by `/api/run/start` inside a signed run token. Each tile spawn consumes the PRNG twice in this exact order: 1. **Value**: `nextU32() % 10 === 0 ? 4 : 2` 2. **Cell**: `nextInt(emptyCount)` over empty cells enumerated row-major (y outer, x inner). Reverse the order or change the cell-enumeration scheme and the first spawn diverges. Both sides agree byte-for-byte on score, max tile, and merge count across thousands of cross-checked runs. ## Move log ```json [ { "d": "L", "src": "swipe" }, { "d": "U", "src": "key" }, { "d": "R", "src": "dpad" }, ... ] ``` `d` ∈ U|D|L|R; `src` ∈ key|swipe|dpad (used to populate per-source move counters; the validator ignores it). No-op moves are logged but produce no spawn / no score change. ## Controls - **Keyboard**: WASD or arrow keys. - **Swipe**: drag in the desired direction; diagonals resolve to the dominant axis. - **D-pad**: on-screen four-arrow pad for thumb input. Each input source is tracked separately for stats. ## Anti-cheat - HMAC-signed run tokens; single-use, tied to a server-issued seed. - Server replays the full move log against the seed; client score is overridden by the simulator's recomputed value. - Score bounds: `[0, 5,000,000]` (a 65 536 tile is around 3.9M, leaving headroom for legendary play). - Client-server score mismatch → `validated='pending'` for review. ## Privacy / signup - No account required. Guests get an auto-generated username on first visit; rename anytime. - No tracking pixels, no analytics SDK, no third-party scripts. - Raw IP, user-agent, and full request bodies are logged for ops/security review (project-wide stance) — never sold or shared. ## Genre / keywords 2048, sliding tile puzzle, 2048 game, free 2048, browser 2048, html5 2048, 2048 online, no install 2048, mobile 2048, leaderboard 2048, deterministic 2048, mgwalk, tglgames.com ## Other games on tglgames.com - Snake · /snake/ - Brick Blaster · /brickblaster/ - Space Drifter · /spacedrifter/ - Pool · /pool/ - Last Card Standing · /last-card-standing/ - Blackjack · /blackjack/ - Poker · /poker/ - Euchre · /euchre/ ## Author mgwalk — https://tglgames.com/