← work

The Library

A banned bookshop simulation set in France, built in PyQt6 as a CS50 final project.

role
:Solo developer
engine
:Python — PyQt6
year
:2025

TODO — rewrite in your own voice.

A desktop simulation about running a bookshop that sells banned books. The player manages inventory, members and money while a notoriety meter climbs and the gendarmes take an interest.

design

Every system feeds the notoriety meter, and notoriety is what converts commercial success into risk. Selling more books is always the obvious move and always the dangerous one, which is where the tension comes from.

  • Timer-driven day loop
  • Notoriety system with terminal events
  • Membership — applicants arrive as random events, accepted members pay daily fees
  • Daily rent, collected after member fees
  • A journal of clickable entries that open dialogues and resolve themselves
  • Illustrated dialogue encounters with gendarmes

implementation

Split across main.py for the PyQt6 interface and game logic, events.py for the event manager, members.py for membership, and modify_books.py for preprocessing the book dataset from a Goodreads CSV.

The event system uses an EventManager holding RandomEvent and FixedEvent objects that each carry an effect(game) function. Two boolean flags gate the loop: day_active stops events firing outside an active day, and game_frozen halts the timer entirely on terminal notoriety events.