Saturday, January 16, 2010

Hey, Your Game Cheats!

So I have debated for a while now about writing this post, as it can be perceived negatively by some. However, over the last few days we have seen a lot of downloads of the Cribbage Pro game on the Android phones, which is really awesome, and at the same time there has been a rise in the number of comments and emails we have been fielding from players who seem to insist the computer is cheating on the various levels of play. I think the vast majority of players realize this is not the case, as many of them we can see in the statistics are winning against the computer an incredibly large number of times. Similarly, we get emails and comments from others that say the computer is simply too easy to beat and they never lose on any level. I think something inside of us (and yes, I mean "us" as some on our staff have honestly asked the same question) want to accuse a computer of cheating when it beats us soundly in a game. This I suppose is one of the draw backs of creating a game that is indeed challenging to win at.

Initially, I found the accusations funny, because I wrote the game and I know every line of code and piece of logic that is in it inside and out. The funny part is that it would have taken me longer and more code to write a game where the computer is cheating then what we actually did in spending our time researching game play strategy and writing a game that simply knows the rules of cribbage very well and how to win. So let's start with a clear and straightforward statement - I stake my personal reputation and that of the entire Fuller Systems Inc. staff, brand and name on everything we make, and this game is no different. With that in mind, I can say with extreme and utter certainty that the game in no way shape or form is cheating. The computer play is playing a completely "fair game" in every sense of the phrase.

With that said, let me explain what is going on in the game a little, and how it works. If you have received an email from me on this topic, this will look familiar.

First, the hands dealt are done so exactly the same way for each and every difficulty level, with the only difference in the levels of play being which cards the computer may choose to hold or discard. This is why on advanced, the hands the computer ends up with tend to score significantly higher then on the other skill levels. The code for the game runs in such a way as to do the deal of cards exactly the same way each time and the shuffle is as natural as possible for each hand. I fully understand that sometimes the computer can/will achieve hands that are consistently higher in the advanced mode, but this is due to the level of computations it goes through in determining what the best possible holding of cards could be. It is in no way doing anything other then just that - working with the cards it is dealt. This is not to say that the computer can not go "on a run", just like a human player might, and get a series of good hands dealt to it - that is just as likely for the computer as it would be for a human player if that human player were to make the same discard decisions. Just as we don't manipulate the deal or play to give the computer an advantage, we don't handicap it either.

To go a step further, here is the exact code used during the dealing of the cards from the deck which is a simple object that holds an array of cards that have been shuffled prior to this step.


// 6 cards for each player - 12 total
for (int i = 0; i < 6; i++) {
  //Deal to pone player first, then to dealer
  if (isP0Deal) {
    player1Cards[i] = deck.nextCard();
    player0Cards[i] = deck.nextCard();
  } else {
    player0Cards[i] = deck.nextCard();
    player1Cards[i] = deck.nextCard();
  }
}

If you know code structure, or can read through and derive the basic thought from this, you can see that it has no consideration for the computer player (player0) then the other player and that it deals out the cards as per cribbage rules based on who is the dealer. Unfortunately there is not much more I can add here, short of sharing the entire game code with everyone, which we can not do for obvious reasons. So one could claim that this code is not the real code, or that later in the game code changes are made or something. Please understand, there would be absolutely no value for Fuller Systems to have a game that we give away for free, cheat in any way. In the future releases of features we add, you will see more on why that is (yes, think multi-player). In those future versions it becomes even more critical that we ensure no player has any advantage in the deal over any other player.

Lastly, we are working on finding an independent authority to audit and review the game to prove it is fair and accurate in it's play, which we hope will remove some of these concerns. As of yet, we have not found an independent organization that is capable of doing this, so if you have suggestions, please let us know by email or in the comments here.

Thank you for letting me take the time on this blog to respond to some of the accusations, and if you have any thoughts, suggestions or questions, please don't hesitate in letting us know.

-- Josh