Skip to content

PixelsCamp/pixelscamp-quiz-stage

Repository files navigation

The Amazing Quizshow!

This is the game engine for The Amazing Quizshow!, as used live at Pixels Camp since 2016.

Main Screen

Caveat Emptor

This application was originally written to be used by a single person, once a year. Expect strange UX and idiosyncratic behavior. Having said this, it tries to prevent the quizmaster from making mistakes and should be solid under use. It also provides enough tools (see the embedded REPL) to get out of sticky situations on-stage.

Running The Engine

It's a Clojure application so you'll need:

It was last known to work with OpenJDK 15.0.1 on macOS 10.15.7.

Once you have these requirements installed, run lein run in the project directory. It will download the necessary dependencies and start an HTTP server on port tcp/3000.

The engine serves webpages for the quizmaster console, main screen, team screens, Buzz! simulator (for testing), and handles input from the Buzz! controllers. See the checklist at http://localhost:3000/ for assembly instructions and this blog post for the overall architecture of the quiz setup.

To get started you'll need, at a minimum:

  • Your laptop, with a free USB port (no network connection required);
  • An external 16:9 (eg. 1920x1080) screen/projector to show the main screen (the questions);
  • Wired PlayStation Buzz! controllers (you can skip this and use the Buzz! simulator page during testing).

Buzz! controllers are easy to get on eBay and, besides subtle differences in look from one PlayStation version to the next, should work interchangeably. Wireless controllers haven't been tested, but it looks like they'd work too (although it's debatable if using wireless controllers at a conference would be a good idea).

Note: The setup at Pixels Camp also has a dedicated screen for each team (provided by the fine folks at Hipnose). These are completely optional and also work best with a 16:9 resolution. We use vintage Raspberry Pi 1s to drive them, with some ugly scripts and the minimalistic (and now obsolete) uzbl as the browser. This is a legacy configuration, so we're not releasing it at this point. You're free to use better hardware with a better browser. :)

All Screens

Running Your Own Quiz

The quizmaster checklist is written for Pixels Camp (ie. assumes the contents of the "quizmaster kit" and a full setup), read it thoroughly and adapt it for your needs.

There's a csv-to-questions.py script in the tooling directory to take a .csv and produce a questions file and a round configuration file in .edn format (which you should place in the project root, with the names questions.edn and round-config.edn, to be picked up by the engine on start). Look at the included examples to see what bits you'll need to come up with (ie. questions, answer options, and quizmaster notes).

The standard quiz model is comprised of four rounds to select four teams to compete in a fifth round (with more, and harder, questions). This can be adapted for fewer players (eg. two rounds selecting four teams to compete in a third round) by adjusting the constants at the top of the csv-to-questions.py script.

Usage Instructions

The best way to learn how to use the engine is by starting it and following this flow chart. After a few minutes, you should start getting the hang of it, and then it will all make sense (hopefully). The UX is weird, but we're found it to be efficient.

If you're serious about using this on stage, make sure to look at the bottom of the core.clj file for a few functions you can call from the REPL while the engine is running. These functions allow the quizmaster to adjust scores, discard a question, and generally fix mistakes.

To reset the game to its initial state, stop the engine, delete the game-state.edn* files, and start it again.

Note: If the engine is stopped and restarted, the previous game state is always loaded from disk. However, previous events won't be re-emitted. If you restart the engine and reopen the screens, it will look like the game just started from scratch (it will update on the next state change). So, if you restart the engine on-stage, keep the browser windows open and the audience won't notice a thing.