From 2168fccba79cf49bd7d4f174570f650f234effe0 Mon Sep 17 00:00:00 2001 From: Jens Tirsvad Nielsen Date: Sun, 4 Oct 2026 12:49:27 +0800 Subject: [PATCH] Update readme with screenshot --- README.md | 2 ++ docs/images/screenshot.png | Bin 0 -> 14311 bytes 2 files changed, 2 insertions(+) create mode 100644 docs/images/screenshot.png diff --git a/README.md b/README.md index b84f945..246395d 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,8 @@ What each step adds: - **Step 4:** start with 6 lives; every wrong guess costs one. At 0 lives the game ends with "You lose" and reveals the word. - **Step 5:** a colored ASCII-art title (colors are skipped when the output is not a terminal or the `NO_COLOR` environment variable is set), an ASCII-art gallows that grows with each wrong guess, a friendly message for letters you already guessed, and input validation (only a single letter is accepted). These two are additions that are not in the flowchart. +![Hangman running in a terminal](docs/images/screenshot.png) + The game logic (`src/hangman/game.py`) is separate from the input/output (`src/hangman/main.py`), and all constants live in `src/hangman/constants.py`. ## 📋 Requirements diff --git a/docs/images/screenshot.png b/docs/images/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..1a0f4b729dcb3cca103e908fb2d50c423f7f98b3 GIT binary patch literal 14311 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 MuO^pv`PRe#0b25?oB#j- literal 0 HcmV?d00001