Thursday, October 16, 2008

Correct Assumptions : More OOP With cards in games

I wrote the last post with out checking out what Micro Soft had to offer. I found that there is a card game starter kit. I downloaded it and began playing with it. I was shocked to see that what I was thinking would actually work for the handling of cards in a game.

The starter kit builds a blackjack game that you should be able to edit and expand. So i began poking around to see what was there that can be used and modded for my needs. I went to the Card Game Framework to see what was there. I found 3 classes (Card,Deck and Hand). These fit my assumptions with minor changes.

Card is built the way I assumed it would be. It encapsulates the values of the suit,faceValue, and isfaceup. This object is just for the play of this card in other collections. The values are set to private readonly fields or public get properties. That's actually good programing as it stops the programmer from attempting to change cards on the fly.

Deck unlike my deck has only one collection. It also has methods for shuffleing that collection.
Also it has a method for drawing a card. I think since black jack doesn't need a discard deck or to shuffle that deck back in those methods are missing. I can use this as an excellent start for my card based game. I can shuffle anything that looks like a deck. These can even be room tiles from games like house on hunted hill or other games with tiles.

Hand is a collection of cards and cantains a number of cards property. It's inherited by blackjack hand and hit has the rules for black jack in that. all this is wrapped by theanother class.

I know I'm on the write path to writing my game. I'm really excited by this and I can add the silverlight bits.

Saturday, October 11, 2008

A deck of cards in OO Development.

I've been thinking about this for some time. I wanted to write a web based game that uses cards. Kind of think Monoploy or Poker or Solitare. My train of thinking is how do you treat cards.

A card is simple. It's just an object with some properties. In a poker deck a Jack of clubs has a graphic. You know the picture of the jack. It has a Value a J. Now in the deck you know there is only one Jack of Clubs. So my first problem is how do I track the cards that arent in the deck.

I simply started by thinking 2 Collections. A Deck Collection with all the cards and a discard stack. So if one card is pulled from the top of the deck that card has to be placed in to the discard stack. So with this bit of design i can pull a card off the top of a unshuffled deck and place it in a discard pile.

To shuffle I can create a random number generator. And then just delete from where it's pointed from the deck collection. This will then add on top of the discard pile. Now this allows us to pick the top card of a shuffled deck and place it ontop of a discard file.

Next I want to give the cards to players. Again with the 2 Collections one for the deck and one for the discard. The program needs to track where the card is. So all the player obects have collections for cards in there hand. Also a limiting INT to limit hand size. Cards are drawn with random number from the first collection and either placed in discard or hand of a player. then the player can be quiered for there hands.

Ok that's an over view of how to deal a poker hand. Then we can add testing and how to pull the cards and game play options like betting net. I'll post some code so I can test that.