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

Monday, January 4, 2010

Happy New Year!

Happy New Year to everyone. What an exciting year we had in 2009, and what we have planned for 2010 is really getting me fully energized and raring to go.

Much of what we are doing right now is around the Android platform (aka the "Google phones"), and so a short pre-announcment seems fitting. A new release of Cribbage Pro for the Android is coming out very soon. It will include some exciting new features that the community has asked for either in comments or emails to us, and I can't say enough how great it is to hear from you all and see your support for us and the game.

So what is the new release going to include, well some of that you will have to wait and see, but here are some highlights:
  • A new shuffling algorithm - producing a more "natural" shuffle and reducing the number of times you see the same cards or same mix of cards in a hand.
  • Full game "Save" and "Load" feature - Allowing you to stop in the middle of a game and come back any time later to continue playing.
  • Full game statistics - The system will track and record all your completed games with all the juicy details you might want to know like wins, losses, skunks, double skunks, highest hand, highest pegging and more!
  • New preferences/settings screen that shows you the card images to choose from and also adds a few new setting to change your player image or "avatar" as well as a "user name". Why a user name.... well....
  • A new "Top 50 Stats" page will let you see your ranking against all the other players of Cribbage Pro! Enter a user name in the settings screen, and you can access the top 50 list any time, from anywhere!
  • Bug fixes and more! We have fixed a few minor bugs as well as tweaked a few things here and there to make the game play even better.
So as you can see, there is a lot going into this release, and as we wrap up testing over the next few days you will see this update hit the market place for you all to download and enjoy.

As usual, keep the feedback coming in and let us know what you would like to see added and it may just be the next thing on the list.

-- Josh