Adds minthrottle and maxthrottle as channel values
Adds extra points for a perfect hunt (all ducks shot by the same player)
Prevent error when a hunt is stopped and no duck has been shot
* Created a Difficulty class to abstract easy/medium/hard/evil (DRY).
* Changed configuration setting from min length to difficulty.
* Tolerate the deprecated 'join' subcommand to worddle.
* Improve game messaging to player.
* Updated documentation.
This makes the code a little uglier, but cuts time and memory in half when
building a new Worddle board. Also updated the boards to not save a reference
to the wordtrie, so after generating the board, it's free for garbage
collection.
Previously every word would be LCYAN+word+LGRAY (or GRAY+word+LGRAY) and all
these extra color codes would cause the message to be truncated when a lot of
words are found. Compacted by only sending a color code when a color change
is needed.
Generate 5 boards and pick the one with the most solutions. It's more fun
when there are more solutions to be found.
Refactored a little - the board is now a class WorddleBoard. Moved the
generation and solution discovery to WorddleBoard. This simplifies Worddle a
little bit, but it probably could be simplified further.
Trying to make the game a little quieter in the main channel, and in general
cut down on flooding. Still no verbosity tuning, but this should be a more
reasonable default level.
Worddle has a lot of logic dedicated to formatting text, and it makes the
code a little unreadable. I tried to move most of the format strings out
as constants (and color them once instead of every time). The resulting
code is a little cleaner looking, but I'm not sure I love it.
It was using the string 'worddle' as the unique identifier in all
scheduled events, which meant that a second game (in another channel,
at the same time) will erase the first game's scheduled events.
Now use the Worddle object's unique identifier when scheduling events.
Worked around a supybot bug and abstracted shutdown to calling
game.stop(now=True). This way the Wordgames class can be ignorant
of the details of stopping a game.
* Whenever someone joins, put at least 5 seconds on the pre-game clock.
(If more than 5 seconds are already remaining, do nothing.)
* Use the entire delay period before showing "Get ready!".
* Delay 3 more seconds before jumping into the game.