home *** CD-ROM | disk | FTP | other *** search
/ 1,000 Games / Disc2.iso / CASINO / PRO31 / BLACKJCK.BAS < prev    next >
BASIC Source File  |  1991-10-30  |  46KB  |  1,579 lines

  1. DEFINT A-Z
  2.  
  3. DECLARE SUB Instructions (User)
  4. DECLARE SUB BlackJack ()
  5. DECLARE SUB Zeeks ()
  6. DECLARE SUB Credits ()
  7. DECLARE SUB Ending (A$)
  8. DECLARE SUB Wins ()
  9. DECLARE SUB Insults ()
  10. DECLARE SUB Text (A$, B$)
  11. DECLARE SUB ShowHigh ()
  12. DECLARE SUB GetAccount (User%, Name$, Money AS LONG)
  13. DECLARE SUB NewAccount (Name$, User%)
  14. DECLARE SUB Title ()
  15. DECLARE SUB UdCom ()
  16. DECLARE SUB UdPlayer ()
  17. DECLARE SUB DrawCard (X, Y, Num, Suit, up)
  18. DECLARE SUB Shuffle ()
  19. DECLARE SUB InitScreen ()
  20. DECLARE SUB GiveComputer (up)
  21. DECLARE SUB GivePlayer ()
  22. DECLARE SUB PlaceBet ()
  23. DECLARE SUB Deal ()
  24. DECLARE SUB Blink (As$)
  25. DECLARE SUB SwitchScreen (Scrn%)
  26. DECLARE SUB MoneyPrint (A AS LONG)
  27. DECLARE SUB WaitKey ()
  28. DECLARE SUB Warning ()
  29.  
  30. DECLARE FUNCTION Getkey$ ()
  31. DECLARE FUNCTION Strip$ (A$)
  32. DECLARE FUNCTION Month ()
  33. DECLARE FUNCTION Year ()
  34. DECLARE FUNCTION Day ()
  35. DECLARE FUNCTION JulianDay! (M, D, Y)
  36.  
  37. CLEAR , , 3000
  38. CONST True = -1, False = NOT True
  39. TYPE CardType
  40.     Number AS INTEGER
  41.     Suit AS INTEGER
  42.     up AS INTEGER
  43. END TYPE
  44. TYPE Acctype
  45.     Used AS INTEGER
  46.     UserName AS STRING * 16
  47.     password AS STRING * 8
  48.     Money AS LONG
  49.     Plays AS INTEGER
  50.     LastTime AS SINGLE
  51. END TYPE
  52. TYPE HighType
  53.     UserName AS STRING * 16
  54.     Money AS LONG
  55.     Plays AS INTEGER
  56. END TYPE
  57. DIM SHARED Number$(13), Suit$(4), BigSuit$(4)
  58. DIM SHARED card(52) AS CardType, Player(10) AS CardType, Computer(10) AS CardType
  59. DIM SHARED NextCard AS INTEGER, ComCard AS INTEGER, PlayCard AS INTEGER
  60. DIM SHARED ComScore AS INTEGER, PlayScore AS INTEGER, bet AS SINGLE
  61. DIM SHARED Money AS LONG, XC AS INTEGER, YC AS INTEGER, XP AS INTEGER, YP AS INTEGER
  62. DIM SHARED Characters$(128)
  63. DIM SHARED Insult$(20), Win$(20), NumInsults, NumWin
  64. DIM SHARED Last
  65. DIM SHARED IRQ, Ikey$, AfterUpdate
  66. DIM Buffer AS Acctype, BufferA AS HighType, BufferB AS HighType
  67.  
  68. NumInsults = 14
  69. NumWin = 14
  70. DATA U7E1R3F1D3NL5D4BR2
  71. DATA U8R4F1D2G1NL4F1D2G1NL4BR3
  72. DATA BU1F1R3NE1L3H1U6E1R3F1BR2BD7
  73. DATA U8R4F1D6G1NL4BR3
  74. DATA U8NR5D4NR3D4R5BR2
  75. DATA U8NR5D4NR3D4BR7
  76. DATA U8R4NF1BD8NL4E1U2H1NL1BR3BD4
  77. DATA U8D4R5NU4D4BR2
  78. DATA NR4R2U8NL2R2BR2BD8
  79. DATA BU1NU1F1R3E1NU7BR2BD1
  80. DATA NU8U4R1F4BU8G4BR6BD4
  81. DATA NU8R5BR2
  82. DATA U8F3E3D8BR2
  83. DATA U8F6NU6D2BR2
  84. DATA U8R5D8NL5BR2
  85. DATA U8R4F1D2G1NL4BR3BD4
  86. DATA BU1U6E1R3F1D4G3L1H1BR4NH2F1BR2
  87. DATA U8R4F1D2G1L4R1F4BR2
  88. DATA BU1F1R3E1U2H1L3H1U2E1R3F1BR2BD7
  89. DATA BU8R6L3D8BR5
  90. DATA NU8R5NU8BR2
  91. DATA BU2NU6F2R1E2NU6BR2BD2
  92. DATA NU8E3F3NU8BR2
  93. DATA U1E6U1BL6D1F6D1BR2
  94. DATA BR3U4H2U2BR4D2G2BR4BD4
  95. DATA NR5U2E5U1NL5BR2BD8
  96. FOR A = ASC("A") TO ASC("Z")
  97.     READ Characters$(A)
  98. NEXT
  99. Characters$(32) = "BR7"
  100. Characters$(63) = "br4u0bu2u1e3h2l3g1BM+8,+7"
  101. Characters$(45) = "BU3R4BR2BD3"
  102. DEF Fnr (X) = INT(RND(1) * X + 1)
  103. Suit$(1) = "BR2H3UERFERFDG3U3GU2GUR4DLD"
  104. Suit$(2) = "R3HUEFU3GHEL3FGHD3EFD2U4RDL"
  105. Suit$(3) = "BU3F2E2H2G2R3HD2"
  106. Suit$(4) = "BRR2LU2L2R4UL4E2FL"
  107. BigSuit$(1) = "HUH2UH2UH2UHU3EUE2R3F2E2R3F2DFD3GDG2DG2DG2DGBU5P4,4"
  108. BigSuit$(2) = "L3ER2HU5G3L3H2U3E2R3FEH2U3E2R3F2D3G2FER3F2D3G2L3H3D5F2L2BU10P0,0"
  109. BigSuit$(3) = "H3UH2UH3E3UE2UE3F3DF2DF3G3DG2DG3BU5P4,4"
  110. BigSuit$(4) = "L2EU7G3L2H2U4EUE7F7DFD4G2L2H3D7FL2BU15P0,0"
  111. Number$(1) = "U4E2F2D2NL3D2"
  112. Number$(2) = "BU5ER2FDGL2GD2R4"
  113. Number$(3) = "BR3L2HBU4ER2FDGLRFDG"
  114. Number$(4) = "BR3U6G3DR4"
  115. Number$(5) = "BR3L2HBU5R4L4D2R3FD2G"
  116. Number$(6) = "BR3L2HU4ER2FBD2BL3R2FDG"
  117. Number$(7) = "BU6R4DG3D2"
  118. Number$(8) = "BR3L2HUEHUER2FDGL2R2FDG"
  119. Number$(9) = "BUFR2EU2L3HUER2FD4"
  120. Number$(10) = "R2LU5LRUBR5R2FD4GL2HU4E"
  121. Number$(11) = "UDR3U6L2R4"
  122. Number$(12) = "BR1HU4ER2FD4GLBUF2"
  123. Number$(13) = "U6BR4G3F3"
  124. DATA "Ha Ha!   Zeek got ya!  Good work Ray!"
  125.  
  126. DATA "Stupid! You really messed up that one! Maybe next time..."
  127. DATA "Wow! That's one for the books..."
  128. DATA "Ha Ha Ha!  How stupid! I knew you would lose!"
  129. DATA "Wow! How bad can you get?"
  130. DATA "Real good playing there, Ray!"
  131. DATA "Nice play, Shakespeare.   When's act II?"
  132. DATA "Good job. Next time, try to win!"
  133. DATA "In your face, Ray!"
  134. DATA "You win...       SIEKE!!"
  135. DATA "Yo dork,  who taught you how to play...  Mr. Rogers?"
  136. DATA "...and now for the further adventures of BrokeMan!"
  137. DATA "Here's a tip. Don't ever go to Las Vegas."
  138.  
  139. FOR A = 1 TO NumInsults - 1
  140.     READ Insult$(A)
  141. NEXT
  142. Insult$(14) = "What a " + CHR$(34) + "Jerk" + CHR$(34) + ". Who do you think you are, Pee Wee?"
  143.  
  144. DATA "Poor Zeek! How could you!"
  145. DATA "Zeek's thugs whip out the ghetto blaster and slowly drain your screaming body of all fluids. How about that for a bad day!"
  146. DATA "Good job, but Zeek thinks you cheated."
  147. DATA "Zeek promises you won't do that again."
  148. DATA "Great Job!  Zeek's thugs are waiting outside for you..."
  149. DATA "You won again. If I were you, I'd watch my back!!!"
  150. DATA "Zeek hates when that happens..."
  151. DATA "Nice win... Retards luck!"
  152. DATA "The alarm sounds as the gaurds come crashing in and graciously give you a Colombian Neck Tie free of charge! Wow,  what a deal!"
  153. DATA "Zeek sees that ace up your sleeve, SCUMBAG!"
  154. DATA "Zeeks thugs rip a new place of excretion for your body..."
  155. DATA "Heroshima was a big bang. Too bad your not!"
  156. DATA "Life goes on! But you won't!"
  157. DATA "Ooooooo...  I'm scared now Ray!"
  158. FOR A = 1 TO NumWin
  159.     READ Win$(A)
  160. NEXT
  161.  
  162. DATA yousuck.grf,Warning.Grf,KXS.BAS,KYS.BAS,KXE.BAS,KYE.BAS,PXS.BAS,PXE.BAS,PYS.BAS,PYE.BAS,ZXS.BAS,ZXE.BAS,ZYS.BAS,ZYE.BAS,RXS.BAS,RXE.BAS,RYS.BAS,RYE.BAS,end
  163.  
  164. DO
  165.     READ A$
  166.     IF A$ <> "end" THEN
  167.         OPEN A$ FOR RANDOM AS #1 LEN = 1
  168.         IF LOF(1) = 0 THEN
  169.             CLOSE #1
  170.             KILL A$
  171.             COLOR 14
  172.             BEEP
  173.             PRINT "Zeek can't find one of his files! You better get them quick, Zeek has got a"
  174.             PRINT "very short temper! (Is that Zeek's jackknife I see? Naa, it's couldn't be...)"
  175.             PRINT "File "; : COLOR 6: PRINT UCASE$(A$); : COLOR 14: PRINT " is missing! Abnormal Termination!"
  176.             COLOR 15
  177.             END
  178.         ELSE
  179.             CLOSE #1
  180.         END IF
  181.     END IF
  182. LOOP UNTIL A$ = "end"
  183. Warning
  184. Title
  185. DO
  186.     NextCard = 0
  187.     StartAgain = False
  188.     GetAccount User, Name$, Money
  189.     Instructions User
  190.     SwitchScreen 8
  191.     DO
  192.         PlaceBet
  193.         InitScreen
  194.         ComCard = 0
  195.         PlayCard = 0
  196.         Deal
  197.         UdPlayer
  198.         LOCATE 23, 60: PRINT "Press Esc to save."
  199.         B$ = ""
  200.         DO UNTIL PlayScore >= 21 OR B$ = "S" OR StartAgain
  201.             LOCATE 19, 60
  202.             PRINT "Hit or Stay(H/S)?"
  203.             DO
  204.                 B$ = Getkey$
  205.             LOOP UNTIL B$ = "H" OR B$ = "S" OR B$ = " " OR B$ = CHR$(27)
  206.             LOCATE 19, 60
  207.             PRINT SPACE$(17)
  208.             IF B$ = CHR$(27) THEN
  209.                 SwitchScreen 12
  210.                 LOCATE 15, 1
  211.                 PRINT "Saving..."
  212.                 OPEN "Accounts.dat" FOR RANDOM AS #1 LEN = 40
  213.                 GET #1, User, Buffer
  214.                 Buffer.Money = Money
  215.                 Buffer.Plays = Buffer.Plays + 1
  216.                 Buffer.LastTime = JulianDay(Month, Day, Year)
  217.  
  218.                 PUT #1, User, Buffer
  219.                 
  220.                 CLOSE
  221.                 StartAgain = True
  222.             END IF
  223.             IF B$ = "H" OR B$ = " " THEN
  224.                 GivePlayer
  225.                 UdPlayer
  226.             END IF
  227.         LOOP
  228.         IF NOT StartAgain THEN
  229.             SLEEP 2
  230.             Win = False: Bust = False
  231.             IF PlayScore = 21 THEN
  232.                 CLS
  233.                 Wins
  234.                 Win = True
  235.                 IF PlayCard = 2 THEN
  236.                     Money = Money + INT(bet * 1.5)
  237.                 ELSEIF PlayCard < 6 THEN
  238.                     Money = Money + bet * 2
  239.                 ELSEIF PlayCard = 6 THEN
  240.                     Money = Money + bet * 3
  241.                 END IF
  242.             END IF
  243.             IF PlayScore > 21 THEN
  244.                 CLS
  245.                 Insults
  246.                 Bust = True
  247.                 Money = Money - bet
  248.             END IF
  249.             IF NOT Win AND NOT Bust THEN
  250.                 PCOPY 0, 1
  251.                 SCREEN 8, , 1, 0
  252.                 LINE (20, 97)-(438, 10), 0, BF
  253.                 XC = 20
  254.                 FOR A = 0 TO 1
  255.                     DrawCard XC, YC, Computer(A).Number, Computer(A).Suit, True
  256.                     XC = XC + 20
  257.                 NEXT
  258.                 UdCom
  259.                 Hit = True
  260.                 SCREEN 8, , 0, 0
  261.                 PCOPY 1, 0
  262.                 LOCATE 3, 60
  263.                 PRINT "Hit"
  264.                 DO UNTIL ComScore >= 21 OR NOT Hit
  265.                     IF ComScore <= 16 THEN
  266.                         GiveComputer True
  267.                         UdCom
  268.                         SLEEP 1
  269.                     ELSE
  270.                         Hit = False
  271.                         LOCATE 3, 60
  272.                         PRINT "Stay"
  273.                         SLEEP 1
  274.                     END IF
  275.                 LOOP
  276.                 LOCATE 4, 60
  277.                 PRINT "Score:"; ComScore
  278.                 SLEEP 3
  279.                 IF ComScore = 21 OR (ComScore > PlayScore AND ComScore < 22) THEN
  280.                     CLS
  281.                     Insults
  282.                     Money = Money - bet
  283.                 END IF
  284.                 IF ComScore < PlayScore OR ComScore > 21 THEN
  285.                     CLS
  286.                     Wins
  287.                     Money = Money + bet
  288.                 END IF
  289.                 IF ComScore = PlayScore THEN
  290.                     CLS
  291.                     Insults
  292.                     Money = Money - bet
  293.                 END IF
  294.             END IF
  295.         END IF
  296.     LOOP UNTIL StartAgain OR Money <= 0
  297.     IF Money = 0 THEN
  298.         CLS
  299.         OPEN "Accounts.dat" FOR RANDOM AS #1 LEN = 40
  300.         Buffer.Used = False
  301.         PUT #1, User, Buffer
  302.         CLOSE #1
  303.         Ending K$
  304.     END IF
  305.     IF StartAgain THEN
  306.         SwitchScreen (12)
  307.         CLS
  308.         OPEN "ZeekHigh.dat" FOR RANDOM AS #1 LEN = 22
  309.         IF LOF(1) = 0 THEN
  310.             BufferA.UserName = "Ray" + CHR$(255)
  311.             FOR A = 2 TO 10
  312.                 BufferA.Plays = INT(RND(1) * 60)
  313.                 BufferA.Money = (11 - A) * 800
  314.                 PUT #1, A, BufferA
  315.             NEXT
  316.             BufferA.UserName = "Zeek" + CHR$(255)
  317.             BufferA.Money = 15000
  318.             BufferA.Plays = 1
  319.             PUT #1, 1, BufferA
  320.         END IF
  321.         Fall = False
  322.         FOR A = 1 TO 10
  323.             GET #1, A, BufferA
  324.             IF Strip$(BufferA.UserName) = Name$ THEN
  325.                 Fall = True
  326.                 IF BufferA.Money < Money THEN
  327.                     BufferA.Money = Money
  328.                    
  329.                     OPEN "Accounts.Dat" FOR RANDOM AS #2 LEN = 40
  330.                     GET #2, User, Buffer
  331.                     BufferA.Plays = Buffer.Plays
  332.                     CLOSE #2
  333.                    
  334.                     PUT #1, A, BufferA
  335.                    
  336.                     DO
  337.                         Swaps = False
  338.                         FOR B = 1 TO 9
  339.                             GET #1, B, BufferA
  340.                             GET #1, B + 1, BufferB
  341.                             IF BufferB.Money > BufferA.Money THEN
  342.                                 SWAP BufferA, BufferB
  343.                                 PUT #1, B, BufferA
  344.                                 PUT #1, B + 1, BufferB
  345.                                 Swaps = True
  346.                             END IF
  347.                         NEXT B
  348.                     LOOP WHILE Swaps
  349.                     CLOSE #1
  350.                     ShowHigh
  351.                     EXIT FOR
  352.                 END IF
  353.             END IF
  354.         NEXT
  355.         IF NOT Fall THEN
  356.             FOR A = 1 TO 10
  357.                 GET #1, A, BufferA
  358.                 IF Money > BufferA.Money THEN
  359.                     FOR Move = 9 TO A STEP -1
  360.                         GET #1, Move, BufferB
  361.                         PUT #1, Move + 1, BufferB
  362.                     NEXT
  363.                     BufferA.UserName = Name$ + CHR$(255)
  364.                     OPEN "Accounts.Dat" FOR RANDOM AS #2 LEN = 40
  365.                     GET #2, User, Buffer
  366.                     BufferA.Plays = Buffer.Plays
  367.                     CLOSE #2
  368.                     BufferA.Money = Money
  369.                     PUT #1, A, BufferA
  370.                     CLOSE
  371.                     ShowHigh
  372.                     EXIT FOR
  373.                 END IF
  374.             NEXT
  375.             CLOSE
  376.         END IF
  377.         CLS
  378.         LOCATE 15, 20
  379.         PRINT "Would you like to continue playing(Y/N)?"
  380.         DO
  381.             K$ = UCASE$(INPUT$(1))
  382.         LOOP UNTIL K$ = "Y" OR K$ = "N"
  383.         IF K$ = "N" THEN
  384.             StartAgain = False
  385.         END IF
  386.     END IF
  387. LOOP WHILE K$ = "Y" OR StartAgain
  388. CLS
  389. END
  390.  
  391.  
  392.  
  393. Interrupt:
  394.     Ikey$ = INKEY$
  395.     IF Ikey$ <> "" THEN
  396.         IRQ = -1
  397.     ELSE
  398.         IRQ = 0
  399.     END IF
  400. RETURN
  401. KeepBusy:
  402.     PCOPY 0, 2
  403.     SCREEN 7, , 0, 0
  404.     LOCATE 23, 13
  405.     COLOR 1
  406.     PRINT "Please Wait..."
  407.     AfterUpdate = True
  408.     SCREEN 7, , 1, 0
  409.     TIMER OFF
  410. RETURN
  411.  
  412. SUB BlackJack
  413. SCREEN 7, , 1, 0
  414. '$DYNAMIC
  415. REDIM X(150, 52) AS INTEGER
  416. REDIM Y(150, 52) AS INTEGER
  417. REDIM X1(150, 52) AS INTEGER
  418. REDIM Y1(150, 52) AS INTEGER
  419. DIM Start AS SINGLE
  420. PCOPY 0, 2
  421.  
  422. AfterUpdate = False
  423. ON TIMER(1) GOSUB KeepBusy
  424. TIMER ON
  425.  
  426. DEF SEG = VARSEG(X(0, 0))
  427. BLOAD "KXS", VARPTR(X(0, 0))
  428.  
  429. DEF SEG = VARSEG(X1(0, 0))
  430. BLOAD "KXE", VARPTR(X1(0, 0))
  431.  
  432. DEF SEG = VARSEG(Y(0, 0))
  433. BLOAD "KYS", VARPTR(Y(0, 0))
  434.  
  435. DEF SEG = VARSEG(Y1(0, 0))
  436. BLOAD "KYE", VARPTR(Y1(0, 0))
  437.  
  438. IF AfterUpdate THEN
  439.     PCOPY 2, 0
  440. ELSE
  441.     TIMER OFF
  442.  
  443. END IF
  444.  
  445. TIMER OFF
  446. ON TIMER(1) GOSUB Interrupt
  447. TIMER ON
  448.    
  449.     FOR Rev = 150 TO 0 STEP -1
  450.         PCOPY 2, 1
  451.         FOR Lines = 0 TO 52
  452.             LINE (X(Rev, Lines), Y(Rev, Lines))-(X1(Rev, Lines), Y1(Rev, Lines)), 14
  453.         NEXT
  454.         PCOPY 1, 0
  455.         IF IRQ THEN TIMER OFF: EXIT SUB
  456.     NEXT
  457.     Start = TIMER
  458.     DO
  459.     LOOP UNTIL TIMER - Start > 4 OR IRQ
  460.     IF IRQ THEN TIMER OFF: EXIT SUB
  461.     FOR Rev = 0 TO 150
  462.         PCOPY 2, 1
  463.         FOR Lines = 0 TO 52
  464.             LINE (X(Rev, Lines), Y(Rev, Lines))-(X1(Rev, Lines), Y1(Rev, Lines)), 14
  465.         NEXT
  466.         PCOPY 1, 0
  467.         IF IRQ THEN TIMER OFF: EXIT SUB
  468.     NEXT
  469.     FOR Lines = 0 TO 52
  470.         LINE (X(150, Lines), Y(150, Lines))-(X1(150, Lines), Y1(150, Lines)), 0
  471.     NEXT
  472.     PCOPY 1, 0
  473.  
  474.  
  475. END SUB
  476.  
  477. REM $STATIC
  478. SUB Blink (As$)
  479.     SwitchScreen 12
  480.     PALETTE 4, 63
  481.     COLOR 4
  482.     As$ = LTRIM$(RTRIM$(As$))
  483.     IF As$ = "" THEN STOP
  484.     Lne = 10
  485.     DO
  486.         IF LEN(As$) <= 80 THEN
  487.             LOCATE Lne, ((80 - LEN(As$)) / 2)
  488.             PRINT As$
  489.             As$ = ""
  490.         ELSE
  491.             A = 81
  492.             DO
  493.                 A = A - 1
  494.             LOOP UNTIL MID$(As$, A, 1) = " "
  495.             A = A - 1: A$ = LEFT$(As$, A)
  496.             LOCATE Lne, ((80 - LEN(LTRIM$(RTRIM$(A$)))) / 2): PRINT A$
  497.             Lne = Lne + 1
  498.             As$ = MID$(As$, A + 2)
  499.         END IF
  500.         As$ = RTRIM$(LTRIM$(As$))
  501.     LOOP UNTIL As$ = ""
  502.     DO
  503.         SLEEP 3
  504.         FOR A = 63 TO 0 STEP -1
  505.             PALETTE 4, A
  506.             FOR Time = 1 TO 400: NEXT
  507.         NEXT
  508.         A$ = INKEY$
  509.         IF A$ = "" THEN
  510.             SLEEP 1
  511.             FOR A = 0 TO 63
  512.                 PALETTE 4, A
  513.                 FOR Time = 1 TO 300: NEXT
  514.             NEXT
  515.             A$ = INKEY$
  516.         END IF
  517.     LOOP WHILE A$ = ""
  518.     SwitchScreen 8
  519. END SUB
  520.  
  521. SUB Credits
  522.     DIM Start AS SINGLE
  523.     PCOPY 0, 1
  524.     LOCATE 1, 1
  525.     COLOR 1
  526.     LOCATE 1, 12
  527.     PRINT "Zeek's BlackJack"
  528.     LOCATE 3, 9
  529.     PRINT "July - September 1991"
  530.     LOCATE 9, 5
  531.     PRINT "Programmed by: Rich Geldreich"
  532.     LOCATE 11, 13
  533.     PRINT "Contributors:"
  534.     LOCATE 13, 14
  535.     PRINT "Lee Cooper"
  536.     LOCATE 15, 13
  537.     PRINT "Tom Gettings"
  538.     LOCATE 17, 12
  539.     PRINT "Jamie Williams"
  540.     PCOPY 1, 0
  541.     Start = TIMER
  542.     DO
  543.     LOOP UNTIL TIMER - Start > 10 OR IRQ
  544.     TIMER OFF
  545. END SUB
  546.  
  547. FUNCTION Day
  548.     Day = VAL(MID$(DATE$, 4, 2))
  549. END FUNCTION
  550.  
  551. SUB Deal
  552.     GivePlayer
  553.     GivePlayer
  554.     GiveComputer False
  555.     GiveComputer True
  556. END SUB
  557.  
  558. SUB DrawCard (X, Y, Num, Suit, up)
  559.     LINE (X + 4, Y + 4)-(X + 107, Y - 67), 0, B
  560.     LINE (X + 5, Y + 5)-(X + 106, Y - 66), 7, BF
  561.     PRESET (X + 5, Y + 5): PRESET (X + 106, Y - 66): PRESET (X + 106, Y + 5): PRESET (X + 5, Y - 66)
  562.     LINE (X - 1, Y + 1)-(X + 101, Y - 71), 0, B
  563.     LINE (X, Y)-(X + 100, Y - 70), 15, BF
  564.     PRESET (X, Y): PRESET (X + 100, Y): PRESET (X + 100, Y - 70): PRESET (X, Y - 70)
  565.     IF up THEN
  566.         IF Suit = 1 OR Suit = 3 THEN
  567.             DRAW "C4"
  568.         ELSE
  569.             DRAW "C0"
  570.         END IF
  571.         DRAW "BM" + STR$(X) + "," + STR$(Y) + "BU60BR4" + Number$(Num)
  572.         DRAW "A2BM" + STR$(X + 97) + "," + STR$(Y - 10) + Number$(Num)
  573.         DRAW "A0BM" + STR$(X + 4) + "," + STR$(Y - 52) + Suit$(Suit)
  574.         DRAW "A2BM" + STR$(X + 97) + "," + STR$(Y - 18) + Suit$(Suit)
  575.         DRAW "A0BM" + STR$(X + 50) + "," + STR$(Y - 25) + BigSuit$(Suit)
  576.     END IF
  577. END SUB
  578.  
  579. SUB Ending (A$)
  580.     DIM PointsX(50) AS INTEGER, PointsY(50) AS INTEGER, Ay AS SINGLE
  581.     DIM Blood(115) AS INTEGER
  582.     DIM Used(25) AS INTEGER, Num(25) AS INTEGER
  583.     DIM X(25) AS SINGLE, Y(25) AS SINGLE, X1(25) AS SINGLE, Y1(25) AS SINGLE
  584.     DIM Y2(25) AS SINGLE, Excel(25) AS SINGLE
  585.     DIM TEMP(12000) AS INTEGER
  586.     SwitchScreen 12
  587.     PALETTE 14, 0
  588.     DEF SEG = VARSEG(TEMP(0))
  589.     BLOAD "Yousuck.grf", VARPTR(TEMP(0))
  590.     PALETTE 4, 0
  591.     PUT (95, 28), TEMP, PSET
  592.     PALETTE 4, 50
  593.     Xs = 101: Ys = 130
  594.     Xe = 530: Ye = 90
  595.     Ar = 0
  596.     FOR Ay = 0 TO 1 STEP 1 / 25
  597.         PointsX(Ar) = Xs + (Xe - Xs) * Ay
  598.         PointsY(Ar) = Ys + (Ye - Ys) * Ay
  599.         Ar = Ar + 1
  600.     NEXT
  601.     Ar = Ar - 1
  602.     PALETTE 5, 0
  603.     CIRCLE (5, 15), 5, 5
  604.     PAINT (5, 15), 5, 5
  605.     LINE (0, 15)-(5, 0), 5
  606.     LINE (10, 15)-(5, 0), 5
  607.     PAINT (5, 4), 5, 5
  608.     GET (0, 0)-(10, 20), Blood
  609.     LINE (0, 0)-(10, 20), 0, BF
  610.     PALETTE 5, 30
  611.     DO
  612.         A$ = INKEY$
  613.     LOOP WHILE A$ <> ""
  614.     LOCATE 23, 35: PRINT "Game Over"
  615.     LOCATE 24, 26: PRINT "Press any key to continue...";
  616.     Drops = 6
  617.     FOR A = 0 TO Ar
  618.         Used(A) = False
  619.     NEXT
  620.     PALETTE 1, 30: PALETTE 10, 30
  621.     FOR A = 1 TO Drops
  622.         DO
  623.             A1 = Fnr(Ar + 1) - 1
  624.         LOOP WHILE Used(A1)
  625.         Used(A1) = True
  626.         Num(A) = A1
  627.         X(A) = PointsX(A1): Y(A) = PointsY(A1): X1(A) = X(A): Y1(A) = Y(A): Y2(A) = 0
  628.         PUT (X1(A), Y1(A)), Blood
  629.         DO
  630.             Excel(A) = INT(RND(1) * 100) / 100
  631.         LOOP WHILE Excel(A) < .09
  632.     NEXT
  633.     DO
  634.         FOR A = 1 TO Drops
  635.             PUT (X1(A), Y1(A)), Blood: PUT (X(A), Y(A)), Blood: X1(A) = X(A): Y1(A) = Y(A)
  636.             Y(A) = Y(A) + Y2(A): Y2(A) = Y2(A) + Excel(A)
  637.             IF Y(A) > 450 THEN
  638.                 PUT (X1(A), Y1(A)), Blood
  639.                 Used(Num(A)) = False
  640.                 DO
  641.                     A1 = Fnr(Ar + 1) - 1
  642.                 LOOP WHILE Used(A1)
  643.                 Used(A1) = True
  644.                 Num(A) = A1
  645.                 X(A) = PointsX(A1): Y(A) = PointsY(A1): X1(A) = X(A): Y1(A) = Y(A): Y2(A) = 0
  646.                 PUT (X1(A), Y1(A)), Blood
  647.                 DO
  648.                     Excel(A) = INT(RND(1) * 100) / 100
  649.                 LOOP WHILE Excel(A) < .09
  650.             END IF
  651.         NEXT
  652.     LOOP UNTIL INKEY$ <> ""
  653.     CLS
  654.     PALETTE
  655.     LOCATE 12, 8
  656.     PRINT "Ollie North dips your account papers into his nifty shredder..."
  657.     LOCATE 14, 24
  658.     PRINT "Thank you very much for playing."
  659.     LOCATE 16, 13
  660.     PRINT "Don't let the door hit you in the but on the way out!"
  661.     WaitKey
  662.     CLS
  663.     LOCATE 15, 32: PRINT "Lose Again?(y/n)"
  664.     DO
  665.         A$ = UCASE$(INPUT$(1))
  666.     LOOP UNTIL A$ = "Y" OR A$ = "N"
  667. END SUB
  668.  
  669. SUB GetAccount (User, Name$, Money AS LONG)
  670.     DIM Buffer AS Acctype
  671.     SwitchScreen 12
  672.     DO
  673.         Retry = False
  674.         CLS
  675.         DO
  676.             LOCATE 14, 22: PRINT "Zeek would like to know who you are."
  677.             LOCATE 16, 12: PRINT "(Just press enter to tell Zeek you would like to quit.)"
  678.             LOCATE 15, 1: PRINT STRING$(80, 32);
  679.             LOCATE 15, 22: LINE INPUT A$
  680.             IF A$ = "" THEN
  681.                 CLS
  682.                 LOCATE 15, 28: PRINT "Would You Like To Quit?"
  683.                 B$ = UCASE$(INPUT$(1))
  684.                 IF B$ = "Y" THEN
  685.                     END
  686.                 ELSE
  687.                     CLS
  688.                 END IF
  689.             END IF
  690.         LOOP WHILE LEN(A$) > 14 OR A$ = ""
  691.         A$ = UCASE$(A$)
  692.         CLS
  693.         LOCATE 14, 19: PRINT "Wait a second. Zeek is checking you out..."
  694.         OPEN "Accounts.dat" FOR RANDOM AS #1 LEN = 40
  695.         IF LOF(1) = 0 THEN
  696.             NewAccount Name$, User
  697.             Money = 500
  698.             CLOSE
  699.             EXIT SUB
  700.         ELSE
  701.             FOR A = 1 TO LOF(1)
  702.                 GET #1, A, Buffer
  703.                 IF Buffer.Used THEN
  704.                     IF Strip$(Buffer.UserName) = A$ THEN
  705.                         CLS
  706.                         LOCATE 14, 30
  707.                         PRINT "What's the password?"
  708.                         LOCATE 15, 30
  709.                         LINE INPUT Pass$
  710.                         Pass$ = UCASE$(Pass$)
  711.                         IF Strip$(Buffer.password) = Pass$ THEN
  712.                             User = A
  713.                             Name$ = A$
  714.                             Money = Buffer.Money
  715.                             SLEEP 1
  716.                             CLOSE
  717.                             EXIT SUB
  718.                         ELSE
  719.                             Retry = True
  720.                             EXIT FOR
  721.                         END IF
  722.                     END IF
  723.                 END IF
  724.             NEXT
  725.             IF NOT Retry THEN
  726.                 NewAccount Name$, User
  727.                 Money = 500
  728.                 CLOSE
  729.                 EXIT SUB
  730.             ELSE
  731.                 CLOSE
  732.                 LOCATE 15, 11
  733.                 PRINT "Bad Human! You have the wrong password. Try again stupid!!"
  734.                 WaitKey
  735.             END IF
  736.         END IF
  737.     LOOP
  738. END SUB
  739.  
  740. FUNCTION Getkey$
  741.     K$ = UCASE$(INPUT$(1))
  742.     IF K$ = "Q" THEN END
  743.     Getkey$ = K$
  744. END FUNCTION
  745.  
  746. SUB GiveComputer (up)
  747.     IF NextCard = 0 THEN
  748.         Shuffle
  749.     END IF
  750.    
  751.     Computer(ComCard).Number = card(NextCard).Number
  752.     Computer(ComCard).Suit = card(NextCard).Suit
  753.     Computer(ComCard).up = up
  754.     PCOPY 0, 1
  755.     SCREEN 8, , 1, 0
  756.     DrawCard XC, YC, Computer(ComCard).Number, Computer(ComCard).Suit, up
  757.     SCREEN 8, , 0, 0
  758.     PCOPY 1, 0
  759.     XC = XC + 20
  760.     ComCard = ComCard + 1
  761.     NextCard = NextCard - 1
  762. END SUB
  763.  
  764. SUB GivePlayer
  765.     IF NextCard = 0 THEN
  766.         Shuffle
  767.     END IF
  768.    
  769.     Player(PlayCard).Number = card(NextCard).Number
  770.     Player(PlayCard).Suit = card(NextCard).Suit
  771.     Player(PlayCard).up = True
  772.     PCOPY 0, 1
  773.     SCREEN 8, , 1, 0
  774.     DrawCard XP, YP, Player(PlayCard).Number, Player(PlayCard).Suit, True
  775.     SCREEN 8, , 0, 0
  776.     PCOPY 1, 0
  777.     XP = XP + 20
  778.     PlayCard = PlayCard + 1
  779.     NextCard = NextCard - 1
  780. END SUB
  781.  
  782. SUB InitScreen
  783.     CLS
  784.     LINE (0, 0)-(639, 3), 14, BF
  785.     LINE (0, 0)-(5, 199), 14, BF
  786.     LINE (0, 196)-(639, 199), 14, BF
  787.     LINE (634, 0)-(639, 199), 14, BF
  788.     LINE (439, 0)-(444, 199), 14, BF
  789.     LINE (0, 100)-(639, 103), 14, BF
  790.     LOCATE 2, 64
  791.     PRINT "Computer"
  792.     LOCATE 14, 66
  793.     PRINT "You"
  794.     LOCATE 16, 60
  795.     PRINT "Money:"; : MoneyPrint Money
  796.     LOCATE 17, 60
  797.     PRINT "Bet:"; : MoneyPrint CLNG(bet)
  798.     XC = 20
  799.     YC = 85
  800.     XP = 20
  801.     YP = 185
  802. END SUB
  803.  
  804. SUB Instructions (User)
  805.     DIM Buffer AS Acctype, Dte AS SINGLE, Lst AS SINGLE
  806.    
  807.     SwitchScreen 12
  808.    
  809.    
  810.     OPEN "ACCOUNTS.DAT" FOR RANDOM AS #1 LEN = 40
  811.     IF LOF(1) = 0 THEN STOP
  812.     GET #1, User, Buffer
  813.     Lst = Buffer.LastTime
  814.     CLOSE #1
  815.    
  816.     Dte = JulianDay(Month, Day, Year)
  817.    
  818.     IF Lst = Dte THEN EXIT SUB
  819.     IF Lst = 0 THEN
  820.         Text "WELCOME TO ZEEKS BLACKJACK", "BM120,30S8C14"
  821.         COLOR 14
  822.         LOCATE 6, 1
  823.         PRINT "       Zeek greets you to his latest new way of making money! This game of"
  824.         PRINT "   BlackJack  plays  just  like  the  real thing  except  splits  are  not"
  825.         PRINT "   allowed(well,  that  was  just  too complicated  for  Zeek. What do you"
  826.         PRINT "   expect from a first grade education, anyway?) "
  827.         PRINT "       When the dealer has the same score as you, you lose the hand. Also,"
  828.         PRINT "   the computer never cheats(well, I hope Zeek doesn't cheat...). The deck"
  829.         PRINT "   is handled just like a real deck."
  830.         PRINT "       The accounting system Zeek has set up is very simple. At the"
  831.         PRINT "   beginning of a game, Zeek will ask for your  name. After  your name  is"
  832.         PRINT "   inputted, Zeek will see if  you  have played  this  game before. If you"
  833.         PRINT "   haven't, then Zeek will  take  ask  your  name and a password so he can"
  834.         PRINT "   make an account for you. If you do have an  account, then Zeek will ask"
  835.         PRINT "   for your password(choose a simple password so you don't forget it).  If"
  836.         PRINT "   you input the correct password(upper and lowercase  are ignored),  then"
  837.         PRINT "   you may play the game. If you input an incorrect password, then you are"
  838.         PRINT "   asked to input your name again. If your stuck  and can't  remember your"
  839.         PRINT "   password, then type this in at the MS-DOS prompt(making sure you are in"
  840.         PRINT "   the directory of the game):"
  841.         PRINT
  842.         PRINT "   TYPE ACCOUNTS.DAT"
  843.         PRINT
  844.         PRINT "       All of the accounts and their passwords will be listed on the screen."
  845.        
  846.         LOCATE 30, 3: PRINT "Press any key to continue...";
  847.         WaitKey
  848.         CLS
  849.         PRINT "While playing the game:"
  850.         PRINT "   Playing Zeek's BlackJack is very simple. To get a card, press the "; CHR$(34); "H"; CHR$(34); " or"
  851.         PRINT "spacebar keys. To stay, press the "; CHR$(34); "S"; CHR$(34); " key. The computer will automatically"
  852.         PRINT "tally your correct score for you after each card."
  853.         PRINT "   If you don't wish tp play the game anymore while you still have money left,"
  854.         PRINT "press the ESC while on the play screen. This will save your game in your account"
  855.         PRINT "for later play."
  856.         PRINT
  857.         PRINT "    The code for Zeek's BlackJack was made with Microsoft's Quick Basic version"
  858.         PRINT "4.5(which has been supplied). If you make any improvements or find any bugs,"
  859.         PRINT "please send them to me. My address is:"
  860.         PRINT
  861.         PRINT "Rich Geldreich"
  862.         PRINT "410 Market Street"
  863.         PRINT "Gloucester City, New Jersey 08030"
  864.         PRINT "Phone (609)-456-0721"
  865.         PRINT
  866.         PRINT "I will be more than happy to return the media on which the program is sent on."
  867.         PRINT
  868.         PRINT "This program was made on a Tandy 1000 RLX hard drive system. It had an 80286, 10"
  869.         PRINT "megahertz processor with a VGA adaptor. On an 8 megahertz machine, the"
  870.         PRINT "introduction screens may be a little slugish. A hard drive is recommended, but"
  871.         PRINT "not needed."
  872.         PRINT
  873.         PRINT "Press any key to begin..."
  874.         WaitKey
  875.     ELSEIF SGN(Dte - Lst) = 1 THEN
  876.         Blink "Zeek Welcomes You Back! The Last Time You Played This Game Was " + MID$(STR$(Dte - Lst), 2) + " Day(s) Ago. Press Any Key To Play..."
  877.     END IF
  878.         
  879. END SUB
  880.  
  881. SUB Insults
  882.     A = Fnr(NumInsults)
  883.     A$ = Insult$(A)
  884.     Blink A$
  885. END SUB
  886.  
  887. DEFSNG A-Z
  888. FUNCTION JulianDay (M AS INTEGER, D AS INTEGER, Y AS INTEGER)
  889.     DEFSNG A-Z
  890.     Z = .9999
  891.     W = INT((M - 14) / 12 + Z)
  892.     Jd = INT(1461 * (Y + 4800 + W) / 4)
  893.     B = 367 * (M - 2 - W * 12) / 12
  894.     IF B < 0 THEN B = B + Z
  895.     B = INT(B): Jd = Jd + B
  896.     B = INT(INT(3 * (Y + 4900 + W) / 100) / 4)
  897.     JulianDay = Jd + D - 32075 - B
  898. END FUNCTION
  899.  
  900. DEFINT A-Z
  901. SUB MoneyPrint (A AS LONG)
  902.     SELECT CASE A
  903.     CASE IS <= 999
  904.         PRINT USING "$###"; A;
  905.     CASE IS <= 999999
  906.         PRINT USING "$###,###"; A;
  907.     CASE ELSE
  908.         PRINT USING "$###,###,###"; A;
  909.     END SELECT
  910. END SUB
  911.  
  912. FUNCTION Month
  913.     Month = VAL(LEFT$(DATE$, 2))
  914. END FUNCTION
  915.  
  916. SUB NewAccount (Name$, User)
  917.     DIM Buffer AS Acctype
  918.     DO
  919.         DO
  920.             ReInput = False
  921.             CLS
  922.             PRINT "You must have an account before Zeek lets you play. First, Zeek must have your"
  923.             PRINT "name. This name will also be used in the high score board(so pick wisely)..."
  924.             PRINT "What's your name(14 characters or less)?"
  925.             Lne = CSRLIN
  926.             DO
  927.                 LOCATE Lne, 1
  928.                 PRINT STRING$(80, 32);
  929.                 LOCATE Lne, 1
  930.                 LINE INPUT Name$
  931.                 SELECT CASE LEN(Name$)
  932.                 CASE IS > 14
  933.                     LOCATE Lne + 1, 1
  934.                     PRINT "Dirtbag!!!! Where did you learn to count. Zeek's thugs get out the jackknife"
  935.                     PRINT "and whip off those extra characters..."
  936.                     PRINT
  937.                     PRINT "For those of you who are still asleep, that means ONLY 14 CHARACTERS OR LESS."
  938.                     PRINT "Thank You."
  939.                 CASE 0
  940.                     PRINT "Yo! Zeek wants your name!  ...or else!"
  941.                 END SELECT
  942.             LOOP WHILE Name$ = "" OR LEN(Name$) > 14
  943.             FOR A = Lne + 1 TO Lne + 5
  944.                 LOCATE A, 1: PRINT STRING$(80, 32);
  945.             NEXT
  946.             Name$ = UCASE$(Name$)
  947.             FOR A = 1 TO 128
  948.                 GET #1, A, Buffer
  949.                 IF Buffer.Used THEN
  950.                     IF Buffer.UserName = Name$ THEN
  951.                         PRINT "Zeek whips out the nine and blows your head off. Please try again(that means"
  952.                         PRINT "someone else has used that name)."
  953.                         WaitKey
  954.                         ReInput = True
  955.                         EXIT FOR
  956.                     END IF
  957.                 END IF
  958.             NEXT
  959.         LOOP WHILE ReInput
  960.         LOCATE Lne + 1, 1
  961.         PRINT "Zeek needs to know a password so nobody can rob you blind."
  962.         PRINT "What's your password(7 characters or less)?"
  963.         Lne = CSRLIN
  964.         DO
  965.             LOCATE Lne, 1
  966.             PRINT STRING$(80, 32);
  967.             LOCATE Lne, 1
  968.             LINE INPUT password$
  969.             IF password$ = "" OR LEN(password$) > 7 THEN
  970.                 PRINT "You must use at least one character and less then 8!"
  971.             END IF
  972.         LOOP WHILE password$ = "" OR LEN(password$) > 7
  973.         password$ = UCASE$(password$)
  974.         LOCATE CSRLIN + 1, 1
  975.         PRINT "Is this correct(Y/N)?"
  976.         DO
  977.             A$ = UCASE$(INPUT$(1))
  978.         LOOP UNTIL A$ = "Y" OR A$ = "N"
  979.     LOOP WHILE A$ = "N"
  980.     CLS
  981.     PRINT "Thanks! Zeeks making an account for you. You start out with $500 dollars."
  982.     PRINT "Good Luck! Your going to need it!"
  983.     SLEEP 2
  984.     IF LOF(1) = 0 THEN
  985.         Buffer.Used = False
  986.         FOR A = 1 TO 128
  987.             PUT #1, A, Buffer
  988.         NEXT
  989.         Buffer.Used = True
  990.         Buffer.UserName = Name$ + CHR$(255)
  991.         Buffer.password = password$ + CHR$(255)
  992.         Buffer.Money = 500
  993.         Buffer.Plays = 0
  994.         Buffer.LastTime = 0
  995.         PUT #1, 1, Buffer
  996.         User = 1
  997.         SLEEP 1
  998.     ELSE
  999.         FOR A = 1 TO LOF(1)
  1000.             GET #1, A, Buffer
  1001.             IF NOT Buffer.Used THEN
  1002.                 Buffer.Used = True
  1003.                 Buffer.UserName = Name$ + CHR$(255)
  1004.                 Buffer.password = password$ + CHR$(255)
  1005.                 Buffer.Money = 500
  1006.                 Buffer.Plays = 0
  1007.                 Buffer.LastTime = 0
  1008.                 PUT #1, A, Buffer
  1009.                 EXIT FOR
  1010.             END IF
  1011.         NEXT
  1012.         User = A
  1013.     END IF
  1014. END SUB
  1015.  
  1016. SUB PlaceBet
  1017.     DIM Min AS LONG
  1018.     SwitchScreen 12
  1019.     CLS
  1020.     Text "BETTING TABLE", "BM180,70S12C12TA5"
  1021.     LOCATE 12, 20
  1022.     PRINT "All right Ray. How much do you want to bet?"
  1023.     LOCATE 13, 20
  1024.     PRINT "You have ";
  1025.     MoneyPrint Money: PRINT " dollars."
  1026.     Min = INT(Money * .05)
  1027.     LOCATE 14, 20
  1028.     PRINT "The minimum bet is ";
  1029.     MoneyPrint Min: PRINT " dollars."
  1030.     DO
  1031.         LOCATE 15, 20
  1032.         DO
  1033.             A$ = INKEY$
  1034.         LOOP UNTIL A$ = ""
  1035.         LINE INPUT "> "; Bt$
  1036.         bet = VAL(Bt$)
  1037.         IF bet < Min OR bet = 0 OR bet < 0 OR bet > Money THEN
  1038.             PALETTE 4, 0
  1039.             IF bet = 0 THEN
  1040.                 Text "SORRY RAY YOU HAVE TO BET", "S12ta5bm60,300c4"
  1041.             ELSEIF bet > Money THEN
  1042.                 Text "YOU DONT HAVE THAT MUCH IDIOT", "S12TA5BM20,310C4"
  1043.             ELSEIF bet < 0 THEN
  1044.                 Text "ZEEK DOES NOT ALLOW THOSE KIND OF BETS", "S8TA5BM40,310C4"
  1045.             ELSEIF bet < Min THEN
  1046.                 Text "THERES A MINIMUM SCUMBAG", "S12ta5bm100,310c4"
  1047.             END IF
  1048.             B = 63
  1049.             DO
  1050.                 A = (A + 1) MOD 15
  1051.                 IF A = 14 THEN
  1052.                     B = B - 1: IF B < 0 THEN B = 63
  1053.                     PALETTE 4, 65536 * INT(B)
  1054.                 END IF
  1055.             LOOP UNTIL INKEY$ <> ""
  1056.             LINE (0, 320)-(639, 225), 0, BF
  1057.         END IF
  1058.         IF bet = Money THEN
  1059.             CLS
  1060.             LOCATE 5, 30: PRINT "Betting the farm, huh?"
  1061.             LOCATE 7, 30: PRINT "Zeek likes that..."
  1062.             WaitKey
  1063.         END IF
  1064.     LOOP UNTIL bet >= Min AND bet <= Money
  1065.     SwitchScreen 8
  1066. END SUB
  1067.  
  1068. SUB ShowHigh
  1069.     DIM BufferA AS HighType
  1070.     SwitchScreen 12
  1071.     PALETTE 15, 50
  1072.     Text "THE GOOD PLAYERS", "Bm80,50s16c14"
  1073.     Text "NAME                MONEY         PLAYS", "Bm55,100s8c15"
  1074.     LINE (55, 105)-(605, 105), 15
  1075.     PALETTE 11, 63
  1076.     FOR A = 1 TO 10
  1077.         PALETTE A, 63 - A * 3
  1078.     NEXT
  1079.     OPEN "ZEEKHIGH.DAT" FOR RANDOM AS #1 LEN = 22
  1080.     IF LOF(1) = 0 THEN
  1081.         BufferA.UserName = "Ray" + CHR$(255)
  1082.         FOR A = 2 TO 10
  1083.             BufferA.Plays = INT(RND(1) * 60)
  1084.             BufferA.Money = (11 - A) * 800
  1085.             PUT #1, A, BufferA
  1086.         NEXT
  1087.         BufferA.UserName = "Zeek" + CHR$(255)
  1088.         BufferA.Money = 15000
  1089.         BufferA.Plays = 1
  1090.         PUT #1, 1, BufferA
  1091.     END IF
  1092.     FOR A = 1 TO 10
  1093.         COLOR A
  1094.         LOCATE A * 2 + 7, 2
  1095.         PRINT USING "##."; A
  1096.         GET #1, A, BufferA
  1097.         IF A = 1 THEN
  1098.             Text Strip$(UCASE$(BufferA.UserName)), "Bm35," + STR$(16 * (A * 2 + 7) - 5) + "s8c11"
  1099.         ELSE
  1100.             Text Strip$(UCASE$(BufferA.UserName)), "Bm35," + STR$(16 * (A * 2 + 7) - 5) + "s8c" + STR$(A)
  1101.         END IF
  1102.         LOCATE A * 2 + 7, 43: PRINT USING "$###,###"; BufferA.Money
  1103.         LOCATE A * 2 + 7, 70: PRINT USING "#,###"; BufferA.Plays
  1104.     NEXT
  1105.     CLOSE
  1106.     COLOR 14
  1107.     LOCATE 30, 26: PRINT "Press any key to continue...";
  1108.     Shade = 63: A = 0: Direction = -1
  1109.     DO
  1110.         A = (A + 1) MOD 20
  1111.         IF A = 19 THEN
  1112.             PALETTE 11, Shade
  1113.             Shade = Shade + Direction
  1114.             IF Shade < 0 OR Shade > 63 THEN Direction = -Direction: Shade = Shade + Direction
  1115.         END IF
  1116.     LOOP UNTIL INKEY$ <> ""
  1117.     CLS
  1118.     COLOR 15
  1119.     PALETTE
  1120. END SUB
  1121.  
  1122. SUB Shuffle
  1123.     RANDOMIZE TIMER
  1124.     SCREEN 8, , 1, 0
  1125.     CLS
  1126.     LINE (105, 70)-(505, 105), 7, BF
  1127.     LINE (100, 65)-(500, 100), 1, BF
  1128.  
  1129.     Text "PLEASE WAIT WHILE ZEEK SHUFFLES THE DECK", "C14bm155,85s4"
  1130.     SCREEN 8, , 1, 1
  1131.     A = 1
  1132.     FOR Num = 1 TO 13
  1133.         FOR Suit = 1 TO 4
  1134.             card(A).Number = Num
  1135.             card(A).Suit = Suit
  1136.             card(A).up = True
  1137.             A = A + 1
  1138.         NEXT
  1139.     NEXT
  1140.     FOR A = 1 TO 52 * (Fnr(80) + 15)
  1141.         DO
  1142.             B = Fnr(52)
  1143.             B1 = Fnr(52)
  1144.         LOOP UNTIL B <> B1
  1145.         SWAP card(B).Number, card(B1).Number
  1146.         SWAP card(B).Suit, card(B1).Suit
  1147.     NEXT
  1148.     NextCard = 52
  1149.     SCREEN 8, , 0, 0
  1150.     Last = 8
  1151. END SUB
  1152.  
  1153. FUNCTION Strip$ (A$)
  1154.     Strip$ = LEFT$(A$, INSTR(A$, CHR$(255)) - 1)
  1155. END FUNCTION
  1156.  
  1157. SUB SwitchScreen (Scrn)
  1158.     IF Last <> Scrn THEN
  1159.         SCREEN Scrn, , 0, 0
  1160.     ELSE
  1161.         CLS
  1162.     END IF
  1163.     Last = Scrn
  1164. END SUB
  1165.  
  1166. SUB Text (A$, B$)
  1167.     DRAW B$
  1168.     FOR A = 1 TO LEN(A$)
  1169.         DRAW Characters$(ASC(MID$(A$, A, 1)))
  1170.     NEXT
  1171. END SUB
  1172.  
  1173. SUB Title
  1174.     Last = 8
  1175.     DO
  1176.         Zeeks
  1177.         Ikey$ = UCASE$(Ikey$)
  1178.         IF Ikey$ <> "" THEN
  1179.             IF Ikey$ = "H" THEN ShowHigh
  1180.             EXIT SUB
  1181.         END IF
  1182.         BlackJack
  1183.         Ikey$ = UCASE$(Ikey$)
  1184.         IF Ikey$ <> "" THEN
  1185.             IF Ikey$ = "H" THEN ShowHigh
  1186.             EXIT SUB
  1187.         END IF
  1188.         Credits
  1189.         Ikey$ = UCASE$(Ikey$)
  1190.         IF Ikey$ <> "" THEN
  1191.             IF Ikey$ = "H" THEN ShowHigh
  1192.             EXIT SUB
  1193.         END IF
  1194.     LOOP
  1195. END SUB
  1196.  
  1197. SUB UdCom
  1198.     ComScore = 0
  1199.     FOR A = 0 TO ComCard - 1
  1200.         N = Computer(A).Number
  1201.         IF N <> 1 THEN
  1202.             IF N > 1 AND N < 11 THEN
  1203.                 ComScore = ComScore + N
  1204.             ELSE
  1205.                 ComScore = ComScore + 10
  1206.             END IF
  1207.         END IF
  1208.     NEXT
  1209.     NumAces = 0
  1210.     FOR A = 0 TO ComCard - 1
  1211.         N = Computer(A).Number
  1212.         IF N = 1 THEN
  1213.             NumAces = NumAces + 1
  1214.         END IF
  1215.     NEXT
  1216.     FOR A = 1 TO NumAces
  1217.         IF ComScore + 11 <= (22 - NumAces) THEN
  1218.             ComScore = ComScore + 11
  1219.         ELSE
  1220.             ComScore = ComScore + 1
  1221.         END IF
  1222.     NEXT
  1223. END SUB
  1224.  
  1225. SUB UdPlayer
  1226.     PlayScore = 0
  1227.     FOR A = 0 TO PlayCard - 1
  1228.         N = Player(A).Number
  1229.         IF N <> 1 THEN
  1230.             IF N > 1 AND N < 11 THEN
  1231.                 PlayScore = PlayScore + N
  1232.             ELSE
  1233.                 PlayScore = PlayScore + 10
  1234.             END IF
  1235.         END IF
  1236.     NEXT
  1237.     NumAces = 0
  1238.     FOR A = 0 TO PlayCard - 1
  1239.         N = Player(A).Number
  1240.         IF N = 1 THEN
  1241.             NumAces = NumAces + 1
  1242.         END IF
  1243.     NEXT
  1244.     FOR A = 1 TO NumAces
  1245.         IF PlayScore + 11 <= (22 - NumAces) THEN
  1246.             PlayScore = PlayScore + 11
  1247.         ELSE
  1248.             PlayScore = PlayScore + 1
  1249.         END IF
  1250.     NEXT
  1251.     LOCATE 18, 60
  1252.     PRINT "Score:"; PlayScore
  1253. END SUB
  1254.  
  1255. SUB WaitKey
  1256.     DO
  1257.     LOOP UNTIL INKEY$ = ""
  1258.     DO
  1259.         A$ = INKEY$
  1260.     LOOP UNTIL A$ <> ""
  1261. END SUB
  1262.  
  1263. SUB Warning
  1264.     DIM Start AS SINGLE, X(4000) AS INTEGER, Y(4000) AS INTEGER
  1265.     DIM Buffer(17100) AS INTEGER
  1266.     CLS
  1267.     SwitchScreen 8
  1268.     FOR A = 0 TO 15: PALETTE A, 0: NEXT
  1269.     DEF SEG = VARSEG(Buffer(0))
  1270.     BLOAD "Warning.grf", VARPTR(Buffer(0))
  1271.     PUT (5, 35), Buffer
  1272.     DO
  1273.         Start = TIMER
  1274.         PALETTE 7, 0
  1275.         PALETTE 4, 0
  1276.         DO
  1277.         LOOP UNTIL TIMER - Start > .25
  1278.         PALETTE 7, 7
  1279.         PALETTE 4, 4
  1280.         Start = TIMER
  1281.         DO
  1282.         LOOP UNTIL TIMER - Start > .25
  1283.         A$ = INKEY$
  1284.     LOOP WHILE A$ = ""
  1285.     PALETTE 7, 0: PALETTE 14, 0
  1286.     Sc = 12: SwitchScreen 12
  1287.     LOCATE 15, 6
  1288.     PRINT "This program contains material which may be offensive to some users."
  1289.     LOCATE 17, 30
  1290.     PRINT "Thank You Very Much."
  1291.     PRINT
  1292.     PRINT TAB(35); "Zeek & Ray"
  1293.     WaitKey
  1294.     SCREEN 12
  1295. END SUB
  1296.  
  1297. SUB Wins
  1298.     A = Fnr(NumWin)
  1299.     A$ = Win$(A)
  1300.     Blink A$
  1301. END SUB
  1302.  
  1303. FUNCTION Year
  1304.     Year = VAL(RIGHT$(DATE$, 4))
  1305. END FUNCTION
  1306.  
  1307. SUB Zeeks
  1308. RANDOMIZE TIMER
  1309. 'Dynamic$
  1310. REDIM Px(359, 7) AS INTEGER
  1311. REDIM Py(359, 7) AS INTEGER
  1312. REDIM Px1(359, 7) AS INTEGER
  1313. REDIM Py1(359, 7) AS INTEGER
  1314.  
  1315.  
  1316. REDIM Zx(144, 29) AS INTEGER
  1317. REDIM Zy(144, 29) AS INTEGER
  1318. REDIM Zx1(144, 29) AS INTEGER
  1319. REDIM Zy1(144, 29) AS INTEGER
  1320.  
  1321.  
  1322.  
  1323.  
  1324. REDIM Sx(79) AS INTEGER, Sy(79) AS INTEGER
  1325.  
  1326. REDIM Ex(160) AS INTEGER, Ey(160) AS INTEGER
  1327.  
  1328. REDIM Exr(160) AS INTEGER, Eyr(160) AS INTEGER
  1329.  
  1330.  
  1331. REDIM Tx(140) AS SINGLE, Ty(140) AS SINGLE
  1332.  
  1333.  
  1334.  
  1335.  
  1336. SCREEN 7, , 1, 0
  1337. PCOPY 0, 2
  1338. AfterUpdate = False
  1339. ON TIMER(1) GOSUB KeepBusy
  1340. TIMER ON
  1341.  
  1342. DEF SEG = VARSEG(Px(0, 0))
  1343. BLOAD "PXs", VARPTR(Px(0, 0))
  1344.  
  1345. DEF SEG = VARSEG(Px1(0, 0))
  1346. BLOAD "PXe", VARPTR(Px1(0, 0))
  1347.  
  1348. DEF SEG = VARSEG(Py(0, 0))
  1349. BLOAD "PYS", VARPTR(Py(0, 0))
  1350.  
  1351. DEF SEG = VARSEG(Py1(0, 0))
  1352. BLOAD "PYE", VARPTR(Py1(0, 0))
  1353.  
  1354.  
  1355. DEF SEG = VARSEG(Zx(0, 0))
  1356. BLOAD "ZXs", VARPTR(Zx(0, 0))
  1357.  
  1358. DEF SEG = VARSEG(Zy(0, 0))
  1359. BLOAD "ZYs", VARPTR(Zy(0, 0))
  1360.  
  1361. DEF SEG = VARSEG(Zx1(0, 0))
  1362. BLOAD "ZXe", VARPTR(Zx1(0, 0))
  1363.  
  1364. DEF SEG = VARSEG(Zy1(0, 0))
  1365. BLOAD "Zye", VARPTR(Zy1(0, 0))
  1366.  
  1367.  
  1368.  
  1369. '**
  1370.  
  1371.  
  1372. FOR T = 0 TO 79
  1373.     Sx(T) = INT(RND(1) * 319 + 1)
  1374.     Sy(T) = INT(RND(1) * 199 + 1)
  1375. NEXT
  1376. FOR A = 0 TO 160
  1377.     Ex(A) = 160
  1378.     Ey(A) = 100
  1379.     IF RND(1) > .5 THEN Exr(A) = -INT(RND(1) * 12 + 1) ELSE Exr(A) = INT(RND(1) * 12 + 1)
  1380.     IF RND(1) > .5 THEN Eyr(A) = -INT(RND(1) * 12 + 1) ELSE Eyr(A) = INT(RND(1) * 12 + 1)
  1381. NEXT
  1382. FOR B = 1 TO 140
  1383.     Tx(B) = RND(1) * 1.6
  1384.     Ty(B) = RND(1)
  1385. NEXT
  1386.  
  1387. IF AfterUpdate THEN
  1388.     PCOPY 2, 0
  1389. ELSE
  1390.     TIMER OFF
  1391. END IF
  1392.  
  1393.  
  1394. SCREEN 7, , 2, 0
  1395. CLS
  1396. LOCATE 24, 1
  1397. COLOR 15
  1398. LOCATE 24, 3
  1399. PRINT "Press The H Key To See High Scores";
  1400. LOCATE 25, 3
  1401. PRINT "Or Any Other Key To Play The Game.";
  1402.  
  1403. SCREEN 7, , 1, 0
  1404. CLS
  1405. D1 = -4: D2 = -3: D3 = -2: D4 = -1
  1406. E1 = 0: E2 = 0: E3 = 0: E4 = 0
  1407. DO
  1408.     A$ = INKEY$
  1409. LOOP WHILE A$ <> ""
  1410.  
  1411. ON TIMER(1) GOSUB Interrupt
  1412. TIMER ON
  1413. A = 365
  1414. Am = -1
  1415. DO
  1416.     PCOPY 1, 0: PCOPY 2, 1
  1417.  
  1418.     IF A = 180 THEN
  1419.         D4 = 4: E4 = 5
  1420.         D3 = 3: E3 = 4
  1421.         D2 = 2: E2 = 2
  1422.         D1 = 1: E1 = 1
  1423.     END IF
  1424.     A = A + Am
  1425.     IF A < 360 THEN
  1426.         FOR B = 0 TO 7
  1427.             LINE (Px(A, B), Py(A, B))-(Px1(A, B), Py1(A, B)), 14
  1428.         NEXT
  1429.     END IF
  1430.     FOR B = 1 TO 19
  1431.         PSET (Sx(B), Sy(B))
  1432.         Sx(B) = (Sx(B) + D1) MOD 320: IF Sx(B) < 0 THEN Sx(B) = 319
  1433.         Sy(B) = (Sy(B) - E1) MOD 199: IF Sy(B) < 0 THEN Sy(B) = 199
  1434.     NEXT
  1435.     FOR B = 20 TO 29
  1436.         PSET (Sx(B), Sy(B))
  1437.         Sx(B) = (Sx(B) + D2) MOD 320: IF Sx(B) < 0 THEN Sx(B) = 319
  1438.         Sy(B) = (Sy(B) - E2) MOD 199: IF Sy(B) < 0 THEN Sy(B) = 199
  1439.     NEXT
  1440.     FOR B = 30 TO 49
  1441.         PSET (Sx(B), Sy(B))
  1442.         Sx(B) = (Sx(B) + D3) MOD 320: IF Sx(B) < 0 THEN Sx(B) = 319
  1443.         Sy(B) = (Sy(B) - E3) MOD 199: IF Sy(B) < 0 THEN Sy(B) = 199
  1444.     NEXT
  1445.     FOR B = 50 TO 79
  1446.         PSET (Sx(B), Sy(B))
  1447.         Sx(B) = (Sx(B) + D4) MOD 320: IF Sx(B) < 0 THEN Sx(B) = 319
  1448.         Sy(B) = (Sy(B) - E4) MOD 199: IF Sy(B) < 0 THEN Sy(B) = 199
  1449.     NEXT
  1450. LOOP UNTIL A = 0 OR IRQ
  1451. IF IRQ THEN TIMER OFF: EXIT SUB
  1452.  
  1453. ERASE Sx, Sy, Px, Py, Px1, Py1
  1454.  
  1455.  
  1456. REDIM Rx(2940) AS INTEGER, Ry(2940) AS INTEGER
  1457.  
  1458. FOR A = 0 TO 800 STEP 40
  1459.     Ar = A * .5
  1460.     Ar1 = A * .5 * 1.6
  1461.     FOR B = 1 TO 140
  1462.         Rx(C) = 160 + (Tx(B) * A - Ar1)
  1463.         Ry(C) = 100 + (Ty(B) * A - Ar)
  1464.         C = C + 1
  1465.     NEXT
  1466. NEXT
  1467. ERASE Tx, Ty
  1468.  
  1469. PCOPY 0, 2
  1470.  
  1471. Rev = 0
  1472. C = 0
  1473. FOR A = 200 TO 0 STEP -10
  1474.     PCOPY 2, 1
  1475.     FOR B = 1 TO 140
  1476.         LINE (160, 100)-(Rx(C), Ry(C)), 6: C = C + 1
  1477.     NEXT
  1478.     FOR B = 0 TO 29
  1479.         LINE (Zx(Rev, B), Zy(Rev, B))-(Zx1(Rev, B), Zy1(Rev, B)), 14
  1480.     NEXT: Rev = Rev + 1
  1481.     PCOPY 1, 0
  1482.     IF IRQ THEN TIMER OFF: EXIT SUB
  1483. NEXT
  1484. FOR A = 200 TO 0 STEP -10
  1485.     PCOPY 2, 1
  1486.     FOR B = 1 TO 140
  1487.         C = C - 1: LINE (160, 100)-(Rx(C), Ry(C)), 6
  1488.     NEXT
  1489.     FOR B = 0 TO 29
  1490.         LINE (Zx(Rev, B), Zy(Rev, B))-(Zx1(Rev, B), Zy1(Rev, B)), 14
  1491.     NEXT: Rev = Rev + 1
  1492.     PCOPY 1, 0
  1493.     IF IRQ THEN TIMER OFF: EXIT SUB
  1494. NEXT
  1495.  
  1496. SCREEN 7, , 2, 2
  1497. LINE (160 - 3, 100 - 3)-(160 + 3, 100 + 3), 0, BF
  1498. SCREEN 7, , 1, 0
  1499. FOR B = 1 TO 160
  1500.     PCOPY 1, 0: PCOPY 2, 1
  1501.     IF B < 10 THEN CIRCLE (160, 100), 10 - B, 6: PAINT (160, 100), 6, 6
  1502.     FOR A = 0 TO 30
  1503.         PSET (Ex(A), Ey(A)), 14
  1504.         Ex(A) = Ex(A) + Exr(A)
  1505.         Ey(A) = Ey(A) + Eyr(A)
  1506.     NEXT
  1507.     FOR A = 0 TO 29
  1508.         LINE (Zx(Rev, A), Zy(Rev, A))-(Zx1(Rev, A), Zy1(Rev, A)), 14
  1509.     NEXT: Rev = Rev + 1: IF Rev > 144 THEN Rev = 144
  1510.    
  1511.   
  1512.   
  1513.     IF B > 20 AND B < 41 THEN
  1514.         FOR A = 31 TO 50
  1515.             PSET (Ex(A), Ey(A)), 14
  1516.             Ex(A) = Ex(A) + Exr(A)
  1517.             Ey(A) = Ey(A) + Eyr(A)
  1518.         NEXT
  1519.     END IF
  1520.     IF B > 30 AND B < 60 THEN
  1521.         FOR A = 51 TO 70
  1522.             PSET (Ex(A), Ey(A)), 14
  1523.             Ex(A) = Ex(A) + Exr(A)
  1524.             Ey(A) = Ey(A) + Eyr(A)
  1525.         NEXT
  1526.     END IF
  1527.     IF B > 40 THEN
  1528.         FOR A = 141 TO 160
  1529.             PSET (Ex(A), Ey(A)), 14
  1530.             Ex(A) = Ex(A) + Exr(A)
  1531.             Ey(A) = Ey(A) + Eyr(A)
  1532.         NEXT
  1533.     END IF
  1534.     IF B > 90 THEN
  1535.         FOR A = 71 TO 140
  1536.             PSET (Ex(A), Ey(A)), 14
  1537.             Ex(A) = Ex(A) + Exr(A)
  1538.             Ey(A) = Ey(A) + Eyr(A)
  1539.         NEXT
  1540.     END IF
  1541.     IF IRQ THEN TIMER OFF: EXIT SUB
  1542.  
  1543. NEXT
  1544.  
  1545. ERASE Ex, Ey, Zx, Zy, Zx1, Zy1
  1546.  
  1547. REDIM Fx(300, 30) AS INTEGER
  1548. REDIM Fy(300, 30) AS INTEGER
  1549. REDIM Fx1(300, 30) AS INTEGER
  1550. REDIM Fy1(300, 30) AS INTEGER
  1551. DEF SEG = VARSEG(Fx(0, 0))
  1552.  
  1553. BLOAD "RXs", VARPTR(Fx(0, 0))
  1554.  
  1555. DEF SEG = VARSEG(Fy(0, 0))
  1556. BLOAD "RYs", VARPTR(Fy(0, 0))
  1557.  
  1558. DEF SEG = VARSEG(Fx1(0, 0))
  1559. BLOAD "RXe", VARPTR(Fx1(0, 0))
  1560.  
  1561. DEF SEG = VARSEG(Fy1(0, 0))
  1562. BLOAD "Rye", VARPTR(Fy1(0, 0))
  1563.  
  1564. FOR Rev = 0 TO 300
  1565.     PCOPY 2, 1
  1566.     FOR A = 0 TO 29
  1567.         LINE (Fx(Rev, A), Fy(Rev, A))-(Fx1(Rev, A), Fy1(Rev, A)), 14
  1568.     NEXT
  1569.     PCOPY 1, 0
  1570.     IF IRQ THEN TIMER OFF: EXIT SUB
  1571. NEXT
  1572. FOR A = 0 TO 29
  1573.     LINE (Fx(300, A), Fy(300, A))-(Fx1(300, A), Fy1(300, A)), 0
  1574. NEXT
  1575. PCOPY 1, 0
  1576. TIMER OFF
  1577. END SUB
  1578.  
  1579.