TYPE CARD suit AS INTEGER value AS INTEGER END TYPE DECLARE SUB BORDER () DECLARE SUB FILLDECK () DECLARE SUB SHUFFLE () DECLARE SUB LINE1 (carte AS CARD) DECLARE SUB LINE2 (carte AS CARD) DECLARE SUB LINE3 (carte AS CARD) DECLARE SUB LINE4 (carte AS CARD) DECLARE SUB LINE5 (carte AS CARD) DECLARE SUB LINE6 (carte AS CARD) DECLARE SUB LINE7 (carte AS CARD) DECLARE SUB PUTCARD (carte AS CARD, x AS INTEGER, y AS INTEGER) DECLARE SUB SHOWMSG (msg AS STRING, cursor AS INTEGER) DECLARE SUB SHOWSTATUS (status AS STRING) DECLARE SUB RESETPTS () DECLARE SUB CALCPTS () DECLARE SUB CALCSPLITPTS () DECLARE SUB RESHUFFLE () DECLARE SUB SHOWSCORE () DECLARE SUB CLRVIEW () REM ² IS 178 CONST COVER = 178 CONST BLANK = 0 CONST HEARTS = 3 CONST DIAMONDS = 4 CONST CLUBS = 5 CONST SPADES = 6 CONST JACK = 11 CONST QUEEN = 12 CONST KING = 13 CONST COLORSCREEN = "1" CONST MONOCHROME = "2" CONST LCD = "3" DIM SHARED displaytype AS STRING DIM SHARED BLUE AS INTEGER DIM SHARED BLACK AS INTEGER DIM SHARED WHITE AS INTEGER DIM SHARED HIRED AS INTEGER DIM SHARED YELLOW AS INTEGER DIM SHARED HIWHITE AS INTEGER DIM SHARED BLINKGREEN AS INTEGER DIM SHARED BLINKRED AS INTEGER DIM SHARED BLINKYELLOW AS INTEGER DIM SHARED BLINKWHITE AS INTEGER DIM SHARED deck(1 TO 52) AS CARD DIM SHARED dealer(1 TO 6) AS CARD, player(1 TO 6) AS CARD DIM SHARED dealerpts AS INTEGER, playerpts AS INTEGER DIM SHARED split1pts AS INTEGER, split2pts AS INTEGER DIM SHARED score AS LONG DIM SHARED hideflag AS INTEGER DIM SHARED splitflag AS INTEGER DIM SHARED playerdealt AS INTEGER, dealerdealt AS INTEGER DIM SHARED cardsdealt AS INTEGER DIM SHARED COVERSTR AS STRING COVERSTR = STRING$(11, COVER) DIM SHARED face AS STRING DIM cursorxdealer AS INTEGER, cursorydealer AS INTEGER DIM cursorxplayer AS INTEGER, cursoryplayer AS INTEGER DIM insuranceflag AS INTEGER DIM doubledownflag AS INTEGER DIM blackjackflag AS INTEGER DIM bonusflag AS INTEGER DIM answer AS STRING DIM blankcard AS CARD KEY 15, CHR$(0) + CHR$(1) KEY 16, CHR$(32) + CHR$(1) KEY 17, CHR$(64) + CHR$(1) KEY 18, CHR$(96) + CHR$(1) KEY(15) ON KEY(16) ON KEY(17) ON KEY(18) ON ON KEY(15) GOSUB ESCAPE ON KEY(16) GOSUB ESCAPE ON KEY(17) GOSUB ESCAPE ON KEY(18) GOSUB ESCAPE ON ERROR GOTO ESCAPE CLS BORDER LOCATE 11, 29, 0 PRINT "SELECT A DISPLAY TYPE:"; LOCATE 13, 29, 0 PRINT "1) COLOR SCREEN" LOCATE 14, 29, 0 PRINT "2) MONOCHROME" LOCATE 15, 29, 0 PRINT "3) LCD" LOCATE 11, 52, 1 DO displaytype = INKEY$ LOOP UNTIL displaytype = "1" OR displaytype = "2" OR displaytype = "3" SELECT CASE displaytype CASE COLORSCREEN BLUE = 1 BLACK = 0 WHITE = 7 HIRED = 12 YELLOW = 14 HIWHITE = 15 BLINKGREEN = 26 BLINKRED = 28 BLINKYELLOW = 30 BLINKWHITE = 31 CASE MONOCHROME BLUE = 2 BLACK = 8 WHITE = 7 HIRED = 8 YELLOW = 8 HIWHITE = 8 BLINKGREEN = 18 BLINKRED = 18 BLINKYELLOW = 18 BLINKWHITE = 18 CASE LCD BLUE = 1 BLACK = 2 WHITE = 0 HIRED = 2 YELLOW = 2 HIWHITE = 2 BLINKGREEN = 18 BLINKRED = 18 BLINKYELLOW = 18 BLINKWHITE = 18 CASE ELSE END SELECT cardsdealt = 0 score = 500 blankcard.value = BLANK blankcard.suit = BLANK SCREEN 0, 0 COLOR HIWHITE, BLUE CLS BORDER FILLDECK SHOWSCORE SHUFFLE SHOWMSG "DEAL / QUIT (D/Q)? ", 1 DO answer = UCASE$(INKEY$) LOOP UNTIL answer = "D" OR answer = "Q" WHILE answer = "D" AND score >= 20 dealerpts = 0 playerpts = 0 slit1pts = 0 split2pts = 0 hideflag = 0 insuranceflag = 0 doubledownflag = 0 blackjackflag = 0 bonusflag = 0 splitflag = -1 dealerdealt = 0 playerdealt = 0 score = score - 20 CLRVIEW RESETPTS CALCPTS SHOWSCORE SLEEP (1) cursorxplayer = 14 cursoryplayer = 3 IF cardsdealt = 52 THEN RESHUFFLE cardsdealt = cardsdealt + 1 playerdealt = playerdealt + 1 player(playerdealt) = deck(cardsdealt) PUTCARD player(playerdealt), cursorxplayer, cursoryplayer CALCPTS SHOWSCORE SLEEP (1) cursorxdealer = 5 cursorydealer = 3 IF cardsdealt = 52 THEN RESHUFFLE cardsdealt = cardsdealt + 1 dealerdealt = dealerdealt + 1 dealer(dealerdealt) = deck(cardsdealt) PUTCARD dealer(dealerdealt), cursorxdealer, cursorydealer CALCPTS SHOWSCORE SLEEP (1) cursoryplayer = cursoryplayer + 13 IF cardsdealt = 52 THEN RESHUFFLE cardsdealt = cardsdealt + 1 playerdealt = playerdealt + 1 player(playerdealt) = deck(cardsdealt) PUTCARD player(playerdealt), cursorxplayer, cursoryplayer CALCPTS SHOWSCORE IF playerpts = 21 THEN blackjackflag = 1 SLEEP (1) IF cardsdealt = 52 THEN RESHUFFLE cardsdealt = cardsdealt + 1 dealerdealt = dealerdealt + 1 dealer(dealerdealt) = deck(cardsdealt) cursorydealer = cursorydealer + 13 PUTCARD blankcard, cursorxdealer, cursorydealer hideflag = 1 cursorydealer = cursorydealer - 13 IF dealer(1).value = 1 AND blackjackflag <> 1 THEN SHOWMSG "INSURE (Y/N)? ", 1 DO answer = UCASE$(INKEY$) LOOP UNTIL answer = "Y" OR answer = "N" SELECT CASE answer CASE "Y" IF score >= 10 THEN SHOWMSG "INSURED . . .", 0 score = score - 10 SHOWSCORE hideflag = 0 SLEEP (1) CALCPTS IF dealerpts = 21 THEN SHOWMSG "INSURANCE WIN ! ! !", 0 COLOR BLINKGREEN, BLUE SHOWSTATUS "INSURANCE WIN" insuranceflag = 1 cursorydealer = cursorydealer + 13 PUTCARD dealer(dealerdealt), cursorxdealer, cursorydealer score = score + 30 CALCPTS SHOWSCORE ELSE SHOWMSG "FOR NOTHING . . .", 0 insuranceflag = 2 END IF hideflag = 1 ELSE SHOWMSG "NOT ENOUGH CREDIT", 0 SLEEP (1) SHOWMSG "NOT INSURED . . .", 0 END IF CALCPTS CASE "N" SHOWMSG "NOT INSURED . . .", 0 insuranceflag = 0 CASE ELSE END SELECT SLEEP (1) END IF IF playerpts = 11 AND insuranceflag <> 1 THEN SHOWMSG "DOUBLE DOWN (Y/N)? ", 1 DO answer = UCASE$(INKEY$) LOOP UNTIL answer = "Y" OR answer = "N" SELECT CASE answer CASE "Y" IF score >= 20 THEN SHOWMSG "DOUBLE DOWN . . .", 0 doubledownflag = 1 score = score - 20 SHOWSCORE ELSE SHOWMSG "NOT ENOUGH CREDIT...", 0 SLEEP (1) SHOWMSG "NORMAL WAGER . . .", 0 END IF CASE "N" SHOWMSG "NORMAL WAGER . . .", 0 CASE ELSE END SELECT SLEEP (1) END IF IF player(1).value = player(2).value AND insuranceflag <> 1 THEN splitflag = 1 END IF IF splitflag = 1 THEN splitflag = 0 SHOWMSG "SPLIT (Y/N)? ", 1 DO answer = UCASE$(INKEY$) LOOP UNTIL answer = "Y" OR answer = "N" SELECT CASE answer CASE "Y" IF score >= 20 THEN SHOWMSG "SPLITTING . . .", 0 splitflag = 1 score = score - 20 SHOWSCORE ELSE SHOWMSG "NOT ENOUGH CREDIT...", 0 SLEEP (1) SHOWMSG "NO SPLIT . . .", 0 splitflag = -1 END IF CASE "N" SHOWMSG "NO SPLIT . . .", 0 splitflag = -1 CASE ELSE END SELECT SLEEP (1) END IF IF splitflag = 1 AND insuranceflag <> 1 THEN COLOR BLUE, WHITE IF displaytype = MONOCHROME THEN FOR i = 1 TO 7 LOCATE cursorxplayer + i, cursoryplayer, 0 PRINT SPC(11); NEXT i ELSE REM Û IS 219 FOR i = 1 TO 7 LOCATE cursorxplayer + i, cursoryplayer, 0 FOR j = 1 TO 11 PRINT CHR$(219); NEXT j NEXT i END IF PUTCARD player(playerdealt), cursorxplayer, cursoryplayer + 3 * 13 SLEEP (1) IF cardsdealt = 52 THEN RESHUFFLE cardsdealt = cardsdealt + 1 playerdealt = playerdealt + 1 player(playerdealt) = deck(cardsdealt) PUTCARD player(playerdealt), cursorxplayer, cursoryplayer SLEEP (1) IF cardsdealt = 52 THEN RESHUFFLE cardsdealt = cardsdealt + 1 playerdealt = playerdealt + 1 player(playerdealt) = deck(cardsdealt) PUTCARD player(playerdealt), cursorxplayer, cursoryplayer + 4 * 13 SLEEP (1) COLOR HIWHITE, BLUE END IF IF insuranceflag <> 1 AND splitflag <> 1 AND playerpts < 21 THEN SHOWMSG "HIT / STAND (H/S)? ", 1 DO answer = UCASE$(INKEY$) LOOP UNTIL answer = "H" OR answer = "S" IF answer = "H" THEN DO IF cardsdealt = 52 THEN RESHUFFLE cardsdealt = cardsdealt + 1 IF cardsdealt = 52 THEN RESHUFFLE playerdealt = playerdealt + 1 player(playerdealt) = deck(cardsdealt) cursoryplayer = cursoryplayer + 13 PUTCARD player(playerdealt), cursorxplayer, cursoryplayer CALCPTS SHOWSCORE IF playerdealt < 6 AND playerpts < 21 THEN SHOWMSG "HIT / STAND (H/S)? ", 1 DO answer = UCASE$(INKEY$) LOOP UNTIL answer = "H" OR answer = "S" END IF CALCPTS IF playerpts > 21 THEN COLOR BLINKRED, BLUE SHOWSTATUS "LOST" SHOWMSG "DEALER WINS . . .", 0 SLEEP (1) END IF LOOP WHILE answer = "H" AND playerpts < 21 AND playerdealt < 6 END IF END IF REM BY NOW, "STAND" IS THE DEFAULT IF playerpts = 21 THEN SLEEP (1) IF insuranceflag <> 1 THEN cursorydealer = cursorydealer + 13 PUTCARD dealer(dealerdealt), cursorxdealer, cursorydealer END IF hideflag = 0 CALCPTS SHOWSCORE SHOWMSG "STAND . . .", 0 IF (playerpts <= 21 OR splitflag = 1) AND insuranceflag <> 1 THEN SLEEP (1) IF blackjackflag <> 1 THEN WHILE dealerpts < 17 AND dealerdealt < 6 IF cardsdealt = 52 THEN RESHUFFLE cardsdealt = cardsdealt + 1 dealerdealt = dealerdealt + 1 dealer(dealerdealt) = deck(cardsdealt) cursorydealer = cursorydealer + 13 PUTCARD dealer(dealerdealt), cursorxdealer, cursorydealer CALCPTS SHOWSCORE SLEEP (1) WEND END IF END IF CALCPTS SHOWSCORE REM RESULTS SECTION IF insuranceflag <> 1 AND splitflag <> 1 THEN IF playerpts > dealerpts OR dealerpts > 21 THEN IF playerpts <= 21 THEN SHOWMSG "PLAYER WINS ! ! !", 0 IF doubledownflag = 1 THEN COLOR BLINKGREEN, BLUE SHOWSTATUS "DOUBLE DOWN" score = score + 80 SHOWSCORE ELSEIF blackjackflag = 1 THEN COLOR BLINKGREEN, BLUE SHOWSTATUS "BLACK JACK" score = score + 50 SHOWSCORE ELSEIF playerdealt = 3 THEN SELECT CASE player(1).value CASE 6 IF player(2).value = 7 THEN IF player(3).value = 8 THEN bonusflag = 1 ELSEIF player(2).value = 8 THEN IF player(3).value = 7 THEN bonusflag = 1 END IF CASE 7 IF player(2).value = 6 THEN IF player(3).value = 8 THEN bonusflag = 1 ELSEIF player(2).value = 8 THEN IF player(3).value = 6 THEN bonusflag = 1 END IF CASE 8 IF player(2).value = 6 THEN IF player(3).value = 7 THEN bonusflag = 1 ELSEIF player(2).value = 7 THEN IF player(3).value = 6 THEN bonusflag = 1 END IF CASE ELSE END SELECT IF bonusflag = 1 THEN COLOR BLINKGREEN, BLUE SHOWSTATUS "BONUS" score = score + 50 SHOWSCORE ELSE COLOR BLINKGREEN, BLUE SHOWSTATUS "WIN" score = score + 40 END IF ELSE COLOR BLINKGREEN, BLUE SHOWSTATUS "WIN" score = score + 40 SHOWSCORE END IF SLEEP (1) END IF ELSEIF playerpts = dealerpts AND playerpts <= 21 THEN SHOWMSG "NOBODY WINS . . .", 0 COLOR BLINKYELLOW, BLUE SHOWSTATUS "PUSH" IF doubledownflag = 1 THEN score = score + 40 ELSE score = score + 20 END IF SHOWSCORE SLEEP (1) ELSE SHOWMSG "DEALER WINS . . .", 0 COLOR BLINKRED, BLUE SHOWSTATUS "LOST" SLEEP (1) END IF ELSEIF splitflag = 1 THEN CALCPTS CALCSPLITPTS SHOWSCORE IF split1pts = 21 THEN IF dealerpts = 21 AND deardealt = 2 THEN SHOWMSG "SPLIT 1 PUSH . . .", 0 score = score + 20 ELSE SHOWMSG "BLACK JACK ! ! !", 0 score = score + 50 END IF ELSEIF (split1pts > dealerpts OR dealerpts > 21) AND split1pts < 21 THEN SHOWMSG "SPLIT 1 WINS ! ! !", 0 score = score + 40 SHOWSCORE ELSEIF split1pts < dealerpts THEN SHOWMSG "SPLIT 1 LOST . . .", 0 splitflag = 0 ELSE SHOWMSG "SPLIT 1 PUSH . . .", 0 score = score + 20 SHOWSCORE splitflag = 2 END IF SLEEP (1) IF split2pts = 21 THEN IF dealerpts = 21 AND deardealt = 2 THEN SHOWMSG "SPLIT 1 PUSH . . .", 0 score = score + 20 ELSE SHOWMSG "BLACK JACK ! ! !", 0 score = score + 50 END IF ELSEIF (split2pts > dealerpts OR dealerpts > 21) AND split2pts <= 21 THEN SHOWMSG "SPLIT 2 WINS ! ! !", 0 score = score + 40 SHOWSCORE IF splitflag = 1 THEN COLOR BLINKGREEN, BLUE SHOWSTATUS "SPLIT WIN" ELSEIF splitflag = 2 THEN COLOR BLINKGREEN, BLUE SHOWSTATUS "WIN" ELSE COLOR BLINKYELLOW, BLUE SHOWSTATUS "PUSH" END IF ELSEIF split2pts < dealerpts THEN SHOWMSG "SPLIT 2 LOST . . .", 0 IF splitflag = 1 THEN COLOR BLINKYELLOW, BLUE SHOWSTATUS "PUSH" ELSE COLOR BLINKRED, BLUE SHOWSTATUS "SPLIT LOST" END IF ELSE SHOWMSG "SPLIT 2 PUSH . . .", 0 score = score + 20 SHOWSCORE IF splitflag = 1 THEN COLOR BLINKGREEN, BLUE SHOWSTATUS "WIN" ELSEIF splitflag = 0 THEN COLOR BLINKRED, BLUE SHOWSTATUS "SPLIT LOST" ELSE COLOR BLINKYELLOW, BLUE SHOWSTATUS "SPLIT PUSH" END IF END IF IF splitflag <> 1 THEN SHOWSCORE SLEEP (1) END IF SHOWSCORE SHOWMSG "DEAL / QUIT (D/Q)? ", 1 DO IF splitflag <> -1 THEN COLOR YELLOW, BLUE LOCATE 24, 77, 0 PRINT USING "##"; split1pts; SLEEP (1) LOCATE 24, 77, 0 PRINT USING "##"; split2pts; SLEEP (1) COLOR HIWHITE, BLUE END IF answer = UCASE$(INKEY$) LOOP UNTIL answer = "D" OR answer = "Q" IF score < 20 THEN SHOWMSG "NOT ENOUGH CREDIT...", 0 SLEEP (1) answer = "Q" END IF IF answer = "Q" THEN SHOWMSG "ANOTHER GAME (Y/N)? ", 1 DO answer = UCASE$(INKEY$) LOOP UNTIL answer = "Y" OR answer = "N" IF answer = "Y" THEN CLRVIEW score = 500 cardsdealt = 0 RESETPTS CALCPTS SHOWSCORE FILLDECK SHUFFLE SLEEP (1) answer = "D" END IF END IF WEND CLRVIEW SHOWMSG "GAME OVER . . .", 0 SLEEP (1) ESCAPE: CLS IF displaytype = LCD THEN COLOR BLACK, WHITE ELSEIF displaytype = MONOCHROME THEN COLOR WHITE, BLACK ELSE COLOR 7, 0 END IF CLS SYSTEM SUB BORDER REM É IS 201 REM Í IS 205 REM » IS 187 REM º IS 186 REM È IS 200 REM ¼ IS 188 REM Ì IS 204 REM ¹ IS 185 REM ³ IS 179 REM Ñ IS 209 REM Ï IS 207 REM Ë IS 203 REM Ê IS 202 DIM i AS INTEGER LOCATE 1, 1, 0 PRINT CHR$(201); FOR i = 2 TO 79 PRINT CHR$(205); NEXT i PRINT CHR$(187); FOR i = 2 TO 24 LOCATE i, 1, 0 PRINT CHR$(186); LOCATE i, 80, 0 PRINT CHR$(186); NEXT i LOCATE 25, 1, 0 PRINT CHR$(200); FOR i = 2 TO 79 PRINT CHR$(205); NEXT i PRINT CHR$(188); LOCATE 4, 1, 0 PRINT CHR$(204); FOR i = 2 TO 79 PRINT CHR$(205); NEXT i PRINT CHR$(185); LOCATE 2, 2, 0 PRINT "BLACK JACK"; LOCATE 3, 2, 0 PRINT " 21"; LOCATE 1, 12, 0 PRINT CHR$(203); LOCATE 2, 12, 0 PRINT CHR$(186); LOCATE 3, 12, 0 PRINT CHR$(186); LOCATE 4, 12, 0 PRINT CHR$(202); LOCATE 2, 14, 0 PRINT "DOUBLE DOWN WIN 80" LOCATE 3, 14, 0 PRINT "BLACK JACK/BONUS 50" LOCATE 1, 34, 0 PRINT CHR$(209); LOCATE 2, 34, 0 PRINT CHR$(179); LOCATE 3, 34, 0 PRINT CHR$(179); LOCATE 4, 34, 0 PRINT CHR$(207); LOCATE 2, 36, 0 PRINT "WINNER HAND 40" LOCATE 3, 36, 0 PRINT "INSURANCE WIN 30" LOCATE 1, 57, 0 PRINT CHR$(209); LOCATE 2, 57, 0 PRINT CHR$(179); LOCATE 3, 57, 0 PRINT CHR$(179); LOCATE 4, 57, 0 PRINT CHR$(207); LOCATE 2, 59, 0 PRINT "PUSH 20" LOCATE 3, 59, 0 PRINT "DEALER STANDS ON 17" LOCATE 23, 1, 0 PRINT CHR$(204); FOR i = 2 TO 79 PRINT CHR$(205); NEXT i PRINT CHR$(185); LOCATE 24, 3, 0 PRINT "SCORE:"; LOCATE 23, 15, 0 PRINT CHR$(209); LOCATE 24, 15, 0 PRINT CHR$(179); LOCATE 25, 15, 0 PRINT CHR$(207); LOCATE 23, 38, 0 PRINT CHR$(209); LOCATE 24, 38, 0 PRINT CHR$(179); LOCATE 25, 38, 0 PRINT CHR$(207); LOCATE 23, 54, 0 PRINT CHR$(209); LOCATE 24, 54, 0 PRINT CHR$(179); LOCATE 25, 54, 0 PRINT CHR$(207); LOCATE 24, 56, 0 PRINT "DEALER:"; LOCATE 23, 67, 0 PRINT CHR$(209); LOCATE 24, 67, 0 PRINT CHR$(179); LOCATE 25, 67, 0 PRINT CHR$(207); LOCATE 24, 69, 0 PRINT "PLAYER:"; END SUB SUB CALCPTS DIM i AS INTEGER DIM dealeraceflag AS INTEGER, playeraceflag AS INTEGER dealeraceflag = 0 playeraceflag = 0 dealerpts = 0 playerpts = 0 FOR i = 1 TO 6 IF NOT (i = 2 AND hideflag = 1) THEN SELECT CASE dealer(i).value CASE 2 TO 10 dealerpts = dealerpts + dealer(i).value CASE JACK TO KING dealerpts = dealerpts + 10 CASE 1 IF dealeraceflag = 0 THEN dealeraceflag = 1 REM if there is an ace already, the new ace is only worth 1 ELSE dealerpts = dealerpts + 1 END IF CASE ELSE END SELECT END IF SELECT CASE player(i).value CASE 2 TO 10 playerpts = playerpts + player(i).value CASE JACK TO KING playerpts = playerpts + 10 CASE 1 IF playeraceflag = 0 THEN playeraceflag = 1 REM if there is an ace already, the new ace is only worth 1 ELSE playerpts = playerpts + 1 END IF CASE ELSE END SELECT NEXT i IF dealeraceflag = 1 THEN IF dealerpts <= 10 THEN dealerpts = dealerpts + 11 ELSE dealerpts = dealerpts + 1 END IF END IF IF playeraceflag = 1 THEN IF playerpts <= 10 THEN playerpts = playerpts + 11 ELSE playerpts = playerpts + 1 END IF END IF END SUB SUB CALCSPLITPTS DIM i AS INTEGER DIM split1aceflag AS INTEGER, split2aceflag AS INTEGER split1aceflag = 0 split2aceflag = 0 split1pts = 0 split2pts = 0 FOR i = 1 TO 4 SELECT CASE i CASE 1, 3 SELECT CASE player(i).value CASE 2 TO 10 split1pts = split1pts + player(i).value CASE JACK TO KING split1pts = split1pts + 10 CASE 1 IF split1aceflag = 0 THEN split1aceflag = 1 REM if there is an ace already, the new ace is only worth 1 ELSE split1pts = split1pts + 1 END IF CASE ELSE END SELECT CASE 2, 4 SELECT CASE player(i).value CASE 2 TO 10 split2pts = split2pts + player(i).value CASE JACK TO KING split2pts = split2pts + 10 CASE 1 IF split2aceflag = 0 THEN split2aceflag = 1 REM if there is an ace already, the new ace is only worth 1 ELSE split2pts = split2pts + 1 END IF CASE ELSE END SELECT CASE ELSE END SELECT NEXT i IF split1aceflag = 1 THEN IF split1pts <= 10 THEN split1pts = split1pts + 11 ELSE split1pts = split1pts + 1 END IF END IF IF split2aceflag = 1 THEN IF split2pts <= 10 THEN split2pts = split2pts + 11 ELSE split2pts = split2pts + 1 END IF END IF END SUB SUB CLRVIEW DIM x AS INTEGER FOR x = 5 TO 22 LOCATE x, 2, 0 PRINT SPC(78); NEXT x SHOWMSG "", 0 SHOWSTATUS "" LOCATE 24, 64, 0 PRINT SPC(2); LOCATE 24, 77, 0 PRINT SPC(2); END SUB SUB FILLDECK DIM ctr AS INTEGER, i AS INTEGER, j AS INTEGER ctr = 1 FOR j = HEARTS TO SPADES FOR i = 1 TO KING deck(ctr).value = i deck(ctr).suit = j ctr = ctr + 1 NEXT i NEXT j END SUB SUB LINE1 (carte AS CARD) SELECT CASE carte.value CASE BLANK PRINT COVERSTR; CASE 1, JACK TO KING PRINT SPC(1); face; SPC(9); CASE 4 TO 10 PRINT SPC(1); PRINT CHR$(carte.suit); SPC(7); PRINT CHR$(carte.suit); SPC(1); CASE ELSE PRINT SPC(11); END SELECT END SUB SUB LINE2 (carte AS CARD) SELECT CASE carte.value CASE BLANK PRINT COVERSTR; CASE 1, JACK TO KING PRINT SPC(1); CHR$(carte.suit); SPC(9); CASE 2 TO 3, 10 PRINT SPC(5); CHR$(carte.suit); SPC(5); CASE ELSE PRINT SPC(11); END SELECT END SUB SUB LINE3 (carte AS CARD) SELECT CASE carte.value CASE BLANK PRINT COVERSTR; CASE 8 TO 10 PRINT SPC(1); PRINT CHR$(carte.suit); SPC(7); PRINT CHR$(carte.suit); SPC(1); CASE ELSE PRINT SPC(11); END SELECT END SUB SUB LINE4 (carte AS CARD) SELECT CASE carte.value CASE BLANK PRINT COVERSTR; CASE 1, 3, 5 PRINT SPC(5); PRINT CHR$(carte.suit); SPC(5); CASE 6, 7 PRINT SPC(1); CHR$(carte.suit); PRINT SPC(7); CHR$(carte.suit); PRINT SPC(1); CASE ELSE PRINT SPC(11); END SELECT END SUB SUB LINE5 (carte AS CARD) SELECT CASE carte.value CASE BLANK PRINT COVERSTR; CASE 8 TO 10 PRINT SPC(1); PRINT CHR$(carte.suit); SPC(7); PRINT CHR$(carte.suit); SPC(1); CASE ELSE PRINT SPC(11); END SELECT END SUB SUB LINE6 (carte AS CARD) SELECT CASE carte.value CASE BLANK PRINT COVERSTR; CASE 1, JACK TO KING PRINT SPC(9); face; SPC(1); CASE 2 TO 3, 7, 9 TO 10 PRINT SPC(5); CHR$(carte.suit); SPC(5); CASE ELSE PRINT SPC(11); END SELECT END SUB SUB LINE7 (carte AS CARD) SELECT CASE carte.value CASE BLANK PRINT COVERSTR; CASE 1, JACK TO KING PRINT SPC(9); CHR$(carte.suit); SPC(1); CASE 4 TO 10 PRINT SPC(1); PRINT CHR$(carte.suit); SPC(7); PRINT CHR$(carte.suit); SPC(1); CASE ELSE PRINT SPC(11); CASE ELSE END SELECT END SUB SUB PUTCARD (carte AS CARD, x AS INTEGER, y AS INTEGER) SELECT CASE carte.value CASE 1 face = "A" CASE JACK face = "J" CASE QUEEN face = "Q" CASE KING face = "K" CASE ELSE END SELECT SELECT CASE carte.suit CASE BLANK, HEARTS, DIAMONDS COLOR HIRED, WHITE CASE ELSE COLOR BLACK, WHITE END SELECT LOCATE x + 1, y, 0 LINE1 carte LOCATE x + 2, y, 0 LINE2 carte LOCATE x + 3, y, 0 LINE3 carte LOCATE x + 4, y, 0 LINE4 carte LOCATE x + 5, y, 0 LINE5 carte LOCATE x + 6, y, 0 LINE6 carte LOCATE x + 7, y, 0 LINE7 carte COLOR HIWHITE, BLUE END SUB SUB RESETPTS DIM i AS INTEGER FOR i = 1 TO 6 dealer(i).value = 0 player(i).value = 0 NEXT i END SUB SUB RESHUFFLE DIM i AS INTEGER, j AS INTEGER SHUFFLE cardsdealt = 1 FOR j = 1 TO 52 FOR i = 1 TO dealerdealt IF deck(cardsdealt).value = dealer(dealerdealt).value THEN SWAP deck(dealerdealt), deck(cardsdealt) cardsdealt = cardsdealt + 1 END IF NEXT i FOR i = 1 TO playerdealt IF deck(cardsdealt).value = player(playerdealt).value THEN SWAP deck(playerdealt), deck(cardsdealt) cardsdealt = cardsdealt + 1 END IF NEXT i NEXT j SHOWMSG "", 0 END SUB SUB SHOWMSG (msg AS STRING, cursor AS INTEGER) LOCATE 24, 17, 0 PRINT SPC(21); LOCATE 24, 17, cursor PRINT msg; END SUB SUB SHOWSCORE COLOR YELLOW, BLUE LOCATE 24, 9, 0 PRINT USING "#####"; score; IF dealerpts <> 0 THEN LOCATE 24, 64, 0 PRINT USING "##"; dealerpts; END IF LOCATE 24, 77, 0 IF playerpts <> 0 AND splitflag = -1 THEN PRINT USING "##"; playerpts; ELSE COLOR HIWHITE, BLUE PRINT SPC(2); END IF COLOR HIWHITE, BLUE END SUB SUB SHOWSTATUS (status AS STRING) LOCATE 24, 40, 0 PRINT SPC(14); LOCATE 24, 40, 0 PRINT status; COLOR HIWHITE, BLUE END SUB SUB SHUFFLE COLOR BLINKWHITE, BLUE SHOWMSG "SHUFFLING . . .", 0 COLOR HIWHITE, BLUE SLEEP (1) RANDOMIZE TIMER DIM i AS INTEGER, j AS INTEGER FOR i = 1 TO 52 j = INT(RND * 52) + 1 SWAP deck(i), deck(j) NEXT i END SUB