{"id":18471930,"url":"https://github.com/codemouse92/wordperil","last_synced_at":"2025-10-18T15:10:04.034Z","repository":{"id":102696999,"uuid":"278942003","full_name":"CodeMouse92/wordperil","owner":"CodeMouse92","description":"A word puzzle party game.","archived":false,"fork":false,"pushed_at":"2020-07-27T22:38:26.000Z","size":681,"stargazers_count":0,"open_issues_count":1,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-16T18:47:47.883Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CodeMouse92.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-07-11T21:08:29.000Z","updated_at":"2022-01-17T20:30:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"80570649-a092-4b3d-97b1-8ae4a8efda60","html_url":"https://github.com/CodeMouse92/wordperil","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeMouse92%2Fwordperil","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeMouse92%2Fwordperil/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeMouse92%2Fwordperil/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeMouse92%2Fwordperil/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CodeMouse92","download_url":"https://codeload.github.com/CodeMouse92/wordperil/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253751355,"owners_count":21958466,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T10:18:28.256Z","updated_at":"2025-10-18T15:10:03.919Z","avatar_url":"https://github.com/CodeMouse92.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Word Peril\n\nA live-play word game for three players, similar to \"Wheel of Fortune\" and\n\"Hangman\", with \"Jeopardy\"-inspired scoring.\n\nThe game is displayed on a single screen, and the keyboard used to\ncontrol the game during live play.\n\nOriginally created for the after-party at EuroPython 2020.\n\n![The Score Screen after a puzzle is solved.](img/ScoreScreen.png)\n\n## Where Are The Puzzles?\n\nThis repository only contains the Word Peril game itself. You will need to\nprovide the puzzles in the form of `.peril` files, which are written in\nJSON format.\n\nSee `example_puzzleset.peril` in the root of this repository for an example\nof a puzzleset file.\n\nEach puzzleset must have a **title** as the key for the first object, and\none or more **clues**, each one associated with a **list** of **puzzles**.\n\nHere's a shortened example, with a title of \"Office Stuff\", a single clue\n\"thing\", and two separated puzzles that use that clue.\n\n```\n{\n    \"Office Stuff\":\n    {\n        \"thing\": [\n            \"stack of sticky notes\",\n            \"pink eraser\"\n        ]\n    }\n}\n```\n\nWord Peril converts all text to ALL CAPS, so letter case is not important.\n\nClues should be as vague as possible, using names such as \"phrase\", \"thing\",\n\"title\", or \"what are you doing?\"\n\nEvery puzzle should be able to fit on the game board, which is four rows of\nfourteen letters. A single word and its connected punctuation will never be\nbroken across multiple rows. The game will figure out how to best fit the\npuzzle to the board; if it can't, Word Peril will simply omit the puzzle from\nthe puzzle set.\n\n## Game Rules\n\n2-3 players, plus a Host to control the game.\n\nA game consists of as many puzzles can be fit into a set period of time\n(10 minutes recommended). Do not start a new puzzle when you only have 1:30\nleft in the round.\n\nBefore the game starts, the Host should remind everyone of the rules.\n\nAt the start of the round, the Host should read the clue aloud. The leftmost\nplayer starts the first round.\n\nDuring their turn, a player may do one of two things:\n\n1. Guess a letter. If the letter is in the puzzle *and* not used, the player\n   gains points (for consonants only) and can make another guess. If the\n   letter is *not* in the puzzle, they lose 50 points and their turn ends.\n   If the letter is already guessed, their score is unaffected, and their turn\n   ends.\n2. Request to solve the puzzle. When told by the Host to go ahead, they should\n   read the entire puzzle out loud, adding and omitting nothing. If they are\n   correct, they gain 300 points and the round is over. If they are incorrect,\n   they lose 200 points and their turn end.\n\nThe player with the highest positive score at the end of *all* rounds wins\nthe game. You cannot win with a negative score.\n\n## Gameplay\n\nWord Peril is controlled entirely by the keyboard. You should pick one person\nto control the game, preferably a designated \"host\" instead of a player.\n\n### Game Setup\n\nWhen you first launch Word Peril, you will need to load a **puzzle set**\nfrom a `.peril` file. (See \"Where Are The Puzzles?\") Press `L` to load a\npuzzleset, and then navigate to a `.peril` file.\n\nWord Peril will immediately process the file. If it encounters any fatal error,\nit will warn you with an \"Invalid File\" message on the screen, and will *not*\nfinish loading the file. If you had a prior puzzle set loaded, that set will\nremain loaded.\n\nOnce a puzzle set has been successfully loaded, the title of the set will be\ndisplayed, along with the number of available puzzles. This number is the\ntotal number of puzzles in the puzzle set, minus (a) any puzzles that won't fit\non the puzzle board, and (b) any puzzles that have already been played (see\n\"Cache\" below.)\n\nOnce you're ready to play, press the `ENTER` or `RETURN` key.\n\n#### Cache\n\nWord Peril remembers what puzzles have already been played in a given set,\nand stores this data in a cache file on your computer. This way, you can\nbe certain that you won't have any repeat puzzles when playing multiple rounds,\neven if you restart the program.\n\nYou can reset the cache for the current puzzle set by pressing the `R` key.\nYou'll see a \"Reset Puzzle Set!\" message on your screen if this is successful,\nand the puzzle count will reset.\n\n### Players Setup\n\nThe next step is to tell Word Peril who's playing. Press the `TAB` key to move\ninto each name field on the scoreboard, and type the name of each player.\nYou *must* fill in all player fields before you can start a round.\n\nNOTE: I'll be adding two-player support later.\n\nOnce you have all names filled in, and then make sure you've tabbed *past* all\nthe names (none will be selected) and press `ENTER` or `RETURN` to start the\ngame. You'll next see the Score Screen, which is displayed between rounds.\n\n![Entering player names](img/PlayerSetup.png)\n\n### Score Screen\n\nWhen you first start the game, and after each round, you'll see the Score\nScreen. This will show:\n\n* The name of the current puzzle set, and how many puzzles remain.\n* The current scores of the players. The highest positive score is highlighted.\n* The last solved puzzle.\n\nPress `N` to start the next round, or `ESC` to quit. **As soon as you quit,\nall the scores will be erased and unrecoverable!**\n\n### Puzzle Screen\n\nThere are six main elements to the puzzle screen:\n\n* The **Used Letter Board** is on the left. Vowels are shown on the top row,\n  and the consonants are displayed alphabetically on the remaining rows.\n* The **Puzzle Board** is the large board on the right. Empty green tiles are\n  letters that need to be filled in, and blue tiles are unused.\n* The **Clue** is displayed on the bar below the Puzzle Board.\n* The **Scoreboard** is below the puzzle area, showing the players and their\n  scores. The current player is highlighted in green.\n* The **Solve Bar** is below the Scoreboard. `TAB` into this field and enter\n  the puzzle to solve it.\n\n#### Guessing Letters\n\nTo guess a letter, press a letter key.\n\n* A **correct consonant** adds 50 points per instance in puzzle.\n* A **correct vowel** adds no points.\n* An **incorrect letter** removes 50 points and ends the turn.\n* An **already used letter** adds/removes no points, but ends the turn.\n\nWhenever a letter is guessed, it is added to the Used Letter Board.\n\n![Guessing letters](img/GuessingLetters.png)\n\n#### Solving the Puzzle\n\nTo solve the puzzle, `TAB` to the Solve Bar at the bottom of the screen, and\nenter the puzzle. Only the letters are checked: spaces and symbols are ignored.\n\nEven if the board is completely filled, the player must still solve the puzzle.\n\n* A **correct solve** adds 300 points and ends the game.\n* An **incorrect solve** removes 200 points and ends the turn.\n\n![Solving the puzzle](img/SolvingPuzzle.png)\n\n#### Undo\n\nIf the host makes a mistake, such as entering the wrong letter or introducing\na typo into the solved puzzle, the *most recent action* can be undone by\npressing the `PAUSE` key.\n\nThis feature is not intended as a part of gameplay.\n**Players are never allowed to \"take back\" a move.** The Undo feature is *only*\nfor fixing mistakes where their keyboard entry does not match the player's\nstated letter guess or puzzle solve attempt.\n\n### Between Rounds\n\nAt the end of the round, you return to the Score Screen. The completed puzzle\nis displayed, along with the current scores for the whole game so far. The\nhighest positive score is highlighted; if there's a tie, both/all the players\nwith identical high scores are highlighted.\n\nA new round can be started with `N`. The current scores are carried into the\nnext round.\n\n![Score Screen after a round](img/ScoreScreen.png)\n\n### End of Game\n\nWhen there's no time left for a new round, congratulate the winner of the game,\net cetera.\n\nPressing `ESC` ends the game **and immediately erases scores!** Do not press\nthis key until you're ready to permanently erase the scores.\n\nOnce the game is ended, you'll return to the Player Setup screen to enter new\nnames, or if the puzzle set is \"exhausted\" (no unused puzzles left), to the Game\nSetup screen to load or reset a puzzle set.\n\n## Tech Stack\n\n* Python 3.8\n* PySide2\n* appdirs\n\n## Running from Repository\n\nThe included setup.py and Makefile mean you can run the game directly from\nthis repository. On any system that supports Makefiles, simply run:\n\n```\nmake run\n```\n\nThat command will create the virtual environment, install the game, and run it.\n\nAlternatively, you can create your own Python 3.8 (or later) virtual\nenvironment and install the game by running the following from within\nthe root of the repository:\n\n```\n/path/to/your/venv/pip install .\n```\n\n## Contributing\n\nIf you encounter any bugs, please report them on the\n[Word Peril GitHub](https://github.com/codemouse92/wordperil). I also welcome\nfeature requests, although I'm not likely to follow through on them very\nquickly (if at all). Pull Requests are preferred for adding functionality!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodemouse92%2Fwordperil","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodemouse92%2Fwordperil","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodemouse92%2Fwordperil/lists"}