Overwhelmingly positive. There've been rough edges, and the learning curve is rather steep – especially if you haven't used Clojure before – but it's worth it.
Re-frame [0] in particular has been a joy to use; I've developed a few large apps in it and they've been quite easy to maintain.
My one recommendation going through the code would be to try and separate the game logic out a bit more. There are things spread between the subs, events and db namespaces that could be abstracted out, and ideally separated from any knowledge of the re-frame db or other external concerns.
This might just be my taste, but quite often I'd like to get to the point that I can unit test all of a game's logic, or even play a version of the game in the REPL, before hooking up what are then very thin subs and event handlers.
IMO it should have an option to stick with dictionary words, I spent a long time on puzzles that had 'zdnet' and 'vsnet' as words which were basically impossible to work out without trial & error since there are no english words in the dictionary that starts with `vs` or `zd`.
If includes cryptic abbreviations, brand and product names the number of possibilities open up exponentially and you can no longer rely on English rules to help solve the puzzle, it basically becomes a trial & error permutations game.
Also consider screening out proper names, they are not allowed in many common word games (e.g. Scrabble, Boggle) so I got kinda stumped when one of the answers was “Tyler”.
I'm considering adding a leaderboard, but that would damage the appeal that the current version runs completely client-side – from server point of view, it's just a few static files served by nginx.
Before I implement one, I'll likely add permalinks to puzzles, so you can race against your friends in solving the exact same riddle just by sharing a URL.
Probably you're already doing this but make sure advanced compilation is turned on, pretty-names turned off and you're not using multimethods or pprint in your application
23 comments
[ 3.0 ms ] story [ 64.5 ms ] threadThis is a game I originally wrote as a training tool for my friend who was going to appear on a TV talent show.
I’ve written an accompanying blog post that tells that story. Read it here: http://blog.danieljanus.pl/2020/01/03/word-champions/
How is your experience been with ClojureScript? It seems enticing to me now, considering giving it a try (I’m coming from JS realm).
Re-frame [0] in particular has been a joy to use; I've developed a few large apps in it and they've been quite easy to maintain.
[0]: https://github.com/day8/re-frame/
This might just be my taste, but quite often I'd like to get to the point that I can unit test all of a game's logic, or even play a version of the game in the REPL, before hooking up what are then very thin subs and event handlers.
If includes cryptic abbreviations, brand and product names the number of possibilities open up exponentially and you can no longer rely on English rules to help solve the puzzle, it basically becomes a trial & error permutations game.
Either that or make it super obvious the kinds of words that are allowable in the Tutorial example.
EDIT: I only found these because I'm having so much fun playing the game! Great work!!!
FWIW, the same puzzle also included "penis", and as I'm at the office right now, I filled that one in last.
Before I implement one, I'll likely add permalinks to puzzles, so you can race against your friends in solving the exact same riddle just by sharing a URL.
Nginx should automatically gzip all assets. But I just checked and apparently it doesn't. I'll reconfigure, thanks!