The clsCard Class
The library of routines presented in this chapter actually consists of two classes: clsCard and clsDeck. The clsCard class includes the data members and methods required to manipulate a single card, and the clsDeck class draws on the clsCard class to create and manipulate a deck of 52 cards, each of which is an object of the clsCard class. The clsDeck class also enables you to group card objects into hands. Listing 8.1 shows the source code for the clsCard class.
Listing 8.1 The clsCard Class
1: '/////////////////////////////////////////////////////////// 2: '// The clsCard Class 3: '/////////////////////////////////////////////////////////// 4: 5: Option Explicit 6: 7: Private m_xPosition As Integer 8: Private m_yPosition As Integer 9: Private m_value As Integer 10: 11: '/////////////////////////////////////////////////////////// 12: '// Class_Initialize 13: '/////////////////////////////////////////////////////////// 14: Private Sub Class_Initialize() 15: m_xPosition = -1 16: m_yPosition = -1 17: m_value = 0 18: End Sub 19: 20: '/////////////////////////////////////////////////////////// 21: '// Display 22: '// 23: '// This subroutine displays the card at the coordinates 24: '// x,y. The card is displayed face-up or face-down based 25: '// on the face parameter. 26: '/////////////////////////////////////////////////////////// 27: Sub Display(x As Integer, y As Integer, face As Integer) 28: xPosition = x 29: yPosition = y 30: If face = FaceUp Then 31: ShowFace 32: Else 33: ShowBack 34: End If 35: End Sub 36: 37: '/////////////////////////////////////////////////////////// 38: '// ShowFace 39: '// 40: '// This subroutine displays the card's face. The card must 41: '// have been previously displayed with the Display() 42: '// subroutine, which sets the card's screen coordinates. 43: '/////////////////////////////////////////////////////////// 44: Sub ShowFace() 45: CardForm.PaintPicture frmCards.Picture1(m_value), _ 46: xPosition, yPosition 47: End Sub 48: 49: '/////////////////////////////////////////////////////////// 50: '// ShowBack 51: '// 52: '// This subroutine displays the card's back. The card must 53: '// have been previously displayed with the Display() 54: '// subroutine function, which sets the card's screen 55: '// coordinates. 56: '/////////////////////////////////////////////////////////// 57: Sub ShowBack() 58: CardForm.PaintPicture frmCards.Picture1(52), _ 59: xPosition, yPosition 60: End Sub 61: 62: '/////////////////////////////////////////////////////////// 63: '// EraseCard 64: '// 65: '// This subroutine erases the card from the CardForm 66: '// display. 67: '/////////////////////////////////////////////////////////// 68: Sub EraseCard() 69: CardForm.PaintPicture frmCards.Picture1(53), _ 70: xPosition, yPosition 71: End Sub 72: 73: '/////////////////////////////////////////////////////////// 74: '// Get and Let xPosition 75: '/////////////////////////////////////////////////////////// 76: Property Get xPosition() As Integer 77: xPosition = m_xPosition 78: End Property 79: 80: Public Property Let xPosition(ByVal vNewValue As Integer) 81: m_xPosition = vNewValue 82: End Property 83: 84: '/////////////////////////////////////////////////////////// 85: '// Get and Let yPosition 86: '/////////////////////////////////////////////////////////// 87: Property Get yPosition() As Integer 88: yPosition = m_yPosition 89: End Property 90: 91: Public Property Let yPosition(ByVal vNewValue As Integer) 92: m_yPosition = vNewValue 93: End Property 94: 95: '/////////////////////////////////////////////////////////// 96: '// Get and Let value 97: '/////////////////////////////////////////////////////////// 98: Public Property Get value() As Integer 99: value = m_value 100: End Property 101: 102: Public Property Let value(ByVal vNewValue As Integer) 103: m_value = vNewValue 104: End Property
Analysis - The Display method (Lines 27 through 35) displays the card object at the pixel coordinates given as the method's x and y parameters. The face parameter determines whether the card is displayed face-up (by calling the ShowFace method) or face-down (by calling the ShowBack method). The Display method saves the card's screen location in the object's xPosition and yPosition properties.
Analysis - The ShowFace method (Lines 44 through 47) displays the card object's face. The card must have been previously displayed with the Display method, which sets the card's screen coordinates and saves those coordinates in the xPosition and yPosition properties. ShowFace calls the PaintPicture method of the CardForm object (which should be your program's main form) to display the card image, which is one of the images in the Picture1 PictureBox control array.
Analysis - The ShowBack method (Lines 57 through 60) displays the card's back. As with the ShowFace method, the card must have been previously displayed with the Display method, which sets the card's screen coordinates and saves them in the xPosition and yPosition properties. ShowBack calls the PaintPicture method of the CardForm object (which should be your program's main form) to display the card-back image, which is the next-to-last image in the Picture1 PictureBox control array.
Analysis - The EraseCard method (Lines 68 through 71) erases a card from the screen. As with the ShowFace method, the card must have been previously displayed with the Display method, which sets the card's screen coordinates and saves them in the xPosition and yPosition properties. EraseCard calls PaintPicture method of the CardForm object (which should be your program's main form) to display the blank card image, which is the last image in the Picture1 PictureBox control array.
Analysis - The Get and Let methods for each of the properties (Lines 76 through 104) enable a program to obtain the values of the class object's properties. You should use the Let methods with caution because it's not a good idea to change the property values unless you're very sure of what you're doing. For example, if you change a card's xPosition and yPosition properties, a card will be drawn on the screen in one place while the class object thinks the card is in another place.
In this class, the properties xPosition and yPosition (stored in the m_xPosition and m_yPosition variables) are the card's x,y screen coordinates, and value (stored in m_value) is the card's value (which is really more an ID than a card value). The m_value property can be a number from 0 to 51, with the cards numbered as they appear in Figure 8.1.
Figure 8.1
The order of the cards from ID 0 to 51.
You can use integer division to determine a card's suit. The formula is suit = value \ 13. This formula results in a value of 0, 1, 2, or 3, which indicates diamonds, clubs, spades, or hearts, respectively.
Use modulus division to determine a card's face value, as in the formula faceValue = value mod 13. This formula yields a result from 0 to 12, with 0 being an ace and 12 being a king. Of course, a specific card program must determine the actual point value of a card.
The clsCard class includes four methods, which are listed and described in Table 8.1.
Table 8.1 Methods of the clsCard Class
Method |
Description |
Display(x As |
Sets the card's coordinates and displays the card at the x,y coordinates. The Integer, y As card is displayed face-up or face-down based on the face parameter, Integer, face which will be the value FaceUp or FaceDown.As Integer) |
EraseCard |
Erases the card from the CardForm display. |
ShowFace |
Displays the card's face. The card must have been previously displayed with the Display method, which sets the card's screen coordinates. |
ShowBack |
Displays the card's back. The card must have been previously displayed with the Display method, which sets the card's screen coordinates. |