Scrabble
Phase 1 — Dictionary & Core Model
- CLI:
scrabble.py <dictionary_path>loads a word list into memory - Board model (15×15), rack (7 tiles), tile bag with letter counts and scores
- Draw tiles to racks; basic placement grid (no scoring yet)
Functional result: The game starts with a populated tile bag, two 7-tile racks, and a blank 15×15 board using the provided dictionary.
Phase 2 — Placement Rules & Scoring
- Validate moves: contiguous line, board connectivity, dictionary check for all formed words
- Premium squares (DL/TL/DW/TW - Double Letter, Triple Letter, Double Word, Triple Word) and first-move center rule
- Compute and return move score; refill rack after valid move
Functional result: Legal placements are accepted and scored correctly (including premiums); illegal moves are rejected with a brief message.
Phase 3 — GUI Play Surface (Tkinter)
- Render board with premiums, player rack, and a minimal controls bar (Place, Recall, Submit, Pass, Swap)
- Mouse: click-to-select tile from rack, then board cell; Recall returns tiles to rack
- Score panel showing per-player totals and last move score
Functional result: A user can place tiles from the rack onto the board, submit a move, see the score update, and tiles refill visually.
Phase 4 — Turn Flow & Endgame
- Two local players alternating turns (Pass, Swap consume a turn)
- End when tile bag is empty and a rack is emptied, or after two consecutive passes
- Final tally (subtract remaining rack points), winner dialog, “Play again” resets state
Functional result: A full match runs to completion with correct turn alternation and endgame scoring; the winner is announced and a new game can be started.