6 ms·
Show HN: Word Champions, a word game written in ClojureScript
- nathell 7y agoHey HN! This 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/ http://blog.danieljanus.pl/2020/01/03/word-champions/
- hizanberg 7y agoIMO 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.
- nathell 7y agoThanks! This has been suggested to me before, and integrating a better wordlist is #1 on the TODO.
- pimlottc 7y agoAlso 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”.
- deleted 7y ago[deleted]
- JimTheMan 7y agoSame here! Either that or make it super obvious the kinds of words that are allowable in the Tutorial example.
- aidenn0 7y agohttps://github.com/elasticdog/yawl https://github.com/elasticdog/yawl is a good starting point for word games.
- sandyarmstrong 7y agoYeah, I just got "sluts", which was unfortunate. "Penis" didn't bother me but if you want wider appeal you might consider a more conservative list. EDIT: I only found these because I'm having so much fun playing the game! Great work!!!
- pgt 7y agoYes please! I got "msgid". No way I would have guessed that was valid.
- smrq 7y agoHa, I also got "msgid". Glad I read your comment first :) FWIW, the same puzzle also included "penis", and as I'm at the office right now, I filled that one in last.
- sc4ramouche 7y agoHey, thanks for sharing this. Looks good! How is your experience been with ClojureScript? It seems enticing to me now, considering giving it a try (I’m coming from JS realm).
- nathell 7y agoOverwhelmingly 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. [0]: https://github.com/day8/re-frame/ https://github.com/day8/re-frame/
- thom 7y agoMy 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.
- vga805 7y agoI will echo the other repely. in particular, reframe has been a joy to work with and imo made me a better js & react developer
- schemescape 7y agoThat was easy to understand and fun. Some sort of competitive aspect (e.g. a leaderboard) would make this addictive :)
- nathell 7y agoI'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.
- escherize 7y agoThere's a pretty good firebase cljs library that would let you keep most of those benefits.
- Scarbutt 7y agoWhy is the JS payload so big? the words are on a different file. Also, try gzipping.
- nathell 7y agoIt's the ClojureScript runtime, Reagent, re-frame, plus the game's compiled code – it adds up. Nginx should automatically gzip all assets. But I just checked and apparently it doesn't. I'll reconfigure, thanks!
- capableweb 7y agoProbably 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
- fishmaster 7y agoThis is a great idea for pub quizzes. There's usually a puzzle sheet with one such riddle.
- failrate 7y agoGood fun. I played an easy puzzle, and it was gratifying to go from "Is this even possible?" to "Done!"
- bil7 7y agogood fun!