' Stuart MacGillivray ' Mr. Fraser - Period 2 ' May, 2002 ' Blackjack - Term Project MAINMODULE: GOSUB SPLASHSCREEN GOSUB GENERALSETUP DO WHILE CASH > 0 AND CASH < 10000 GOSUB DECLAREBET IF BET = 0 THEN EXIT DO GOSUB DECLARECARDS GOSUB MAINGAME GOSUB VICTORY LOOP GOSUB FINALE END SPLASHSCREEN: CLS LOCATE 7, 1 PRINT " *21*21*21*21*21*21*21*21*21*21*21*21*21*21*21*21*21*" PRINT " 2 2" PRINT " 1 Stuart MacGillivray's 1" PRINT " * BBB L AA CCC K K J AA CCC K K *" PRINT " 2 B B L A A C K K J A A C K K 2" PRINT " 1 BBB L AAAA C KK J AAAA C KK 1" PRINT " * B B L A A C K K J J A A C K K *" PRINT " 2 BBB LLLL A A CCC K K JJ A A CCC K K 2" PRINT " 1 1" PRINT " *21*21*21*21*21*21*21*21*21*21*21*21*21*21*21*21*21*" IF MUSIC = 1 THEN PLAY "L 4 >D E C G2" END IF DO UNTIL TEST$ <> "" TEST$ = INKEY$ LOOP RETURN GENERALSETUP: RANDOMIZE TIMER CLS DIM CARDREF(13, 4) DIM CARDGONE(13, 4) DIM DECK(52, 2) DIM TOTAL(2) CASH = 1000 RETURN DECLAREBET: CLS PRINT "You have"; CASH; "dollars left. Bet 0 to quit." INPUT "How much do you wish to bet"; BET RETURN DECLARECARDS: FOR A = 1 TO 13 FOR B = 1 TO 4 CARDGONE(A, B) = 0 NEXT NEXT FOR C = 1 TO 52 DO FLAG = 0 SUIT = INT(RND * 4) + 1 VALUE = INT(RND * 13) + 1 IF CARDGONE(VALUE, SUIT) = 0 THEN CARDGONE(VALUE, SUIT) = 1 DECK(C, 1) = VALUE DECK(C, 2) = SUIT ELSE FLAG = 1 END IF LOOP UNTIL FLAG = 0 NEXT C RETURN MAINGAME: Y = 4: GOSUB DISPLAY: GOSUB SUMUP VICTORY = 0: BJ = 0: Q = 0: TEST$ = "" DO WHILE VICTORY = 0 GOSUB RESOLVECHOICE GOSUB DISPLAY GOSUB SUMUP LOOP RETURN RESOLVECHOICE: DO FLAG = 0 LOCATE 12, 1 INPUT "(H)it or (S)tand"; CHOICE$ IF LEFT$(UCASE$(CHOICE$), 1) = "H" THEN Y = Y + 1 GOSUB COMPCHOICE ELSEIF LEFT$(UCASE$(CHOICE$), 1) = "S" THEN GOSUB SUMUP IF TOTAL(2) > TOTAL(1) THEN VICTORY = 2 IF TOTAL(1) > TOTAL(2) THEN VICTORY = 1 IF TOTAL(1) = TOTAL(2) THEN VICTORY = 3 ELSE FLAG = 1 END IF LOOP UNTIL FLAG = 0 RETURN COMPCHOICE: GOSUB SUMUP LUCK = 21 - TOTAL(2) IF VICTORY = 2 THEN LUCK = 0 WHIM = RND * 10 IF WHIM < LUCK THEN Y = Y + 1 ELSE GOSUB SUMUP IF TOTAL(2) > TOTAL(1) THEN VICTORY = 2 IF TOTAL(1) > TOTAL(2) THEN VICTORY = 1 IF TOTAL(1) = TOTAL(2) THEN VICTORY = 3 END IF RETURN SUMUP: FOR Z = 1 TO 2 TOTAL(Z) = 0 ACE = 0 FOR X = Z TO Y STEP 2 SELECT CASE DECK(X, 1) CASE IS > 10 TOTAL(Z) = TOTAL(Z) + 10 CASE IS < 11 TOTAL(Z) = TOTAL(Z) + DECK(X, 1) END SELECT IF DECK(X, 1) = 1 THEN ACE = ACE + 1 NEXT FOR C = 1 TO ACE IF TOTAL(Z) < 12 THEN TOTAL(Z) = TOTAL(Z) + 10 NEXT C IF Z = 1 THEN LOCATE 10, 12: PRINT TOTAL(Z) IF TOTAL(Z) > 21 THEN VICTORY = 3 - Z IF TOTAL(Z) = 21 THEN Q = Z NEXT IF Q <> 0 THEN IF SCORE(3 - Q) = 21 THEN VICTORY = 3 ELSE VICTORY = Q END IF BJ = 1 END IF RETURN DISPLAY: GOSUB BASESCREEN LOCATE 4, 24 X = 2 GOSUB SHOWCARDX FOR X = 1 TO Y STEP 2 LOCATE 8, (4.5 * X + 1.5) GOSUB SHOWCARDX NEXT RETURN BASESCREEN: CLS PRINT "/------------------------------------------------\" PRINT "| Dealer |" PRINT "| ÚÄÄÄÄ¿ ÚÄÄÄÄ¿ ÚÄÄÄÄ¿ ÚÄÄÄÄ¿ ÚÄÄÄÄ¿ |" PRINT "| ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ |" PRINT "| ÀÄÄÄÄÙ ÀÄÄÄÄÙ ÀÄÄÄÄÙ ÀÄÄÄÄÙ ÀÄÄÄÄÙ |" PRINT "| You |" PRINT "| ÚÄÄÄÄ¿ ÚÄÄÄÄ¿ ÚÄÄÄÄ¿ ÚÄÄÄÄ¿ ÚÄÄÄÄ¿ |" PRINT "| ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ |" PRINT "| ÀÄÄÄÄÙ ÀÄÄÄÄÙ ÀÄÄÄÄÙ ÀÄÄÄÄÙ ÀÄÄÄÄÙ |" PRINT "| Score: |" PRINT "\------------------------------------------------/" RETURN SHOWCARDX: PRINT CHR$(DECK(X, 2) + 2); SELECT CASE DECK(X, 1) CASE 1 PRINT " A" CASE 10 PRINT " 10" CASE 11 PRINT " J" CASE 12 PRINT " Q" CASE 13 PRINT " K" CASE IS < 10 IF DECK(X, 1) <> 1 THEN PRINT DECK(X, 1) END SELECT RETURN DISPLAY2: GOSUB BASESCREEN FOR X = 2 TO Y STEP 2 LOCATE 4, (4.5 * X - 3) GOSUB SHOWCARDX NEXT FOR X = 1 TO Y STEP 2 LOCATE 8, (4.5 * X + 1.5) GOSUB SHOWCARDX NEXT LOCATE 10, 12 PRINT TOTAL(1), "Their total:"; TOTAL(2) RETURN VICTORY: GOSUB DISPLAY2 LOCATE 12, 1 SELECT CASE VICTORY CASE 3 PRINT "Tie game. Yawn." CASH = CASH CASE 2 PRINT "Dealer got your money." CASH = CASH - BET CASE 1 PRINT "Huzzah!" CASH = CASH + BET END SELECT CASH = INT(CASH * 100) / 100 IF BJ = 1 THEN LOCATE 1, 20: PRINT "BLACKJACK!!!" LOCATE 15, 5 PRINT "Press any key to continue." DO UNTIL TEST$ <> "" TEST$ = INKEY$ LOOP RETURN FINALE: CLS IF CASH >= 0 THEN PRINT "You leave the casino,"; CASH; "dollars in your pocket." ELSE PRINT "The dealer glares at you venomously, and whistles for the" PRINT "guards, who haul you off to the spice mines of Kessel." PRINT "This is what happens when you bet cash you don't have." END IF IF CASH > 10000 THEN PRINT "Well done! The casino's bankrupt!" IF CASH = 0 THEN PRINT "Time to find another welfare check." RETURN