home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-09-08 | 91.8 KB | 2,686 lines |
-
- <SCRIPT LANGUAGE="VBScript">
- <!--
-
- 'The naming conventions for each of the areas where
- ' cards can play are:
- '
- ' Shuffle Stack Place where cards are ALL face down
- ' and the user can click to put cards into
- ' play. Both 3 card and 1 card deal are supported.
- ' (to change number of cards played
- ' change the value of gCOUNTDEAL)
- ' There is only 1 Shuffle Stack.
- '
- ' Discard Stack Place where cards are face up
- ' and can be dragged to an Ace Stack
- ' or a Card Stack. There is only 1 Discard Stack.
- '
- ' Ace Stack Place where cards of the same suit
- ' are piled, starting with the Ace and Ending
- ' with the King. When all kings are showing
- ' the game is over and the animation begins.
- ' There are 4 Ace Stacks.
- '
- ' Card Stack Place where cards are piled, alternating the
- ' the suit and in descending order.
- ' There are 7 card stacks.
-
- 'The following global variables are used for this application.
- 'Before each variable is information explaining how to use it,
- 'as well as explanatory text on the question that the variable
- 'answers (Boolean) or a statement describing the variable's use.
- '
- 'The variable naming conventions used in this
- ' application are represented by: [g][r]vartypeVarName
- ' Where:
- ' [g] Denotes it as a global variable.
- ' [r] Denotes it as an array (region).
- ' vartype One of the values specified below.
- ' VarName Name of variable, starting each word
- ' with a capital letter.
- ' Using a VARNAME in ALL uppercase
- ' will denote it as a constant value.
- '
- ' vartype can be:
- ' d Decimal number, numeric and non-integer.
- ' b Boolean.
- ' int Integer.
- ' inc Incrementer (Used when doing things, like animations
- ' in steps or increments).
- ' str String.
- ' obj Object or Control.
- '
- ' NOTE: Since all data types in VBScript are Variants,
- ' this variable convention is for documentation and
- ' to help you with debugging and programming.
- '
-
- 'Are we in debug mode?
- dim gbDebug
-
- 'Did the mouseup event happen so
- ' we can stop dragging a card?
- dim gbMouseUp
-
- 'Number of MouseMove(s) to skip before actually
- ' redrawing a card (makes the drag seem faster).
- dim gintDragSkip
-
- 'Did the user want to End the game?
- dim gbEndGame
-
- 'Done with bouncing all cards off screen.
- dim gbAnimationDone
-
- 'Was the background clicked during card animation?
- dim gbLeaveEarly
-
- 'Number of moves the card will take to get to the ace
- ' Stack during animation
- dim gincCardMoveSteps
-
- 'Current card being moved.
- dim gobjCurMoveCard
-
- 'Amount to move left of card on each step.
- dim gincEndLeft
-
- 'Amount to move top of card on each step.
- dim gincEndTop
-
- 'Order the suits appear on the Ace Stacks.
- dim gstrSuitOrder
-
- 'Stack the cards are currently being moved to
- dim gintCurStackToMove
-
- 'Done moving cards to Ace Stack.
- dim gbCardMoveDone
-
- 'Is the shuffling done yet?
- dim gbShuffleDone
-
- 'The array to hold the randomly shuffled cards.
- dim grintShuffled(52)
-
- 'Number of times to go into the random sequence.
- dim gRNDCOUNT
-
- 'For the End game
- 'Each card that is currently bouncing and the
- ' top and left value for each.
- dim grCardBouncing(4,3)
-
- 'Which cards are done moving.
- dim gbDoneMoving(4)
-
- 'Friction and gravity valued applied to each bounce.
- dim gdFriction
- dim gdGravity
-
- 'Used for the count of cards to deal.
- dim gCOUNTDEAL
-
- 'Number of cards moved to Discard Stack when a user clicks the
- ' Shuffle Stack. Needed to determine how many cards should
- ' be showing on the Discard Stack.
- dim gintCountDiscarded
-
- 'Stack the card is being moved from.
- dim gintSrcStack
-
- 'Used during animation. These variables
- ' store the starting position of each card and
- ' the End points of where the card
- ' should End up after being moved.
- dim gdStartTop, gdStartLeft
- dim gdCardTop, gdCardLeft
- dim gdOffsetTop
-
- 'Card being moved.
- dim gintMoveCardInx
-
- 'Number of total cards being moved during a mouse
- ' drag, i.e., moving cards from one stack to another.
- dim gintCountMoving
-
- 'Holds all the cards of the deck.
- dim grobjAllCards(52)
-
- 'Is the card face up?
- dim grbCardShowing(52)
-
- 'Current deck being displayed.
- dim gintCurDeck
-
- 'Current deck being displayed in the dialog.
- dim gintTempCurDeck
-
- 'Holds all the card backs to be displayed later.
- dim grobjCardDeck(12)
-
- 'Used when comparing with a King or Ace.
- dim gACE
- dim gKING
-
- 'Starting index into stack array of Shuffle Stack.
- dim gintShuffleStackInx
-
- 'Starting index into stack array of Discard Stack.
- dim gintDiscardStackInx
-
- 'Starting index into stack array of first Ace Stack
- dim gintAceStackStartInx
-
- 'This encompasses all 7 Card Stacks, 4 Ace Stacks,
- ' Shuffle Stack and Discard Stack.
- 'This array contains 30 items in each stack because 28 is
- ' the maximum number of cards that could be in one stack
- ' plus two spaces for other info.
- ' The first dimension of the array determines which
- ' stack to use and the second dimension is what is on
- ' the stack. The first element in each stack is the
- ' stack object, the second element is the count of
- ' elements and the third element onward is where the cards are stored.
- dim grobjAllCardStacks(13,30)
-
- 'Value of the bottom of the stack, empty stack.
- dim gstrBOTTOMOFSTACK
-
- 'Count of the total number of stacks used.
- dim gintCountAllStacks
-
- 'Total number of card stacks (7).
- dim gintCountCardStacks
-
- 'Number of pixels used between each card when
- ' being drawn.
- dim gintCardOffset
-
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- '**********************************************
- '* Name: DebugPrint
- '**********************************************
- '* Description:
- '* Provides a utility Function that displays
- '* the string sent to it in a debug
- '* "window." Currently, a listbox control
- '* is used to display debug output.
- '* Feel free to call this Function during
- '* debugging.
- '* NOTE: Does depEnd on the existence of a
- '* listbox with the ID of lstDebugPrint
- '**********************************************
- '* Parameters:
- '* str String displayed to debug window
- '**********************************************
- Sub DebugPrint(str)
- If gbDebug then
- lstDebugPrint.additem str
- END IF
- End Sub 'DebugPrint
-
- '**********************************************
- '* Name: OnLoad event for ActiveX Layout
- '**********************************************
- '* Description:
- '* Sets up the default values and
- '* calls startgame to get things going.
- '**********************************************
- '* Parameters:
- '* None
- '**********************************************
- Sub Form_OnLoad()
- 'Turn debug mode off
- gbDebug = false
- 'Allow the user a checkbox for changing debug mode
- chkDebug.value = gbDebug
-
- Form.DrawBuffer = "256000"
- gACE = 1
- gKING = 13
- gCOUNTDEAL = 3
-
- gdFriction = 2
- gdGravity = 9.8
-
- gstrBOTTOMOFSTACK = "BOS"
-
- 'Spacing when drawing a card
- gintCardOffset = 11
-
- gintShuffleStackInx = 12
- gintDiscardStackInx = 13
- gintCountCardStacks = 7
- gintAceStackStartInx = gintCountCardStacks+1
-
- gintCountAllStacks = 13
-
- StartGame
- End Sub 'Form_OnLoad
-
- '**********************************************
- '* Name: StartGame
- '**********************************************
- '* Description:
- '* Gets the game going by setting up
- '* the card back and shuffling and dealing
- '* the cards.
- '**********************************************
- '* Parameters:
- '* None
- '**********************************************
- Sub StartGame
- gbEndGame = False
- 'Values used during animation
- gintDragSkip = 3
- gbCardMoveDone = True
- tmEndAnimation.enabled = false
- tmEndCardMove.enabled = false
- gincCardMoveSteps = 0
- gincEndLeft = 0
- gincEndTop = 0
- gintCountMoving = 0
-
- LoadCards
-
- if gintCurDeck > -1 or gintCurDeck < -12 then
- ChangeTheDeck -1
- end if
-
- gRNDCOUNT = 500
-
- DealCards
- End Sub 'StartGame
-
- '**********************************************
- '* Name: LoadCard
- '**********************************************
- '* Description:
- '* Loads all the arrays with the card objects.
- '* Initializes grbCardShowing.
- '* Applies default values to the stacks.
- '**********************************************
- '* Parameters:
- '* None
- '**********************************************
- Sub LoadCards
- 'Could also use a control array here but this
- ' code loads the card objects into the array
- set grobjAllCards(1) = Card1H
- set grobjAllCards(2) = Card2H
- set grobjAllCards(3) = Card3H
- set grobjAllCards(4) = Card4H
- set grobjAllCards(5) = Card5H
- set grobjAllCards(6) = Card6H
- set grobjAllCards(7) = Card7H
- set grobjAllCards(8) = Card8H
- set grobjAllCards(9) = Card9H
- set grobjAllCards(10) = Card10H
- set grobjAllCards(11) = Card11H
- set grobjAllCards(12) = Card12H
- set grobjAllCards(13) = Card13H
- set grobjAllCards(14) = Card1D
- set grobjAllCards(15) = Card2D
- set grobjAllCards(16) = Card3D
- set grobjAllCards(17) = Card4D
- set grobjAllCards(18) = Card5D
- set grobjAllCards(19) = Card6D
- set grobjAllCards(20) = Card7D
- set grobjAllCards(21) = Card8D
- set grobjAllCards(22) = Card9D
- set grobjAllCards(23) = Card10D
- set grobjAllCards(24) = Card11D
- set grobjAllCards(25) = Card12D
- set grobjAllCards(26) = Card13D
- set grobjAllCards(27) = Card1C
- set grobjAllCards(28) = Card2C
- set grobjAllCards(29) = Card3C
- set grobjAllCards(30) = Card4C
- set grobjAllCards(31) = Card5C
- set grobjAllCards(32) = Card6C
- set grobjAllCards(33) = Card7C
- set grobjAllCards(34) = Card8C
- set grobjAllCards(35) = Card9C
- set grobjAllCards(36) = Card10C
- set grobjAllCards(37) = Card11C
- set grobjAllCards(38) = Card12C
- set grobjAllCards(39) = Card13C
- set grobjAllCards(40) = Card1S
- set grobjAllCards(41) = Card2S
- set grobjAllCards(42) = Card3S
- set grobjAllCards(43) = Card4S
- set grobjAllCards(44) = Card5S
- set grobjAllCards(45) = Card6S
- set grobjAllCards(46) = Card7S
- set grobjAllCards(47) = Card8S
- set grobjAllCards(48) = Card9S
- set grobjAllCards(49) = Card10S
- set grobjAllCards(50) = Card11S
- set grobjAllCards(51) = Card12S
- set grobjAllCards(52) = Card13S
-
-
- 'Make all cards transparent
- ClearAllCards
-
- 'Load up the card stacks
- set grobjAllCardStacks(gintShuffleStackInx,1)= Shuffle
- set grobjAllCardStacks(gintDiscardStackInx,1)= Discard
-
- set grobjAllCardStacks(1,1) = Stack1
- set grobjAllCardStacks(2,1) = Stack2
- set grobjAllCardStacks(3,1) = Stack3
- set grobjAllCardStacks(4,1) = Stack4
- set grobjAllCardStacks(5,1) = Stack5
- set grobjAllCardStacks(6,1) = Stack6
- set grobjAllCardStacks(7,1) = Stack7
-
- for inx = 1 to gintCountAllStacks
- grobjAllCardStacks(inx,2) = 0
- next
-
- set grobjAllCardStacks(gintAceStackStartInx,1) = Ace1
- set grobjAllCardStacks(gintAceStackStartInx+1,1) = Ace2
- set grobjAllCardStacks(gintAceStackStartInx+2,1) = Ace3
- set grobjAllCardStacks(gintAceStackStartInx+3,1) = Ace4
-
-
- 'Setup initial stack size by setting to the size of a card object.
- ' Don't use default Discard Stack because is hardcoded.
- for inx = 1 to gintCountAllStacks - 1
- grobjAllCardStacks(inx,1).height = grobjAllCards(1).height
- grobjAllCardStacks(inx,1).width = grobjAllCards(1).width
- next
-
- set grobjCardDeck(1) = CardDeck1
- set grobjCardDeck(2) = CardDeck2
- set grobjCardDeck(3) = CardDeck3
- set grobjCardDeck(4) = CardDeck4
- set grobjCardDeck(5) = CardDeck5
- set grobjCardDeck(6) = CardDeck6
- set grobjCardDeck(7) = CardDeck7
- set grobjCardDeck(8) = CardDeck8
- set grobjCardDeck(9) = CardDeck9
- set grobjCardDeck(10) = CardDeck10
- set grobjCardDeck(11) = CardDeck11
- set grobjCardDeck(12) = CardDeck12
-
- End Sub 'LoadCard
-
- '**********************************************
- '* Name: ChangeTheDeck
- '**********************************************
- '* Description:
- '* Changes the current deck being used.
- '**********************************************
- '* Parameters:
- '* DeckID New card deck to be displayed.
- '* Current value of deck is stored
- '* in gintCurDeck.
- '**********************************************
- Sub ChangeTheDeck (DeckID)
- 'The deck back didn't change so don't redo it.
- If gintCurDeck = DeckID then
- exit Sub
- End If
- 'Deck is new, let's change all the cards that need it.
- gintCurDeck = DeckID
-
- for StackInx = 1 to gintCountAllStacks
- for inner = 1 to intCountOnStack(StackInx)
- strCard = strGetStackElement(StackInx,inner)
- intCardInx = intGetCardIndex(strCard)
- If not grbCardShowing(intCardInx) then
- 'Redraw the cards that are not face up.
- DrawCard intCardInx
- End If
- next
- next
- End Sub 'ChangeTheDeck
-
- '**********************************************
- '* Name: ClearAllCards
- '**********************************************
- '* Description:
- '* Sets all card objects to their transparent
- '* value.
- '**********************************************
- '* Parameters:
- '* None
- '**********************************************
- Sub ClearAllCards
- for inx = 1 to 52
- grobjAllCards(inx).Suite = 0
- grobjAllCards(inx).Visible = True
- next
- End Sub 'ClearAllCards
-
- '**********************************************
- '* Name: Push
- '**********************************************
- '* Description:
- '* Pushes (adds) a card object to a stack.
- '**********************************************
- '* Parameters:
- '* intStack Stack to add card to
- '* strCard Card to add
- '**********************************************
- Sub Push(intStack, strCard)
- dim intNewSize
-
- If gstrBOTTOMOFSTACK <> strTopOfStack(intStack) then
- grobjAllCardStacks(intStack,1).height = grobjAllCardStacks(intStack,1).height + intGetVertOffset(intStack)
- ' grobjAllCardStacks(intStack,1).width = grobjAllCardStacks(intStack,1).width + intGetHorzOffset(intStack)
- End If
-
- intNewSize = grobjAllCardStacks(intStack,2)+1
- grobjAllCardStacks(intStack,2) = intNewSize
- grobjAllCardStacks(intStack,intNewSize+2) = strCard
-
- 'This makes all cards but the top two invisible so drawing of the stack
- ' is much faster
- if intNewSize > 2 and _
- (intStack >= gintAceStackStartInx and intStack <= gintAceStackStartInx+3) then
- CardIndex = intGetCardIndex(grobjAllCardStacks(intStack,intNewSize+2-2))
- grobjAllCards(CardIndex).visible = false
- end if
-
- End Sub 'Push
-
-
- '**********************************************
- '* Name: strPop
- '**********************************************
- '* Description:
- '* Returns the string representation of
- '* the card at the top of the stack and
- '* removes it from the top.
- '**********************************************
- '* Parameters:
- '* intStack Stack to strPop card off of
- '**********************************************
- Function strPop(intStack)
- strCard = strTopOfStack(intStack)
-
- If gstrBOTTOMOFSTACK = strCard then
- strPop = gstrBOTTOMOFSTACK
- exit Function
- End If
-
- pos = grobjAllCardStacks(intStack,2)
-
- 'This unhides the cards that were hidden in Sub Push
- if pos > 2 and _
- (intStack >= gintAceStackStartInx and intStack <= gintAceStackStartInx+3) then
- CardIndex = intGetCardIndex(grobjAllCardStacks(intStack,pos+2-2))
- grobjAllCards(CardIndex).visible = true
- end if
-
- strPop = grobjAllCardStacks(intStack,pos+2)
- grobjAllCardStacks(intStack,2) = pos-1
-
- grobjAllCardStacks(intStack,1).height = grobjAllCardStacks(intStack,1).height - intGetVertOffset(intStack)
- ' grobjAllCardStacks(intStack,1).width = grobjAllCardStacks(intStack,1).width - intGetHorzOffset(intStack)
-
- End Function 'Pop
-
- '**********************************************
- '* Name: strGetStackElement
- '**********************************************
- '* Description:
- '* Internal Stack function used to get
- '* elements that are not on the top or the
- '* bottom of the stack.
- '**********************************************
- '* Parameters:
- '* intStack Stack to get it from
- '* intElement Position of element
- '**********************************************
- Function strGetStackElement(intStack,intElement)
- strGetStackElement = gstrBOTTOMOFSTACK
- If Element <= intCountOnStack(intStack) then
- strGetStackElement = grobjAllCardStacks(intStack,intElement+2)
- End If
- End Function 'strGetStackElement
-
- '**********************************************
- '* Name: strTopOfStack
- '**********************************************
- '* Description:
- '* Returns the string value of the card
- '* on the top of the stack. Does NOT
- '* remove the card from the stack.
- '**********************************************
- '* Parameters:
- '* intStack Stack to get card from
- '**********************************************
- Function strTopOfStack(intStack)
- strTopOfStack = gstrBOTTOMOFSTACK
- If 0 < intCountOnStack(intStack) then
- Pos = intCountOnStack(intStack)
- strTopOfStack = grobjAllCardStacks(intStack,Pos+2)
- End If
- End Function 'strTopOfStack
-
- '**********************************************
- '* Name: strGenerateCard
- '**********************************************
- '* Description:
- '* Generates a card randomly. If the deck has
- '* not been shuffled yet, they will be.
- '**********************************************
- '* Parameters:
- '* intCardCount Card to get
- '**********************************************
- Function strGenerateCard(intCardCount)
- dim rSorted(52)
- 'Shuffle the stack if not already done.
- If not gbShuffleDone then
- Randomize
- 'Go a random number of elements into the sequence.
- for inx = 1 to (gRNDCOUNT * rnd())
- next
-
- 'Load the unsorted array.
- for inx = 1 to 52
- rSorted(inx-1) = inx
- next
-
- 'Load a shuffled card into the array.
- for inx = 0 to 51
- random = cint(rnd() * (51 - inx))
- grintShuffled(inx+1) = rSorted(random)
- rSorted(random) = rSorted(51 - inx)
- next
- gbShuffleDone = true
- End If
- intCardNum = grintShuffled(intCardCount)
- strGenerateCard = strInxToCard(intCardNum)
- End Function 'strGenerateCard
-
- '**********************************************
- '* Name: strInxToCard
- '**********************************************
- '* Description:
- '* Converts a card number (index) to its
- '* string representation.
- '**********************************************
- '* Parameters:
- '* intCardNum Value of card
- '**********************************************
- Function strInxToCard(intCardNum)
- inxSuit = 0
-
- intCurCardNum = intCardNum
- while 13 < intCurCardNum
- intCurCardNum = intCurCardNum - 13
- inxSuit = inxSuit + 1
- wEnd
- Select Case inxSuit
- 'Clubs, Spades, Hearts and Diamonds is the current order
- ' of Suits.
- 'Order in Card.ocx is dependent on suit order.
- case 0
- strSuit = "C"
- case 1
- strSuit = "S"
- case 2
- strSuit = "H"
- case 3
- strSuit = "D"
- case Else
- debugPrint "Error (strInxToCard): attempting to increment suit past last one"
- End select
-
- strCurCard = intCurCardNum & strSuit
- strInxToCard = strCurCard
- End Function 'strInxToCard
-
- '**********************************************
- '* Name: strGetCardSuit
- '**********************************************
- '* Description:
- '* Returns the suit of a card.
- '**********************************************
- '* Parameters:
- '* strCard Card to get the suit of.
- '**********************************************
- Function strGetCardSuit(strCard)
- strGetCardSuit = ""
- If "" = strCard then
- exit Function
- End If
-
- strGetCardSuit = right(strCard,1)
- End Function 'strGetCardSuit
-
- '**********************************************
- '* Name: intGetCardIndex
- '**********************************************
- '* Description:
- '* Returns the position, (index) into the
- '* AllCards array of where the card is.
- '**********************************************
- '* Parameters:
- '* strCard Card to find index of.
- '**********************************************
- Function intGetCardIndex(strCard)
- If "" = strCard or gstrBOTTOMOFSTACK = strCard then
- intGetCardIndex = -1
- exit Function
- End If
- strSuit = right(strCard,1)
- 'Order in Card.ocx is dependent on suit order.
- Select case strSuit
- case "H"
- Offset = 26
- case "D"
- Offset = 39
- case "S"
- Offset = 13
- case "C"
- Offset = 0
- End Select
-
- intGetCardIndex = Offset + intCardVal(strCard)
- End Function 'intGetCardIndex
-
- '**********************************************
- '* Name: intCardVal
- '**********************************************
- '* Description:
- '* Returns the numeric value of a given card,
- '* independent of suit.
- '* Ex: 10 of Hearts is "10H" and the value
- '* returned would be 10.
- '**********************************************
- '* Parameters:
- '* strCard Card to get value of.
- '**********************************************
- Function intCardVal(strCard)
- dim tmpVal
- If "" = strCard or gstrBOTTOMOFSTACK = strCard then
- tmpVal = -1
- Else
- tmpVal = left(strCard,len(strCard) -1)
- End If
- intCardVal = cint(tmpVal)
- End Function 'intCardVal
-
- '**********************************************
- '* Name: bSameSuit
- '**********************************************
- '* Description:
- '* Returns:
- '* True if cards are the same suit.
- '* False if suits are different.
- '**********************************************
- '* Parameters:
- '* strCard1 First card.
- '* strCard2 Card to compare against first card.
- '**********************************************
- Function bSameSuit(strCard1,strCard2)
- 'Get the values of both cards.
- strSuit1 = strGetCardSuit(strCard1)
- strSuit2 = strGetCardSuit(strCard2)
-
- bSameSuit = (strSuit1 = strSuit2)
- End Function 'bSameSuit
-
- '**********************************************
- '* Name: bSameColor
- '**********************************************
- '* Description:
- '* Returns:
- '* True if cards are the same color.
- '* False if cards are different color.
- '**********************************************
- '* Parameters:
- '* strCard1 First card.
- '* strCard2 Card to compare against first card.
- '**********************************************
- Function bSameColor(strCard1,strCard2)
-
- strSuit1 = strGetCardSuit(strCard1)
- strSuit2 = strGetCardSuit(strCard2)
-
- 'Are they the same suit?
- If (strSuit1 = strSuit2) then
- bSameColor = True
- exit Function
- End If
- 'Since both cards don't match suit
- ' check the other suit of that color.
- Select Case strSuit1
- case "H"
- bSameColor = (strSuit2 = "D")
- case "D"
- bSameColor = (strSuit2 = "H")
- case "S"
- bSameColor = (strSuit2 = "C")
- case "C"
- bSameColor = (strSuit2 = "S")
- End select
-
- End Function 'bSameColor
-
- '**********************************************
- '* Name: intGetHorzOffset
- '**********************************************
- '* Description:
- '* Returns the current horizontal offset
- '* in pixels when drawing the cards on a stack.
- '**********************************************
- '* Parameters:
- '* intStack Stack to draw.
- '**********************************************
- Function intGetHorzOffset(intStack)
- intGetHorzOffset = 0
- 'Only the Discard Stack has a horizontal offset.
- If (gintDiscardStackInx = intStack) then
- intGetHorzOffset = gintCardOffset
- End If
- End Function 'intGetHorzOffset
-
- '**********************************************
- '* Name: intGetVertOffset
- '**********************************************
- '* Description:
- '* Returns the vertical offset, used during
- '* drawing a stack, for a particular stack.
- '**********************************************
- '* Parameters:
- '* intStack Stack to return Vertical
- '* offset for.
- '**********************************************
- Function intGetVertOffset(intStack)
- intGetVertOffset = gintCardOffset
- 'HARDCODE ASSUMPTION: ALL Stacks above gintAceStackStartInx WILL have a vert offset of 0
- If (gintAceStackStartInx <= intStack) then
- intGetVertOffset = 0
- End If
- End Function 'intGetVertOffset
-
- '**********************************************
- '* Name: DrawDiscardStack
- '**********************************************
- '* Description:
- '* The Discard Stack is drawn in this routine
- '* because it is a special case of the draw
- '* routine. The difference being that all
- '* other stacks draw ALL cards with an offset
- '* and the discard ONLY draws the cards on
- '* the top of its pile with an offset.
- '**********************************************
- '* Parameters:
- '* None
- '**********************************************
- Sub DrawDiscardStack
- dim intStartOffset
- dim intStackSize
- dim intCountPiles
- dim intRemainder
-
- 'Default Offset Values
- intHorzOffset = intGetHorzOffset(gintDiscardStackInx)
- intVertOffset = intGetVertOffset(gintDiscardStackInx)
-
- intStackSize = intCountOnStack(gintDiscardStackInx)
-
- 'See if less than three cards were transferred to Discard Stack.
- intStartOffset = (intStackSize - gintCountDiscarded)
-
- 'Draw all underneath cards that won't have an offset.
- for inx = 0 to intStartOffset - 1
- strCard = grobjAllCardStacks(gintDiscardStackInx,inx + 3)
- CardIndex = intGetCardIndex(strCard)
- grobjAllCards(CardIndex).top = grobjAllCardStacks(gintDiscardStackInx,1).top
- grobjAllCards(CardIndex).left = grobjAllCardStacks(gintDiscardStackInx,1).left
- DrawCard CardIndex
- next
- OffsetInx = 0
- 'Draw the cards at the top of the Discard Stack.
- for inx = intStartOffset to intStackSize - 1
- strCard = grobjAllCardStacks(gintDiscardStackInx,inx + 3)
- CardIndex = intGetCardIndex(strCard)
- grobjAllCards(CardIndex).top = grobjAllCardStacks(gintDiscardStackInx,1).top + (OffsetInx * intVertOffset)
- grobjAllCards(CardIndex).left = grobjAllCardStacks(gintDiscardStackInx,1).left + (OffsetInx * intHorzOffset)
- DrawCard CardIndex
- OffsetInx = OffsetInx + 1
- 'Bring that card to top of pile.
- grobjAllCards(CardIndex).ZOrder(0)
- next
- 'Make sure to bring hotspot stack to top of z order so it can get events.
- grobjAllCardStacks(gintDiscardStackInx,1).ZOrder(0)
-
- End Sub 'DrawDiscardStack
-
- '**********************************************
- '* Name: DrawCard
- '**********************************************
- '* Description:
- '* Here we draw a card based on the index
- '* sent in.
- '* NOTE: if Card.ocx changes it will most likely
- '* effect code here.
- '**********************************************
- '* Parameters:
- '* intCardIndex Index into card array of
- '* card being drawn.
- '**********************************************
- Sub DrawCard (CardIndex)
- If True = grbCardShowing(CardIndex) then
-
- 'Calculate which suit it was so we
- ' can change it back.
- inxSuit = (CardIndex \ 13)
- inxCard = CardIndex - (inxSuit*13)
- If (0 <> inxCard) then
- inxSuit = inxSuit + 1
- Else
- inxCard = 13
- End If
- grobjAllCards(CardIndex).Number= inxCard
- Else
- 'Cards are face down, let's use the current deck.
- inxSuit = gintCurDeck
- End If
- grobjAllCards(CardIndex).Suite= inxSuit
- End Sub 'DrawCard
-
- '**********************************************
- '* Name: DrawStack
- '**********************************************
- '* Description:
- '* Draws a specific stack by getting the correct
- '* offset and then calling DrawCard.
- '**********************************************
- '* Parameters:
- '* intStack Stack to draw.
- '**********************************************
- Sub DrawStack (intStack)
-
- 'Default Offset Values
- intHorzOffset = intGetHorzOffset(intStack)
- intVertOffset = intGetVertOffset(intStack)
- If 0 = intCountOnStack(intStack) then Exit Sub
-
- If (gintDiscardStackInx = intStack) then
- DrawDiscardStack
- exit Sub
- End If
-
- for inx = 1 to intCountOnStack(intStack)
- 'This cycles through all the cards in the stack applying an offset.
- strCard = grobjAllCardStacks(intStack,inx + 2)
- intCardIndex = intGetCardIndex(strCard)
- grobjAllCards(intCardIndex).top = grobjAllCardStacks(intStack,1).top + ((inx-1) * intVertOffset)
- grobjAllCards(intCardIndex).left = grobjAllCardStacks(intStack,1).left + ((inx-1) * intHorzOffset)
-
- DrawCard intCardIndex
- next
- If (0 < intCardIndex) then
- grobjAllCards(intCardIndex).ZOrder(0)
- grobjAllCardStacks(intStack,1).ZOrder(0)
- End If
- End Sub 'DrawStack
-
- '**********************************************
- '* Name: DealCards
- '**********************************************
- '* Description:
- '* Here we deal the cards to each of the
- '* 7 card stacks and put the rest into
- '* the Shuffle Stack.
- '**********************************************
- '* Parameters:
- '* NONE
- '**********************************************
- Sub DealCards
- 'The first time calling GenerateCard we have
- ' to be sure it shuffles the deck.
- gbShuffleDone = false
- intCardCount = 1
-
- 'This set of loops will deal the cards
- ' needed to the 7 stacks.
- for inxStack = 1 to gintCountCardStacks
- For inx = 1 to inxStack
- strCard = strGenerateCard(intCardCount)
- 'Push on the new card.
- Push inxStack,strCard
- intCardInx = intGetCardIndex(strCard)
- grbCardShowing(intCardInx) = False
- intCardCount = intCardCount +1
- grobjAllCards(intCardInx).Zorder(0)
- next
- 'Only show the top card on the stack.
- grbCardShowing(intCardInx) = True
- DrawStack inxStack
- next
-
- 'Give the rest to the Shuffle Stack.
- for Card = intCardCount to 52
- strCard = strGenerateCard(Card)
- push gintShuffleStackInx, strCard
- intCardInx = intGetCardIndex(strCard)
- grbCardShowing(intCardInx) = false
- grobjAllCards(intCardInx).Zorder(0)
- next
- DrawStack gintShuffleStackInx
- End Sub 'DealCards
-
- '**********************************************
- '* Name: DoDblClick
- '**********************************************
- '* Description:
- '* Here is where all double-clicking of
- '* a card is processed. The double-click
- '* allows a card to be put on an Ace Stack,
- '* if the move is valid, with the
- '* top card on the stack clicked.
- '**********************************************
- '* Parameters:
- '* intStack The stack that was double-clicked.
- '**********************************************
- Sub DoDblClick(intStack)
- 'If Valid Move then move it.
- intAceInx = gintAceStackStartInx
- bMoved = false
-
- strCard = strTopOfStack(intStack)
- If (gstrBOTTOMOFSTACK = strCard) then Exit Sub
-
- 'Until we find a valid move or run out of Ace Stacks to check.
- While intAceInx < gintAceStackStartInx + 4 and not bMoved
- bMoved = bIsLegalMove(intStack,intAceInx,strCard)
- intAceInx = intAceInx + 1
- wEnd
-
- If bMoved then
- gintSrcStack = intStack
- MoveCard intAceInx -1
- End If
- 'Turn off the moving of a card.
- gintMoveCardInx = -1
- End Sub 'DoDblClick
-
- '**********************************************
- '* Name: ShuffleClicked
- '**********************************************
- '* Description:
- '* When the Shuffle Stack is clicked we
- '* must either put some cards on the
- '* Discard Stack, or if the Shuffle Stack is empty
- '* move all the cards from the Discard Stack.
- '**********************************************
- '* Parameters:
- '* intStack Should be the Shuffle Stack.
- '**********************************************
- Sub ShuffleClicked(intStack)
- dim strCard
- dim inx
- 'Do we actually have cards to move?
- If gstrBOTTOMOFSTACK <> strTopOfStack(intStack) then
- inx = 0
- strCard = strPop(intStack)
- 'Move cards to Discard Stack until we are out of cards or
- ' hit the number we wanted to move.
- while (gCOUNTDEAL > inx) and (gstrBOTTOMOFSTACK <> strCard)
- Push gintDiscardStackInx, strCard
- intCardInx = intGetCardIndex(strCard)
- If -1 <> intCardInx then grbCardShowing(intCardInx) = True
- inx = inx + 1
- strCard = strPop(intStack)
- Wend
- If (gCOUNTDEAL = inx ) and (gstrBOTTOMOFSTACK <> strCard) then Push intStack,strCard
- gintCountDiscarded = inx
- Else
- 'No more to move so let's move discard back to shuffle.
- for inx = 1 to intCountOnStack(gintDiscardStackInx)
- strCard = strPop(gintDiscardStackInx)
- Push intStack,strCard
- intCardInx = intGetCardIndex(strCard)
- grbCardShowing(intCardInx) = False
- next
- DrawStack intStack
- gintCountDiscarded = 0
- End If
- DrawStack gintDiscardStackInx
- End Sub 'ShuffleClicked
-
- '**********************************************
- '* Name: intCountOnStack
- '**********************************************
- '* Description:
- '* Returns number of elements on stack given.
- '**********************************************
- '* Parameters:
- '* intStack Stack to get number from.
- '**********************************************
- Function intCountonStack(intStack)
- intCountOnStack = grobjAllCardStacks(intStack,2)
- End Function
-
- '**********************************************
- '* Name: SetMoveStartValues
- '**********************************************
- '* Description:
- '* This is the first function called in the
- '* action of moving a card. This is where
- '* the MouseDown events call to so stated
- '* variables can be initialized.
- '* Also the top and left start positions
- '* are set up here for the card drag.
- '*
- '**********************************************
- '* Parameters:
- '* intStack Stack moving from
- '* x Start left mouse position
- '* y Start top mouse position
- '**********************************************
- Sub SetMoveStartValues (intStack,x,y)
-
- dim intCount
-
- CardMoving = strTopOfStack(intStack)
- If gstrBOTTOMOFSTACK <> CardMoving then
- intCardInx = intGetCardIndex(CardMoving)
- If not grbCardShowing(intCardInx) then
- 'Card was on the stack but not visible, so
- ' make it visible and exit the move.
- gintMoveCardInx = -1
- grbCardShowing(intCardInx) = True
- DrawCard intCardInx
- exit Sub
- End If
- Else
- gintMoveCardInx = -1
- Exit Sub
- End If
-
- 'If this isn't from an Ace Stack. then we must calculate
- ' which card it is on that stack,
- If (gintAceStackStartInx > intStack) then
- intCount = intCountOnStack(intStack)
- 'Calculate card position using default offset amount.
- ' No need to check horizontal offset because we wouldn't
- ' get this event unless we were already in the stack.
- ClickedCard = (Y \ intGetVertOffset(intStack)) + 1
- If ClickedCard > intCount then
- ClickedCard = intCount
- End If
- 'Number of cards we are moving.
- gintCountMoving = (intCount - ClickedCard) + 1
-
- CardMoving = strGetStackElement(intStack,ClickedCard)
- Else
- 'Can only move the top element on an Ace Stack.
- CardMoving = strTopOfStack(intStack)
- If (gstrBOTTOMOFSTACK = CardMoving) then
- gintMoveCardInx = -1
- exit Sub
- End If
- gintCountMoving = 1
- End If
-
- gintMoveCardInx = intGetCardIndex(CardMoving)
-
- If not grbCardShowing(gintMoveCardInx) then
- gintMoveCardInx = -1
- exit Sub
- End If
-
- 'Save the stack it came from.
- gintSrcStack = intStack
-
- 'Save starting values for the card to be used in
- ' DragCard.
- gdCardTop = grobjAllCards(gintMoveCardInx).top
- gdCardLeft = grobjAllCards(gintMoveCardInx).left
-
- intStackSize = intCountOnStack(intStack)
- for inx = (intStackSize - gintCountMoving)+ 1 to intStackSize
- 'Move the card to top of z order
- intCardInx = intGetCardIndex(strGetStackElement(intStack,inx))
- grobjAllCards(intCardInx).ZOrder(0)
- next
-
- gdOffsetTop = intGetVertOffset(intStack) * intCountOnStack(intStack)
- gdStartTop = y
- gdStartLeft = x
-
- End Sub 'SetMoveStartValues
-
- '**********************************************
- '* Name: DragCard
- '**********************************************
- '* Description:
- '* This is where a card is dragged. Drag stops
- '* when a MouseUp event is fired.
- '**********************************************
- '* Parameters:
- '* intStack Stack moving from
- '* x Start left mouse position.
- '* y Start top mouse position.
- '**********************************************
- Sub DragCard (intStack,x,y)
- 'Move Top of intStack
- dim cntCard
-
- If gintMoveCardInx = -1 then Exit Sub
-
- 'DragSkip is used to ignore a number of
- ' MouseMove events. This is done so
- ' we won't be overdrawing the card
- ' when a draw really isn't necessary.
- ' It will also make the drag appear to be
- ' more responsive
-
- gintDragSkip = gintDragSkip - 1
- If gintDragSkip <> 0 then exit Sub
- gintDragSkip = 3
-
- intStackSize = intCountOnStack(intStack)
- cntCard = 0
- 'Figure out new top and left.
- MyTop = grobjAllCards(gintMoveCardInx).top
- MyLeft = grobjAllCards(gintMoveCardInx).left
- for inx = (intStackSize - gintCountMoving) + 1 to intStackSize
- intCardInx = intGetCardIndex(strGetStackElement(intStack,inx))
- 'Apply new values to cards below current one, being sure to maintain offset.
- grobjAllCards(intCardInx).top = MyTop + (y - gdStartTop) + (cntCard * intGetVertOffset(intStack))
- grobjAllCards(intCardInx).left = MyLeft + (x - gdStartLeft)
- cntCard = cntCard + 1
- next
-
- gdStartTop = y
- gdStartLeft = x
- End Sub 'DragCard
-
- '**********************************************
- '* Name: SetMouseUp
- '**********************************************
- '* Description:
- '* Tells the move operation that MouseUp has
- '* happened. Will take care of seeing if
- '* card was dropped in a movable place and
- '* if so, moves the card. If not in a valid
- '* place then the card is returned to the start
- '* stack.
- '**********************************************
- '* Parameters:
- '* intStack Stack moving from.
- '* x Start left mouse position.
- '* y Start top mouse position.
- '**********************************************
- Sub SetMouseUp (intStack, x,y)
- If gintMoveCardInx = -1 then exit Sub
-
- 'Calculate the screen coordinates based on the x and y.
- ScrnX = X + grobjAllCardStacks(intStack,1).left
- ScrnY = Y + grobjAllCardStacks(intStack,1).top
- inxStack = 1
- bHit = False
- while (inxStack <= gintCountAllStacks) and Not bHit
- set pCurStack = grobjAllCardStacks(inxStack,1)
-
- 'Hit testing to see if we dropped it on a stack.
- If ScrnX >= pCurStack.left and ScrnX <= (pCurStack.Left + pCurStack.Width) then
- If ScrnY >= pCurStack.Top and ScrnY <= (pCurStack.Top + pCurStack.Height) then
- bHit = True
- End If
- End If
- inxStack = inxStack + 1
- wEnd
- If inxStack > gintCountAllStacks then
- 'Move it Back.
- MoveCard gintSrcStack
- Else
- 'Move it for real.
- MoveCard inxStack-1
- End If
- End Sub 'SetMouseUp
-
- '**********************************************
- '* Name: bIsLegalMove
- '**********************************************
- '* Description:
- '* Returns:
- '* True Move from Src to Dest is valid.
- '* False Not valid to move from Src to Dest.
- '*
- '* Move is valid to a card stack when:
- '* Card moving is one less and different color.
- '* Move is valid to an Ace Stack when:
- '* Card moving is one greater and same suit.
- '* Moves are valid between card stacks and
- '* from ace and Discard Stack to card stack.
- '*
- '* Not valid:
- '* Ace or Card stack to Discard Stack
- '* if card not face up.
- '**********************************************
- '* Parameters:
- '* intSrcStack Stack coming from.
- '* intDestStack Stack going to.
- '* strCard Card being moved.
- '**********************************************
- Function bIsLegalMove(intSrcStack,intDestStack, strCard)
- dim intCard
- dim intCardInx
-
- bIsLegalMove = False
- 'Can put a card anywhere we want in debug mode.
- If gbDebug then
- bIsLegalMove = gbDebug
- exit Function
- End If
- if gintCountMoving > 1 and (intDestStack >= gintAceStackStartInx and intDestStack <= (gintAceStackStartInx + 3)) then
- exit function
- end if
-
- intCardInx = intGetCardIndex(strCard)
- If -1 = intCardInx then exit Function
-
- 'Not valid, not visible.
- If not grbCardShowing(intCardInx) then Exit Function
-
- 'Nothing moves to the Discard Stack (Not Valid).
- If gintDiscardStackInx = intDestStack then exit Function
-
- 'Get card on top of destination for testing.
- DestCard = strTopOfStack(intDestStack)
- intCard = intCardVal(strCard)
- If gintAceStackStartInx <= intDestStack then
- 'Move to Ace intStack?
- If (gstrBOTTOMOFSTACK = DestCard) then
- 'Can move to empty Ace Stack if card is an Ace.
- bIsLegalMove = (gACE = intCard)
- Else
- bIsLegalMove = (bSameSuit (strCard,DestCard) and (intCard - 1 = intCardVal(DestCard)))
- End If
- Else 'Move to CardStack
- If (gstrBOTTOMOFSTACK = DestCard) then
- 'Can move to empty card stack if card is a King.
- bIsLegalMove = (gKING = intCard)
- Else
- bIsLegalMove = ((Not bSameColor(strCard,DestCard)) and (intCard + 1 = intCardVal(DestCard)))
- End If
- End If
- End Function
-
- '**********************************************
- '* Name: tmNewCard_Timer
- '**********************************************
- '* Description:
- '* Here is where a new card is assigned to
- '* the animation routine when the last one
- '* has finished moving to the Ace Stack.
- '**********************************************
- '* Parameters:
- '* None
- '**********************************************
- Sub tmNewCard_Timer()
- If gbCardMoveDone then
- 'Turn off all timers until we get a new card assigned.
- tmNewCard.enabled = false
- gbCardMoveDone = false
- 'Our Start Case.
- If gintCurStackToMove = 0 then
- gintCurStackToMove = gintAceStackStartInx
- Else
- gobjCurMoveCard.left = grobjAllCardStacks(gintCurStackToMove,1).left
- gobjCurMoveCard.top = grobjAllCardStacks(gintCurStackToMove,1).top
- End If
-
- 'See if cards are already on the Ace Stack.
- strCard = strTopOfStack(gintCurStackToMove)
- intCard = intCardVal(strCard)
- If -1 = intCard then
- intCard = gACE
- Else
- 'Already have cards on the stack, let's pile the rest on.
- If 13 = intCard then gintCurStackToMove = gintCurStackToMove + 1
- intCard = intCard + 1
- While (intCard = 14) and (gintCurStackToMove <> gintAceStackStartInx + 4)
- strCard = strTopOfStack(gintCurStackToMove)
- If gstrBOTTOMOFSTACK = strCard then
- intCard = gACE
- Else
- intCard = intCardVal(strCard)
- End If
- Wend
- End If
- 'We are done moving. Call end-game animation to bounce cards away
- If (gintCurStackToMove = gintAceStackStartInx + 4) then
- SeeIfGameOver gintAceStackStartInx
- exit Sub
- End If
-
- 'Current suit that is moving.
- CurMoveSuit = mid(gstrSuitOrder,((gintCurStackToMove - gintAceStackStartInx) + 1),1)
-
- 'Move the card to the destination.
- strCard = intCard & CurMoveSuit
- push gintCurStackToMove,strCard
-
- 'Get next card.
- intCardInx = intGetCardIndex(strCard)
- set gobjCurMoveCard = grobjAllCards(intCardInx)
-
- grbCardShowing(intCardInx) = True
- gobjCurMoveCard.ZOrder(0)
- DrawCard intCardInx
-
-
- 'Figure out increments for moving it.
- gincCardMoveSteps = 5
- gincEndLeft = ((gobjCurMoveCard.left - grobjAllCardStacks(gintCurStackToMove,1).Left) \ gincCardMoveSteps)
- gincEndTop = ((gobjCurMoveCard.Top - grobjAllCardStacks(gintCurStackToMove,1).Top) \ gincCardMoveSteps)
-
- 'Start the moving of the new card.
- tmEndCardMove.enabled = true
- End If
- End Sub 'tmNewCard_Timer
-
- '**********************************************
- '* Name: tmEndCardMove_Timer
- '**********************************************
- '* Description:
- '* Here is where the actual moving of a
- '* card to its Ace Stack happens after the
- '* user clicks End_The_Game.
- '**********************************************
- '* Parameters:
- '* None
- '**********************************************
- Sub tmEndCardMove_Timer()
- If (gincCardMoveSteps = 0) then
- 'If card has completed moving, get a new one.
- gbCardMoveDone = true
- tmEndCardMove.enabled = false
- tmNewCard.enabled = true
- exit Sub
- End If
-
- 'Not done yet, move it another increment.
- gincCardMoveSteps = gincCardMoveSteps - 1
- gobjCurMoveCard.left = gobjCurMoveCard.left - gincEndLeft
- gobjCurMoveCard.top = gobjCurMoveCard.top - gincEndTop
- End Sub 'tmEndCardMove_Timer
-
- '**********************************************
- '* Name: EndTheGame
- '**********************************************
- '* Description:
- '* When a user clicks End the Game, this is where
- '* the whole process of moving
- '* those cards is started.
- '**********************************************
- '* Parameters:
- '* None
- '**********************************************
- Sub EndTheGame()
- 'Remove ALL cards from the card stacks.
- for inx = 1 to gintCountCardStacks
- strCard = strPop(inx)
- while (strCard <> gstrBOTTOMOFSTACK)
- strCard = strPop(inx)
- Wend
- next
-
- gstrSuitOrder = ""
- 'Figure out the order the suits are placed on the Ace Stack.
- ' gstrSuitOrder holds the order.
- for inx = gintAceStackStartInx to gintAceStackStartInx + 3
- strCard = strTopOfStack(inx)
- If strCard <> gstrBOTTOMOFSTACK then
- gstrSuitOrder = gstrSuitOrder & strGetCardSuit(strCard)
- Else
- gstrSuitOrder = gstrSuitOrder & " "
- End If
- next
- curSuit = "C"
- 'Default order is CSHD if no cards are have been played on an Ace Stack.
- ' If cards are already displayed then figure out which ones we are missing
- ' and add them to the spaces in the string.
- for inx = 1 to 4
- If instr(gstrSuitOrder,curSuit) = 0 then
- blank = instr(gstrSuitOrder," ")
- gstrSuitOrder = left(gstrSuitOrder,blank - 1) & curSuit & mid(gstrSuitOrder,blank+1)
- End If
- Select Case curSuit
- Case "C"
- curSuit = "S"
- Case "S"
- curSuit = "H"
- case "H"
- curSuit = "D"
- End select
- next
-
- gintCurStackToMove = 0
- gbCardMoveDone = true
-
- 'Set up and start the timers to move the first
- ' card.
- tmNewCard.Interval = 1
- tmNewCard.Enabled = true
-
- tmEndCardMove.interval = 1
-
- End Sub 'EndTheGame
-
- '**********************************************
- '* Name: SeeIfGameOver
- '**********************************************
- '* Description:
- '* This is the place to see if all
- '* the Kings are placed on their proper
- '* Ace Stack and, if so, start the animation.
- '**********************************************
- '* Parameters:
- '* intStack Stack to test.
- '**********************************************
- Sub SeeIfGameOver(intStack)
- If (gintAceStackStartInx > intStack) or (gintAceStackStartInx+4 < intStack) then
- exit Sub
- End If
- bWon = true
- inx = gintAceStackStartInx
- 'Go until we don't see a king or we tested the last
- ' Ace Stack.
- while bWon and inx < gintAceStackStartInx + 4
- strCard = strTopOfStack(inx)
- If (gstrBOTTOMOFSTACK <> strCard) then
- bWon = (gKING = intCardVal(strCard))
- Else
- bWon = False
- End If
- inx = inx + 1
- wEnd
-
- If not bWon then exit Sub
-
- 'We WON!! Let's initialize for animation.
- gCardCount = 52
- tmEndAnimation.interval = 4
- gbAnimationDone = false
-
- 'Moving all four cards.
- for inx = 0 to 3
- gbDoneMoving(inx) = true
- next
- Randomize
- gbLeaveEarly = False
-
- tmEndAnimation.enabled = true
-
- End Sub 'SeeIfGameOver
-
- '**********************************************
- '* Name: tmEndAnimation_Timer
- '**********************************************
- '* Description:
- '* Here is where all of the work for the
- '* bouncing cards animation takes place.
- '**********************************************
- '* Parameters:
- '**********************************************
- Sub tmEndAnimation_Timer()
- dim objCard
- ' inc-/decrement position
- If gbAnimationDone or gbLeaveEarly then
- 'User wanted to exit early or animation finished.
- tmEndAnimation.enabled = false
- gbAnimationDone = True
- msgbox "You Won !!!"
- ClearAllCards
- exit Sub
- End If
- gbAnimationDone = true
- for inx = 0 to 3
- 'See if one of the 4 cards is done so we can assign another one.
- If gbDoneMoving(inx) then
- 'Get next card.
- strCard = strPop(inx + gintAceStackStartInx)
- If (gstrBOTTOMOFSTACK <> strCard) then
- intCardInx = intGetCardIndex(strCard)
- set grCardBouncing(inx,1) = grobjAllCards(intCardInx)
- 'The following random is subtracted by half the range so
- ' both positive and negative directions can be generated.
- grCardBouncing(inx,2) = (rnd() * 10) - 5 'Vertical
- grCardBouncing(inx,3) = (rnd() * 30) - 15 'Horizontal
- gbDoneMoving(inx) = false
- Else
- 'Hit bottom of stack, no more bouncing.
- grCardBouncing(inx,1) = 0
- End If
- End If
-
- 'Figure out effect of gravity.
- grCardBouncing(inx,2) = grCardBouncing(inx,2) + (gdGravity * (tmEndAnimation.interval/100))
- If not gbDoneMoving(inx) then
- set objCard = grCardBouncing(inx,1)
- 'Get new position.
- objCard.left = objCard.left + grCardBouncing(inx,3)
- objCard.top = objCard.top + grCardBouncing(inx,2)
-
- 'check for border bounce,
- gbDoneMoving(inx) = (objCard.left >= Form.Width) or (objCard.left + objCard.Width <= 0)
- gbDoneMoving(inx) = gbDoneMoving(inx) or (objCard.top > Form.height) or ((objCard.top + objCard.height) < 0)
-
- 'Here's the friction and direction change if necessary.
- If (grCardBouncing(inx,1).top <= 0) then
- grCardBouncing(inx,2) = -1 * (grCardBouncing(inx,2) + gdFriction)
- elseif (objCard.top + objCard.height) >= Form.Height then
- grCardBouncing(inx,2) = (gdFriction - (grCardBouncing(inx,2)))
- End If
- End If
- gbAnimationDone = (gbAnimationDone and gbDoneMoving(inx) and (gstrBOTTOMOFSTACK = strTopOfStack(inx + gintAceStackStartInx)))
- next
- End Sub 'tmEndAnimation_timer
-
- '**********************************************
- '* Name: MoveCard
- '**********************************************
- '* Description:
- '* This is where a card move actually is
- '* done. For the source stack, it relies
- '* on gintSrcStack.
- '**********************************************
- '* Parameters:
- '* intDestStack Destination stack
- '**********************************************
- Sub MoveCard (intDestStack)
- 'See If Card hit a different intStack.
- 'If not, hit other intStack or legal drop, then move back to original intStack.
- intStackSize = intCountOnStack(gintSrcStack)
- intTopOfMove = (intStackSize - gintCountMoving)+ 1
-
- 'Move from Src to Dest.
- If (gintSrcStack <> intDestStack) then
- strCard = strGetStackElement(gintSrcStack,intTopOfMove)
-
- 'See if it is legal to do this move.
- If bIsLegalMove(gintSrcStack,intDestStack,strCard) then
- for inx = (intStackSize - gintCountMoving)+ 1 to intStackSize
- 'Yes, let's move all the cards to the new stack.
- strCard = strGetStackElement(gintSrcStack,inx)
- Push intDestStack,strCard
- next
- 'However many moved must be removed from the source.
- for inx = 1 to gintCountMoving
- strCard = strPop(gintSrcStack)
- next
- grobjAllCardStacks(intDestStack,1).Zorder(0)
- DrawStack intDestStack
-
- 'After that move, let's see if it is the last.
- SeeIfGameOver intDestStack
- exit Sub
- End If
- End If
- cntCard = 0
- 'Source and destination were the same, let's move cards back.
- for inx = intTopOfMove to intStackSize
- intCardInx = intGetCardIndex(strGetStackElement(gintSrcStack,inx))
- grobjAllCards(intCardInx).top = gdCardTop + (cntCard * intGetVertOffset(intStack))
- grobjAllCards(intCardInx).left = gdCardLeft
- cntCard = cntCard + 1
- next
- grobjAllCardStacks(gintSrcStack,1).Zorder(0)
- End Sub 'MoveCard
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- '**********************************************
- '* Name: Discard Stack Mouse events
- '**********************************************
- '* Description:
- '* These events will handle the moving
- '* of cards from the Discard Stack to either
- '* the Ace Stack or a card stack.
- '**********************************************
- Sub Discard_DblClick(Cancel)
- DoDblClick gintDiscardStackInx
- End Sub
- Sub Discard_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
- If 1 <> Button then exit Sub
- gbMouseUp = false
- SetMoveStartValues gintDiscardStackInx,x,y
- End Sub
-
- Sub Discard_MouseMove(Button, Shift, X, Y)
- If (1 <> Button) or gbMouseUp then exit Sub
-
- DragCard gintDiscardStackInx,x,y
- End Sub
-
- Sub Discard_MouseUp(Button, Shift, X, Y)
- gbMouseUp = True
- SetMouseUp gintDiscardStackInx,x,y
- End Sub
-
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- '**********************************************
- '* Name: Shuffle Stack Mouse events
- '**********************************************
- '* Description:
- '* These events will handle the moving
- '* of cards from the Shuffle Stack to the
- '* Discard Stack..
- '**********************************************
- Sub Shuffle_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
- ShuffleClicked(gintShuffleStackInx)
- End Sub
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- '**********************************************
- '* Name: Ace Stack mouse events
- '**********************************************
- '* Description:
- '* These mouse events for all the Ace Stacks
- '* will handle moving cards from an ace
- '* stack back to a card stack ONLY.
- '**********************************************
- Sub Ace1_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
- If 1 <> Button then exit Sub
- gbMouseUp = false
- SetMoveStartValues gintCountCardStacks + 1,x,y
- End Sub
-
- Sub Ace1_MouseMove(Button, Shift, X, Y)
- If (1 <> Button) or gbMouseUp then exit Sub
- DragCard gintCountCardStacks + 1,x,y
- End Sub
-
- Sub Ace1_MouseUp(Button, Shift, X, Y)
- gbMouseUp = True
- SetMouseUp gintCountCardStacks + 1,x,y
- End Sub
-
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- Sub Ace2_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
- If 1 <> Button then exit Sub
- gbMouseUp = false
- SetMoveStartValues gintCountCardStacks + 2,x,y
- End Sub
-
- Sub Ace2_MouseMove(Button, Shift, X, Y)
- If (1 <> Button) or gbMouseUp then exit Sub
- DragCard gintCountCardStacks + 2,x,y
- End Sub
-
- Sub Ace2_MouseUp(Button, Shift, X, Y)
- gbMouseUp = True
- SetMouseUp gintCountCardStacks + 2,x,y
- End Sub
-
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- Sub Ace3_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
- If 1 <> Button then exit Sub
- gbMouseUp = false
- SetMoveStartValues gintCountCardStacks + 3,x,y
- End Sub
-
- Sub Ace3_MouseMove(Button, Shift, X, Y)
- If (1 <> Button) or gbMouseUp then exit Sub
- DragCard gintCountCardStacks + 3,x,y
- End Sub
-
- Sub Ace3_MouseUp(Button, Shift, X, Y)
- gbMouseUp = True
- SetMouseUp gintCountCardStacks + 3,x,y
- End Sub
-
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- Sub Ace4_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
- If 1 <> Button then exit Sub
- gbMouseUp = false
- SetMoveStartValues gintCountCardStacks + 4,x,y
- End Sub
-
- Sub Ace4_MouseMove(Button, Shift, X, Y)
- If (1 <> Button) or gbMouseUp then exit Sub
- DragCard gintCountCardStacks + 4,x,y
- End Sub
-
- Sub Ace4_MouseUp(Button, Shift, X, Y)
- gbMouseUp = True
- SetMouseUp gintCountCardStacks + 4,x,y
- End Sub
-
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- '**********************************************
- '* Name: Card stack mouse events
- '**********************************************
- '* Description:
- '* These events will handle the moving
- '* of cards from one stack to another, from
- '* the Discard Stack to the card stacks or from
- '* an Ace Stack to a card stack.
- '**********************************************
-
- Sub Stack7_DblClick(Cancel)
- DoDblClick 7
- End Sub
- Sub Stack7_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
- If 1 <> Button then exit Sub
- gbMouseUp = false
- SetMoveStartValues 7,x,y
- End Sub
-
- Sub Stack7_MouseMove(Button, Shift, X, Y)
- If (1 <> Button) or gbMouseUp then exit Sub
- DragCard 7,x,y
- End Sub
-
- Sub Stack7_MouseUp(Button, Shift, X, Y)
- gbMouseUp = True
- SetMouseUp 7,x,y
- End Sub
-
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- Sub Stack6_DblClick(Cancel)
- DoDblClick 6
- End Sub
- Sub Stack6_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
- If 1 <> Button then exit Sub
- gbMouseUp = false
- SetMoveStartValues 6,x,y
- End Sub
-
- Sub Stack6_MouseMove(Button, Shift, X, Y)
- If (1 <> Button) or gbMouseUp then exit Sub
- DragCard 6,x,y
- End Sub
-
- Sub Stack6_MouseUp(Button, Shift, X, Y)
- gbMouseUp = True
- SetMouseUp 6,x,y
- End Sub
-
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- Sub Stack5_DblClick(Cancel)
- DoDblClick 5
- End Sub
- Sub Stack5_MouseUp(Button, Shift, X, Y)
- gbMouseUp = True
- SetMouseUp 5,x,y
- End Sub
- Sub Stack5_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
- If 1 <> Button then exit Sub
- gbMouseUp = false
- SetMoveStartValues 5,x,y
- End Sub
- Sub Stack5_MouseMove(Button, Shift, X, Y)
- If (1 <> Button) or gbMouseUp then exit Sub
- DragCard 5,x,y
- End Sub
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- Sub Stack4_DblClick(Cancel)
- DoDblClick 4
- End Sub
- Sub Stack4_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
- If 1 <> Button then exit Sub
- gbMouseUp = false
- SetMoveStartValues 4,x,y
- End Sub
- Sub Stack4_MouseMove(Button, Shift, X, Y)
- If (1 <> Button) or gbMouseUp then exit Sub
- DragCard 4,x,y
- End Sub
- Sub Stack4_MouseUp(Button, Shift, X, Y)
- gbMouseUp = True
- SetMouseUp 4,x,y
- End Sub
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- Sub Stack3_DblClick(Cancel)
- DoDblClick 3
- End Sub
- Sub Stack3_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
- If 1 <> Button then exit Sub
- gbMouseUp = false
- SetMoveStartValues 3,x,y
- End Sub
- Sub Stack3_MouseMove(Button, Shift, X, Y)
- If (1 <> Button) or gbMouseUp then exit Sub
- DragCard 3,x,y
- End Sub
- Sub Stack3_MouseUp(Button, Shift, X, Y)
- gbMouseUp = True
- SetMouseUp 3,x,y
- End Sub
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- Sub Stack2_DblClick(Cancel)
- DoDblClick 2
- End Sub
- Sub Stack2_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
- If 1 <> Button then exit Sub
- gbMouseUp = false
- SetMoveStartValues 2,x,y
- End Sub
- Sub Stack2_MouseMove(Button, Shift, X, Y)
- If (1 <> Button) or gbMouseUp then exit Sub
- DragCard 2,x,y
- End Sub
- Sub Stack2_MouseUp(Button, Shift, X, Y)
- gbMouseUp = True
- SetMouseUp 2,x,y
- End Sub
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- Sub Stack1_DblClick(Cancel)
- DoDblClick 1
- End Sub
- Sub Stack1_MouseUp(Button, Shift, X, Y)
- gbMouseUp = True
- SetMouseUp 1,x,y
- End Sub
- Sub Stack1_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
- If 1 <> Button then exit Sub
- gbMouseUp = false
- SetMoveStartValues 1,x,y
- End Sub
- Sub Stack1_MouseMove(Button, Shift, X, Y)
- If (1 <> Button) or gbMouseUp then exit Sub
- DragCard 1,x,y
- End Sub
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- Sub chkDebug_Click()
- lstDebugPrint.Visible = chkDebug.Value
- gbDebug = chkDebug.value
- End Sub
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- '**********************************************
- '* Name: cmdEndGame_Click
- '**********************************************
- '* Description:
- '* User clicks this button to end the game
- '**********************************************
- Sub cmdEndGame_Click()
- If not gbEndGame then
- EndTheGame
- gbEndGame = True
- End If
- End Sub
- 'Check box for debug mode
- Sub UpDebug_Click()
- If not gbEndGame then
- chkDebug.visible = not chkdebug.visible
- End If
- End Sub
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- '**********************************************
- '* Name: cmdNewDeck_Click
- '**********************************************
- '* Description:
- '* User clicks this button to pop up the
- '* dialog that allows the user to
- '* choose a different deck.
- '**********************************************
- sub cmdNewDeck_Click()
- CardDeckClick(-gintCurDeck)
- CardDeckOnOff(true)
- end sub 'cmdNewDeck_Click
- '**********************************************
- '* Name: CardDeckOk_Click
- '**********************************************
- '* Description:
- '* Routine called when user clicks the ok
- '* button in the CardDeck dialog. The routine
- '* will store the new deck choice and close
- '* the dialog.
- '**********************************************
- sub CardDeckOk_Click()
- ChangeTheDeck gintTempCurDeck
- CardDeckOnOff(false)
- end sub
- '**********************************************
- '* Name: CardDeckCancel_Click
- '**********************************************
- '* Description:
- '* Called to close the card back dialog
- '* and the NOT change the value of the
- '* current deck
- '**********************************************
- sub CardDeckCancel_Click()
- CardDeckOnOff(false)
- end sub
- '**********************************************
- '* Name: CardDeckClick
- '**********************************************
- '* Description:
- '* Moves the "selection" square in the Deck
- '* back dialog to visually show the user
- '* which card back is choosen
- '**********************************************
- '* Parameters:
- '* intCardNum Deck that is choosen by the user
- '**********************************************
- sub CardDeckClick(intCardnum)
- gintTempCurDeck = -intCardnum
- CardDeckSelector.Left = grobjCardDeck(intCardnum).Left - 4
- CardDeckSelector.Top = grobjCardDeck(intCardnum).Top - 4
- end sub
-
- sub CardDeck1_Click: CardDeckClick 1: end sub
- sub CardDeck2_Click: CardDeckClick 2: end sub
- sub CardDeck3_Click: CardDeckClick 3: end sub
- sub CardDeck4_Click: CardDeckClick 4: end sub
- sub CardDeck5_Click: CardDeckClick 5: end sub
- sub CardDeck6_Click: CardDeckClick 6: end sub
- sub CardDeck7_Click: CardDeckClick 7: end sub
- sub CardDeck8_Click: CardDeckClick 8: end sub
- sub CardDeck9_Click: CardDeckClick 9: end sub
- sub CardDeck10_Click: CardDeckClick 10: end sub
- sub CardDeck11_Click: CardDeckClick 11: end sub
- sub CardDeck12_Click: CardDeckClick 12: end sub
-
- '**********************************************
- '* Name: CardDeckOnOff
- '**********************************************
- '* Description:
- '* Displays or hides the dialog with the
- '* card backs depending on the parameter.
- '**********************************************
- '* Parameters:
- '* bSwitch True = Show dialog
- '* False = Hide dialog
- '**********************************************
- sub CardDeckOnOff(bSwitch)
- if( bSwitch = true ) then
- bSwitchz = 0
- else
- bSwitchz = 1
- end if
- CardDeckMouseBlock.Zorder(bSwitchz): CardDeckMouseBlock.Visible = bSwitch
- CardDeckBack.Zorder(bSwitchz): CardDeckBack.Visible = bSwitch
- CardDeckSelector.Zorder(bSwitchz): CardDeckSelector.Visible = bSwitch
- for t = 1 to 12
- grobjCardDeck(t).Zorder(bSwitchz): grobjCardDeck(t).Visible = bSwitch
- next
- CardDeckOk.Zorder(bSwitchz): CardDeckOk.Visible = bSwitch
- CardDeckCancel.Zorder(bSwitchz): CardDeckCancel.Visible = bSwitch
- end sub
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- 'New deal.
- Sub cmdNewDeal_Click()
- StartGame
- End Sub
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- 'Click on the background when the end animation is running
- ' to stop the animation and bring up the You Won dialog.
- Sub EndGameClick_MouseDown(Button, Shift, X, Y)
- If gbEndGame then
- gbLeaveEarly = true
- End If
- End Sub
- -->
- </SCRIPT>
- <SCRIPT LANGUAGE="VBScript">
- <!--
- 'Changes the number of cards that are dealt from
- ' the Shuffle Stack to the Discard Stack
- Sub cmdChangeDeal_Click()
- if( gCOUNTDEAL = 1 ) then
- gCOUNTDEAL = 3
- cmdChangeDeal.Caption = "Change to Deal 1"
- else
- gCOUNTDEAL = 1
- cmdChangeDeal.Caption = "Change to Deal 3"
- end if
- end sub
- -->
- </SCRIPT>
- <DIV BACKGROUND="#8000" ID="Form" STYLE="LAYOUT:FIXED;WIDTH:651pt;HEIGHT:444pt;">
- <OBJECT ID="CardDeckMouseBlock"
- CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:-1pt;LEFT:-2pt;WIDTH:590pt;HEIGHT:362pt;DISPLAY:NONE;ZINDEX:0;">
- <PARAM NAME="BackColor" VALUE="32768">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="20814;12771">
- <PARAM NAME="FontCharSet" VALUE="0">
- <PARAM NAME="FontPitchAndFamily" VALUE="2">
- <PARAM NAME="FontWeight" VALUE="0">
- </OBJECT>
- <OBJECT ID="CardDeckBack"
- CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:83pt;LEFT:74pt;WIDTH:420pt;HEIGHT:223pt;TABINDEX:2;DISPLAY:NONE;ZINDEX:1;">
- <PARAM NAME="VariousPropertyBits" VALUE="25">
- <PARAM NAME="Size" VALUE="14817;7867">
- <PARAM NAME="FontEffects" VALUE="1073750016">
- <PARAM NAME="FontCharSet" VALUE="0">
- <PARAM NAME="FontPitchAndFamily" VALUE="2">
- <PARAM NAME="ParagraphAlign" VALUE="3">
- <PARAM NAME="FontWeight" VALUE="0">
- </OBJECT>
- <OBJECT ID="EndGameClick"
- CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:0pt;LEFT:0pt;WIDTH:644pt;HEIGHT:440pt;ZINDEX:2;">
- <PARAM NAME="BackColor" VALUE="32768">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="22719;15522">
- <PARAM NAME="FontCharSet" VALUE="0">
- <PARAM NAME="FontPitchAndFamily" VALUE="2">
- </OBJECT>
- <OBJECT ID="CardDeckSelector"
- CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:87pt;LEFT:86pt;WIDTH:65pt;HEIGHT:82pt;DISPLAY:NONE;ZINDEX:3;">
- <PARAM NAME="ForeColor" VALUE="0">
- <PARAM NAME="BackColor" VALUE="0">
- <PARAM NAME="Size" VALUE="2293;2893">
- <PARAM NAME="FontCharSet" VALUE="0">
- <PARAM NAME="FontPitchAndFamily" VALUE="2">
- <PARAM NAME="FontWeight" VALUE="0">
- </OBJECT>
- <OBJECT ID="tmEndAnimation"
- CLASSID="CLSID:59CCB4A0-727D-11CF-AC36-00AA00A47DD2"
- CODEBASE="ietimer.ocx"
- STYLE="TOP:454pt;LEFT:8pt;WIDTH:25pt;HEIGHT:17pt;TABINDEX:0;ZINDEX:4;">
- <PARAM NAME="_ExtentX" VALUE="873">
- <PARAM NAME="_ExtentY" VALUE="609">
- </OBJECT>
-
- <OBJECT ID="Card1H"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:0pt;LEFT:149pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:1;ZINDEX:5;"
- CODEBASE="card.ocx">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Ace3"
- CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:17pt;LEFT:437pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:6;">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="1905;2540">
- </OBJECT>
- <OBJECT ID="AceImage3"
- CLASSID="CLSID:D4A97620-8E8F-11CF-93CD-00AA00C08FDF" STYLE="TOP:17pt;LEFT:437pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:7;">
- <PARAM NAME="PicturePath" VALUE="acestack.jpg">
- <PARAM NAME="BackColor" VALUE="32768">
- <PARAM NAME="BorderStyle" VALUE="0">
- <PARAM NAME="Size" VALUE="1905;2540">
- <PARAM NAME="VariousPropertyBits" VALUE="19">
- </OBJECT>
- <OBJECT ID="Ace1"
- CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:17pt;LEFT:305pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:8;">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="1905;2540">
- </OBJECT>
- <OBJECT ID="AceImage1"
- CLASSID="CLSID:D4A97620-8E8F-11CF-93CD-00AA00C08FDF" STYLE="TOP:17pt;LEFT:305pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:9;">
- <PARAM NAME="PicturePath" VALUE="acestack.jpg">
- <PARAM NAME="BackColor" VALUE="32768">
- <PARAM NAME="BorderStyle" VALUE="0">
- <PARAM NAME="Size" VALUE="1905;2540">
- <PARAM NAME="VariousPropertyBits" VALUE="19">
- </OBJECT>
- <OBJECT ID="Ace2"
- CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:17pt;LEFT:371pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:10;">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="1905;2540">
- </OBJECT>
- <OBJECT ID="AceImage2"
- CLASSID="CLSID:D4A97620-8E8F-11CF-93CD-00AA00C08FDF" STYLE="TOP:17pt;LEFT:371pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:11;">
- <PARAM NAME="PicturePath" VALUE="acestack.jpg">
- <PARAM NAME="BackColor" VALUE="32768">
- <PARAM NAME="BorderStyle" VALUE="0">
- <PARAM NAME="Size" VALUE="1905;2540">
- <PARAM NAME="VariousPropertyBits" VALUE="19">
- </OBJECT>
- <OBJECT ID="Ace4"
- CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:17pt;LEFT:503pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:12;">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="1905;2540">
- </OBJECT>
- <OBJECT ID="AceImage4"
- CLASSID="CLSID:D4A97620-8E8F-11CF-93CD-00AA00C08FDF" STYLE="TOP:17pt;LEFT:503pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:13;">
- <PARAM NAME="PicturePath" VALUE="acestack.jpg">
- <PARAM NAME="BackColor" VALUE="32768">
- <PARAM NAME="BorderStyle" VALUE="0">
- <PARAM NAME="Size" VALUE="1905;2540">
- <PARAM NAME="VariousPropertyBits" VALUE="19">
- </OBJECT>
- <OBJECT ID="ShuffleImage"
- CLASSID="CLSID:D4A97620-8E8F-11CF-93CD-00AA00C08FDF" STYLE="TOP:17pt;LEFT:25pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:14;">
- <PARAM NAME="PicturePath" VALUE="shuffle.jpg">
- <PARAM NAME="BorderStyle" VALUE="0">
- <PARAM NAME="Size" VALUE="1905;2540">
- <PARAM NAME="VariousPropertyBits" VALUE="19">
- </OBJECT>
- <OBJECT ID="Stack1"
- CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:116pt;LEFT:107pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:15;">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="1905;2540">
- </OBJECT>
- <OBJECT ID="Stack2"
- CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:116pt;LEFT:173pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:16;">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="1905;2540">
- </OBJECT>
- <OBJECT ID="Stack3"
- CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:116pt;LEFT:239pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:17;">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="1905;2540">
- </OBJECT>
- <OBJECT ID="Stack4"
- CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:116pt;LEFT:305pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:18;">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="1905;2540">
- </OBJECT>
- <OBJECT ID="Stack5"
- CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:116pt;LEFT:371pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:19;">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="1905;2540">
- </OBJECT>
- <OBJECT ID="Stack6"
- CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:116pt;LEFT:437pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:20;">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="1905;2540">
- </OBJECT>
- <OBJECT ID="Stack7"
- CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:116pt;LEFT:503pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:21;">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="1905;2540">
- </OBJECT>
- <OBJECT ID="Discard"
- CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:17pt;LEFT:99pt;WIDTH:74pt;HEIGHT:72pt;ZINDEX:22;">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="2611;2540">
- </OBJECT>
- <OBJECT ID="Shuffle"
- CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:17pt;LEFT:25pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:23;">
- <PARAM NAME="VariousPropertyBits" VALUE="8388627">
- <PARAM NAME="Size" VALUE="1905;2540">
- </OBJECT>
- <OBJECT ID="tmEndCardMove"
- CLASSID="CLSID:59CCB4A0-727D-11CF-AC36-00AA00A47DD2" STYLE="TOP:454pt;LEFT:41pt;WIDTH:25pt;HEIGHT:17pt;TABINDEX:4;ZINDEX:24;">
- <PARAM NAME="_ExtentX" VALUE="873">
- <PARAM NAME="_ExtentY" VALUE="609">
- </OBJECT>
- <OBJECT ID="tmNewCard"
- CLASSID="CLSID:59CCB4A0-727D-11CF-AC36-00AA00A47DD2" STYLE="TOP:454pt;LEFT:74pt;WIDTH:25pt;HEIGHT:17pt;TABINDEX:44;ZINDEX:25;">
- <PARAM NAME="_ExtentX" VALUE="873">
- <PARAM NAME="_ExtentY" VALUE="609">
- </OBJECT>
- <OBJECT ID="HiddenCardLabel"
- CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:0pt;LEFT:512pt;WIDTH:107pt;HEIGHT:8pt;DISPLAY:NONE;ZINDEX:26;">
- <PARAM NAME="BackColor" VALUE="32768">
- <PARAM NAME="Caption" VALUE="All the cards are betwen this lable and the check box">
- <PARAM NAME="Size" VALUE="3775;282">
- <PARAM NAME="FontCharSet" VALUE="0">
- <PARAM NAME="FontPitchAndFamily" VALUE="2">
- <PARAM NAME="FontWeight" VALUE="0">
- </OBJECT>
- <OBJECT ID="chkDebug"
- CLASSID="CLSID:8BD21D40-EC42-11CE-9E0D-00AA006002F3" STYLE="TOP:0pt;LEFT:33pt;WIDTH:57pt;HEIGHT:12pt;TABINDEX:5;DISPLAY:NONE;ZINDEX:27;">
- <PARAM NAME="BackColor" VALUE="2000000000">
- <PARAM NAME="ForeColor" VALUE="100">
- <PARAM NAME="DisplayStyle" VALUE="4">
- <PARAM NAME="Size" VALUE="2011;423">
- <PARAM NAME="Caption" VALUE="Debug">
- <PARAM NAME="Accelerator" VALUE="68">
- <PARAM NAME="FontCharSet" VALUE="0">
- <PARAM NAME="FontPitchAndFamily" VALUE="2">
- <PARAM NAME="FontWeight" VALUE="0">
- </OBJECT>
- <OBJECT ID="cmdNewDeal"
- CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:99pt;LEFT:4pt;WIDTH:76pt;HEIGHT:25pt;TABINDEX:6;ZINDEX:28;">
- <PARAM NAME="ForeColor" VALUE="0">
- <PARAM NAME="BackColor" VALUE="16777215">
- <PARAM NAME="Caption" VALUE="New Deal">
- <PARAM NAME="Size" VALUE="2681;882">
- <PARAM NAME="Accelerator" VALUE="78">
- <PARAM NAME="FontCharSet" VALUE="0">
- <PARAM NAME="FontPitchAndFamily" VALUE="2">
- <PARAM NAME="ParagraphAlign" VALUE="3">
- <PARAM NAME="FontWeight" VALUE="0">
- </OBJECT>
- <OBJECT ID="cmdNewDeck"
- CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:133pt;LEFT:4pt;WIDTH:76pt;HEIGHT:25pt;TABINDEX:7;ZINDEX:29;">
- <PARAM NAME="ForeColor" VALUE="0">
- <PARAM NAME="BackColor" VALUE="16777215">
- <PARAM NAME="Caption" VALUE="Select New Deck">
- <PARAM NAME="Size" VALUE="2681;882">
- <PARAM NAME="Accelerator" VALUE="83">
- <PARAM NAME="FontCharSet" VALUE="0">
- <PARAM NAME="FontPitchAndFamily" VALUE="2">
- <PARAM NAME="ParagraphAlign" VALUE="3">
- <PARAM NAME="FontWeight" VALUE="0">
- </OBJECT>
- <OBJECT ID="cmdEndGame"
- CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:166pt;LEFT:4pt;WIDTH:76pt;HEIGHT:25pt;TABINDEX:10;ZINDEX:30;">
- <PARAM NAME="ForeColor" VALUE="0">
- <PARAM NAME="BackColor" VALUE="16777215">
- <PARAM NAME="Caption" VALUE="End The Game">
- <PARAM NAME="Size" VALUE="2681;882">
- <PARAM NAME="Accelerator" VALUE="69">
- <PARAM NAME="FontCharSet" VALUE="0">
- <PARAM NAME="FontPitchAndFamily" VALUE="2">
- <PARAM NAME="ParagraphAlign" VALUE="3">
- <PARAM NAME="FontWeight" VALUE="0">
- </OBJECT>
- <OBJECT ID="cmdChangeDeal"
- CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:199pt;LEFT:4pt;WIDTH:76pt;HEIGHT:25pt;TABINDEX:36;ZINDEX:31;">
- <PARAM NAME="ForeColor" VALUE="0">
- <PARAM NAME="BackColor" VALUE="16777215">
- <PARAM NAME="Caption" VALUE="Change to Draw 1">
- <PARAM NAME="Size" VALUE="2681;882">
- <PARAM NAME="Accelerator" VALUE="67">
- <PARAM NAME="FontCharSet" VALUE="0">
- <PARAM NAME="FontPitchAndFamily" VALUE="2">
- <PARAM NAME="ParagraphAlign" VALUE="3">
- <PARAM NAME="FontWeight" VALUE="0">
- </OBJECT>
- <OBJECT ID="Card2H"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:215pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:11;ZINDEX:32;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card3H"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:272pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:12;ZINDEX:33;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card4H"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:157pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:13;ZINDEX:34;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card5H"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:223pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:14;ZINDEX:35;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card6H"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:281pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:15;ZINDEX:36;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card7H"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:165pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:16;ZINDEX:37;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card8H"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:231pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:17;ZINDEX:38;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card9H"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:18;ZINDEX:39;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card10H"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:173pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:19;ZINDEX:40;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card11H"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:239pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:20;ZINDEX:41;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card12H"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:297pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:21;ZINDEX:42;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card13H"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:165pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:22;ZINDEX:43;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card1D"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:231pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:23;ZINDEX:44;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card2D"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:24;ZINDEX:45;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card3D"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:173pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:25;ZINDEX:46;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card4D"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:239pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:26;ZINDEX:47;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card5D"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:297pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:27;ZINDEX:48;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card6D"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:182pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:28;ZINDEX:49;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card7D"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:248pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:29;ZINDEX:50;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card8D"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:305pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:30;ZINDEX:51;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card9D"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:190pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:31;ZINDEX:52;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card10D"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:256pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:32;ZINDEX:53;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card11D"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:33;ZINDEX:54;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card12D"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:37;ZINDEX:55;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card13D"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:42;ZINDEX:56;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card1C"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:46;ZINDEX:57;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card2C"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:47;ZINDEX:58;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card3C"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:50;ZINDEX:59;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card4C"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:51;ZINDEX:60;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card5C"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:55;ZINDEX:61;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card6C"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:56;ZINDEX:62;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card7C"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:59;ZINDEX:63;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card8C"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:60;ZINDEX:64;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card9C"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:66;ZINDEX:65;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card10C"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:68;ZINDEX:66;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card11C"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:76;ZINDEX:67;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card12C"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:80;ZINDEX:68;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card13C"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:86;ZINDEX:69;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card1S"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:88;ZINDEX:70;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card2S"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:91;ZINDEX:71;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card3S"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:92;ZINDEX:72;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card4S"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:90;ZINDEX:73;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card5S"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:82;ZINDEX:74;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card6S"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:70;ZINDEX:75;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card7S"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:61;ZINDEX:76;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card8S"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:57;ZINDEX:77;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card9S"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:52;ZINDEX:78;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card10S"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:48;ZINDEX:79;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card11S"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:43;ZINDEX:80;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card12S"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:38;ZINDEX:81;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="Card13S"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:34;ZINDEX:82;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- </OBJECT>
- <OBJECT ID="CardDeck1"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:91pt;LEFT:91pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:63;DISPLAY:NONE;ZINDEX:83;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- <PARAM NAME="Suite" VALUE="-1">
- </OBJECT>
- <OBJECT ID="CardDeck2"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:91pt;LEFT:157pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:65;DISPLAY:NONE;ZINDEX:84;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- <PARAM NAME="Suite" VALUE="-2">
- </OBJECT>
- <OBJECT ID="CardDeck3"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:91pt;LEFT:223pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:67;DISPLAY:NONE;ZINDEX:85;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- <PARAM NAME="Suite" VALUE="-3">
- </OBJECT>
- <OBJECT ID="CardDeck4"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:91pt;LEFT:289pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:69;DISPLAY:NONE;ZINDEX:86;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- <PARAM NAME="Suite" VALUE="-4">
- </OBJECT>
- <OBJECT ID="CardDeck5"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:91pt;LEFT:355pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:71;DISPLAY:NONE;ZINDEX:87;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- <PARAM NAME="Suite" VALUE="-5">
- </OBJECT>
- <OBJECT ID="CardDeck6"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:91pt;LEFT:421pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:73;DISPLAY:NONE;ZINDEX:88;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- <PARAM NAME="Suite" VALUE="-6">
- </OBJECT>
- <OBJECT ID="CardDeck7"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:173pt;LEFT:91pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:75;DISPLAY:NONE;ZINDEX:89;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- <PARAM NAME="Suite" VALUE="-7">
- </OBJECT>
- <OBJECT ID="CardDeck8"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:173pt;LEFT:157pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:77;DISPLAY:NONE;ZINDEX:90;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- <PARAM NAME="Suite" VALUE="-8">
- </OBJECT>
- <OBJECT ID="CardDeck9"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:173pt;LEFT:223pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:79;DISPLAY:NONE;ZINDEX:91;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- <PARAM NAME="Suite" VALUE="-9">
- </OBJECT>
- <OBJECT ID="CardDeck10"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:173pt;LEFT:289pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:81;DISPLAY:NONE;ZINDEX:92;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- <PARAM NAME="Suite" VALUE="-10">
- </OBJECT>
- <OBJECT ID="CardDeck11"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:173pt;LEFT:355pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:83;DISPLAY:NONE;ZINDEX:93;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- <PARAM NAME="Suite" VALUE="-11">
- </OBJECT>
- <OBJECT ID="CardDeck12"
- CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:173pt;LEFT:421pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:85;DISPLAY:NONE;ZINDEX:94;">
- <PARAM NAME="_ExtentX" VALUE="2037">
- <PARAM NAME="_ExtentY" VALUE="2619">
- <PARAM NAME="Suite" VALUE="-12">
- </OBJECT>
- <OBJECT ID="CardDeckOk"
- CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:264pt;LEFT:182pt;WIDTH:91pt;HEIGHT:25pt;TABINDEX:87;DISPLAY:NONE;ZINDEX:95;">
- <PARAM NAME="Caption" VALUE="Ok">
- <PARAM NAME="Size" VALUE="3210;882">
- <PARAM NAME="Accelerator" VALUE="79">
- <PARAM NAME="FontCharSet" VALUE="0">
- <PARAM NAME="FontPitchAndFamily" VALUE="2">
- <PARAM NAME="ParagraphAlign" VALUE="3">
- <PARAM NAME="FontWeight" VALUE="0">
- </OBJECT>
- <OBJECT ID="CardDeckCancel"
- CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:264pt;LEFT:297pt;WIDTH:91pt;HEIGHT:25pt;TABINDEX:89;DISPLAY:NONE;ZINDEX:96;">
- <PARAM NAME="Caption" VALUE="Cancel">
- <PARAM NAME="Size" VALUE="3210;882">
- <PARAM NAME="Accelerator" VALUE="67">
- <PARAM NAME="FontCharSet" VALUE="0">
- <PARAM NAME="FontPitchAndFamily" VALUE="2">
- <PARAM NAME="ParagraphAlign" VALUE="3">
- <PARAM NAME="FontWeight" VALUE="0">
- </OBJECT>
- <OBJECT ID="lstDebugPrint"
- CLASSID="CLSID:8BD21D20-EC42-11CE-9E0D-00AA006002F3" STYLE="TOP:8pt;LEFT:157pt;WIDTH:122pt;HEIGHT:66pt;TABINDEX:9;DISPLAY:NONE;ZINDEX:97;">
- <PARAM NAME="BackColor" VALUE="16777215">
- <PARAM NAME="ScrollBars" VALUE="3">
- <PARAM NAME="DisplayStyle" VALUE="2">
- <PARAM NAME="Size" VALUE="4304;2328">
- <PARAM NAME="MatchEntry" VALUE="0">
- <PARAM NAME="FontCharSet" VALUE="0">
- <PARAM NAME="FontPitchAndFamily" VALUE="2">
- <PARAM NAME="FontWeight" VALUE="0">
- </OBJECT>
- </DIV>
-