SOL.ALX
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:99k
源码类别:

Windows编程

开发平台:

Visual C++

  1. <SCRIPT LANGUAGE="VBScript">
  2. <!--
  3. 'The naming conventions for each of the areas where
  4. ' cards can play are:
  5. '
  6. ' Shuffle Stack Place where cards are ALL face down 
  7. '  and the user can click to put cards into
  8. '  play. Both 3 card and 1 card deal are supported.
  9. '  (to change number of cards played
  10. '   change the value of gCOUNTDEAL)
  11. '  There is only 1 Shuffle Stack.
  12. '
  13. ' Discard Stack Place where cards are face up
  14. '  and can be dragged to an Ace Stack
  15. '  or a Card Stack. There is only 1 Discard Stack.
  16. '
  17. ' Ace Stack Place where cards of the same suit
  18. '  are piled, starting with the Ace and Ending
  19. '  with the King. When all kings are showing
  20. '  the game is over and the animation begins.
  21. '  There are 4 Ace Stacks.
  22. '
  23. ' Card Stack Place where cards are piled, alternating the
  24. '  the suit and in descending order.
  25. '  There are 7 card stacks.
  26. 'The following global variables are used for this application.
  27. 'Before each variable is information explaining how to use it,
  28. 'as well as explanatory text on the question that the variable 
  29. 'answers (Boolean) or a statement describing the variable's use.
  30. '
  31. 'The variable naming conventions used in this
  32. ' application are represented by: [g][r]vartypeVarName
  33. ' Where:
  34. '  [g] Denotes it as a global variable.
  35. '  [r] Denotes it as an array (region).
  36. '  vartype One of the values specified below.
  37. '  VarName Name of variable, starting each word 
  38. '  with a capital letter.
  39. ' Using a VARNAME in ALL uppercase
  40. ' will denote it as a constant value.
  41. '
  42. ' vartype can be:
  43. ' d Decimal number, numeric and non-integer.
  44. ' b Boolean.
  45. ' int Integer.
  46. ' inc Incrementer (Used when doing things, like animations
  47. '  in steps or increments).
  48. ' str String.
  49. ' obj Object or Control.
  50. '
  51. ' NOTE: Since all data types in VBScript are Variants,
  52. ' this variable convention is for documentation and
  53. ' to help you with debugging and programming.
  54. '
  55. 'Are we in debug mode?
  56. dim gbDebug
  57. 'Did the mouseup event happen so 
  58. ' we can stop dragging a card?
  59. dim gbMouseUp
  60. 'Number of MouseMove(s) to skip before actually
  61. ' redrawing a card (makes the drag seem faster).
  62. dim gintDragSkip
  63. 'Did the user want to End the game?
  64. dim gbEndGame
  65. 'Done with bouncing all cards off screen.
  66. dim gbAnimationDone 
  67. 'Was the background clicked during card animation?
  68. dim gbLeaveEarly
  69. 'Number of moves the card will take to get to the ace
  70. ' Stack during animation
  71. dim gincCardMoveSteps
  72. 'Current card being moved.
  73. dim gobjCurMoveCard
  74. 'Amount to move left of card on each step.
  75. dim gincEndLeft
  76. 'Amount to move top of card on each step.
  77. dim gincEndTop
  78. 'Order the suits appear on the Ace Stacks.
  79. dim gstrSuitOrder
  80. 'Stack the cards are currently being moved to
  81. dim gintCurStackToMove
  82. 'Done moving cards to Ace Stack.
  83. dim gbCardMoveDone 
  84. 'Is the shuffling done yet?
  85. dim gbShuffleDone
  86. 'The array to hold the randomly shuffled cards.
  87. dim grintShuffled(52)
  88. 'Number of times to go into the random sequence.
  89. dim gRNDCOUNT
  90. 'For the End game
  91. 'Each card that is currently bouncing and the 
  92. ' top and left value for each.
  93. dim grCardBouncing(4,3)
  94. 'Which cards are done moving.
  95. dim gbDoneMoving(4)
  96. 'Friction and gravity valued applied to each bounce.
  97. dim gdFriction
  98. dim gdGravity
  99. 'Used for the count of cards to deal.
  100. dim gCOUNTDEAL
  101. 'Number of cards moved to Discard Stack when a user clicks the
  102. ' Shuffle Stack.  Needed to determine how many cards should
  103. ' be showing on the Discard Stack.
  104. dim gintCountDiscarded
  105. 'Stack the card is being moved from.
  106. dim gintSrcStack
  107. 'Used during animation. These variables
  108. ' store the starting position of each card and
  109. ' the End points of where the card
  110. ' should End up after being moved.
  111. dim gdStartTop, gdStartLeft
  112. dim gdCardTop, gdCardLeft
  113. dim gdOffsetTop
  114. 'Card being moved.
  115. dim gintMoveCardInx
  116. 'Number of total cards being moved during a mouse
  117. ' drag, i.e., moving cards from one stack to another.
  118. dim gintCountMoving
  119. 'Holds all the cards of the deck.
  120. dim grobjAllCards(52) 
  121. 'Is the card face up?
  122. dim grbCardShowing(52)
  123. 'Current deck being displayed.
  124. dim gintCurDeck
  125. 'Current deck being displayed in the dialog.
  126. dim gintTempCurDeck
  127. 'Holds all the card backs to be displayed later.
  128. dim grobjCardDeck(12)
  129. 'Used when comparing with a King or Ace.
  130. dim gACE 
  131. dim gKING
  132. 'Starting index into stack array of Shuffle Stack.
  133. dim gintShuffleStackInx
  134. 'Starting index into stack array of Discard Stack.
  135. dim gintDiscardStackInx
  136. 'Starting index into stack array of first Ace Stack
  137. dim gintAceStackStartInx 
  138. 'This encompasses all 7 Card Stacks, 4 Ace Stacks,
  139. ' Shuffle Stack and Discard Stack.
  140. 'This array contains 30 items in each stack because 28 is 
  141. ' the maximum number of cards that could be in one stack
  142. ' plus two spaces for other info.
  143. ' The first dimension of the array determines which
  144. ' stack to use and the second dimension is what is on
  145. ' the stack. The first element in each stack is the
  146. ' stack object, the second element is the count of 
  147. ' elements and the third element onward is where the cards are stored.
  148. dim grobjAllCardStacks(13,30) 
  149. 'Value of the bottom of the stack, empty stack.
  150. dim gstrBOTTOMOFSTACK 
  151. 'Count of the total number of stacks used.
  152. dim gintCountAllStacks
  153. 'Total number of card stacks (7).
  154. dim gintCountCardStacks
  155. 'Number of pixels used between each card when
  156. ' being drawn.
  157. dim gintCardOffset
  158. -->
  159. </SCRIPT>
  160. <SCRIPT LANGUAGE="VBScript">
  161. <!--
  162. '**********************************************
  163. '* Name: DebugPrint
  164. '**********************************************
  165. '* Description:
  166. '* Provides a utility Function that displays
  167. '*  the string sent to it in a debug
  168. '*  "window." Currently, a listbox control
  169. '*  is used to display debug output.
  170. '*  Feel free to call this Function during
  171. '*  debugging. 
  172. '* NOTE: Does depEnd on the existence of a 
  173. '*  listbox with the ID of lstDebugPrint
  174. '**********************************************
  175. '* Parameters:
  176. '* str String displayed to debug window
  177. '**********************************************
  178. Sub DebugPrint(str)
  179. If gbDebug then
  180. lstDebugPrint.additem str
  181. END IF
  182. End Sub 'DebugPrint
  183. '**********************************************
  184. '* Name: OnLoad event for ActiveX Layout
  185. '**********************************************
  186. '* Description:
  187. '* Sets up the default values and
  188. '*  calls startgame to get things going.
  189. '**********************************************
  190. '* Parameters:
  191. '* None
  192. '**********************************************
  193. Sub Form_OnLoad()
  194. 'Turn debug mode off
  195. gbDebug = false
  196. 'Allow the user a checkbox for changing debug mode
  197. chkDebug.value = gbDebug
  198. Form.DrawBuffer = "256000"
  199. gACE = 1
  200. gKING = 13
  201. gCOUNTDEAL = 3
  202. gdFriction = 2
  203. gdGravity = 9.8
  204.    gstrBOTTOMOFSTACK = "BOS"
  205. 'Spacing when drawing a card
  206. gintCardOffset = 11
  207.   
  208. gintShuffleStackInx = 12
  209. gintDiscardStackInx = 13
  210.    gintCountCardStacks = 7
  211. gintAceStackStartInx = gintCountCardStacks+1
  212. gintCountAllStacks = 13
  213. AceImage1.Picture = AceImage3.Picture
  214. AceImage2.Picture = AceImage3.Picture
  215. AceImage4.Picture = AceImage3.Picture
  216. AceImage1.visible = true
  217. AceImage2.visible = true
  218. AceImage3.visible = true
  219. AceImage4.visible = true
  220. StartGame  
  221. End Sub 'Form_OnLoad
  222. '**********************************************
  223. '* Name: StartGame
  224. '**********************************************
  225. '* Description:
  226. '* Gets the game going by setting up
  227. '*  the card back and shuffling and dealing 
  228. '*  the cards.
  229. '**********************************************
  230. '* Parameters:
  231. '* None
  232. '**********************************************
  233. Sub StartGame
  234. gbEndGame = False
  235. 'Values used during animation
  236. gintDragSkip = 3
  237. gbCardMoveDone = True
  238. tmEndAnimation.enabled = false
  239. tmEndCardMove.enabled = false
  240. gincCardMoveSteps = 0
  241. gincEndLeft = 0
  242. gincEndTop = 0
  243. gintCountMoving = 0
  244. LoadCards
  245.   if gintCurDeck > -1 or gintCurDeck < -12 then
  246. ChangeTheDeck -1
  247. end if
  248. gRNDCOUNT = 500
  249. DealCards
  250. End Sub 'StartGame
  251. '**********************************************
  252. '* Name: LoadCard
  253. '**********************************************
  254. '* Description:
  255. '* Loads all the arrays with the card objects.
  256. '* Initializes grbCardShowing.
  257. '* Applies default values to the stacks.
  258. '**********************************************
  259. '* Parameters:
  260. '* None
  261. '**********************************************
  262. Sub LoadCards
  263. 'Could also use a control array here but this
  264. ' code loads the card objects into the array
  265. set grobjAllCards(1) = Card1H
  266. set grobjAllCards(2) = Card2H
  267. set grobjAllCards(3) = Card3H
  268. set grobjAllCards(4) = Card4H
  269. set grobjAllCards(5) = Card5H
  270. set grobjAllCards(6) = Card6H
  271. set grobjAllCards(7) = Card7H
  272. set grobjAllCards(8) = Card8H
  273. set grobjAllCards(9) = Card9H
  274. set grobjAllCards(10) = Card10H
  275. set grobjAllCards(11) = Card11H
  276. set grobjAllCards(12) = Card12H
  277. set grobjAllCards(13) = Card13H
  278. set grobjAllCards(14) = Card1D
  279. set grobjAllCards(15) = Card2D
  280. set grobjAllCards(16) = Card3D
  281. set grobjAllCards(17) = Card4D
  282. set grobjAllCards(18) = Card5D
  283. set grobjAllCards(19) = Card6D
  284. set grobjAllCards(20) = Card7D
  285. set grobjAllCards(21) = Card8D
  286. set grobjAllCards(22) = Card9D
  287. set grobjAllCards(23) = Card10D
  288. set grobjAllCards(24) = Card11D
  289. set grobjAllCards(25) = Card12D
  290. set grobjAllCards(26) = Card13D
  291. set grobjAllCards(27) = Card1C
  292. set grobjAllCards(28) = Card2C
  293. set grobjAllCards(29) = Card3C
  294. set grobjAllCards(30) = Card4C
  295. set grobjAllCards(31) = Card5C
  296. set grobjAllCards(32) = Card6C
  297. set grobjAllCards(33) = Card7C
  298. set grobjAllCards(34) = Card8C
  299. set grobjAllCards(35) = Card9C
  300. set grobjAllCards(36) = Card10C
  301. set grobjAllCards(37) = Card11C
  302. set grobjAllCards(38) = Card12C
  303. set grobjAllCards(39) = Card13C
  304. set grobjAllCards(40) = Card1S
  305. set grobjAllCards(41) = Card2S
  306. set grobjAllCards(42) = Card3S
  307. set grobjAllCards(43) = Card4S
  308. set grobjAllCards(44) = Card5S
  309. set grobjAllCards(45) = Card6S
  310. set grobjAllCards(46) = Card7S
  311. set grobjAllCards(47) = Card8S
  312. set grobjAllCards(48) = Card9S
  313. set grobjAllCards(49) = Card10S
  314. set grobjAllCards(50) = Card11S
  315. set grobjAllCards(51) = Card12S
  316. set grobjAllCards(52) = Card13S
  317. 'Make all cards transparent
  318. ClearAllCards
  319. 'Load up the card stacks
  320. set grobjAllCardStacks(gintShuffleStackInx,1)= Shuffle
  321. set grobjAllCardStacks(gintDiscardStackInx,1)= Discard
  322. set grobjAllCardStacks(1,1) = Stack1
  323. set grobjAllCardStacks(2,1) = Stack2
  324. set grobjAllCardStacks(3,1) = Stack3
  325. set grobjAllCardStacks(4,1) = Stack4
  326. set grobjAllCardStacks(5,1) = Stack5
  327. set grobjAllCardStacks(6,1) = Stack6
  328. set grobjAllCardStacks(7,1) = Stack7
  329. for inx = 1 to gintCountAllStacks
  330. grobjAllCardStacks(inx,2) = 0
  331. next 
  332. set grobjAllCardStacks(gintAceStackStartInx,1) = Ace1
  333. set grobjAllCardStacks(gintAceStackStartInx+1,1) = Ace2
  334. set grobjAllCardStacks(gintAceStackStartInx+2,1) = Ace3
  335. set grobjAllCardStacks(gintAceStackStartInx+3,1) = Ace4
  336. 'Setup initial stack size by setting to the size of a card object.
  337. ' Don't use default Discard Stack because is hardcoded.
  338. for inx = 1 to gintCountAllStacks - 1
  339. grobjAllCardStacks(inx,1).height = grobjAllCards(1).height
  340. grobjAllCardStacks(inx,1).width = grobjAllCards(1).width
  341. next
  342. set grobjCardDeck(1) = CardDeck1
  343. set grobjCardDeck(2) = CardDeck2
  344. set grobjCardDeck(3) = CardDeck3
  345. set grobjCardDeck(4) = CardDeck4
  346. set grobjCardDeck(5) = CardDeck5
  347. set grobjCardDeck(6) = CardDeck6
  348. set grobjCardDeck(7) = CardDeck7
  349. set grobjCardDeck(8) = CardDeck8
  350. set grobjCardDeck(9) = CardDeck9
  351. set grobjCardDeck(10) = CardDeck10
  352. set grobjCardDeck(11) = CardDeck11
  353. set grobjCardDeck(12) = CardDeck12
  354. End Sub 'LoadCard
  355. '**********************************************
  356. '* Name: ChangeTheDeck
  357. '**********************************************
  358. '* Description:
  359. '* Changes the current deck being used.
  360. '**********************************************
  361. '* Parameters:
  362. '* DeckID New card deck to be displayed.
  363. '* Current value of deck is stored
  364. '* in gintCurDeck.
  365. '**********************************************
  366. Sub ChangeTheDeck (DeckID)
  367. 'The deck back didn't change so don't redo it.
  368. If gintCurDeck = DeckID then
  369. exit Sub
  370. End If
  371. 'Deck is new, let's change all the cards that need it.
  372. gintCurDeck = DeckID
  373. for StackInx = 1 to gintCountAllStacks
  374. for inner = 1 to intCountOnStack(StackInx)
  375. strCard = strGetStackElement(StackInx,inner)
  376. intCardInx = intGetCardIndex(strCard)
  377. If not grbCardShowing(intCardInx) then
  378. 'Redraw the cards that are not face up.
  379. DrawCard intCardInx
  380. End If
  381. next
  382. next 
  383. End Sub 'ChangeTheDeck
  384. '**********************************************
  385. '* Name: ClearAllCards
  386. '**********************************************
  387. '* Description:
  388. '* Sets all card objects to their transparent
  389. '*  value.
  390. '**********************************************
  391. '* Parameters:
  392. '* None
  393. '**********************************************
  394. Sub ClearAllCards
  395. for inx = 1 to 52
  396. grobjAllCards(inx).Suite = 0
  397. grobjAllCards(inx).Visible = True
  398. next 
  399. End Sub 'ClearAllCards
  400. '**********************************************
  401. '* Name: Push
  402. '**********************************************
  403. '* Description:
  404. '* Pushes (adds) a card object to a stack.
  405. '**********************************************
  406. '* Parameters:
  407. '* intStack Stack to add card to
  408. '* strCard Card to add
  409. '**********************************************
  410. Sub Push(intStack, strCard)
  411. dim intNewSize
  412. If gstrBOTTOMOFSTACK <> strTopOfStack(intStack) then
  413. grobjAllCardStacks(intStack,1).height = grobjAllCardStacks(intStack,1).height + intGetVertOffset(intStack)
  414. ' grobjAllCardStacks(intStack,1).width = grobjAllCardStacks(intStack,1).width + intGetHorzOffset(intStack)
  415. End If
  416. intNewSize = grobjAllCardStacks(intStack,2)+1
  417. grobjAllCardStacks(intStack,2) = intNewSize
  418. grobjAllCardStacks(intStack,intNewSize+2) = strCard
  419. 'This makes all cards but the top two invisible so drawing of the stack
  420. ' is much faster
  421. if intNewSize > 2 and _
  422.    (intStack >= gintAceStackStartInx and intStack <= gintAceStackStartInx+3) then
  423. CardIndex = intGetCardIndex(grobjAllCardStacks(intStack,intNewSize+2-2))
  424. grobjAllCards(CardIndex).suite = 0
  425. end if
  426. End Sub 'Push
  427. '**********************************************
  428. '* Name: strPop
  429. '**********************************************
  430. '* Description:
  431. '* Returns the string representation of
  432. '*  the card at the top of the stack and
  433. '*  removes it from the top.
  434. '**********************************************
  435. '* Parameters:
  436. '* intStack Stack to strPop card off of
  437. '**********************************************
  438. Function strPop(intStack)
  439. strCard = strTopOfStack(intStack)
  440. If gstrBOTTOMOFSTACK = strCard then
  441. strPop = gstrBOTTOMOFSTACK
  442. exit Function
  443. End If
  444. pos = grobjAllCardStacks(intStack,2)
  445. 'This unhides the cards that were hidden in Sub Push
  446. if pos > 2 and _
  447.    (intStack >= gintAceStackStartInx and intStack <= gintAceStackStartInx+3) then
  448. CardIndex = intGetCardIndex(grobjAllCardStacks(intStack,pos+2-2))
  449. grobjAllCards(CardIndex).suite = (CardIndex  13) + 1
  450. end if
  451. strPop = grobjAllCardStacks(intStack,pos+2)
  452. grobjAllCardStacks(intStack,2) = pos-1
  453. grobjAllCardStacks(intStack,1).height = grobjAllCardStacks(intStack,1).height - intGetVertOffset(intStack)
  454. ' grobjAllCardStacks(intStack,1).width = grobjAllCardStacks(intStack,1).width - intGetHorzOffset(intStack)
  455. End Function 'Pop
  456. '**********************************************
  457. '* Name: strGetStackElement
  458. '**********************************************
  459. '* Description:
  460. '* Internal Stack function used to get
  461. '*  elements that are not on the top or the
  462. '*  bottom of the stack.
  463. '**********************************************
  464. '* Parameters:
  465. '* intStack Stack to get it from
  466. '* intElement Position of element
  467. '**********************************************
  468. Function strGetStackElement(intStack,intElement)
  469. strGetStackElement = gstrBOTTOMOFSTACK
  470. If Element <= intCountOnStack(intStack) then
  471. strGetStackElement = grobjAllCardStacks(intStack,intElement+2)
  472. End If
  473. End Function 'strGetStackElement
  474. '**********************************************
  475. '* Name: strTopOfStack
  476. '**********************************************
  477. '* Description:
  478. '* Returns the string value of the card
  479. '* on the top of the stack. Does NOT
  480. '* remove the card from the stack.
  481. '**********************************************
  482. '* Parameters:
  483. '* intStack Stack to get card from
  484. '**********************************************
  485. Function strTopOfStack(intStack)
  486. strTopOfStack = gstrBOTTOMOFSTACK
  487. If 0 < intCountOnStack(intStack) then
  488. Pos = intCountOnStack(intStack)
  489. strTopOfStack = grobjAllCardStacks(intStack,Pos+2)
  490. End If
  491. End Function 'strTopOfStack
  492. '**********************************************
  493. '* Name: strGenerateCard
  494. '**********************************************
  495. '* Description:
  496. '* Generates a card randomly. If the deck has
  497. '*  not been shuffled yet, they will be.
  498. '**********************************************
  499. '* Parameters:
  500. '* intCardCount Card to get
  501. '**********************************************
  502. Function strGenerateCard(intCardCount)
  503. dim rSorted(52)
  504. 'Shuffle the stack if not already done.
  505. If not gbShuffleDone then
  506. Randomize 
  507. 'Go a random number of elements into the sequence.
  508. for inx = 1 to (gRNDCOUNT * rnd())
  509. next
  510. 'Load the unsorted array.
  511. for inx = 1 to 52
  512. rSorted(inx-1) = inx
  513. next
  514. 'Load a shuffled card into the array.
  515. for inx = 0 to 51
  516. random = cint(rnd() * (51 - inx))
  517. grintShuffled(inx+1) = rSorted(random)
  518. rSorted(random) = rSorted(51 - inx)
  519. next
  520. gbShuffleDone = true
  521. End If
  522. intCardNum = grintShuffled(intCardCount)
  523. strGenerateCard = strInxToCard(intCardNum)
  524. End Function 'strGenerateCard
  525. '**********************************************
  526. '* Name: strInxToCard
  527. '**********************************************
  528. '* Description:
  529. '* Converts a card number (index) to its
  530. '*  string representation.
  531. '**********************************************
  532. '* Parameters:
  533. '* intCardNum Value of card
  534. '**********************************************
  535. Function strInxToCard(intCardNum)
  536. inxSuit = 0
  537. intCurCardNum = intCardNum
  538. while 13 < intCurCardNum
  539. intCurCardNum = intCurCardNum - 13
  540. inxSuit = inxSuit + 1
  541. wEnd
  542. Select Case inxSuit
  543. 'Clubs, Spades, Hearts and Diamonds is the current order
  544. ' of Suits.
  545. 'Order in Card.ocx is dependent on suit order.
  546. case 0
  547. strSuit = "C"
  548. case 1
  549. strSuit = "S"
  550. case 2
  551. strSuit = "H"
  552. case 3
  553. strSuit = "D"
  554. case Else
  555. debugPrint "Error (strInxToCard): attempting to increment suit past last one"
  556. End select
  557. strCurCard = intCurCardNum & strSuit
  558. strInxToCard = strCurCard
  559. End Function 'strInxToCard
  560. '**********************************************
  561. '* Name: strGetCardSuit
  562. '**********************************************
  563. '* Description:
  564. '* Returns the suit of a card.
  565. '**********************************************
  566. '* Parameters:
  567. '* strCard Card to get the suit of.
  568. '**********************************************
  569. Function strGetCardSuit(strCard)
  570. strGetCardSuit = ""
  571. If "" = strCard then
  572. exit Function
  573. End If
  574. strGetCardSuit = right(strCard,1)
  575. End Function 'strGetCardSuit
  576. '**********************************************
  577. '* Name: intGetCardIndex
  578. '**********************************************
  579. '* Description:
  580. '* Returns the position, (index) into the
  581. '*   AllCards array of where the card is.
  582. '**********************************************
  583. '* Parameters:
  584. '* strCard Card to find index of.
  585. '**********************************************
  586. Function intGetCardIndex(strCard)
  587. If "" = strCard or gstrBOTTOMOFSTACK = strCard then
  588. intGetCardIndex = -1
  589. exit Function
  590. End If
  591. strSuit = right(strCard,1)
  592. 'Order in Card.ocx is dependent on suit order.
  593. Select case strSuit
  594. case "H"
  595. Offset = 26
  596. case "D"
  597. Offset = 39
  598. case "S"
  599. Offset = 13
  600. case "C"
  601. Offset = 0
  602. End Select
  603. intGetCardIndex = Offset + intCardVal(strCard)
  604. End Function 'intGetCardIndex
  605. '**********************************************
  606. '* Name: intCardVal
  607. '**********************************************
  608. '* Description:
  609. '* Returns the numeric value of a given card,
  610. '*  independent of suit.
  611. '*  Ex: 10 of Hearts is "10H" and the value
  612. '*  returned would be 10.
  613. '**********************************************
  614. '* Parameters:
  615. '* strCard Card to get value of.
  616. '**********************************************
  617. Function intCardVal(strCard)
  618. dim tmpVal
  619. If "" = strCard or gstrBOTTOMOFSTACK = strCard then
  620. tmpVal = -1
  621. Else
  622. tmpVal = left(strCard,len(strCard) -1)
  623. End If
  624. intCardVal = cint(tmpVal)
  625. End Function 'intCardVal
  626. '**********************************************
  627. '* Name: bSameSuit
  628. '**********************************************
  629. '* Description:
  630. '* Returns:
  631. '*    True if cards are the same suit.
  632. '*   False if suits are different.
  633. '**********************************************
  634. '* Parameters:
  635. '* strCard1 First card.
  636. '* strCard2 Card to compare against first card.
  637. '**********************************************
  638. Function bSameSuit(strCard1,strCard2)
  639. 'Get the values of both cards.
  640. strSuit1 = strGetCardSuit(strCard1)
  641. strSuit2 = strGetCardSuit(strCard2)
  642. bSameSuit = (strSuit1 = strSuit2)
  643. End Function 'bSameSuit
  644. '**********************************************
  645. '* Name: bSameColor
  646. '**********************************************
  647. '* Description:
  648. '* Returns:
  649. '* True if cards are the same color.
  650. '* False if cards are different color.
  651. '**********************************************
  652. '* Parameters:
  653. '* strCard1 First card.
  654. '* strCard2 Card to compare against first card.
  655. '**********************************************
  656. Function bSameColor(strCard1,strCard2)
  657. strSuit1 = strGetCardSuit(strCard1)
  658. strSuit2 = strGetCardSuit(strCard2)
  659. 'Are they the same suit?
  660. If (strSuit1 = strSuit2) then
  661. bSameColor = True
  662. exit Function
  663. End If
  664. 'Since both cards don't match suit
  665. ' check the other suit of that color.
  666. Select Case strSuit1
  667. case "H"
  668. bSameColor = (strSuit2 = "D")
  669. case "D"
  670. bSameColor = (strSuit2 = "H")
  671. case "S"
  672. bSameColor = (strSuit2 = "C")
  673. case "C"
  674. bSameColor = (strSuit2 = "S")
  675. End select
  676. End Function 'bSameColor
  677. '**********************************************
  678. '* Name: intGetHorzOffset
  679. '**********************************************
  680. '* Description:
  681. '* Returns the current horizontal offset
  682. '* in pixels when drawing the cards on a stack.
  683. '**********************************************
  684. '* Parameters:
  685. '* intStack Stack to draw.
  686. '**********************************************
  687. Function intGetHorzOffset(intStack)
  688. intGetHorzOffset = 0
  689. 'Only the Discard Stack has a horizontal offset.
  690. If (gintDiscardStackInx = intStack) then
  691. intGetHorzOffset = gintCardOffset
  692. End If
  693. End Function 'intGetHorzOffset
  694. '**********************************************
  695. '* Name: intGetVertOffset
  696. '**********************************************
  697. '* Description:
  698. '* Returns the vertical offset, used during
  699. '* drawing a stack, for a particular stack.
  700. '**********************************************
  701. '* Parameters:
  702. '* intStack Stack to return Vertical
  703. '*  offset for.
  704. '**********************************************
  705. Function intGetVertOffset(intStack)
  706. intGetVertOffset = gintCardOffset
  707. 'HARDCODE ASSUMPTION: ALL Stacks above gintAceStackStartInx WILL have a vert offset of 0
  708. If (gintAceStackStartInx <= intStack) then
  709. intGetVertOffset = 0
  710. End If
  711. End Function 'intGetVertOffset
  712. '**********************************************
  713. '* Name: DrawDiscardStack
  714. '**********************************************
  715. '* Description:
  716. '* The Discard Stack is drawn in this routine
  717. '* because it is a special case of the draw
  718. '* routine. The difference being that all 
  719. '* other stacks draw ALL cards with an offset
  720. '* and the discard ONLY draws the cards on
  721. '* the top of its pile with an offset.
  722. '**********************************************
  723. '* Parameters:
  724. '* None
  725. '**********************************************
  726. Sub DrawDiscardStack
  727. dim intStartOffset
  728. dim intStackSize
  729. dim intCountPiles
  730. dim intRemainder
  731. 'Default Offset Values
  732. intHorzOffset = intGetHorzOffset(gintDiscardStackInx)
  733. intVertOffset = intGetVertOffset(gintDiscardStackInx)
  734. intStackSize = intCountOnStack(gintDiscardStackInx)
  735. 'See if less than three cards were transferred to Discard Stack.
  736. intStartOffset = (intStackSize - gintCountDiscarded)
  737. 'Draw all underneath cards that won't have an offset.
  738. for inx = 0 to intStartOffset - 1
  739. strCard = grobjAllCardStacks(gintDiscardStackInx,inx + 3)
  740. CardIndex = intGetCardIndex(strCard)
  741. grobjAllCards(CardIndex).top = grobjAllCardStacks(gintDiscardStackInx,1).top 
  742. grobjAllCards(CardIndex).left = grobjAllCardStacks(gintDiscardStackInx,1).left 
  743. DrawCard CardIndex
  744. next 
  745. OffsetInx = 0
  746. 'Draw the cards at the top of the Discard Stack.
  747. for inx = intStartOffset to intStackSize - 1
  748. strCard = grobjAllCardStacks(gintDiscardStackInx,inx + 3)
  749. CardIndex = intGetCardIndex(strCard)
  750. grobjAllCards(CardIndex).top = grobjAllCardStacks(gintDiscardStackInx,1).top  + (OffsetInx * intVertOffset)
  751. grobjAllCards(CardIndex).left = grobjAllCardStacks(gintDiscardStackInx,1).left + (OffsetInx * intHorzOffset)
  752. DrawCard CardIndex
  753. OffsetInx = OffsetInx + 1
  754. 'Bring that card to top of pile.
  755. grobjAllCards(CardIndex).ZOrder(0)
  756. next
  757. 'Make sure to bring hotspot stack to top of z order so it can get events.
  758. grobjAllCardStacks(gintDiscardStackInx,1).ZOrder(0)
  759. End Sub 'DrawDiscardStack
  760. '**********************************************
  761. '* Name: DrawCard
  762. '**********************************************
  763. '* Description:
  764. '* Here we draw a card based on the index
  765. '* sent in.
  766. '* NOTE: if Card.ocx changes it will most likely
  767. '* effect code here.
  768. '**********************************************
  769. '* Parameters:
  770. '* intCardIndex Index into card array of
  771. '*  card being drawn.
  772. '**********************************************
  773. Sub DrawCard (CardIndex)
  774. If True = grbCardShowing(CardIndex) then
  775. 'Calculate which suit it was so we
  776. ' can change it back.
  777. inxSuit = (CardIndex  13)
  778. inxCard = CardIndex - (inxSuit*13)
  779. If (0 <> inxCard) then
  780. inxSuit = inxSuit + 1
  781. Else
  782. inxCard = 13
  783. End If
  784. grobjAllCards(CardIndex).Number= inxCard
  785. Else
  786. 'Cards are face down, let's use the current deck.
  787. inxSuit = gintCurDeck
  788. End If
  789. grobjAllCards(CardIndex).Suite= inxSuit
  790. End Sub 'DrawCard
  791. '**********************************************
  792. '* Name: DrawStack
  793. '**********************************************
  794. '* Description:
  795. '* Draws a specific stack by getting the correct
  796. '*  offset and then calling DrawCard.
  797. '**********************************************
  798. '* Parameters:
  799. '* intStack Stack to draw.
  800. '**********************************************
  801. Sub DrawStack (intStack)
  802. 'Default Offset Values
  803. intHorzOffset = intGetHorzOffset(intStack)
  804. intVertOffset = intGetVertOffset(intStack)
  805. If 0 = intCountOnStack(intStack) then Exit Sub
  806. If (gintDiscardStackInx = intStack) then
  807. DrawDiscardStack
  808. exit Sub
  809. End If
  810. for inx = 1 to intCountOnStack(intStack)
  811. 'This cycles through all the cards in the stack applying an offset.
  812. strCard = grobjAllCardStacks(intStack,inx + 2)
  813. intCardIndex = intGetCardIndex(strCard)
  814. grobjAllCards(intCardIndex).top = grobjAllCardStacks(intStack,1).top + ((inx-1) * intVertOffset)
  815. grobjAllCards(intCardIndex).left = grobjAllCardStacks(intStack,1).left + ((inx-1) * intHorzOffset)
  816. DrawCard intCardIndex
  817. next
  818. If (0 < intCardIndex) then 
  819. grobjAllCards(intCardIndex).ZOrder(0)
  820. grobjAllCardStacks(intStack,1).ZOrder(0)
  821. End If
  822. End Sub 'DrawStack
  823. '**********************************************
  824. '* Name: DealCards
  825. '**********************************************
  826. '* Description:
  827. '* Here we deal the cards to each of the
  828. '* 7 card stacks and put the rest into
  829. '* the Shuffle Stack.
  830. '**********************************************
  831. '* Parameters:
  832. '* NONE
  833. '**********************************************
  834. Sub DealCards
  835. 'The first time calling GenerateCard we have
  836. ' to be sure it shuffles the deck.
  837. gbShuffleDone = false
  838. intCardCount = 1
  839. 'This set of loops will deal the cards
  840. ' needed to the 7 stacks.
  841. for inxStack = 1 to gintCountCardStacks
  842. For inx = 1 to inxStack
  843. strCard = strGenerateCard(intCardCount)
  844. 'Push on the new card.
  845. Push inxStack,strCard
  846. intCardInx = intGetCardIndex(strCard)
  847. grbCardShowing(intCardInx) = False
  848. intCardCount = intCardCount +1
  849. grobjAllCards(intCardInx).Zorder(0)
  850. next 
  851. 'Only show the top card on the stack.
  852. grbCardShowing(intCardInx) = True
  853. DrawStack inxStack
  854. next 
  855. 'Give the rest to the Shuffle Stack.
  856. for Card = intCardCount to 52
  857. strCard = strGenerateCard(Card)
  858. push gintShuffleStackInx, strCard
  859. intCardInx = intGetCardIndex(strCard)
  860. grbCardShowing(intCardInx) = false
  861. grobjAllCards(intCardInx).Zorder(0)
  862. next
  863. DrawStack gintShuffleStackInx
  864. End Sub 'DealCards
  865. '**********************************************
  866. '* Name: DoDblClick
  867. '**********************************************
  868. '* Description:
  869. '* Here is where all double-clicking of
  870. '*   a card is processed. The double-click
  871. '*  allows a card to be put on an Ace Stack,
  872. '*  if the move is valid, with the 
  873. '*  top card on the stack clicked.
  874. '**********************************************
  875. '* Parameters:
  876. '* intStack The stack that was double-clicked.
  877. '**********************************************
  878. Sub DoDblClick(intStack)
  879. 'If Valid Move then move it.
  880. intAceInx = gintAceStackStartInx
  881. bMoved = false
  882. strCard = strTopOfStack(intStack)
  883. If (gstrBOTTOMOFSTACK = strCard) then Exit Sub
  884. 'Until we find a valid move or run out of Ace Stacks to check.
  885. While intAceInx < gintAceStackStartInx + 4 and not bMoved
  886. bMoved = bIsLegalMove(intStack,intAceInx,strCard)
  887. intAceInx = intAceInx + 1
  888. wEnd
  889. If bMoved then
  890. gintSrcStack = intStack
  891. MoveCard intAceInx -1
  892. End If
  893. 'Turn off the moving of a card.
  894. gintMoveCardInx = -1
  895. End Sub 'DoDblClick
  896. '**********************************************
  897. '* Name: ShuffleClicked
  898. '**********************************************
  899. '* Description:
  900. '* When the Shuffle Stack is clicked we
  901. '* must either put some cards on the
  902. '* Discard Stack, or if the Shuffle Stack is empty
  903. '* move all the cards from the Discard Stack.
  904. '**********************************************
  905. '* Parameters:
  906. '* intStack Should be the Shuffle Stack.
  907. '**********************************************
  908. Sub ShuffleClicked(intStack)
  909. dim strCard
  910. dim inx
  911. 'Do we actually have cards to move?
  912. If gstrBOTTOMOFSTACK <> strTopOfStack(intStack) then
  913. inx = 0
  914. strCard = strPop(intStack)
  915. 'Move cards to Discard Stack until we are out of cards or
  916. ' hit the number we wanted to move.
  917. while (gCOUNTDEAL > inx) and (gstrBOTTOMOFSTACK <> strCard)
  918. Push gintDiscardStackInx, strCard
  919. intCardInx = intGetCardIndex(strCard)
  920. If -1 <> intCardInx then grbCardShowing(intCardInx) = True
  921. inx = inx + 1
  922. strCard = strPop(intStack)
  923. Wend
  924. If (gCOUNTDEAL = inx ) and (gstrBOTTOMOFSTACK <> strCard) then Push intStack,strCard
  925. gintCountDiscarded = inx
  926. Else
  927. 'No more to move so let's move discard back to shuffle.
  928. for inx = 1 to intCountOnStack(gintDiscardStackInx)
  929. strCard = strPop(gintDiscardStackInx)
  930. Push intStack,strCard
  931. intCardInx = intGetCardIndex(strCard)
  932. grbCardShowing(intCardInx) = False
  933. next 
  934. DrawStack intStack
  935. gintCountDiscarded = 0
  936. End If
  937. DrawStack gintDiscardStackInx
  938. End Sub 'ShuffleClicked
  939. '**********************************************
  940. '* Name: intCountOnStack
  941. '**********************************************
  942. '* Description:
  943. '* Returns number of elements on stack given.
  944. '**********************************************
  945. '* Parameters:
  946. '* intStack Stack to get number from.
  947. '**********************************************
  948. Function intCountonStack(intStack)
  949. intCountOnStack = grobjAllCardStacks(intStack,2)
  950. End Function
  951. '**********************************************
  952. '* Name: SetMoveStartValues
  953. '**********************************************
  954. '* Description:
  955. '* This is the first function called in the 
  956. '*  action of moving a card. This is where
  957. '*  the MouseDown events call to so stated
  958. '*  variables can be initialized.
  959. '*  Also the top and left start positions
  960. '*  are set up here for the card drag.
  961. '*
  962. '**********************************************
  963. '* Parameters:
  964. '* intStack Stack moving from
  965. '* x Start left mouse position
  966. '* y Start top mouse position
  967. '**********************************************
  968. Sub SetMoveStartValues (intStack,x,y)
  969. dim intCount
  970. CardMoving = strTopOfStack(intStack)
  971. If gstrBOTTOMOFSTACK <>  CardMoving then
  972. intCardInx = intGetCardIndex(CardMoving)
  973. If not grbCardShowing(intCardInx) then
  974. 'Card was on the stack but not visible, so
  975. ' make it visible and exit the move.
  976. gintMoveCardInx = -1
  977. grbCardShowing(intCardInx) = True
  978. DrawCard intCardInx
  979. exit Sub
  980. End If
  981. Else
  982. gintMoveCardInx = -1
  983. Exit Sub
  984. End If
  985. 'If this isn't from an Ace Stack. then we must calculate
  986. ' which card it is on that stack,
  987. If (gintAceStackStartInx > intStack) then
  988. intCount = intCountOnStack(intStack)
  989. 'Calculate card position using default offset amount.
  990. ' No need to check horizontal offset because we wouldn't
  991. ' get this event unless we were already in the stack.
  992. ClickedCard = (Y  intGetVertOffset(intStack)) + 1
  993. If ClickedCard > intCount then
  994. ClickedCard = intCount
  995. End If
  996. 'Number of cards we are moving.
  997. gintCountMoving = (intCount - ClickedCard) + 1
  998. CardMoving = strGetStackElement(intStack,ClickedCard)
  999. Else
  1000. 'Can only move the top element on an Ace Stack.
  1001. CardMoving = strTopOfStack(intStack)
  1002. If (gstrBOTTOMOFSTACK = CardMoving) then
  1003. gintMoveCardInx = -1
  1004. exit Sub
  1005. End If
  1006. gintCountMoving = 1
  1007. End If
  1008. gintMoveCardInx = intGetCardIndex(CardMoving)
  1009. If not grbCardShowing(gintMoveCardInx) then
  1010. gintMoveCardInx = -1
  1011. exit Sub
  1012. End If
  1013. 'Save the stack it came from.
  1014. gintSrcStack = intStack
  1015. 'Save starting values for the card to be used in
  1016. ' DragCard.
  1017. gdCardTop = grobjAllCards(gintMoveCardInx).top 
  1018.     gdCardLeft = grobjAllCards(gintMoveCardInx).left 
  1019. intStackSize = intCountOnStack(intStack)
  1020. for inx =  (intStackSize - gintCountMoving)+ 1 to intStackSize
  1021. 'Move the card to top of z order
  1022. intCardInx = intGetCardIndex(strGetStackElement(intStack,inx))
  1023. grobjAllCards(intCardInx).ZOrder(0)
  1024. next 
  1025. gdOffsetTop = intGetVertOffset(intStack) * intCountOnStack(intStack)
  1026. gdStartTop = y
  1027. gdStartLeft = x
  1028. End Sub 'SetMoveStartValues
  1029. '**********************************************
  1030. '* Name: DragCard
  1031. '**********************************************
  1032. '* Description:
  1033. '* This is where a card is dragged.  Drag stops
  1034. '* when a MouseUp event is fired.
  1035. '**********************************************
  1036. '* Parameters:
  1037. '* intStack Stack moving from
  1038. '* x Start left mouse position.
  1039. '* y Start top mouse position.
  1040. '**********************************************
  1041. Sub DragCard (intStack,x,y)
  1042. 'Move Top of intStack
  1043. dim cntCard
  1044. If gintMoveCardInx = -1 then Exit Sub
  1045. 'DragSkip is used to ignore a number of 
  1046. ' MouseMove events. This is done so
  1047. ' we won't be overdrawing the card
  1048. ' when a draw really isn't necessary.
  1049. ' It will also make the drag appear to be
  1050. ' more responsive
  1051. gintDragSkip = gintDragSkip - 1
  1052. If gintDragSkip <> 0 then exit Sub
  1053. gintDragSkip = 3
  1054. intStackSize = intCountOnStack(intStack)
  1055. cntCard = 0
  1056. 'Figure out new top and left.
  1057. MyTop = grobjAllCards(gintMoveCardInx).top
  1058. MyLeft = grobjAllCards(gintMoveCardInx).left
  1059. for inx =  (intStackSize - gintCountMoving) + 1 to intStackSize
  1060. intCardInx = intGetCardIndex(strGetStackElement(intStack,inx))
  1061. 'Apply new values to cards below current one, being sure to maintain offset.
  1062. grobjAllCards(intCardInx).top =  MyTop + (y - gdStartTop) + (cntCard * intGetVertOffset(intStack))
  1063.     grobjAllCards(intCardInx).left = MyLeft +  (x - gdStartLeft)
  1064. cntCard = cntCard + 1
  1065. next 
  1066. gdStartTop = y
  1067. gdStartLeft = x
  1068. End Sub 'DragCard
  1069. '**********************************************
  1070. '* Name: SetMouseUp
  1071. '**********************************************
  1072. '* Description:
  1073. '* Tells the move operation that MouseUp has
  1074. '* happened. Will take care of seeing if 
  1075. '* card was dropped in a movable place and
  1076. '* if so, moves the card. If not in a valid
  1077. '* place then the card is returned to the start
  1078. '* stack.
  1079. '**********************************************
  1080. '* Parameters:
  1081. '* intStack Stack moving from.
  1082. '* x Start left mouse position.
  1083. '* y Start top mouse position.
  1084. '**********************************************
  1085. Sub SetMouseUp (intStack, x,y)
  1086. If gintMoveCardInx = -1 then exit Sub
  1087. 'Calculate the screen coordinates based on the x and y.
  1088. ScrnX = X + grobjAllCardStacks(intStack,1).left
  1089. ScrnY = Y + grobjAllCardStacks(intStack,1).top
  1090. inxStack = 1
  1091. bHit = False
  1092. while (inxStack <= gintCountAllStacks) and Not bHit
  1093. set pCurStack = grobjAllCardStacks(inxStack,1)
  1094. 'Hit testing to see if we dropped it on a stack.
  1095. If ScrnX >= pCurStack.left and ScrnX <= (pCurStack.Left + pCurStack.Width) then
  1096. If ScrnY >= pCurStack.Top and ScrnY <= (pCurStack.Top + pCurStack.Height) then
  1097. bHit = True
  1098. End If
  1099. End If
  1100. inxStack = inxStack + 1
  1101. wEnd
  1102. If inxStack > gintCountAllStacks then
  1103. 'Move it Back.
  1104. MoveCard gintSrcStack
  1105. Else
  1106. 'Move it for real.
  1107. MoveCard inxStack-1
  1108. End If
  1109. End Sub 'SetMouseUp
  1110. '**********************************************
  1111. '* Name: bIsLegalMove
  1112. '**********************************************
  1113. '* Description:
  1114. '* Returns:
  1115. '*  True  Move from Src to Dest is valid.
  1116. '*  False Not valid to move from Src to Dest.
  1117. '*
  1118. '*  Move is valid to a card stack when:
  1119. '*   Card moving is one less and different color.
  1120. '* Move is valid to an Ace Stack when:
  1121. '*   Card moving is one greater and same suit.
  1122. '* Moves are valid between card stacks and
  1123. '* from ace and Discard Stack to card stack.
  1124. '*
  1125. '*  Not valid:
  1126. '*   Ace or Card stack to Discard Stack
  1127. '*   if card not face up.
  1128. '**********************************************
  1129. '* Parameters:
  1130. '* intSrcStack Stack coming from.
  1131. '* intDestStack Stack going to.
  1132. '* strCard Card being moved.
  1133. '**********************************************
  1134. Function bIsLegalMove(intSrcStack,intDestStack, strCard)
  1135. dim intCard
  1136. dim intCardInx
  1137. bIsLegalMove = False
  1138. 'Can put a card anywhere we want in debug mode.
  1139. If gbDebug then
  1140. bIsLegalMove = gbDebug
  1141. exit Function
  1142. End If
  1143. if gintCountMoving > 1 and (intDestStack >= gintAceStackStartInx and intDestStack <= (gintAceStackStartInx + 3)) then
  1144. exit function
  1145. end if
  1146. intCardInx = intGetCardIndex(strCard)
  1147. If -1 = intCardInx then exit Function
  1148. 'Not valid, not visible.
  1149. If not grbCardShowing(intCardInx) then Exit Function
  1150. 'Nothing moves to the Discard Stack (Not Valid).
  1151. If gintDiscardStackInx = intDestStack then exit Function
  1152. 'Get card on top of destination for testing.
  1153. DestCard = strTopOfStack(intDestStack)
  1154. intCard = intCardVal(strCard)
  1155. If gintAceStackStartInx <= intDestStack then
  1156. 'Move to Ace intStack?
  1157. If (gstrBOTTOMOFSTACK = DestCard) then
  1158. 'Can move to empty Ace Stack if card is an Ace.
  1159. bIsLegalMove = (gACE = intCard)
  1160. Else
  1161. bIsLegalMove = (bSameSuit (strCard,DestCard) and (intCard - 1 = intCardVal(DestCard)))
  1162. End If
  1163. Else 'Move to CardStack
  1164. If (gstrBOTTOMOFSTACK = DestCard) then
  1165. 'Can move to empty card stack if card is a King.
  1166. bIsLegalMove = (gKING = intCard)
  1167. Else
  1168. bIsLegalMove = ((Not bSameColor(strCard,DestCard)) and (intCard + 1 = intCardVal(DestCard)))
  1169. End If
  1170. End If
  1171. End Function
  1172. '**********************************************
  1173. '* Name: tmNewCard_Timer
  1174. '**********************************************
  1175. '* Description:
  1176. '* Here is where a new card is assigned to 
  1177. '*  the animation routine when the last one
  1178. '*  has finished moving to the Ace Stack.
  1179. '**********************************************
  1180. '* Parameters:
  1181. '* None
  1182. '**********************************************
  1183. Sub tmNewCard_Timer()
  1184. If gbCardMoveDone then
  1185. 'Turn off all timers until we get a new card assigned.
  1186. tmNewCard.enabled = false
  1187. gbCardMoveDone = false
  1188. 'Our Start Case.
  1189. If gintCurStackToMove = 0 then
  1190. gintCurStackToMove = gintAceStackStartInx
  1191. Else
  1192. gobjCurMoveCard.left = grobjAllCardStacks(gintCurStackToMove,1).left
  1193. gobjCurMoveCard.top = grobjAllCardStacks(gintCurStackToMove,1).top
  1194. End If
  1195. 'See if cards are already on the Ace Stack.
  1196. strCard = strTopOfStack(gintCurStackToMove)
  1197. intCard = intCardVal(strCard)
  1198. If -1 = intCard then
  1199. intCard = gACE
  1200. Else
  1201. 'Already have cards on the stack, let's pile the rest on.
  1202. If 13 = intCard then gintCurStackToMove = gintCurStackToMove + 1
  1203. intCard = intCard + 1
  1204. While (intCard = 14) and (gintCurStackToMove <> gintAceStackStartInx + 4)
  1205. strCard = strTopOfStack(gintCurStackToMove)
  1206. If gstrBOTTOMOFSTACK = strCard then
  1207. intCard = gACE
  1208. Else
  1209. intCard = intCardVal(strCard)
  1210. End If
  1211. Wend
  1212. End If
  1213. 'We are done moving. Call end-game animation to bounce cards away
  1214. If (gintCurStackToMove =  gintAceStackStartInx + 4) then
  1215. SeeIfGameOver gintAceStackStartInx
  1216. exit Sub
  1217. End If
  1218. 'Current suit that is moving.
  1219. CurMoveSuit = mid(gstrSuitOrder,((gintCurStackToMove - gintAceStackStartInx) + 1),1)
  1220. 'Move the card to the destination.
  1221. strCard = intCard & CurMoveSuit
  1222. push gintCurStackToMove,strCard
  1223. 'Get next card.
  1224. intCardInx = intGetCardIndex(strCard)
  1225. set gobjCurMoveCard = grobjAllCards(intCardInx)
  1226. grbCardShowing(intCardInx) = True
  1227. gobjCurMoveCard.ZOrder(0)
  1228. DrawCard intCardInx
  1229. 'Figure out increments for moving it.
  1230. gincCardMoveSteps = 5
  1231. gincEndLeft = ((gobjCurMoveCard.left - grobjAllCardStacks(gintCurStackToMove,1).Left)  gincCardMoveSteps)
  1232. gincEndTop = ((gobjCurMoveCard.Top - grobjAllCardStacks(gintCurStackToMove,1).Top)  gincCardMoveSteps)
  1233. 'Start the moving of the new card.
  1234. tmEndCardMove.enabled = true
  1235. End If
  1236. End Sub 'tmNewCard_Timer
  1237. '**********************************************
  1238. '* Name: tmEndCardMove_Timer
  1239. '**********************************************
  1240. '* Description:
  1241. '* Here is where the actual moving of a 
  1242. '* card to its Ace Stack happens after the
  1243. '* user clicks End_The_Game.
  1244. '**********************************************
  1245. '* Parameters:
  1246. '* None
  1247. '**********************************************
  1248. Sub tmEndCardMove_Timer()
  1249. If (gincCardMoveSteps =  0) then
  1250. 'If card has completed moving, get a new one.
  1251. gbCardMoveDone = true
  1252. tmEndCardMove.enabled = false
  1253. tmNewCard.enabled = true
  1254. exit Sub
  1255. End If
  1256. 'Not done yet, move it another increment.
  1257. gincCardMoveSteps = gincCardMoveSteps - 1
  1258. gobjCurMoveCard.left = gobjCurMoveCard.left - gincEndLeft
  1259. gobjCurMoveCard.top = gobjCurMoveCard.top - gincEndTop
  1260. End Sub 'tmEndCardMove_Timer
  1261. '**********************************************
  1262. '* Name: EndTheGame
  1263. '**********************************************
  1264. '* Description:
  1265. '* When a user clicks End the Game, this is where
  1266. '* the whole process of moving
  1267. '* those cards is started.
  1268. '**********************************************
  1269. '* Parameters:
  1270. '* None
  1271. '**********************************************
  1272. Sub EndTheGame()
  1273. 'Remove ALL cards from the card stacks.
  1274. for inx = 1 to gintCountCardStacks
  1275. strCard = strPop(inx)
  1276. while (strCard <> gstrBOTTOMOFSTACK)
  1277. strCard = strPop(inx)
  1278. Wend
  1279. next
  1280. gstrSuitOrder = ""
  1281. 'Figure out the order the suits are placed on the Ace Stack.
  1282. ' gstrSuitOrder holds the order.
  1283. for inx = gintAceStackStartInx to gintAceStackStartInx + 3
  1284. strCard = strTopOfStack(inx)
  1285. If strCard <> gstrBOTTOMOFSTACK then
  1286. gstrSuitOrder = gstrSuitOrder & strGetCardSuit(strCard)
  1287. Else
  1288. gstrSuitOrder = gstrSuitOrder & " "
  1289. End If
  1290. next 
  1291. curSuit = "C"
  1292. 'Default order is CSHD if no cards are have been played on an Ace Stack.
  1293. ' If cards are already displayed then figure out which ones we are missing
  1294. ' and add them to the spaces in the string.
  1295. for inx = 1 to 4
  1296. If instr(gstrSuitOrder,curSuit) = 0 then
  1297. blank = instr(gstrSuitOrder," ")
  1298. gstrSuitOrder = left(gstrSuitOrder,blank - 1) & curSuit & mid(gstrSuitOrder,blank+1)
  1299. End If
  1300. Select Case curSuit
  1301. Case "C"
  1302. curSuit = "S"
  1303. Case "S"
  1304. curSuit = "H"
  1305. case "H"
  1306. curSuit = "D"
  1307. End select
  1308. next
  1309. gintCurStackToMove = 0
  1310. gbCardMoveDone = true
  1311. 'Set up and start the timers to move the first
  1312. ' card.
  1313. tmNewCard.Interval = 1
  1314. tmNewCard.Enabled = true
  1315. tmEndCardMove.interval = 1
  1316. End Sub 'EndTheGame
  1317. '**********************************************
  1318. '* Name: SeeIfGameOver
  1319. '**********************************************
  1320. '* Description:
  1321. '* This is the place to see if all
  1322. '*  the Kings are placed on their proper
  1323. '*  Ace Stack and, if so, start the animation.
  1324. '**********************************************
  1325. '* Parameters:
  1326. '* intStack Stack to test.
  1327. '**********************************************
  1328. Sub SeeIfGameOver(intStack)
  1329. If (gintAceStackStartInx > intStack) or (gintAceStackStartInx+4 < intStack) then
  1330. exit Sub
  1331. End If
  1332. bWon = true
  1333. inx = gintAceStackStartInx
  1334. 'Go until we don't see a king or we tested the last
  1335. ' Ace Stack.
  1336. while bWon and inx < gintAceStackStartInx + 4
  1337. strCard = strTopOfStack(inx)
  1338. If (gstrBOTTOMOFSTACK <> strCard) then
  1339. bWon = (gKING = intCardVal(strCard))
  1340. Else
  1341. bWon = False
  1342. End If
  1343. inx = inx + 1
  1344. wEnd 
  1345. If not bWon then exit Sub
  1346. 'We WON!! Let's initialize for animation.
  1347. gCardCount = 52
  1348. tmEndAnimation.interval = 4
  1349. gbAnimationDone = false
  1350. 'Moving all four cards.
  1351. for inx = 0 to 3
  1352. gbDoneMoving(inx) = true
  1353. next
  1354. Randomize
  1355. gbLeaveEarly = False
  1356. tmEndAnimation.enabled = true
  1357. End Sub 'SeeIfGameOver
  1358. '**********************************************
  1359. '* Name: tmEndAnimation_Timer
  1360. '**********************************************
  1361. '* Description:
  1362. '* Here is where all of the work for the 
  1363. '* bouncing cards animation takes place.
  1364. '**********************************************
  1365. '* Parameters:
  1366. '**********************************************
  1367. Sub tmEndAnimation_Timer()
  1368. dim objCard
  1369. ' inc-/decrement position
  1370. If gbAnimationDone or gbLeaveEarly then
  1371. 'User wanted to exit early or animation finished.
  1372. tmEndAnimation.enabled = false
  1373. gbAnimationDone = True
  1374. msgbox "You Won !!!",0,"ActiveX Solitaire"
  1375. ClearAllCards
  1376. exit Sub
  1377. End If
  1378. gbAnimationDone = true
  1379. for inx = 0 to 3
  1380. 'See if one of the 4 cards is done so we can assign another one.
  1381. If gbDoneMoving(inx) then
  1382. 'Get next card.
  1383. strCard = strPop(inx + gintAceStackStartInx)
  1384. If (gstrBOTTOMOFSTACK <> strCard) then
  1385. intCardInx = intGetCardIndex(strCard)
  1386. set grCardBouncing(inx,1) = grobjAllCards(intCardInx)
  1387. 'The following random is subtracted by half the range so 
  1388. ' both positive and negative directions can be generated.
  1389. grCardBouncing(inx,2) = (rnd() * 10) - 5 'Vertical
  1390. grCardBouncing(inx,3) = (rnd() * 30) - 15 'Horizontal
  1391. gbDoneMoving(inx) = false
  1392. Else
  1393. 'Hit bottom of stack, no more bouncing.
  1394. grCardBouncing(inx,1) = 0
  1395. End If
  1396. End If
  1397. 'Figure out effect of gravity.
  1398. grCardBouncing(inx,2) = grCardBouncing(inx,2) + (gdGravity * (tmEndAnimation.interval/100))
  1399. If not gbDoneMoving(inx) then
  1400. set objCard = grCardBouncing(inx,1)
  1401. 'Get new position.
  1402. objCard.left = objCard.left + grCardBouncing(inx,3)
  1403. objCard.top = objCard.top +  grCardBouncing(inx,2)
  1404. 'check for border bounce,
  1405. gbDoneMoving(inx) = (objCard.left >= Form.Width) or (objCard.left + objCard.Width <= 0)
  1406. gbDoneMoving(inx) = gbDoneMoving(inx) or (objCard.top > Form.height) or ((objCard.top + objCard.height) < 0)
  1407. 'Here's the friction and direction change if necessary.
  1408. If (grCardBouncing(inx,1).top <= 0) then 
  1409. grCardBouncing(inx,2) = -1 * (grCardBouncing(inx,2) + gdFriction)
  1410. elseif (objCard.top + objCard.height) >= Form.Height then 
  1411. grCardBouncing(inx,2) = (gdFriction - (grCardBouncing(inx,2)))
  1412. End If
  1413. End If
  1414. gbAnimationDone = (gbAnimationDone and gbDoneMoving(inx) and (gstrBOTTOMOFSTACK = strTopOfStack(inx + gintAceStackStartInx)))
  1415. next 
  1416. End Sub 'tmEndAnimation_timer
  1417. '**********************************************
  1418. '* Name: MoveCard
  1419. '**********************************************
  1420. '* Description:
  1421. '* This is where a card move actually is
  1422. '*   done. For the source stack, it relies
  1423. '*  on gintSrcStack.
  1424. '**********************************************
  1425. '* Parameters:
  1426. '* intDestStack Destination stack
  1427. '**********************************************
  1428. Sub MoveCard (intDestStack)
  1429. 'See If Card hit a different intStack.
  1430. 'If not, hit other intStack or legal drop, then move back to original intStack.
  1431. intStackSize = intCountOnStack(gintSrcStack)
  1432. intTopOfMove = (intStackSize - gintCountMoving)+ 1
  1433. 'Move from Src to Dest.
  1434. If (gintSrcStack <> intDestStack) then 
  1435. strCard = strGetStackElement(gintSrcStack,intTopOfMove)
  1436. 'See if it is legal to do this move.
  1437. If bIsLegalMove(gintSrcStack,intDestStack,strCard) then
  1438. for inx =  (intStackSize - gintCountMoving)+ 1 to intStackSize
  1439. 'Yes, let's move all the cards to the new stack.
  1440. strCard = strGetStackElement(gintSrcStack,inx)
  1441. Push intDestStack,strCard
  1442. next 
  1443. 'However many moved must be removed from the source.
  1444. for inx = 1 to gintCountMoving
  1445. strCard = strPop(gintSrcStack)
  1446. next
  1447. grobjAllCardStacks(intDestStack,1).Zorder(0)
  1448. DrawStack intDestStack
  1449. 'After that move, let's see if it is the last.
  1450. SeeIfGameOver intDestStack
  1451. exit Sub
  1452. End If
  1453. End If
  1454. cntCard = 0
  1455. 'Source and destination were the same, let's move cards back.
  1456. for inx =  intTopOfMove to intStackSize
  1457. intCardInx = intGetCardIndex(strGetStackElement(gintSrcStack,inx))
  1458. grobjAllCards(intCardInx).top = gdCardTop + (cntCard * intGetVertOffset(intStack))
  1459.    grobjAllCards(intCardInx).left = gdCardLeft
  1460. cntCard = cntCard + 1
  1461. next 
  1462. grobjAllCardStacks(gintSrcStack,1).Zorder(0)
  1463. End Sub 'MoveCard
  1464. -->
  1465. </SCRIPT>
  1466. <SCRIPT LANGUAGE="VBScript">
  1467. <!--
  1468. '**********************************************
  1469. '* Name: Discard Stack Mouse events
  1470. '**********************************************
  1471. '* Description:
  1472. '* These events will handle the moving
  1473. '* of cards from the Discard Stack to either
  1474. '* the Ace Stack or a card stack.
  1475. '**********************************************
  1476. Sub Discard_DblClick(Cancel)
  1477.    DoDblClick gintDiscardStackInx
  1478. End Sub
  1479. Sub Discard_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1480. If 1 <> Button then exit Sub
  1481. gbMouseUp = false
  1482. SetMoveStartValues gintDiscardStackInx,x,y
  1483. End Sub
  1484. Sub Discard_MouseMove(Button, Shift, X, Y)
  1485. If (1 <> Button) or gbMouseUp then exit Sub
  1486. DragCard gintDiscardStackInx,x,y
  1487. End Sub
  1488. Sub Discard_MouseUp(Button, Shift, X, Y)
  1489. gbMouseUp = True
  1490. SetMouseUp gintDiscardStackInx,x,y
  1491. End Sub
  1492. -->
  1493. </SCRIPT>
  1494. <SCRIPT LANGUAGE="VBScript">
  1495. <!--
  1496. '**********************************************
  1497. '* Name: Shuffle Stack Mouse events
  1498. '**********************************************
  1499. '* Description:
  1500. '* These events will handle the moving
  1501. '* of cards from the Shuffle Stack to the
  1502. '* Discard Stack..
  1503. '**********************************************
  1504. Sub Shuffle_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1505. ShuffleClicked(gintShuffleStackInx)
  1506. End Sub
  1507. -->
  1508. </SCRIPT>
  1509. <SCRIPT LANGUAGE="VBScript">
  1510. <!--
  1511. '**********************************************
  1512. '* Name: Ace Stack mouse events
  1513. '**********************************************
  1514. '* Description:
  1515. '* These mouse events for all the Ace Stacks
  1516. '* will handle moving cards from an ace
  1517. '* stack back to a card stack ONLY.
  1518. '**********************************************
  1519. Sub Ace1_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1520. If 1 <> Button then exit Sub
  1521. gbMouseUp = false
  1522. SetMoveStartValues gintCountCardStacks + 1,x,y
  1523. End Sub
  1524. Sub Ace1_MouseMove(Button, Shift, X, Y)
  1525. If (1 <> Button) or gbMouseUp then exit Sub
  1526. DragCard gintCountCardStacks + 1,x,y
  1527. End Sub
  1528. Sub Ace1_MouseUp(Button, Shift, X, Y)
  1529. gbMouseUp = True
  1530. SetMouseUp gintCountCardStacks + 1,x,y
  1531. End Sub
  1532. -->
  1533. </SCRIPT>
  1534. <SCRIPT LANGUAGE="VBScript">
  1535. <!--
  1536. Sub Ace2_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1537. If 1 <> Button then exit Sub
  1538. gbMouseUp = false
  1539. SetMoveStartValues gintCountCardStacks + 2,x,y
  1540. End Sub
  1541. Sub Ace2_MouseMove(Button, Shift, X, Y)
  1542. If (1 <> Button) or gbMouseUp then exit Sub
  1543. DragCard gintCountCardStacks + 2,x,y
  1544. End Sub
  1545. Sub Ace2_MouseUp(Button, Shift, X, Y)
  1546. gbMouseUp = True
  1547. SetMouseUp gintCountCardStacks + 2,x,y
  1548. End Sub
  1549. -->
  1550. </SCRIPT>
  1551. <SCRIPT LANGUAGE="VBScript">
  1552. <!--
  1553. Sub Ace3_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1554. If 1 <> Button then exit Sub
  1555. gbMouseUp = false
  1556. SetMoveStartValues gintCountCardStacks + 3,x,y
  1557. End Sub
  1558. Sub Ace3_MouseMove(Button, Shift, X, Y)
  1559. If (1 <> Button) or gbMouseUp then exit Sub
  1560. DragCard gintCountCardStacks + 3,x,y
  1561. End Sub
  1562. Sub Ace3_MouseUp(Button, Shift, X, Y)
  1563. gbMouseUp = True
  1564. SetMouseUp gintCountCardStacks + 3,x,y
  1565. End Sub
  1566. -->
  1567. </SCRIPT>
  1568. <SCRIPT LANGUAGE="VBScript">
  1569. <!--
  1570. Sub Ace4_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1571. If 1 <> Button then exit Sub
  1572. gbMouseUp = false
  1573. SetMoveStartValues gintCountCardStacks + 4,x,y
  1574. End Sub
  1575. Sub Ace4_MouseMove(Button, Shift, X, Y)
  1576. If (1 <> Button) or gbMouseUp then exit Sub
  1577. DragCard gintCountCardStacks + 4,x,y
  1578. End Sub
  1579. Sub Ace4_MouseUp(Button, Shift, X, Y)
  1580. gbMouseUp = True
  1581. SetMouseUp gintCountCardStacks + 4,x,y
  1582. End Sub
  1583. -->
  1584. </SCRIPT>
  1585. <SCRIPT LANGUAGE="VBScript">
  1586. <!--
  1587. '**********************************************
  1588. '* Name: Card stack mouse events
  1589. '**********************************************
  1590. '* Description:
  1591. '* These events will handle the moving
  1592. '* of cards from one stack to another, from
  1593. '* the Discard Stack to the card stacks or from
  1594. '* an Ace Stack to a card stack.
  1595. '**********************************************
  1596. Sub Stack7_DblClick(Cancel)
  1597.    DoDblClick 7
  1598. End Sub
  1599. Sub Stack7_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1600. If 1 <> Button then exit Sub
  1601. gbMouseUp = false
  1602. SetMoveStartValues 7,x,y
  1603. End Sub
  1604. Sub Stack7_MouseMove(Button, Shift, X, Y)
  1605. If (1 <> Button) or gbMouseUp then exit Sub
  1606. DragCard 7,x,y
  1607. End Sub
  1608. Sub Stack7_MouseUp(Button, Shift, X, Y)
  1609. gbMouseUp = True
  1610. SetMouseUp 7,x,y
  1611. End Sub
  1612. -->
  1613. </SCRIPT>
  1614. <SCRIPT LANGUAGE="VBScript">
  1615. <!--
  1616. Sub Stack6_DblClick(Cancel)
  1617.    DoDblClick 6
  1618. End Sub
  1619. Sub Stack6_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1620. If 1 <> Button then exit Sub
  1621. gbMouseUp = false
  1622. SetMoveStartValues 6,x,y
  1623. End Sub
  1624. Sub Stack6_MouseMove(Button, Shift, X, Y)
  1625. If (1 <> Button) or gbMouseUp then exit Sub
  1626. DragCard 6,x,y
  1627. End Sub
  1628. Sub Stack6_MouseUp(Button, Shift, X, Y)
  1629. gbMouseUp = True
  1630. SetMouseUp 6,x,y
  1631. End Sub
  1632. -->
  1633. </SCRIPT>
  1634. <SCRIPT LANGUAGE="VBScript">
  1635. <!--
  1636. Sub Stack5_DblClick(Cancel)
  1637.    DoDblClick 5
  1638. End Sub
  1639. Sub Stack5_MouseUp(Button, Shift, X, Y)
  1640. gbMouseUp = True
  1641. SetMouseUp 5,x,y
  1642. End Sub
  1643. Sub Stack5_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1644. If 1 <> Button then exit Sub
  1645. gbMouseUp = false
  1646. SetMoveStartValues 5,x,y
  1647. End Sub
  1648. Sub Stack5_MouseMove(Button, Shift, X, Y)
  1649. If (1 <> Button) or gbMouseUp then exit Sub
  1650. DragCard 5,x,y
  1651. End Sub
  1652. -->
  1653. </SCRIPT>
  1654. <SCRIPT LANGUAGE="VBScript">
  1655. <!--
  1656. Sub Stack4_DblClick(Cancel)
  1657.    DoDblClick 4
  1658. End Sub
  1659. Sub Stack4_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1660. If 1 <> Button then exit Sub
  1661. gbMouseUp = false
  1662. SetMoveStartValues 4,x,y
  1663. End Sub
  1664. Sub Stack4_MouseMove(Button, Shift, X, Y)
  1665. If (1 <> Button) or gbMouseUp then exit Sub
  1666. DragCard 4,x,y
  1667. End Sub
  1668. Sub Stack4_MouseUp(Button, Shift, X, Y)
  1669. gbMouseUp = True
  1670. SetMouseUp 4,x,y
  1671. End Sub
  1672. -->
  1673. </SCRIPT>
  1674. <SCRIPT LANGUAGE="VBScript">
  1675. <!--
  1676. Sub Stack3_DblClick(Cancel)
  1677.    DoDblClick 3
  1678. End Sub
  1679. Sub Stack3_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1680. If 1 <> Button then exit Sub
  1681. gbMouseUp = false
  1682. SetMoveStartValues 3,x,y
  1683. End Sub
  1684. Sub Stack3_MouseMove(Button, Shift, X, Y)
  1685. If (1 <> Button) or gbMouseUp then exit Sub
  1686. DragCard 3,x,y
  1687. End Sub
  1688. Sub Stack3_MouseUp(Button, Shift, X, Y)
  1689. gbMouseUp = True
  1690. SetMouseUp 3,x,y
  1691. End Sub
  1692. -->
  1693. </SCRIPT>
  1694. <SCRIPT LANGUAGE="VBScript">
  1695. <!--
  1696. Sub Stack2_DblClick(Cancel)
  1697.    DoDblClick 2
  1698. End Sub
  1699. Sub Stack2_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1700. If 1 <> Button then exit Sub
  1701. gbMouseUp = false
  1702. SetMoveStartValues 2,x,y
  1703. End Sub
  1704. Sub Stack2_MouseMove(Button, Shift, X, Y)
  1705. If (1 <> Button) or gbMouseUp then exit Sub
  1706. DragCard 2,x,y
  1707. End Sub
  1708. Sub Stack2_MouseUp(Button, Shift, X, Y)
  1709. gbMouseUp = True
  1710. SetMouseUp 2,x,y
  1711. End Sub
  1712. -->
  1713. </SCRIPT>
  1714. <SCRIPT LANGUAGE="VBScript">
  1715. <!--
  1716. Sub Stack1_DblClick(Cancel)
  1717.    DoDblClick 1
  1718. End Sub
  1719. Sub Stack1_MouseUp(Button, Shift, X, Y)
  1720. gbMouseUp = True
  1721. SetMouseUp 1,x,y
  1722. End Sub
  1723. Sub Stack1_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1724. If 1 <> Button then exit Sub
  1725. gbMouseUp = false
  1726. SetMoveStartValues 1,x,y
  1727. End Sub
  1728. Sub Stack1_MouseMove(Button, Shift, X, Y)
  1729. If (1 <> Button) or gbMouseUp then exit Sub
  1730. DragCard 1,x,y
  1731. End Sub
  1732. -->
  1733. </SCRIPT>
  1734. <SCRIPT LANGUAGE="VBScript">
  1735. <!--
  1736. Sub chkDebug_Click()
  1737. lstDebugPrint.Visible = chkDebug.Value
  1738. gbDebug = chkDebug.value
  1739. End Sub
  1740. -->
  1741. </SCRIPT>
  1742. <SCRIPT LANGUAGE="VBScript">
  1743. <!--
  1744. '**********************************************
  1745. '* Name: cmdHelp_Click
  1746. '**********************************************
  1747. '* Description:
  1748. '* User clicks this button to display instructions
  1749. '* on how to play the game.
  1750. '**********************************************
  1751. sub cmdHelp_Click()
  1752. dim n
  1753. n = chr(13)&chr(10)
  1754. MsgBox _
  1755. "Begin play by double-clicking any aces on top of the seven row stacks to move " & _
  1756. "them to the spaces at the top right of the screen and then making any other " & _
  1757. "plays available on the board." &n&n& _
  1758. "You will be building two kinds of stacks: row stacks (7 vertical stacks in the middle) and suit stacks (4 stacks at upper right). " & _
  1759. "To free up cards that you need to build the suit stacks, you build row stacks.  " & _
  1760. "To move a card or a stack of cards from one row stack to another, drag it. " & _
  1761. "To move a card to a suit stack, double-click it. " & _
  1762. "When you have made all the available plays on the board, click the deck (upper left) to begin turning over cards. The card that is face up on top of the deck is always available for play." &n&n& _
  1763. "The object of the game is to use all the cards in the deck to build up the four suit stacks from ace to king.", 0, "ActiveX Solitaire Help"
  1764. end sub
  1765. '**********************************************
  1766. '* Name: cmdEndGame_Click
  1767. '**********************************************
  1768. '* Description:
  1769. '* User clicks this button to end the game
  1770. '**********************************************
  1771. Sub cmdEndGame_Click()
  1772. If not gbEndGame then
  1773. EndTheGame
  1774. gbEndGame = True
  1775. End If
  1776. End Sub
  1777. 'Check box for debug mode
  1778. Sub UpDebug_Click()
  1779. If not gbEndGame then
  1780. chkDebug.visible = not chkdebug.visible
  1781. End If
  1782. End Sub
  1783. -->
  1784. </SCRIPT>
  1785. <SCRIPT LANGUAGE="VBScript">
  1786. <!--
  1787. '**********************************************
  1788. '* Name: cmdNewDeck_Click
  1789. '**********************************************
  1790. '* Description:
  1791. '* User clicks this button to pop up the
  1792. '* dialog that allows the user to
  1793. '* choose a different deck.
  1794. '**********************************************
  1795. sub cmdNewDeck_Click()
  1796. CardDeckClick(-gintCurDeck)
  1797. CardDeckOnOff(true)
  1798. end sub 'cmdNewDeck_Click
  1799. '**********************************************
  1800. '* Name: CardDeckOk_Click
  1801. '**********************************************
  1802. '* Description:
  1803. '* Routine called when user clicks the ok
  1804. '* button in the CardDeck dialog. The routine
  1805. '* will store the new deck choice and close
  1806. '* the dialog.
  1807. '**********************************************
  1808. sub CardDeckOk_Click()
  1809. ChangeTheDeck gintTempCurDeck
  1810. CardDeckOnOff(false)
  1811. end sub 
  1812. '**********************************************
  1813. '* Name: CardDeckCancel_Click 
  1814. '**********************************************
  1815. '* Description:
  1816. '* Called to close the card back dialog
  1817. '* and the NOT change the value of the 
  1818. '* current deck
  1819. '**********************************************
  1820. sub CardDeckCancel_Click()
  1821. CardDeckOnOff(false)
  1822. end sub
  1823. '**********************************************
  1824. '* Name: CardDeckClick
  1825. '**********************************************
  1826. '* Description:
  1827. '* Moves the "selection" square in the Deck
  1828. '* back dialog to visually show the user
  1829. '* which card back is choosen
  1830. '**********************************************
  1831. '* Parameters:
  1832. '* intCardNum Deck that is choosen by the user
  1833. '**********************************************
  1834. sub CardDeckClick(intCardnum)
  1835. gintTempCurDeck = -intCardnum
  1836. CardDeckSelector.Left = grobjCardDeck(intCardnum).Left - 4
  1837. CardDeckSelector.Top = grobjCardDeck(intCardnum).Top - 4
  1838. end sub
  1839. sub CardDeck1_Click: CardDeckClick 1: end sub
  1840. sub CardDeck2_Click: CardDeckClick 2: end sub
  1841. sub CardDeck3_Click: CardDeckClick 3: end sub
  1842. sub CardDeck4_Click: CardDeckClick 4: end sub
  1843. sub CardDeck5_Click: CardDeckClick 5: end sub
  1844. sub CardDeck6_Click: CardDeckClick 6: end sub
  1845. sub CardDeck7_Click: CardDeckClick 7: end sub
  1846. sub CardDeck8_Click: CardDeckClick 8: end sub
  1847. sub CardDeck9_Click: CardDeckClick 9: end sub
  1848. sub CardDeck10_Click: CardDeckClick 10: end sub
  1849. sub CardDeck11_Click: CardDeckClick 11: end sub
  1850. sub CardDeck12_Click: CardDeckClick 12: end sub
  1851. '**********************************************
  1852. '* Name: CardDeckOnOff
  1853. '**********************************************
  1854. '* Description:
  1855. '* Displays or hides the dialog with the
  1856. '* card backs depending on the parameter.
  1857. '**********************************************
  1858. '* Parameters:
  1859. '* bSwitch True = Show dialog
  1860. '* False = Hide dialog
  1861. '**********************************************
  1862. sub CardDeckOnOff(bSwitch)
  1863. if( bSwitch = true ) then
  1864. bSwitchz = 0
  1865. else
  1866. bSwitchz = 1
  1867. end if
  1868. CardDeckMouseBlock.Zorder(bSwitchz): CardDeckMouseBlock.Visible = bSwitch
  1869. CardDeckBack.Zorder(bSwitchz): CardDeckBack.Visible = bSwitch
  1870. CardDeckSelector.Zorder(bSwitchz): CardDeckSelector.Visible = bSwitch
  1871. for t = 1 to 12
  1872. grobjCardDeck(t).Zorder(bSwitchz):  grobjCardDeck(t).Visible = bSwitch
  1873. next
  1874. CardDeckOk.Zorder(bSwitchz): CardDeckOk.Visible = bSwitch
  1875. CardDeckCancel.Zorder(bSwitchz): CardDeckCancel.Visible = bSwitch
  1876. end sub
  1877. -->
  1878. </SCRIPT>
  1879. <SCRIPT LANGUAGE="VBScript">
  1880. <!--
  1881. 'New deal.
  1882. Sub cmdNewDeal_Click()
  1883. StartGame
  1884. End Sub
  1885. -->
  1886. </SCRIPT>
  1887. <SCRIPT LANGUAGE="VBScript">
  1888. <!--
  1889. 'Click on the background when the end animation is running
  1890. ' to stop the animation and bring up the You Won dialog.
  1891. Sub EndGameClick_MouseDown(Button, Shift, X, Y)
  1892. If gbEndGame then
  1893. gbLeaveEarly = true
  1894. End If
  1895. End Sub
  1896. -->
  1897. </SCRIPT>
  1898. <SCRIPT LANGUAGE="VBScript">
  1899. <!--
  1900. 'Changes the number of cards that are dealt from
  1901. ' the Shuffle Stack to the Discard Stack
  1902. Sub cmdChangeDeal_Click()
  1903. if( gCOUNTDEAL = 1 ) then
  1904. gCOUNTDEAL = 3
  1905. cmdChangeDeal.Caption = "Change to Draw 1"
  1906. else
  1907. gCOUNTDEAL = 1 
  1908. cmdChangeDeal.Caption = "Change to Draw 3"
  1909. end if
  1910. end sub
  1911. -->
  1912. </SCRIPT>
  1913. <DIV BACKGROUND="#8000" ID="Form" STYLE="LAYOUT:FIXED;WIDTH:450pt;HEIGHT:444pt;">
  1914.     <OBJECT ID="CardDeckMouseBlock"
  1915.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:-1pt;LEFT:-2pt;WIDTH:590pt;HEIGHT:362pt;DISPLAY:NONE;ZINDEX:0;">
  1916.         <PARAM NAME="BackColor" VALUE="32768">
  1917.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  1918.         <PARAM NAME="Size" VALUE="20814;12771">
  1919.         <PARAM NAME="FontCharSet" VALUE="0">
  1920.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  1921.         <PARAM NAME="FontWeight" VALUE="0">
  1922.     </OBJECT>
  1923.     <OBJECT ID="CardDeckBack"
  1924.      CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:68pt;LEFT:13pt;WIDTH:420pt;HEIGHT:223pt;TABINDEX:2;DISPLAY:NONE;ZINDEX:1;">
  1925.         <PARAM NAME="VariousPropertyBits" VALUE="25">
  1926.         <PARAM NAME="Size" VALUE="14817;7867">
  1927.         <PARAM NAME="FontEffects" VALUE="1073750016">
  1928.         <PARAM NAME="FontCharSet" VALUE="0">
  1929.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  1930.         <PARAM NAME="ParagraphAlign" VALUE="3">
  1931.         <PARAM NAME="FontWeight" VALUE="0">
  1932.     </OBJECT>
  1933.     <OBJECT ID="EndGameClick"
  1934.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:0pt;LEFT:0pt;WIDTH:644pt;HEIGHT:440pt;ZINDEX:2;">
  1935.         <PARAM NAME="BackColor" VALUE="32768">
  1936.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  1937.         <PARAM NAME="Size" VALUE="22719;15522">
  1938.         <PARAM NAME="FontCharSet" VALUE="0">
  1939.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  1940.     </OBJECT>
  1941.     <OBJECT ID="CardDeckSelector"
  1942.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:57pt;LEFT:91pt;WIDTH:65pt;HEIGHT:82pt;DISPLAY:NONE;ZINDEX:4;">
  1943.         <PARAM NAME="ForeColor" VALUE="0">
  1944.         <PARAM NAME="BackColor" VALUE="0">
  1945.         <PARAM NAME="Size" VALUE="2328;2928">
  1946.         <PARAM NAME="FontCharSet" VALUE="0">
  1947.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  1948.         <PARAM NAME="FontWeight" VALUE="0">
  1949.     </OBJECT>
  1950.     <OBJECT ID="tmEndAnimation"
  1951.      CLASSID="CLSID:59CCB4A0-727D-11CF-AC36-00AA00A47DD2"
  1952.      CODEBASE="ietimer.ocx"
  1953.      STYLE="TOP:469pt;LEFT:-17pt;WIDTH:25pt;HEIGHT:17pt;TABINDEX:0;ZINDEX:4;">
  1954.         <PARAM NAME="_ExtentX" VALUE="873">
  1955.         <PARAM NAME="_ExtentY" VALUE="609">
  1956.     </OBJECT>
  1957.     <OBJECT ID="Card1H"
  1958.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:15pt;LEFT:124pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:1;ZINDEX:5;"
  1959. CODEBASE="card.ocx#version=1,0,0,5">   
  1960.         <PARAM NAME="_ExtentX" VALUE="2037">
  1961.         <PARAM NAME="_ExtentY" VALUE="2619">
  1962. <PARAM NAME="CardAlignment" VALUE="0">
  1963.     </OBJECT>
  1964.     <OBJECT ID="Ace3"
  1965.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:32pt;LEFT:396pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:6;">
  1966.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  1967.         <PARAM NAME="Size" VALUE="1905;2540">
  1968.     </OBJECT>
  1969.     <OBJECT ID="AceImage3"
  1970.      CLASSID="CLSID:4C599241-6926-101B-9992-00000B65C6F9"
  1971.      DATA="DATA:application/x-oleobject;BASE64,QZJZTCZpGxCZkgAAC2XG+QACGAA0DgAAAIAAAAAA//8AAAAAVwcAAOwJAACw
  1972. gWfaSsLPEbWEAKoApx0abHQAAOcBAABHSUY4OWFHAGAAkf8A////AIAAAAAA
  1973. AAAALAAAAABHAGAAAAL/TISpy+0PozCH2ouz3rzbOVVGKJbkSaFjyq6u2SLe
  1974. TNe13F7kl+05j/G9Pjib8WjDqWCvpTP3bMaEyKo1VQTqetxgd+vFXsdkJfQs
  1975. TTPXUVGWDE/uqPSv9v7Lj97xfses1iaIxobG54cYdFgXBuaIN/RzmEh5EDIY
  1976. SIhZ6DJZiZjF+KhXAllKmvCpupfZyvm6eUm12pfaaCqKayc5SwsHCKsp7Brl
  1977. 6TsWuhu5fMqci9V7fAUcOxxMzCoNuqjc7P3sTKS9jV1+fS477pd8i9oN/m2s
  1978. bkRtXW1eHD0vB9///i9mX5lL9griGyZP4Ax2o8K1c9jQkj6FHuodvIguG8Uq
  1979. wLYi+nv4zU7CjRssZsR4byTJHnMAenSJS+VKHQRRGjzpZuJMRR9fguxpaSe9
  1980. mjjvFdUodGHLnzDd/ZSZ1KTRqQahCu2oi6lWn0iT/iFK1WY5qzsZZuV6NqZO
  1981. r0GPij1JdiZWp2jppo27UurNsNfwkjRrNzBEtWyVvuWbcq3XuYMFh9zatjAH
  1982. vYf3GlIcdWndxpzjYb4K1nLlVn43Mn68GfXdz2VDj3bLpDRFwJ2BOj4tmQcI
  1983. 0bCrnZAAPLhwCQYKAAA7AA==
  1984. "
  1985.      STYLE="TOP:32pt;LEFT:396pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:99;DISPLAY:NONE">
  1986.     </OBJECT>
  1987.     <OBJECT ID="Ace1"
  1988.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:32pt;LEFT:264pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:8;">
  1989.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  1990.         <PARAM NAME="Size" VALUE="1905;2540">
  1991.     </OBJECT>
  1992.     <OBJECT ID="AceImage1"
  1993.      CLASSID="CLSID:4C599241-6926-101B-9992-00000B65C6F9" 
  1994. STYLE="TOP:32pt;LEFT:264pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:100;DISPLAY:NONE">
  1995.         <PARAM NAME="AutoSize" VALUE="-1">
  1996.         <PARAM NAME="BackColor" VALUE="32768">
  1997.         <PARAM NAME="BorderStyle" VALUE="0">
  1998.         <PARAM NAME="Size" VALUE="2328;2910">
  1999.         <PARAM NAME="PictureAlignment" VALUE="0">
  2000.     </OBJECT>
  2001.     <OBJECT ID="Ace2"
  2002.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:32pt;LEFT:330pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:10;">
  2003.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2004.         <PARAM NAME="Size" VALUE="1905;2540">
  2005.     </OBJECT>
  2006.     <OBJECT ID="AceImage2"
  2007.      CLASSID="CLSID:4C599241-6926-101B-9992-00000B65C6F9" 
  2008. STYLE="TOP:32pt;LEFT:330pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:100;DISPLAY:NONE">
  2009.         <PARAM NAME="AutoSize" VALUE="-1">
  2010.         <PARAM NAME="BackColor" VALUE="32768">
  2011.         <PARAM NAME="BorderStyle" VALUE="0">
  2012.         <PARAM NAME="Size" VALUE="2328;2910">
  2013.         <PARAM NAME="PictureAlignment" VALUE="0">
  2014.     </OBJECT>
  2015.     <OBJECT ID="Ace4"
  2016.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:32pt;LEFT:198pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:12;">
  2017.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2018.         <PARAM NAME="Size" VALUE="1905;2540">
  2019.     </OBJECT>
  2020.     <OBJECT ID="AceImage4"
  2021.      CLASSID="CLSID:4C599241-6926-101B-9992-00000B65C6F9" 
  2022. STYLE="TOP:32pt;LEFT:198pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:100;DISPLAY:NONE">
  2023.         <PARAM NAME="AutoSize" VALUE="-1">
  2024.         <PARAM NAME="BackColor" VALUE="32768">
  2025.         <PARAM NAME="BorderStyle" VALUE="0">
  2026.         <PARAM NAME="Size" VALUE="2328;2910">
  2027.         <PARAM NAME="PictureAlignment" VALUE="0">
  2028.     </OBJECT>
  2029.     <OBJECT ID="ShuffleImage"
  2030.      CLASSID="CLSID:4C599241-6926-101B-9992-00000B65C6F9"
  2031.      DATA="DATA:application/x-oleobject;BASE64,QZJZTCZpGxCZkgAAC2XG+QACGAA0DgAAAIAAAAAA//8AAAAAVwcAAOwJAACw
  2032. gWfaSsLPEbWEAKoApx0abHQAAMsBAABHSUY4OWFHAGAAkf8A////AP8AAIAA
  2033. AAAALAAAAABHAGAAAAL/lIapy+0P4zCH2ouz3rzbOXniSI5Iiabpqbauxr7y
  2034. G882Wt+6l+9+1vsJDcHhr2jcIZO3JXPmfNJC0iO1qrxim1pb4AsGW2/hsvnL
  2035. nZ3XZmi3xI63XVGN/D5fvT34flhVd+E3iIazZ9eX4VcSKIAn8mhyKBinIic5
  2036. UtmiyTNJwbnJJhIlSrbW2VGqowrjefrzurEUC3vGgcTqk/txSCvky7th+zQM
  2037. tAf8W3xRpMzUTBGEPIQcnVf1fPCGnYRdXbblaA3dJW0E3LPtLJ6Nkc69jr4u
  2038. 9Rz/DR5uH0yZv0VPLk8M3j9+WPy1A6iOILt9f+4ZZCjGocCDCKc9hFiooDxv
  2039. pA01KlyIMQC4btrc6SKJ6KNFlcxMmgKIq+IqhDFlqklX06aLXeM4lLtZ0cnP
  2040. nSaFDk3BU5/PpChAtYLENFPUnlCPCptKlc8dEpFQSe1KcSsmOIQIGUJaNtFZ
  2041. tGmdjrXUVufTF3Eztmi01Kybk1jX3rOB9+8tT4LfFqZD+HCHwIqXJW48F7Ie
  2042. yYAeU1Z62XBmr5tHWd7MmDKIzjzGSTiNOnUEAwUAADsA
  2043. "
  2044.      STYLE="TOP:32pt;LEFT:0pt;WIDTH:53pt;HEIGHT:72pt;ZINDEX:97;">
  2045.     </OBJECT>
  2046.     <OBJECT ID="Stack1"
  2047.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:131pt;LEFT:0pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:15;">
  2048.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2049.         <PARAM NAME="Size" VALUE="1905;2540">
  2050.     </OBJECT>
  2051.     <OBJECT ID="Stack2"
  2052.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:131pt;LEFT:66pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:15;">
  2053.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2054.         <PARAM NAME="Size" VALUE="1905;2540">
  2055.     </OBJECT>
  2056.     <OBJECT ID="Stack3"
  2057.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:131pt;LEFT:132pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:16;">
  2058.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2059.         <PARAM NAME="Size" VALUE="1905;2540">
  2060.     </OBJECT>
  2061.     <OBJECT ID="Stack4"
  2062.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:131pt;LEFT:198pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:17;">
  2063.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2064.         <PARAM NAME="Size" VALUE="1905;2540">
  2065.     </OBJECT>
  2066.     <OBJECT ID="Stack5"
  2067.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:131pt;LEFT:264pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:18;">
  2068.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2069.         <PARAM NAME="Size" VALUE="1905;2540">
  2070.     </OBJECT>
  2071.     <OBJECT ID="Stack6"
  2072.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:131pt;LEFT:330pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:19;">
  2073.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2074.         <PARAM NAME="Size" VALUE="1905;2540">
  2075.     </OBJECT>
  2076.     <OBJECT ID="Stack7"
  2077.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:131pt;LEFT:396pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:20;">
  2078.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2079.         <PARAM NAME="Size" VALUE="1905;2540">
  2080.     </OBJECT>
  2081.     <OBJECT ID="Discard"
  2082.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:32pt;LEFT:74pt;WIDTH:74pt;HEIGHT:72pt;ZINDEX:22;">
  2083.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2084.         <PARAM NAME="Size" VALUE="2611;2540">
  2085.     </OBJECT>
  2086.     <OBJECT ID="Shuffle"
  2087.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:32pt;LEFT:0pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:23;">
  2088.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2089.         <PARAM NAME="Size" VALUE="1905;2540">
  2090.     </OBJECT>
  2091.     <OBJECT ID="tmEndCardMove"
  2092.      CLASSID="CLSID:59CCB4A0-727D-11CF-AC36-00AA00A47DD2" STYLE="TOP:469pt;LEFT:16pt;WIDTH:25pt;HEIGHT:17pt;TABINDEX:4;ZINDEX:24;">
  2093.         <PARAM NAME="_ExtentX" VALUE="873">
  2094.         <PARAM NAME="_ExtentY" VALUE="609">
  2095.     </OBJECT>
  2096.     <OBJECT ID="tmNewCard"
  2097.      CLASSID="CLSID:59CCB4A0-727D-11CF-AC36-00AA00A47DD2" STYLE="TOP:469pt;LEFT:49pt;WIDTH:25pt;HEIGHT:17pt;TABINDEX:44;ZINDEX:25;">
  2098.         <PARAM NAME="_ExtentX" VALUE="873">
  2099.         <PARAM NAME="_ExtentY" VALUE="609">
  2100.     </OBJECT>
  2101.     <OBJECT ID="HiddenCardLabel"
  2102.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:15pt;LEFT:487pt;WIDTH:107pt;HEIGHT:8pt;DISPLAY:NONE;ZINDEX:26;">
  2103.         <PARAM NAME="BackColor" VALUE="32768">
  2104.         <PARAM NAME="Caption" VALUE="All the cards are betwen this lable and the check box">
  2105.         <PARAM NAME="Size" VALUE="3775;282">
  2106.         <PARAM NAME="FontCharSet" VALUE="0">
  2107.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2108.         <PARAM NAME="FontWeight" VALUE="0">
  2109.     </OBJECT>
  2110.     <OBJECT ID="chkDebug"
  2111.      CLASSID="CLSID:8BD21D40-EC42-11CE-9E0D-00AA006002F3" STYLE="TOP:15pt;LEFT:8pt;WIDTH:57pt;HEIGHT:12pt;TABINDEX:5;DISPLAY:NONE;ZINDEX:27;">
  2112.         <PARAM NAME="BackColor" VALUE="2000000000">
  2113.         <PARAM NAME="ForeColor" VALUE="100">
  2114.         <PARAM NAME="DisplayStyle" VALUE="4">
  2115.         <PARAM NAME="Size" VALUE="2011;423">
  2116.         <PARAM NAME="Caption" VALUE="Debug">
  2117.         <PARAM NAME="Accelerator" VALUE="68">
  2118.         <PARAM NAME="FontCharSet" VALUE="0">
  2119.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2120.         <PARAM NAME="FontWeight" VALUE="0">
  2121.     </OBJECT>
  2122.     <OBJECT ID="cmdNewDeal"
  2123.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:1pt;LEFT:120pt;WIDTH:50pt;HEIGHT:17pt;ZINDEX:78;">
  2124.         <PARAM NAME="ForeColor" VALUE="65280">
  2125.         <PARAM NAME="BackColor" VALUE="32768">
  2126.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2127.         <PARAM NAME="Caption" VALUE="New Game">
  2128.         <PARAM NAME="Size" VALUE="1746;600">
  2129.         <PARAM NAME="FontName" VALUE="Arial">
  2130.         <PARAM NAME="FontEffects" VALUE="1073741828">
  2131.         <PARAM NAME="FontHeight" VALUE="180">
  2132.         <PARAM NAME="FontCharSet" VALUE="0">
  2133.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2134.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2135.         <PARAM NAME="FontWeight" VALUE="0">
  2136.     </OBJECT>
  2137.     <OBJECT ID="cmdNewDeck"
  2138.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:1pt;LEFT:173pt;WIDTH:83pt;HEIGHT:17pt;ZINDEX:79;">
  2139.         <PARAM NAME="ForeColor" VALUE="65280">
  2140.         <PARAM NAME="BackColor" VALUE="32768">
  2141.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2142.         <PARAM NAME="Caption" VALUE="Select New Deck">
  2143.         <PARAM NAME="Size" VALUE="2910;600">
  2144.         <PARAM NAME="FontName" VALUE="Arial">
  2145.         <PARAM NAME="FontEffects" VALUE="1073741828">
  2146.         <PARAM NAME="FontHeight" VALUE="180">
  2147.         <PARAM NAME="FontCharSet" VALUE="0">
  2148.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2149.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2150.         <PARAM NAME="FontWeight" VALUE="0">
  2151.     </OBJECT>
  2152.     <OBJECT ID="cmdChangeDeal"
  2153.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:1pt;LEFT:256pt;WIDTH:83pt;HEIGHT:17pt;ZINDEX:80;">
  2154.         <PARAM NAME="ForeColor" VALUE="65280">
  2155.         <PARAM NAME="BackColor" VALUE="32768">
  2156.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2157.         <PARAM NAME="Caption" VALUE="Change to Draw 1">
  2158.         <PARAM NAME="Size" VALUE="2911;600">
  2159.         <PARAM NAME="FontName" VALUE="Arial">
  2160.         <PARAM NAME="FontEffects" VALUE="1073741828">
  2161.         <PARAM NAME="FontHeight" VALUE="180">
  2162.         <PARAM NAME="FontCharSet" VALUE="0">
  2163.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2164.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2165.         <PARAM NAME="FontWeight" VALUE="0">
  2166.     </OBJECT>
  2167.     <OBJECT ID="cmdEndGame"
  2168.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:1pt;LEFT:346pt;WIDTH:66pt;HEIGHT:17pt;ZINDEX:81;">
  2169.         <PARAM NAME="ForeColor" VALUE="65280">
  2170.         <PARAM NAME="BackColor" VALUE="32768">
  2171.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2172.         <PARAM NAME="Caption" VALUE="End the Game">
  2173.         <PARAM NAME="Size" VALUE="2328;600">
  2174.         <PARAM NAME="FontName" VALUE="Arial">
  2175.         <PARAM NAME="FontEffects" VALUE="1073741828">
  2176.         <PARAM NAME="FontHeight" VALUE="180">
  2177.         <PARAM NAME="FontCharSet" VALUE="0">
  2178.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2179.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2180.         <PARAM NAME="FontWeight" VALUE="0">
  2181.     </OBJECT>
  2182.     <OBJECT ID="cmdHelp"
  2183.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:1pt;LEFT:414pt;WIDTH:33pt;HEIGHT:17pt;ZINDEX:81;">
  2184.         <PARAM NAME="ForeColor" VALUE="65280">
  2185.         <PARAM NAME="BackColor" VALUE="32768">
  2186.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2187.         <PARAM NAME="Caption" VALUE="Help">
  2188.         <PARAM NAME="Size" VALUE="2328;600">
  2189.         <PARAM NAME="FontName" VALUE="Arial">
  2190.         <PARAM NAME="FontEffects" VALUE="1073741828">
  2191.         <PARAM NAME="FontHeight" VALUE="180">
  2192.         <PARAM NAME="FontCharSet" VALUE="0">
  2193.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2194.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2195.         <PARAM NAME="FontWeight" VALUE="0">
  2196.     </OBJECT>
  2197.     <OBJECT ID="Card2H"
  2198.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:190pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:11;ZINDEX:32;">
  2199.         <PARAM NAME="_ExtentX" VALUE="2037">
  2200.         <PARAM NAME="_ExtentY" VALUE="2619">
  2201. <PARAM NAME="CardAlignment" VALUE="0">
  2202.     </OBJECT>
  2203.     <OBJECT ID="Card3H"
  2204.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:247pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:12;ZINDEX:33;">
  2205.         <PARAM NAME="_ExtentX" VALUE="2037">
  2206.         <PARAM NAME="_ExtentY" VALUE="2619">
  2207. <PARAM NAME="CardAlignment" VALUE="0">
  2208.     </OBJECT>
  2209.     <OBJECT ID="Card4H"
  2210.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:132pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:13;ZINDEX:34;">
  2211.         <PARAM NAME="_ExtentX" VALUE="2037">
  2212.         <PARAM NAME="_ExtentY" VALUE="2619">
  2213. <PARAM NAME="CardAlignment" VALUE="0">
  2214.     </OBJECT>
  2215.     <OBJECT ID="Card5H"
  2216.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:198pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:14;ZINDEX:35;">
  2217.         <PARAM NAME="_ExtentX" VALUE="2037">
  2218.         <PARAM NAME="_ExtentY" VALUE="2619">
  2219. <PARAM NAME="CardAlignment" VALUE="0">
  2220.     </OBJECT>
  2221.     <OBJECT ID="Card6H"
  2222.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:256pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:15;ZINDEX:36;">
  2223.         <PARAM NAME="_ExtentX" VALUE="2037">
  2224.         <PARAM NAME="_ExtentY" VALUE="2619">
  2225. <PARAM NAME="CardAlignment" VALUE="0">
  2226.     </OBJECT>
  2227.     <OBJECT ID="Card7H"
  2228.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:140pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:16;ZINDEX:37;">
  2229.         <PARAM NAME="_ExtentX" VALUE="2037">
  2230.         <PARAM NAME="_ExtentY" VALUE="2619">
  2231. <PARAM NAME="CardAlignment" VALUE="0">
  2232.     </OBJECT>
  2233.     <OBJECT ID="Card8H"
  2234.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:206pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:17;ZINDEX:38;">
  2235.         <PARAM NAME="_ExtentX" VALUE="2037">
  2236.         <PARAM NAME="_ExtentY" VALUE="2619">
  2237. <PARAM NAME="CardAlignment" VALUE="0">
  2238.     </OBJECT>
  2239.     <OBJECT ID="Card9H"
  2240.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:264pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:18;ZINDEX:39;">
  2241.         <PARAM NAME="_ExtentX" VALUE="2037">
  2242.         <PARAM NAME="_ExtentY" VALUE="2619">
  2243. <PARAM NAME="CardAlignment" VALUE="0">
  2244.     </OBJECT>
  2245.     <OBJECT ID="Card10H"
  2246.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:148pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:19;ZINDEX:40;">
  2247.         <PARAM NAME="_ExtentX" VALUE="2037">
  2248.         <PARAM NAME="_ExtentY" VALUE="2619">
  2249. <PARAM NAME="CardAlignment" VALUE="0">
  2250.     </OBJECT>
  2251.     <OBJECT ID="Card11H"
  2252.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:214pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:20;ZINDEX:41;">
  2253.         <PARAM NAME="_ExtentX" VALUE="2037">
  2254.         <PARAM NAME="_ExtentY" VALUE="2619">
  2255. <PARAM NAME="CardAlignment" VALUE="0">
  2256.     </OBJECT>
  2257.     <OBJECT ID="Card12H"
  2258.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:272pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:21;ZINDEX:42;">
  2259.         <PARAM NAME="_ExtentX" VALUE="2037">
  2260.         <PARAM NAME="_ExtentY" VALUE="2619">
  2261. <PARAM NAME="CardAlignment" VALUE="0">
  2262.     </OBJECT>
  2263.     <OBJECT ID="Card13H"
  2264.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:140pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:22;ZINDEX:43;">
  2265.         <PARAM NAME="_ExtentX" VALUE="2037">
  2266.         <PARAM NAME="_ExtentY" VALUE="2619">
  2267. <PARAM NAME="CardAlignment" VALUE="0">
  2268.     </OBJECT>
  2269.     <OBJECT ID="Card1D"
  2270.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:206pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:23;ZINDEX:44;">
  2271.         <PARAM NAME="_ExtentX" VALUE="2037">
  2272.         <PARAM NAME="_ExtentY" VALUE="2619">
  2273. <PARAM NAME="CardAlignment" VALUE="0">
  2274.     </OBJECT>
  2275.     <OBJECT ID="Card2D"
  2276.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:264pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:24;ZINDEX:45;">
  2277.         <PARAM NAME="_ExtentX" VALUE="2037">
  2278.         <PARAM NAME="_ExtentY" VALUE="2619">
  2279. <PARAM NAME="CardAlignment" VALUE="0">
  2280.     </OBJECT>
  2281.     <OBJECT ID="Card3D"
  2282.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:148pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:25;ZINDEX:46;">
  2283.         <PARAM NAME="_ExtentX" VALUE="2037">
  2284.         <PARAM NAME="_ExtentY" VALUE="2619">
  2285. <PARAM NAME="CardAlignment" VALUE="0">
  2286.     </OBJECT>
  2287.     <OBJECT ID="Card4D"
  2288.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:214pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:26;ZINDEX:47;">
  2289.         <PARAM NAME="_ExtentX" VALUE="2037">
  2290.         <PARAM NAME="_ExtentY" VALUE="2619">
  2291. <PARAM NAME="CardAlignment" VALUE="0">
  2292.     </OBJECT>
  2293.     <OBJECT ID="Card5D"
  2294.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:272pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:27;ZINDEX:48;">
  2295.         <PARAM NAME="_ExtentX" VALUE="2037">
  2296.         <PARAM NAME="_ExtentY" VALUE="2619">
  2297. <PARAM NAME="CardAlignment" VALUE="0">
  2298.     </OBJECT>
  2299.     <OBJECT ID="Card6D"
  2300.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:157pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:28;ZINDEX:49;">
  2301.         <PARAM NAME="_ExtentX" VALUE="2037">
  2302.         <PARAM NAME="_ExtentY" VALUE="2619">
  2303. <PARAM NAME="CardAlignment" VALUE="0">
  2304.     </OBJECT>
  2305.     <OBJECT ID="Card7D"
  2306.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:223pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:29;ZINDEX:50;">
  2307.         <PARAM NAME="_ExtentX" VALUE="2037">
  2308.         <PARAM NAME="_ExtentY" VALUE="2619">
  2309. <PARAM NAME="CardAlignment" VALUE="0">
  2310.     </OBJECT>
  2311.     <OBJECT ID="Card8D"
  2312.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:280pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:30;ZINDEX:51;">
  2313.         <PARAM NAME="_ExtentX" VALUE="2037">
  2314.         <PARAM NAME="_ExtentY" VALUE="2619">
  2315. <PARAM NAME="CardAlignment" VALUE="0">
  2316.     </OBJECT>
  2317.     <OBJECT ID="Card9D"
  2318.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:165pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:31;ZINDEX:52;">
  2319.         <PARAM NAME="_ExtentX" VALUE="2037">
  2320.         <PARAM NAME="_ExtentY" VALUE="2619">
  2321. <PARAM NAME="CardAlignment" VALUE="0">
  2322.     </OBJECT>
  2323.     <OBJECT ID="Card10D"
  2324.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:231pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:32;ZINDEX:53;">
  2325.         <PARAM NAME="_ExtentX" VALUE="2037">
  2326.         <PARAM NAME="_ExtentY" VALUE="2619">
  2327. <PARAM NAME="CardAlignment" VALUE="0">
  2328.     </OBJECT>
  2329.     <OBJECT ID="Card11D"
  2330.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:33;ZINDEX:54;">
  2331.         <PARAM NAME="_ExtentX" VALUE="2037">
  2332.         <PARAM NAME="_ExtentY" VALUE="2619">
  2333. <PARAM NAME="CardAlignment" VALUE="0">
  2334.     </OBJECT>
  2335.     <OBJECT ID="Card12D"
  2336.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:37;ZINDEX:55;">
  2337.         <PARAM NAME="_ExtentX" VALUE="2037">
  2338.         <PARAM NAME="_ExtentY" VALUE="2619">
  2339. <PARAM NAME="CardAlignment" VALUE="0">
  2340.     </OBJECT>
  2341.     <OBJECT ID="Card13D"
  2342.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:42;ZINDEX:56;">
  2343.         <PARAM NAME="_ExtentX" VALUE="2037">
  2344.         <PARAM NAME="_ExtentY" VALUE="2619">
  2345. <PARAM NAME="CardAlignment" VALUE="0">
  2346.     </OBJECT>
  2347.     <OBJECT ID="Card1C"
  2348.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:46;ZINDEX:57;">
  2349.         <PARAM NAME="_ExtentX" VALUE="2037">
  2350.         <PARAM NAME="_ExtentY" VALUE="2619">
  2351. <PARAM NAME="CardAlignment" VALUE="0">
  2352.     </OBJECT>
  2353.     <OBJECT ID="Card2C"
  2354.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:47;ZINDEX:58;">
  2355.         <PARAM NAME="_ExtentX" VALUE="2037">
  2356.         <PARAM NAME="_ExtentY" VALUE="2619">
  2357. <PARAM NAME="CardAlignment" VALUE="0">
  2358.     </OBJECT>
  2359.     <OBJECT ID="Card3C"
  2360.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:50;ZINDEX:59;">
  2361.         <PARAM NAME="_ExtentX" VALUE="2037">
  2362.         <PARAM NAME="_ExtentY" VALUE="2619">
  2363. <PARAM NAME="CardAlignment" VALUE="0">
  2364.     </OBJECT>
  2365.     <OBJECT ID="Card4C"
  2366.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:51;ZINDEX:60;">
  2367.         <PARAM NAME="_ExtentX" VALUE="2037">
  2368.         <PARAM NAME="_ExtentY" VALUE="2619">
  2369. <PARAM NAME="CardAlignment" VALUE="0">
  2370.     </OBJECT>
  2371.     <OBJECT ID="Card5C"
  2372.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:55;ZINDEX:61;">
  2373.         <PARAM NAME="_ExtentX" VALUE="2037">
  2374.         <PARAM NAME="_ExtentY" VALUE="2619">
  2375. <PARAM NAME="CardAlignment" VALUE="0">
  2376.     </OBJECT>
  2377.     <OBJECT ID="Card6C"
  2378.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:56;ZINDEX:62;">
  2379.         <PARAM NAME="_ExtentX" VALUE="2037">
  2380.         <PARAM NAME="_ExtentY" VALUE="2619">
  2381. <PARAM NAME="CardAlignment" VALUE="0">
  2382.     </OBJECT>
  2383.     <OBJECT ID="Card7C"
  2384.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:59;ZINDEX:63;">
  2385.         <PARAM NAME="_ExtentX" VALUE="2037">
  2386.         <PARAM NAME="_ExtentY" VALUE="2619">
  2387. <PARAM NAME="CardAlignment" VALUE="0">
  2388.     </OBJECT>
  2389.     <OBJECT ID="Card8C"
  2390.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:60;ZINDEX:64;">
  2391.         <PARAM NAME="_ExtentX" VALUE="2037">
  2392.         <PARAM NAME="_ExtentY" VALUE="2619">
  2393. <PARAM NAME="CardAlignment" VALUE="0">
  2394.     </OBJECT>
  2395.     <OBJECT ID="Card9C"
  2396.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:66;ZINDEX:65;">
  2397.         <PARAM NAME="_ExtentX" VALUE="2037">
  2398.         <PARAM NAME="_ExtentY" VALUE="2619">
  2399. <PARAM NAME="CardAlignment" VALUE="0">
  2400.     </OBJECT>
  2401.     <OBJECT ID="Card10C"
  2402.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:68;ZINDEX:66;">
  2403.         <PARAM NAME="_ExtentX" VALUE="2037">
  2404.         <PARAM NAME="_ExtentY" VALUE="2619">
  2405. <PARAM NAME="CardAlignment" VALUE="0">
  2406.     </OBJECT>
  2407.     <OBJECT ID="Card11C"
  2408.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:76;ZINDEX:67;">
  2409.         <PARAM NAME="_ExtentX" VALUE="2037">
  2410.         <PARAM NAME="_ExtentY" VALUE="2619">
  2411. <PARAM NAME="CardAlignment" VALUE="0">
  2412.     </OBJECT>
  2413.     <OBJECT ID="Card12C"
  2414.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:80;ZINDEX:68;">
  2415.         <PARAM NAME="_ExtentX" VALUE="2037">
  2416.         <PARAM NAME="_ExtentY" VALUE="2619">
  2417. <PARAM NAME="CardAlignment" VALUE="0">
  2418.     </OBJECT>
  2419.     <OBJECT ID="Card13C"
  2420.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:86;ZINDEX:69;">
  2421.         <PARAM NAME="_ExtentX" VALUE="2037">
  2422.         <PARAM NAME="_ExtentY" VALUE="2619">
  2423. <PARAM NAME="CardAlignment" VALUE="0">
  2424.     </OBJECT>
  2425.     <OBJECT ID="Card1S"
  2426.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:88;ZINDEX:70;">
  2427.         <PARAM NAME="_ExtentX" VALUE="2037">
  2428.         <PARAM NAME="_ExtentY" VALUE="2619">
  2429. <PARAM NAME="CardAlignment" VALUE="0">
  2430.     </OBJECT>
  2431.     <OBJECT ID="Card2S"
  2432.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:91;ZINDEX:71;">
  2433.         <PARAM NAME="_ExtentX" VALUE="2037">
  2434.         <PARAM NAME="_ExtentY" VALUE="2619">
  2435. <PARAM NAME="CardAlignment" VALUE="0">
  2436.     </OBJECT>
  2437.     <OBJECT ID="Card3S"
  2438.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:92;ZINDEX:72;">
  2439.         <PARAM NAME="_ExtentX" VALUE="2037">
  2440.         <PARAM NAME="_ExtentY" VALUE="2619">
  2441. <PARAM NAME="CardAlignment" VALUE="0">
  2442.     </OBJECT>
  2443.     <OBJECT ID="Card4S"
  2444.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:90;ZINDEX:73;">
  2445.         <PARAM NAME="_ExtentX" VALUE="2037">
  2446.         <PARAM NAME="_ExtentY" VALUE="2619">
  2447. <PARAM NAME="CardAlignment" VALUE="0">
  2448.     </OBJECT>
  2449.     <OBJECT ID="Card5S"
  2450.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:82;ZINDEX:74;">
  2451.         <PARAM NAME="_ExtentX" VALUE="2037">
  2452.         <PARAM NAME="_ExtentY" VALUE="2619">
  2453. <PARAM NAME="CardAlignment" VALUE="0">
  2454.     </OBJECT>
  2455.     <OBJECT ID="Card6S"
  2456.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:70;ZINDEX:75;">
  2457.         <PARAM NAME="_ExtentX" VALUE="2037">
  2458.         <PARAM NAME="_ExtentY" VALUE="2619">
  2459. <PARAM NAME="CardAlignment" VALUE="0">
  2460.     </OBJECT>
  2461.     <OBJECT ID="Card7S"
  2462.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:61;ZINDEX:76;">
  2463.         <PARAM NAME="_ExtentX" VALUE="2037">
  2464.         <PARAM NAME="_ExtentY" VALUE="2619">
  2465. <PARAM NAME="CardAlignment" VALUE="0">
  2466.     </OBJECT>
  2467.     <OBJECT ID="Card8S"
  2468.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:57;ZINDEX:77;">
  2469.         <PARAM NAME="_ExtentX" VALUE="2037">
  2470.         <PARAM NAME="_ExtentY" VALUE="2619">
  2471. <PARAM NAME="CardAlignment" VALUE="0">
  2472.     </OBJECT>
  2473.     <OBJECT ID="Card9S"
  2474.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:52;ZINDEX:78;">
  2475.         <PARAM NAME="_ExtentX" VALUE="2037">
  2476.         <PARAM NAME="_ExtentY" VALUE="2619">
  2477. <PARAM NAME="CardAlignment" VALUE="0">
  2478.     </OBJECT>
  2479.     <OBJECT ID="Card10S"
  2480.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:48;ZINDEX:79;">
  2481.         <PARAM NAME="_ExtentX" VALUE="2037">
  2482.         <PARAM NAME="_ExtentY" VALUE="2619">
  2483. <PARAM NAME="CardAlignment" VALUE="0">
  2484.     </OBJECT>
  2485.     <OBJECT ID="Card11S"
  2486.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:43;ZINDEX:80;">
  2487.         <PARAM NAME="_ExtentX" VALUE="2037">
  2488.         <PARAM NAME="_ExtentY" VALUE="2619">
  2489. <PARAM NAME="CardAlignment" VALUE="0">
  2490.     </OBJECT>
  2491.     <OBJECT ID="Card12S"
  2492.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:38;ZINDEX:81;">
  2493.         <PARAM NAME="_ExtentX" VALUE="2037">
  2494.         <PARAM NAME="_ExtentY" VALUE="2619">
  2495. <PARAM NAME="CardAlignment" VALUE="0">
  2496.     </OBJECT>
  2497.     <OBJECT ID="Card13S"
  2498.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:34;ZINDEX:82;">
  2499.         <PARAM NAME="_ExtentX" VALUE="2037">
  2500.         <PARAM NAME="_ExtentY" VALUE="2619">
  2501. <PARAM NAME="CardAlignment" VALUE="0">
  2502.     </OBJECT>
  2503.     <OBJECT ID="CardDeck1"
  2504.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:76pt;LEFT:30pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:63;DISPLAY:NONE;ZINDEX:83;">
  2505.         <PARAM NAME="_ExtentX" VALUE="2037">
  2506.         <PARAM NAME="_ExtentY" VALUE="2619">
  2507.         <PARAM NAME="Suite" VALUE="-1">
  2508.     </OBJECT>
  2509.     <OBJECT ID="CardDeck2"
  2510.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:76pt;LEFT:96pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:65;DISPLAY:NONE;ZINDEX:84;">
  2511.         <PARAM NAME="_ExtentX" VALUE="2037">
  2512.         <PARAM NAME="_ExtentY" VALUE="2619">
  2513.         <PARAM NAME="Suite" VALUE="-2">
  2514.     </OBJECT>
  2515.     <OBJECT ID="CardDeck3"
  2516.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:76pt;LEFT:162pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:67;DISPLAY:NONE;ZINDEX:85;">
  2517.         <PARAM NAME="_ExtentX" VALUE="2037">
  2518.         <PARAM NAME="_ExtentY" VALUE="2619">
  2519.         <PARAM NAME="Suite" VALUE="-3">
  2520.     </OBJECT>
  2521.     <OBJECT ID="CardDeck4"
  2522.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:76pt;LEFT:228pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:69;DISPLAY:NONE;ZINDEX:86;">
  2523.         <PARAM NAME="_ExtentX" VALUE="2037">
  2524.         <PARAM NAME="_ExtentY" VALUE="2619">
  2525.         <PARAM NAME="Suite" VALUE="-4">
  2526.     </OBJECT>
  2527.     <OBJECT ID="CardDeck5"
  2528.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:76pt;LEFT:294pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:71;DISPLAY:NONE;ZINDEX:87;">
  2529.         <PARAM NAME="_ExtentX" VALUE="2037">
  2530.         <PARAM NAME="_ExtentY" VALUE="2619">
  2531.         <PARAM NAME="Suite" VALUE="-5">
  2532.     </OBJECT>
  2533.     <OBJECT ID="CardDeck6"
  2534.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:76pt;LEFT:360pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:73;DISPLAY:NONE;ZINDEX:88;">
  2535.         <PARAM NAME="_ExtentX" VALUE="2037">
  2536.         <PARAM NAME="_ExtentY" VALUE="2619">
  2537.         <PARAM NAME="Suite" VALUE="-6">
  2538.     </OBJECT>
  2539.     <OBJECT ID="CardDeck7"
  2540.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:158pt;LEFT:30pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:75;DISPLAY:NONE;ZINDEX:89;">
  2541.         <PARAM NAME="_ExtentX" VALUE="2037">
  2542.         <PARAM NAME="_ExtentY" VALUE="2619">
  2543.         <PARAM NAME="Suite" VALUE="-7">
  2544.     </OBJECT>
  2545.     <OBJECT ID="CardDeck8"
  2546.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:158pt;LEFT:96pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:77;DISPLAY:NONE;ZINDEX:90;">
  2547.         <PARAM NAME="_ExtentX" VALUE="2037">
  2548.         <PARAM NAME="_ExtentY" VALUE="2619">
  2549.         <PARAM NAME="Suite" VALUE="-8">
  2550.     </OBJECT>
  2551.     <OBJECT ID="CardDeck9"
  2552.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:158pt;LEFT:162pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:79;DISPLAY:NONE;ZINDEX:91;">
  2553.         <PARAM NAME="_ExtentX" VALUE="2037">
  2554.         <PARAM NAME="_ExtentY" VALUE="2619">
  2555.         <PARAM NAME="Suite" VALUE="-9">
  2556.     </OBJECT>
  2557.     <OBJECT ID="CardDeck10"
  2558.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:158pt;LEFT:228pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:81;DISPLAY:NONE;ZINDEX:92;">
  2559.         <PARAM NAME="_ExtentX" VALUE="2037">
  2560.         <PARAM NAME="_ExtentY" VALUE="2619">
  2561.         <PARAM NAME="Suite" VALUE="-10">
  2562.     </OBJECT>
  2563.     <OBJECT ID="CardDeck11"
  2564.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:158pt;LEFT:294pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:83;DISPLAY:NONE;ZINDEX:93;">
  2565.         <PARAM NAME="_ExtentX" VALUE="2037">
  2566.         <PARAM NAME="_ExtentY" VALUE="2619">
  2567.         <PARAM NAME="Suite" VALUE="-11">
  2568.     </OBJECT>
  2569.     <OBJECT ID="CardDeck12"
  2570.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:158pt;LEFT:360pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:85;DISPLAY:NONE;ZINDEX:94;">
  2571.         <PARAM NAME="_ExtentX" VALUE="2037">
  2572.         <PARAM NAME="_ExtentY" VALUE="2619">
  2573.         <PARAM NAME="Suite" VALUE="-12">
  2574.     </OBJECT>
  2575.     <OBJECT ID="CardDeckOk"
  2576.      CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:249pt;LEFT:121pt;WIDTH:91pt;HEIGHT:25pt;TABINDEX:87;DISPLAY:NONE;ZINDEX:95;">
  2577.         <PARAM NAME="Caption" VALUE="OK">
  2578.         <PARAM NAME="Size" VALUE="3210;882">
  2579.         <PARAM NAME="Accelerator" VALUE="79">
  2580.         <PARAM NAME="FontCharSet" VALUE="0">
  2581.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2582.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2583.         <PARAM NAME="FontWeight" VALUE="0">
  2584.     </OBJECT>
  2585.     <OBJECT ID="CardDeckCancel"
  2586.      CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:249pt;LEFT:236pt;WIDTH:91pt;HEIGHT:25pt;TABINDEX:89;DISPLAY:NONE;ZINDEX:96;">
  2587.         <PARAM NAME="Caption" VALUE="Cancel">
  2588.         <PARAM NAME="Size" VALUE="3210;882">
  2589.         <PARAM NAME="Accelerator" VALUE="67">
  2590.         <PARAM NAME="FontCharSet" VALUE="0">
  2591.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2592.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2593.         <PARAM NAME="FontWeight" VALUE="0">
  2594.     </OBJECT>
  2595.     <OBJECT ID="lstDebugPrint"
  2596.      CLASSID="CLSID:8BD21D20-EC42-11CE-9E0D-00AA006002F3" STYLE="TOP:23pt;LEFT:132pt;WIDTH:122pt;HEIGHT:66pt;TABINDEX:9;DISPLAY:NONE;ZINDEX:97;">
  2597.         <PARAM NAME="BackColor" VALUE="16777215">
  2598.         <PARAM NAME="ScrollBars" VALUE="3">
  2599.         <PARAM NAME="DisplayStyle" VALUE="2">
  2600.         <PARAM NAME="Size" VALUE="4304;2328">
  2601.         <PARAM NAME="MatchEntry" VALUE="0">
  2602.         <PARAM NAME="FontCharSet" VALUE="0">
  2603.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2604.         <PARAM NAME="FontWeight" VALUE="0">
  2605.     </OBJECT>
  2606.     <OBJECT ID="TitleBanner"
  2607.      CLASSID="CLSID:4C599241-6926-101B-9992-00000B65C6F9"
  2608.      DATA="DATA:application/x-oleobject;BASE64,QZJZTCZpGxCZkgAAC2XG+QACGAC4BgAAAIAAAACAAAAAA///nAwAANwBAACw
  2609. gWfaSsLPEbWEAKoApx0abHQAAFUCAABHSUY4OWF6ABIAov8A////AIAAAGsA
  2610. AEoAADEAABgAABAAAAAALAAAAAB6ABIAAAP/GLrc/jDKSau9VQgc9OZa4z3C
  2611. YH5TGFoj1xTHkBHKcbiCzeTFM9hAmeS3ORgUAppE52L8YpQcLankwD68B+FA
  2612. 0PyOkm2HIJNKqE0Gl0shphc/4aHnyAlrt2VV4X5XCgVxIgRkfAZsJgGJcFiE
  2613. AyiKbIAQYgyBC1R3bokDh1UDBYV8Qo+EH4RdEXF2DFswknNkbGx8Bxuuh2AL
  2614. NjARVyQwr0oER3Y5sZGANmVQTzpfMLoObKwKW8w9m7YBc7s0xEKHkK+QDVtz
  2615. dwqH4XlsW7fbgpEy7wEwjyVQAfUOlWYd+vbJmBTAAJ1u9o7I2xfQXkMtQPTx
  2616. YxhpA0GEiwBa7JEF/+CnhwBJ6WPSAEo1alCuePllzcYeCEkObaOloJcYVguR
  2617. COiFU98qDRMXvIooI2etDX2gGAQYkRecNXSiiOtTgwaibfxARaThhtiupgid
  2618. cBlA5hrDcvvAFNAV40etE/g+/KAhro6oBe/WijWxTW9BOnMfudH7T0qJw+X+
  2619. IVGap0OBIlMCzpHYWJFcWmZF0KzZY/OkmyZDVwFNb1tFTOlqVg7JzXQvbVic
  2620. qj7VjObcOmEdFola7yq8lk+5bjOgS97tvQ0EBQNlAN5jgpFMMwxktuPiqJhk
  2621. ErLxwZPWosMPztk59pyMpQu/kN1s7aWiS0lcyjVI9k6S1Ocet++HHdPQVCJI
  2622. CCMXHaJ08hh5BpiQSiGgQPLEJX5EKOGEFFZo4YUYWpAAADsAAAA=
  2623. "
  2624.      STYLE="TOP:0pt;LEFT:0pt;WIDTH:92pt;HEIGHT:14pt;ZINDEX:98;">
  2625.     </OBJECT>
  2626. </DIV>