Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Word Champions, a word game written in ClojureScript (danieljanus.pl)
76 points by nathell 41 days ago | hide | past | web | favorite | 22 comments

Hey 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/

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.

Thanks! This has been suggested to me before, and integrating a better wordlist is #1 on the TODO.

Yeah, 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!!!

https://github.com/elasticdog/yawl is a good starting point for word games.

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”.

Same here!

Either that or make it super obvious the kinds of words that are allowable in the Tutorial example.

Yes please! I got "msgid". No way I would have guessed that was valid.

Ha, 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.

Hey, 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).

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.

[0]: https://github.com/day8/re-frame/

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.

I will echo the other repely. in particular, reframe has been a joy to work with and imo made me a better js & react developer

Good fun. I played an easy puzzle, and it was gratifying to go from "Is this even possible?" to "Done!"

This is a great idea for pub quizzes. There's usually a puzzle sheet with one such riddle.

That was easy to understand and fun. Some sort of competitive aspect (e.g. a leaderboard) would make this addictive :)

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.

There's a pretty good firebase cljs library that would let you keep most of those benefits.

Why is the JS payload so big? the words are on a different file. Also, try gzipping.

It'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!

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

good fun!

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact