So, I was sitting in The Eagle with Andrew the night before my Corpus interview (blog post written, pending non-disclosure agreement expiry in January) when he told me he’d discovered Complex Hearts and suggested we play it at some point after interviews. The idea is simple: normal hearts with an imaginative twist (Phil Plait style pun :P). The point cards are hearts (+1), Q of Spades (+13 i), J of Diamonds (-10) and 10 of Clubs (multiplies your round’s score by 2i). The first person to end up with a score of magnitude > 100 loses (and I guess the one with the smallest magnitude wins). Shooting is an option – after a successful shoot you can opt to give everyone 13 + 13 i points, which I did in the first round we ever played (!)
We’re also wondering whether each game necessarily ends at some point or whether it is actually possible for a game to run on forever. At first glance it seems like it can go on forever but the details are genuinely non-trivial – inventing a situation in which it does never end is harder than it seems and can’t be thought up in a matter of seconds (our discussion of this game property was brief to say the least).
We came up with this crazy idea involving plotting players’ scores on an Argand diagram for some extra amusement. The first time we played I used an Excel spreadsheet to plot a circle of radius 100 and some points representing people’s scores. If someone goes outside the circle they lose. Then I wrote a program – and here’s the result (it’s still being developed and features are being added as and when people suggest them):
It was a very quick hack of a program so I wrote some pretty messy code (I really shouldn’t get into this habit) but it’s pretty nifty and I’m pleased with it.
I’ve also been considering attempting to write an online version so people can play against each other but learning Flash seems like a lot of effort…
Compared to many other card games, normal Hearts is fairly sparse on tactics – whatever you do don’t get the Q of spades. But this variant introduces a whole new level of complexity (oh no not again). I’ve noticed a couple of things about gameplay: In every game I’ve played, people lose by drifting up. The reason’s pretty simple: you can gain imaginary points easily: either get the Q of spades or get a load of hearts then the 10 of Clubs. But it’s almost impossible to lose imaginary points: you have to get the J and the 10 in the same round. Also, in terms of real points, ignoring the 10 of clubs, on average each person will gain 0.75 points per round just because of the Jack. And in every game I’ve played people tend to drift in the negative real direction, so winning hearts tricks seems to be a good thing. Perhaps a good tactic would be to avoid passing strong hearts and try to win hearts tricks. That way, if you try to do the Jack-10 combo to gain negative imaginary points and all you have is the Jack, you still gain from it by losing points. After all, chances are someone’s going to have shot off the top of the Argand diagram by the time anyone wins a total of 100 real points (which would involve winning almost all the hearts in every round for at least 8 rounds).
AI for Complex Hearts?
I was considering writing an AI for complex hearts at one point – one that attempts to guess what everyone else has and play accordingly. It would have a points engine to work out which cards it wants to win/lose far more rationally than a human (in this game I’m convinced you want to win hearts) so it wouldn’t need to be *too* complicated to do reasonably well. Then again, the rules are non-trivial. Perhaps I could use Microsoft Inter.NET (cf. my work experience) to work some Bayesian Inference magic – using that framework is pretty amazing: give it some information and command it to “INFER!” (a bit like Mathematica: just using the single line Solve[…] saves you about a week’s worth of sweat, blood and tears).