Home > Articles > Programming > Visual Basic

  • Print
  • + Share This

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.


  • + Share This
  • 🔖 Save To Your Account

Related Resources

There are currently no related titles. Please check back later.