91 lines
3.2 KiB
Markdown
91 lines
3.2 KiB
Markdown
|
Seopardy
|
||
|
========
|
||
|
What this is
|
||
|
------------
|
||
|
Seopardy is an implementation of the game "Jeopardy" and a
|
||
|
reimplementation/clone of the software "beopardy", mostly known for being
|
||
|
used in the Chaos Communication Congress Hacker-Jeopardy.
|
||
|
|
||
|
|
||
|
Installation & Requirements
|
||
|
---------------------------
|
||
|
To run this software you need:
|
||
|
|
||
|
* python (python2)
|
||
|
* python-pyside
|
||
|
* python-pyside.phonon (for music)
|
||
|
* python-yaml / PyYAML
|
||
|
* python-serial / pyserial
|
||
|
|
||
|
To play a game I recommend:
|
||
|
|
||
|
* a question file
|
||
|
* music!
|
||
|
* start song (played while naming players)
|
||
|
* question song (played while question is displayed)
|
||
|
* end song (played while victory window is shown)
|
||
|
* a configuration file - just copy seopardy.conf.dist to seopardy.conf
|
||
|
* buttons for player input
|
||
|
|
||
|
|
||
|
The Question File
|
||
|
-----------------
|
||
|
A question file is a yaml-file defining all sections and questions used in the
|
||
|
game. For an example look into `questions/template.q`. It can contain an arbitrary
|
||
|
number of sections, though five are generally recommended. Each section has exactly
|
||
|
five questions. A question can have the following keys:
|
||
|
|
||
|
- Name (to remind you of the question number)
|
||
|
- Question (text/image/... displayed on screen)
|
||
|
- Answer (to remind you of the answer, not used in the program)
|
||
|
- Type (type of question)
|
||
|
- Double-Jeopardy (if the question is a Double-Jeopardy, default false)
|
||
|
|
||
|
Four *Types* of question are supported:
|
||
|
|
||
|
- Text: The text is normally displayed on screen
|
||
|
- Code: The code is displayed with a monospace font, tabs are replaced with
|
||
|
four spaces
|
||
|
- Image: The Question key is a path to an image, which is displayed on screen
|
||
|
- Music: The Question key is a path to a music file, which is played
|
||
|
|
||
|
|
||
|
Gamestate
|
||
|
---------
|
||
|
To prevent you from losing the current gamestate in case of a crash,
|
||
|
seopardy saves its interal state as a yaml file after each question.
|
||
|
You can specify a directory where the gamestates are stored in the config
|
||
|
file and load a state with the --gamestate parameter.
|
||
|
|
||
|
|
||
|
Player Input
|
||
|
------------
|
||
|
To get the input from a button (aka "the outside world") into the game,
|
||
|
two classes are available:
|
||
|
|
||
|
*Fifo* creates a fifo in your local filesystem, first argument being the
|
||
|
path to where the fifo should be created. To emit a button press you can
|
||
|
simply write an ASCII-number into the fifo, corresponding to the player
|
||
|
which pressed a button. All other characters are ignored.
|
||
|
|
||
|
*Serial* reads from a serial device using pyserial. Parameters are path to the
|
||
|
device, baudrate (default 9600), parity (default N) and stop-bits (default 1).
|
||
|
As with the fifo, an ASCII-number for the player which pressed a button is
|
||
|
expected. All other characters are ignored.
|
||
|
|
||
|
Writing an own class for player input should be fairly easy. Within its own
|
||
|
thread the class can do whatever it wants (including blocking I/O). When it
|
||
|
wants to signal a button was pressed it just needs to emit a ButtonEvent.
|
||
|
|
||
|
|
||
|
Known Bugs
|
||
|
----------
|
||
|
|
||
|
* The focus order and focus setting for the question-answer-editing and the
|
||
|
double-jeopardy window is somewhat broken.
|
||
|
* The input threads are currently not shut down correctly, leaving some ugly
|
||
|
output on the console when exiting the game.
|
||
|
* Stylesheets for buttons/labels could be more centrally managed and more
|
||
|
consistent.
|
||
|
|