Twenty One is a full-featured Blackjack (21) card game that simulates a single-deck casino table with betting, insurance, doubling down, and push handling. The deck is represented as a 52-element array C() shuffled using a Fisher-Yates-style random swap, and card suits are tracked via a 13-element array P() that cycles through four suit symbols (character codes 145–148) so each card appears exactly four times per deck. Cards are rendered as 7-row tall graphical tiles using block graphics and CHR$ codes, with face cards (J, Q, K) drawn using custom block-graphic art. Ace handling uses a dedicated subroutine at line 7800 that checks all tracked card variables and reduces an 11-valued ace to 1 if the hand exceeds 21. The game includes a “Game Over” screen at line 9100 drawn entirely with PLOT/DRAW/CIRCLE commands depicting a Greyhound bus terminal, triggered when the player’s bankroll reaches zero.
Program Structure
The program is organized into clearly labeled subroutine blocks separated by REM statements. Execution begins at line 6 with three POKE calls to set system parameters, then proceeds through initialization (9900), rules display (9700), board drawing (3000), deck shuffle (9000), and into the main game loop starting at line 5001. The overall flow is:
- Line 6–7: System POKEs (screen settings)
- Lines 9900–9920: Initialize variables, arrays, and starting bank of $1000
- Lines 9700–9850: Optional rules display
- Lines 3000–3018: Draw static board elements
- Lines 9000–9022: Deck shuffle routine
- Lines 5000–5999: Main deal loop (player cards, dealer first card)
- Lines 6800–6834: Hit/Stand/Double decision
- Lines 7000–7414: Double-down section
- Lines 5500–5560: Dealer draw section
- Lines 5800–5814: Win/loss/push determination
- Lines 1000–1806: Outcome handlers (player wins, dealer wins, push, busts)
- Lines 6000–6082: Insurance side-bet section
- Lines 7800–7824: Ace value adjustment subroutine
- Lines 8800–8949: Card printing dispatcher
- Lines 8820–8949: Card setup subroutine (suit/color assignment)
- Lines 9100–9499: Bank-empty “Greyhound terminal” game-over screen
- Lines 3019–3034: Card back drawing subroutine
Deck and Suit Representation
The 52-element array C() is initialized with values 1–52 and then shuffled by swapping each element with a randomly chosen position (lines 9002–9004). Card values are then mapped to 1–13 by subtracting multiples of 13 based on which quarter of the deck the card falls in (lines 9006–9011). The 13-element array P() tracks how many times each card denomination has appeared; since each denomination appears four times in a deck, the index P(I) cycles 0–3 to select one of four suits, represented by CHR$ codes 145–148 (UDG characters used as suit symbols). This approach cleanly ensures correct suit distribution across a full deck.
Note that line 9008 (IF C(I)<14 THEN LET C(I)=C(I)) is a no-op — it performs no transformation. This appears to be a placeholder or copy-paste artifact.
Card Rendering System
Card display is handled by a two-subroutine system. GO SUB 8820 sets up rendering variables (V1 for the rank character, K for ink color, S1 for the suit symbol CHR$ code, and A1–A15 for the pip layout array). GO SUB 8800 then performs the actual PRINT AT commands to draw the 7-row card at screen position (X, Y). Each card is 5 columns wide and 7 rows tall.
Face cards receive special treatment:
- Jack (Q=11,
V1=74= ‘J’): Drawn with vertical bar block graphics to suggest a figure - Queen (Q=12,
V1=81= ‘Q’): Drawn with a different block-graphic figure pattern, including a tail on the Q - King (Q=13,
V1=75= ‘K’): Drawn using OVER 1 mode to overlay a crown shape using block graphics - Ace (Q=1,
V1=65= ‘A’): Rendered with a centered single suit symbol - 10 uses
V1=144, a UDG character, since two digits would not fit in the single rank-character position
Card backs (subroutine at line 3020) are drawn with a border of box-drawing block graphics forming a simple frame.
Ace Handling
The subroutine at line 7800 implements soft/hard ace conversion. Each tracked card variable (PC1–PC11 for player, DC1–DC6 for dealer) is checked: if it holds the value 11 (ace counted high) and the corresponding total exceeds 21, the variable is reduced to 1 and the total is decremented by 10. Only one ace is converted per call, so the subroutine must be called again after each new card to handle multiple aces. This correctly mirrors standard Blackjack soft-hand rules.
Game Features
- Insurance: Offered when the dealer’s face-up card is an ace (line 6000). The player may bet up to half their current bet. If the dealer has Blackjack, the insurance bet pays 2:1 (lines 6046–6048 add 3× the insurance bet back, netting 2:1 since 1× was already deducted).
- Double Down: Available when the player’s first two cards total 10 or 11 (
D=1flag, line 5012). The player doubles their bet, receives exactly one face-down card (drawn viaGO SUB 3020), and then the dealer plays out normally. - Blackjack payout: Line 5315 computes
G = BT + INT(BT * 1.5), returning the bet plus 1.5× (i.e., 3:2 payout), then addsGback to the bank. - Reshuffle trigger: At line 3102, if
L >= 40, the shuffle subroutine is called automatically, simulating a mid-shoe reshuffle. - $50 table limit and $1000 starting bankroll are enforced at lines 3103–3106.
Input Handling
User decisions (Hit/Stand, Insurance, Double) all use INPUT LINE Z$ followed by character checks on Z$(1). This avoids the keyword-entry requirement of plain INPUT and accepts any string starting with the relevant letter. Empty input is explicitly re-prompted (e.g., lines 6003, 6804, 6829).
Game-Over Screen
When the player’s bank reaches zero (line 3101 checks BK=0), the program branches to line 9100, which clears the screen, fills it with a red PAPER background row by row with a PAUSE 5 wipe, then uses PLOT/DRAW/CIRCLE to draw a stylized Greyhound bus station graphic — including a bus outline, windows, wheels, and signs reading “GRAYHOUND”, “LAS VEGAS”, and “TICKET COUNTER”. The program then halts at line 9499 with STOP.
Notable Bugs and Anomalies
- Line 5060–5066: The 7th player card section has a REM but no dealing code — after the REM, execution falls directly to line 5066 which only calls
GO SUB 7800and prints the total, without actually drawing a card. This means a 7th player card is never dealt. - Line 6800 is referenced by several
GO SUB 6800calls, but the subroutine actually starts at line 6801. Since BASIC searches for the nearest line at or after the requested number, this works correctly as the line 6800 does not exist and execution falls to 6801 — a standard technique. - Line 8940 is absent: after the Queen handler (lines 8930–8939), execution falls directly to line 8941 which is the King handler, with no guard
IF Q<>13check. This means the King handler always runs when Q=13, which is correct, but there is no branch for any value above 12 that isn’t 13 — this is harmless given the deck only contains values 1–13. - Line 6038 contains
PRINT AT 7,0,,,(missing semicolon afterAT 7,0), which is likely a typo forPRINT AT 7,0;,,,and may cause a syntax or runtime error. - The double-down subroutine at line 7300 increments
BTinside theFOR I=1 TO BTloop, which changes the loop limit mid-execution. In Sinclair BASIC the loop limit is evaluated once at the start, so the doubling ofBTinside the loop does not affect the loop count — but results inBTbeing approximately doubled by the loop end, which is the intended effect. - Line 7412 does
LET BT = INT(BT/2)before the push handling at line 7414 to recover the pre-double bet amount, but this is only reached in the double-down path and may leaveBTat an odd value if the original bet was odd.
Variable Summary
| Variable | Purpose |
|---|---|
C(52) | Shuffled deck array (card values 1–13) |
P(13) | Per-denomination suit usage counter (0–3) |
L | Current deck position (card index) |
BK | Player’s bank total |
BT | Current bet amount |
PT | Player’s hand total |
DT | Dealer’s hand total |
PC1–PC11 | Individual player card values (for ace adjustment) |
DC1–DC6 | Individual dealer card values (for ace adjustment) |
D | Double-down eligible flag (1=yes) |
A | Dealer’s face-down card value (for reveal) |
V1 | CHR$ code of rank character for card display |
S1 | CHR$ code of suit symbol |
K | INK color for card (0=black, 2=red) |
X, Y | Screen row/column for card placement |
Q | Card value passed to card-setup subroutine |
Content
Source Code
6 REM 00
7 POKE 23658,8:POKE 23609,100:POKE 23617,236
20 GO SUB 9900:REM INIT.
30 GO SUB 9700:REM RULES
40 GO SUB 3000:REM DRAW BOARD
60 GO SUB 9000:REM SHUFFEL
70 GO TO 5001:REM MAIN PROGRAM
1000 REM \{20}\{1}PLAYER\{20}\{0} \{20}\{1}WINS\{20}\{0}
1002 PRINT AT 8,11; PAPER 2; INK 7; FLASH 1;" YOU WIN ! "
1004 PAUSE 120:FOR I=1 TO BT:LET BK=BK+2:PRINT AT 11,25; PAPER 7;BK; PAPER 8;" ":BEEP .01,0:NEXT I
1006 PAUSE 120:GO TO 5000
1200 REM \{20}\{1}DEALER\{20}\{0} \{20}\{1}WINS\{20}\{0}
1202 PRINT AT 8,8; PAPER 1; INK 7; FLASH 1;" THE HOUSE WINS! "
1204 PRINT AT 12,16;" ":PAUSE 300:GO TO 5000
1400 REM \{20}\{1}\{20}\{0} \{20}\{1}PUSH\{20}\{0}
1402 LET Q=A:LET X=0:LET Y=11:GO SUB 8820:GO SUB 8800
1404 LET A=0:LET PC1=0:LET PC2=0:LET PC3=0:LET PC4=0:LET PC5=0:LET PC6=0:LET PC7=0:LET PC8=0:LET PC9=0:LET PC10=0:LET PC11=0:LET DC1=0:LET DC2=0:LET DC3=0:LET DC4=0:LET DC5=0:LET DC6=0
1405 PRINT AT 0,0;,,,,,,,,,,,,,,,,,,; AT 13,0;,,,,,,,,,,,,,,,,,,
1406 PRINT AT 8,11; PAPER 0; INK 7; FLASH 1;" WE PUSH ! "
1410 PAUSE 120:PRINT AT 8,0;,,:LET L=L+1:GO TO 5002
1600 REM \{20}\{1}PLAYER\{20}\{0} \{20}\{1}BUSTS\{20}\{0}
1602 PRINT AT 8,11; PAPER 1; INK 7; FLASH 1;" YOU BUST ! "
1604 LET Q=A:LET X=0:LET Y=11:GO SUB 8820:GO SUB 8800
1606 PRINT AT 12,16;" ":PAUSE 300:GO TO 5000
1800 REM \{20}\{1}DEALER\{20}\{0} \{20}\{1}BUSTS\{20}\{0}
1802 PRINT AT 8,7; PAPER 2; INK 7; FLASH 1;" THE HOUSE BUSTS ! "
1804 PAUSE 120:FOR I=1 TO BT:LET BK=BK+2:PRINT AT 11,25; PAPER 7;BK; PAPER 8;" ":BEEP .01,0:NEXT I
1806 PAUSE 120:GO TO 5000
3000 REM \{20}\{1}DRAW BOARD\{20}\{0}
3001 PRINT AT 12,4;"THE BET IS"
3006 PRINT AT 10,4; PAPER 7; INK 1;" INSURANCE PAYS 2/1 "
3010 \{20}\{0} PRINT INK 2; PAPER 7; AT 9,4;"B L A C K J A C K"
3012 PRINT AT 11,4; PAPER 7; INK 2;"YOUR BANK TOTAL IS "; INK 0;"$ ";BK
3018 RETURN
3019 REM \{20}\{1}CARD BACK\{20}\{0}
3020 PRINT AT X,Y; PAPER 7; INK 1;"\k\l\l\l\m"
3022 PRINT AT X,Y; PAPER 7; INK 1;"\j\f\f\f\n"; AT X+1,Y;"\k\l\l\l\m"
3024 PRINT AT X+1,Y; PAPER 7; INK 1;"\j\f\f\f\n"; AT X+2,Y;"\k\l\l\l\m"
3026 PRINT AT X+2,Y; PAPER 7; INK 1;"\j\f\f\f\n"; AT X+3,Y;"\k\l\l\l\m"
3028 PRINT AT X+3,Y; PAPER 7; INK 1;"\j\f\f\f\n"; AT X+4,Y;"\k\l\l\l\m"
3030 PRINT AT X+4,Y; PAPER 7; INK 1;"\j\f\f\f\n"; AT X+5,Y;"\k\l\l\l\m"
3032 PRINT AT X+5,Y; PAPER 7; INK 1;"\j\f\f\f\n"; AT X+6,Y;"\k\l\l\l\m"; AT X,Y;"\g\h\h\h\i"
3034 BEEP .25,25:RETURN
3100 REM ****TAKE BETS****
3101 IF BK=0 THEN GO TO 9100
3102 PRINT AT 12,16;,; AT 0,0;,,,,,,,,,,,,,,,,,,; AT 14,0;,,,,,,,,,,,,,,,,; AT 11,25; PAPER 7; INK 0;BK:IF L >=40 THEN GO SUB 9000
3103 PRINT AT 2,5;"PLACE YOUR BET PLAESE"; AT 3,10;"$50 LIMIT":INPUT BT
3104 IF BT>50 THEN PRINT AT 5,5;"I SAID THE LIMIT IS $50":GO TO 3103
3106 IF BT>BK THEN PRINT AT 5,5,,; AT 5,5;" YOU AIN'T GOT THAT MUCH DORK!":GO TO 3103
3112 FOR I=1 TO BT:LET BK=BK-1:BEEP .01,0:
3114 PRINT AT 12,14;" $";I
3120 PRINT AT 11,25; PAPER 7; INK 0;BK; PAPER 8;" "
3122 NEXT I
3124 FOR I=2 TO 6:PRINT AT I,0;,,:NEXT I
3126 LET PC1=0:LET PC2=0:LET PC3=0:LET PC4=0:LET PC5=0:LET PC6=0:LET PC7=0:LET PC8=0:LET PC9=0:LET PC10=0:LET PC11=0:LET A=0:LET DC1=0:LET DC2=0:LET DC3=0:LET DC4=0:LET DC5=0:LET DC6=0:LET D=0:LET SP=0:LET PT=0:LET DT=0
3128 PAUSE 30:RETURN
5000 REM \{20}\{1}PLAYER 1ST CARD\{20}\{0}
5001 GO SUB 3100:LET L=L+1
5002 LET X=15:LET Y=11:LET Q=C(L):GO SUB 8820:GO SUB 8800:LET PT=C(L):LET PC1=C(L)
5003 REM \{20}\{1}DEALER 1ST CARD\{20}\{0}
5004 LET L=L+1:LET A=C(L):LET X=0:LET Y=11:GO SUB 3020
5005 IF C(L)>10 THEN LET C(L)=10
5006 IF C(L)=1 THEN LET C(L)=11
5007 LET DC1=C(L):LET DT=C(L)
5008 REM \{20}\{1}PLAYER 2ND CARD\{20}\{0}
5009 LET L=L+1
5010 LET X=15:LET Y=17:LET Q=C(L):GO SUB 8820:GO SUB 8800:LET PT=PT+C(L):LET PC2=C(L):GO SUB 7800
5011 PRINT AT 14,11;"YOU HAVE ";PT
5012 IF PT=10 OR PT=11 THEN LET D=1
5013 REM \{20}\{1}DEALER 2ND CARD\{20}\{0}
5014 LET L=L+1:\{20}\{1}\{20}\{1}\{20}\{0} LET X=0:LET Y=17:LET Q=C(L):GO SUB 8820:GO SUB 8800:LET DT=DT+C(L):LET DC2=C(L):GO SUB 7800
5015 IF DC2=11 THEN GO TO 6000
5016 IF PT=21 AND DT <>21 THEN GO TO 5300
5017 IF DT=21 AND PT=21 THEN GO TO 1400
5018 IF DT=21 THEN GO TO 6010
5020 GO SUB 6800
5021 REM \{20}\{1}PLAYER 3ED CARD\{20}\{0}
5022 LET L=L+1
5024 LET X=15:LET Y=23:LET Q=C(L):GO SUB 8820:GO SUB 8800:LET PT=PT+C(L):LET PC3=C(L)
5026 GO SUB 7800:PRINT AT 14,20;PT
5027 IF PT>21 THEN GO TO 1600
5028 GO SUB 6800
5030 REM \{20}\{1}PLAYER 4TH CARD\{20}\{0}
5032 LET L=L+1
5034 LET X=15:LET Y=5:LET Q=C(L):GO SUB 8820:GO SUB 8800:LET PT=PT+C(L):LET PC4=C(L)
5036 GO SUB 7800:PRINT AT 14,20;PT
5037 IF PT>21 THEN GO TO 1600
5038 GO SUB 6800
5040 REM \{20}\{1}PLAYER 5TH CARD\{20}\{0}
5044 LET L=L+1:LET X=15:LET Y=0:LET Q=C(L):GO SUB 8820:GO SUB 8800:LET PT=PT+C(L):LET PC5=C(L)
5046 GO SUB 7800:PRINT AT 14,20;PT
5047 IF PT>21 THEN GO TO 1600
5048 GO SUB 6800
5050 REM \{20}\{1}PLAYER 6TH CARD\{20}\{0}
5054 LET L=L+1:LET X=15:LET Y=23:LET Q=C(L):GO SUB 8820:GO SUB 8800:LET PT=PT+C(L):LET PC6=C(L)
5056 GO SUB 7800:PRINT AT 14,20;PT
5057 IF PT>21 THEN GO TO 1600
5058 GO SUB 6800
5060 REM \{20}\{1}PLAYER 7TH CARD\{20}\{0}
5066 GO SUB 7800:PRINT AT 14,20;PT
5300 REM \{20}\{1}PLAYER ONLY BLACKJACK\{0}\{20}\{0}
5310 PRINT AT 17,11; PAPER 6; INK 2; FLASH 1;"BLACKJACK"
5311 PRINT AT 19,13; PAPER 6; INK 2; FLASH 1;"BLACKJACK"
5312 PAUSE 120
5314 LET Q=DC1:LET X=0:LET Y=11:GO SUB 8820:GO SUB 8800:PAUSE 120
5315 LET G=BT+ INT (BT*1.5)
5318 FOR I=1 TO G:LET BK=BK+1:BEEP .01,0:PRINT AT 11,25; PAPER 7;BK; PAPER 8;" ":NEXT I
5320 PAUSE 120:PRINT AT 12,16;" ":PRINT AT 13,19;" ":GO TO 5000
5500 REM \{20}\{1}DEALER SECTION NORMAL\{20}\{0}
5502 LET Q=A:LET X=0:LET Y=11:GO SUB 8820:GO SUB 8800
5504 PRINT AT 7,12; PAPER 1; INK 7;"I HAVE ";DT:PAUSE 120
5508 IF DT<17 THEN GO TO 5512
5510 GO TO 5800
5511 REM \{20}\{1}DEALER 3ED CARD\{20}\{0}\{20}\{0}
5512 LET L=L+1:LET Q=C(L):LET X=0:LET Y=23:GO SUB 8820:GO SUB 8800:LET DC3=C(L):LET DT=DT+C(L)
5518 GO SUB 7800:PRINT AT 7,19; PAPER 1; INK 7;DT:PAUSE 180
5520 IF DT>21 THEN GO TO 1800
5522 IF DT<17 THEN GO TO 5530
5524 GO TO 5800
5526 REM \{20}\{1}DEALER 4TH CARD\{20}\{0}\{20}\{0}
5530 LET L=L+1:LET Q=C(L):LET X=0:LET Y=5:GO SUB 8820:GO SUB 8800:LET DC4=C(L):LET DT=DT+C(L)
5532 GO SUB 7800:PRINT AT 7,19; PAPER 1; INK 7;DT:PAUSE 180
5534 IF DT>21 THEN GO TO 1800
5536 IF DT<17 THEN GO TO 5542
5538 GO TO 5800
5540 REM \{20}\{1}DEALER 5TH CARD\{20}\{0}\{20}\{0}
5542 LET L=L+1:LET Q=C(L):LET X=0:LET Y=26:GO SUB 8820:GO SUB 8800:LET DC5=C(L):LET DT=DT+C(L)
5544 GO SUB 7800:PRINT AT 7,19; PAPER 1; INK 7;DT:PAUSE 180
5546 IF DT>21 THEN GO TO 1800
5548 IF DT<17 THEN GO TO 5554
5550 GO TO 5800
5552 REM \{20}\{1}DEALER 6TH CARD\{20}\{0}\{20}\{0}
5554 LET L=L+1:LET Q=C(L):LET X=0:LET Y=0:GO SUB 8820:GO SUB 8800:LET DC6=C(L):LET DT=DT+C(L)
5556 GO SUB 7800:PRINT AT 7,19; PAPER 1; INK 7;DT:PAUSE 180
5558 IF DT>21 THEN GO TO 1800
5560 GO TO 5800
5800 REM \{20}\{1}NON BUST DETERMINATION\{20}\{0}
5810 IF DT<PT THEN GO TO 1000
5812 IF DT>PT THEN GO TO 1200
5814 IF DT=PT THEN GO TO 1404
5999 REM \{20}\{1}INSURENCE\{20}\{0}
6000 PRINT AT 7,11; INVERSE 1; FLASH 1; INK 2; PAPER 7;"INSURENCE ?"
6002 INPUT LINE Z$
6003 IF Z$="" THEN GO TO 6002
6004 IF Z$(1) <>"Y" AND Z$(1) <>"N" THEN GO TO 6000
6006 IF Z$(1)="Y" THEN GO TO 6020
6008 IF DC1 <>10 THEN PRINT AT 7,0;,,,,:GO TO 5016
6010 LET X=0:LET Y=11:LET Q=A:GO SUB 8820:GO SUB 8800:
6012 PRINT AT 7,0;,,,,; AT 7,12; FLASH 1; PAPER 7; INK 0; INVERSE 1;"BLACKJACK"
6013 IF PT=21 THEN PAUSE 120:GO TO 6072
6014 PRINT AT 12,16;" "
6018 PAUSE 120:GO TO 5000
6020 PRINT AT 7,7;"YOU CAN BET UP TO "; INT (BT/2)
6022 INPUT IB
6024 IF IB> INT (BT/2) THEN GO TO 6020
6026 PRINT AT 7,0;,,,,:PRINT AT 7,5;"YOUR INSURENCE BET IS ";IB; AT 8,10;"I THANK YOU"
6027 PAUSE 120
6028 FOR I=IB TO 1 STEP -1:LET BK=BK-1
6030 PRINT AT 11,25; PAPER 7;BK; PAPER 8;" ":BEEP .01,1:NEXT I
6031 PAUSE 120
6032 IF DC1=10 THEN GO TO 6040
6034 PRINT AT 7,0;,,,,:PRINT AT 7,5;"I DON'T HAVE BLACKJACK"; AT 8,4;"I THANK YOU FOR YOUR BET"
6036 PAUSE 120
6038 PRINT AT 7,0,,,,:GO TO 5016
6040 IF PT=21 THEN GO TO 6058
6041 PRINT AT 7,0;,,,,; AT 7,12; FLASH 1; PAPER 7; INK 0; INVERSE 1;"BLACKJACK"
6042 LET Q=DC1:LET X=0:LET Y=11:GO SUB 8820:GO SUB 8800:
6044 PRINT AT 12,16;" "
6046 FOR I=1 TO IB:LET BK=BK+3:
6048 PRINT AT 11,25; PAPER 7;BK; PAPER 8;" ":BEEP .01,0:NEXT I
6051 PAUSE 120
6052 PRINT AT 7,0;,,,,
6054 GO TO 5000
6058 LET Q=DC1:LET X=0:LET Y=11:GO SUB 8820:GO SUB 8800:
6060 PRINT AT 7,0;,,,,; AT 7,5;"WE PUSH AND YOU WIN YOUR"; AT 8,10;"INSURENCE BET"
6061 LET BK=BK+BT
6062 PRINT AT 11,25; PAPER 7;BK; PAPER 8;" "
6064 FOR I=1 TO IB:LET BK=BK+2:BEEP .01,0:PRINT AT 11,25; PAPER 7;BK; PAPER 8;" ":NEXT I
6065 PAUSE 120
6066 PRINT AT 12,16;" "; AT 7,0;,,,,
6070 PAUSE 120:GO TO 5000
6072 PRINT AT 7,0;,,,,; AT 8,14; INK 7; PAPER 1;"PUSH"
6074 PRINT AT 12,16;" "
6076 LET BK=BK+BT
6078 PRINT AT 13,23;"$";BK; PAPER 8;" "
6080 PAUSE 180
6082 GO TO 5000
6801 IF D THEN GO TO 6826
6802 PRINT AT 8,10; FLASH 1;" HIT "; FLASH 0;"/"; FLASH 1;" STAND "
6803 INPUT LINE Z$
6804 IF Z$="" THEN GO TO 6803
6805 IF Z$(1) <>"S" AND Z$(1) <>"H" THEN GO TO 6803
6806 PRINT AT 8,10;,,
6808 IF Z$(1)="H" THEN PRINT AT 8,0;,,:RETURN
6810 GO TO 5500
6826 PRINT AT 7,0;" DO YOU WANT TO GO FOR DOUBLES";,;" YOU GET ONE CARD FACE DOWN."
6828 INPUT LINE Z$
6829 IF Z$="" THEN GO TO 6828
6830 IF Z$ <>"Y" AND Z$ <>"N" THEN GO TO 6828
6832 PRINT AT 7,0;,,,,
6833 IF Z$(1)="Y" THEN GO TO 7000
6834 LET D=0:GO TO 6800
6999 REM \{20}\{1}DOUBLE SECTION\{20}\{0}
7000 GO SUB 7300:LET L=L+1:LET AA=C(L):LET X=15:LET Y=14:GO SUB 3020
7001 IF C(L)>10 THEN LET C(L)=10
7002 IF C(L)=1 THEN LET C(L)=11
7003 LET PT=PT+C(L):LET PC3=C(L)
7004 GO SUB 7800
7006 LET Q=A:LET X=0:LET Y=11:GO SUB 8820:GO SUB 8800
7007 PRINT AT 7,12; PAPER 1; INK 7;"I HAVE ";DT:PAUSE 120
7008 IF DT<17 THEN GO TO 7012
7010 GO TO 7400
7012 LET L=L+1:LET Q=C(L):LET X=0:LET Y=23:GO SUB 8820:GO SUB 8800:LET DC3=C(L):LET DT=DT+C(L)
7018 GO SUB 7800:PRINT AT 7,19; PAPER 1; INK 7;DT:PAUSE 180
7020 IF NOT DT>21 THEN IF DT<17 THEN GO TO 7030
7024 GO TO 7400
7030 LET L=L+1:LET Q=C(L):LET X=0:LET Y=5:GO SUB 8820:GO SUB 8800:LET DC4=C(L):LET DT=DT+C(L)
7032 GO SUB 7800:PRINT AT 7,19; PAPER 1; INK 7;DT:PAUSE 180
7034 IF NOT DT>21 THEN IF DT<17 THEN GO TO 7042
7036 GO TO 7400
7042 LET L=L+1:LET Q=C(L):LET X=0:LET Y=26:GO SUB 8820:GO SUB 8800:LET DC5=C(L):LET DT=DT+C(L)
7044 GO SUB 7800:PRINT AT 7,19; PAPER 1; INK 7;DT:PAUSE 180
7046 GO TO 7400
7300 FOR I=1 TO BT:LET BK=BK-1:LET BT=BT+1:PRINT AT 11,25; PAPER 7;BK; PAPER 8;" "; AT 12,16;BT;" ":BEEP .01,0:NEXT I
7302 RETURN
7400 LET Q=AA:LET X=15:LET Y=14:GO SUB 8820:GO SUB 8800:
7402 PRINT AT 14,11;"YOU HAVE ";PT
7404 PAUSE 120:
7405 LET D=0
7406 IF DT>21 THEN GO TO 1800
7408 IF DT<PT THEN GO TO 1000
7410 IF DT>PT THEN GO TO 1200
7412 LET BT= INT (BT/2):LET BK=BK+BT:PRINT AT 12,16;BT;" "; AT 11,25; PAPER 7;BK; PAPER 8;" "
7414 IF DT=PT THEN GO TO 1400
7800 REM \{20}\{1}ACE ONE OR ELEVEN\{20}\{0}
7802 IF PC1=11 AND PT>21 THEN LET PC1=1:LET PT=PT-10:RETURN
7803 IF DC1=11 AND DT>21 THEN LET DC1=1:LET DT=DT-10:RETURN
7804 IF PC2=11 AND PT>21 THEN LET PC2=1:LET PT=PT-10:RETURN
7805 IF DC2=11 AND DT>21 THEN LET DC2=1:LET DT=DT-10:RETURN
7806 IF PC3=11 AND PT>21 THEN LET PC3=1:LET PT=PT-10:RETURN
7807 IF DC3=11 AND DT>21 THEN LET DC3=1:LET DT=DT-10:RETURN
7808 IF PC4=11 AND PT>21 THEN LET PC4=1:LET PT=PT-10:RETURN
7809 IF DC4=11 AND DT>21 THEN LET DC4=1:LET DT=DT-10:RETURN
7810 IF PC5=11 AND PT>21 THEN LET PC5=1:LET PT=PT-10:RETURN
7811 IF DC5=11 AND DT>21 THEN LET DC5=1:LET DT=DT-10:RETURN
7812 IF PC6=11 AND PT>21 THEN LET PC6=1:LET PT=PT-10:RETURN
7813 IF DC6=11 AND DT>21 THEN LET DC6=1:LET DT=DT-10:RETURN
7814 IF PC7=11 AND PT>21 THEN LET PC7=1:LET PT=PT-10:RETURN
7816 IF PC8=11 AND PT>21 THEN LET PC8=1:LET PT=PT-10:RETURN
7818 IF PC9=11 AND PT>21 THEN LET PC9=1:LET PT=PT-10:RETURN
7820 IF PC10=11 AND PT>21 THEN LET PC10=1:LET PT=PT-10:RETURN
7822 IF PC11=11 AND PT>21 THEN LET PC11=1:LET PT=PT-10:RETURN
7824 RETURN
7999 REM \{20}\{1}CARD PRINTIMG\{20}\{0}
8800 IF V1=74 OR V1=75 OR V1=81 THEN GO TO 8804
8801 IF V1=65 THEN GO TO 8818
8802 PRINT AT X,Y; PAPER 7; INK K; CHR$ V1;" "; AT X+1,Y; CHR$ S1; CHR$ A13; CHR$ A14; CHR$ A15;" "; AT X+2,Y;" "; CHR$ A10; CHR$ A11; CHR$ A12;" "; AT X+3,Y;" "; CHR$ A7; CHR$ A8; CHR$ A9;" "; AT X+4,Y;" "; CHR$ A4; CHR$ A5; CHR$ A6;" "; AT X+5,Y;" "; CHR$ A1; CHR$ A2; CHR$ A3; CHR$ V1; AT X+6,Y;" "; CHR$ S1
8803 BEEP .25,25:RETURN
8804 IF V1 <>74 THEN GO TO 8808
8806 PRINT AT X,Y; PAPER 7; INK K; CHR$ V1;" "; AT X+1,Y; CHR$ S1;"\{20}\{1}\{20}\{0}\::\::\:: "; AT X+2,Y;" \:: "; AT X+3,Y;" \:: "; AT X+4,Y;"\ : \:: "; AT X+5,Y;"\ :\::\:: "; CHR$ V1; AT X+6,Y;" "; CHR$ S1
8807 BEEP .25,25:RETURN
8808 IF V1 <>81 THEN GO TO 8812
8810 PRINT AT X,Y; PAPER 7; INK K; CHR$ V1;" "; AT X+1,Y; CHR$ S1;"\::\::\:: "; AT X+2,Y;" \: \ : "; AT X+3,Y;" \: \ : "; AT X+4,Y;" \: \ :\ : "; AT X+5,Y;" \::\::\::"; CHR$ V1; AT X+6,Y;" \ ' "; CHR$ S1
8811 BEEP .25,25:RETURN
8812 PRINT AT X,Y; PAPER 7; INK K; CHR$ V1;" "; AT X+1,Y; CHR$ S1;" "; AT X+2,Y;" "; AT X+3,Y;" ^^^ "; AT X+3,Y; OVER 1;" \..\..\.. "; OVER 0; AT X+4,Y;" \''\''\'' "; AT X+5,Y;" "; CHR$ V1; AT X+6,Y;" "; CHR$ S1
8813 BEEP .25,25:RETURN
8818 PRINT AT X,Y; PAPER 7; INK K; CHR$ V1;" "; AT X+1,Y; CHR$ S1;" "; AT X+2,Y;" "; AT X+3,Y;" "; CHR$ S1;" "; AT X+4,Y;" "; AT X+5,Y;" "; CHR$ V1; AT X+6,Y;" "; CHR$ S1
8819 BEEP .25,25:RETURN
8820 IF Q <>1 THEN GO TO 8830
8821 LET V1=65
8822 IF P(1)=0 THEN LET K=0:LET S1=148
8823 IF P(1)=1 THEN LET K=2:LET S1=145:GO TO 8829
8824 IF P(1)=2 THEN LET K=0:LET S1=147:GO TO 8829
8825 IF P(1)=3 THEN LET K=2:LET S1=146
8829 LET P(1)=P(1)+1:LET C(L)=11:RETURN
8830 IF Q <>2 THEN GO TO 8840
8831 LET V1=50
8832 IF P(2)=0 THEN LET K=2:LET S1=145:GO TO 8836
8833 IF P(2)=1 THEN LET K=0:LET S1=148:GO TO 8836
8834 IF P(2)=2 THEN LET K=2:LET S1=146:GO TO 8836
8835 IF P(2)=3 THEN LET K=0:LET S1=147
8836 LET A1=32:LET A2=S1:LET A3=32:LET A4=32:LET A5=32:LET A6=32:LET A7=32:LET A8=32:LET A9=32
8837 LET A10=32:LET A11=32:LET A12=32:LET A13=32:LET A14=S1:LET A15=32
8839 LET P(2)=P(2)+1:RETURN
8840 IF Q <>3 THEN GO TO 8850
8841 LET V1=51
8842 IF P(3)=0 THEN LET K=0:LET S1=148:GO TO 8847
8843 IF P(3)=1 THEN LET K=2:LET S1=145:GO TO 8847
8844 IF P(3)=2 THEN LET K=0:LET S1=147:GO TO 8847
8845 IF P(3)=3 THEN LET K=2:LET S1=146
8847 LET A1=32:LET A2=S1:LET A3=32:LET A4=32:LET A5=32:LET A6=32:LET A7=32:LET A8=S1:LET A9=32
8848 LET A10=32:LET A11=32:LET A12=32:LET A13=32:LET A14=S1:LET A15=32
8849 LET P(3)=P(3)+1:RETURN
8850 IF Q <>4 THEN GO TO 8860
8851 LET V1=52
8852 IF P(4)=0 THEN LET K=2:LET S1=146:GO TO 8857
8853 IF P(4)=1 THEN LET K=0:LET S1=148:GO TO 8857
8854 IF P(4)=2 THEN LET K=2:LET S1=145:GO TO 8857
8855 IF P(4)=3 THEN LET K=0:LET S1=147
8857 LET A1=S1:LET A2=32:LET A3=S1:LET A4=32:LET A5=32:LET A6=32:LET A7=32:LET A8=32:LET A9=32
8858 LET A10=32:LET A11=32:LET A12=32:LET A13=S1:LET A14=32:LET A15=S1
8859 LET P(4)=P(4)+1:RETURN
8860 IF Q <>5 THEN GO TO 8870
8861 LET V1=53
8862 IF P(5)=0 THEN LET K=0:LET S1=147:GO TO 8867
8863 IF P(5)=1 THEN LET K=2:LET S1=146:GO TO 8867
8864 IF P(5)=2 THEN LET K=2:LET S1=145:GO TO 8867
8865 IF P(5)=3 THEN LET K=0:LET S1=148
8867 LET A1=S1:LET A2=32:LET A3=S1:LET A4=32:LET A5=32:LET A6=32:LET A7=32:LET A8=S1:LET A9=32
8868 LET A10=32:LET A11=32:LET A12=32:LET A13=S1:LET A14=32:LET A15=S1
8869 LET P(5)=P(5)+1:RETURN
8870 IF Q <>6 THEN GO TO 8880
8871 LET V1=54
8872 IF P(6)=0 THEN LET K=2:LET S1=146:GO TO 8877
8873 IF P(6)=1 THEN LET K=0:LET S1=148:GO TO 8877
8874 IF P(6)=2 THEN LET K=2:LET S1=145:GO TO 8877
8875 IF P(6)=3 THEN LET K=0:LET S1=147
8877 LET A1=S1:LET A2=32:LET A3=S1:LET A4=32:LET A5=32:LET A6=32:LET A7=S1:LET A8=32:LET A9=S1
8878 LET A10=32:LET A11=32:LET A12=32:LET A13=S1:LET A14=32:LET A15=S1
8879 LET P(6)=P(6)+1:RETURN
8880 IF Q <>7 THEN GO TO 8890
8881 LET V1=55
8882 IF P(7)=0 THEN LET K=0:LET S1=147:GO TO 8887
8883 IF P(7)=1 THEN LET K=2:LET S1=145:GO TO 8887
8884 IF P(7)=2 THEN LET K=0:LET S1=148:GO TO 8887
8885 IF P(7)=3 THEN LET K=2:LET S1=146
8887 LET A1=S1:LET A2=32:LET A3=S1:LET A4=32:LET A5=32:LET A6=32:LET A7=S1:LET A8=S1:LET A9=S1
8888 LET A10=32:LET A11=32:LET A12=32:LET A13=S1:LET A14=32:LET A15=S1
8889 LET P(7)=P(7)+1:RETURN
8890 IF Q <>8 THEN GO TO 8900
8891 LET V1=56
8892 IF P(8)=0 THEN LET K=0:LET S1=147:GO TO 8897
8893 IF P(8)=1 THEN LET K=0:LET S1=148:GO TO 8897
8894 IF P(8)=2 THEN LET K=2:LET S1=145:GO TO 8897
8895 IF P(8)=3 THEN LET K=2:LET S1=146
8897 LET A1=S1:LET A2=32:LET A3=S1:LET A4=32:LET A5=S1:LET A6=32:LET A7=S1:LET A8=32:LET A9=S1
8898 LET A10=32:LET A11=S1:LET A12=32:LET A13=S1:LET A14=32:LET A15=S1
8899 LET P(8)=P(8)+1:RETURN
8900 IF Q <>9 THEN GO TO 8910
8901 LET V1=57
8902 IF P(9)=0 THEN LET K=0:LET S1=147:GO TO 8907
8903 IF P(9)=1 THEN LET K=2:LET S1=146:GO TO 8907
8904 IF P(9)=2 THEN LET K=2:LET S1=145:GO TO 8907
8905 IF P(9)=3 THEN LET K=0:LET S1=148
8907 LET A1=S1:LET A2=S1:LET A3=S1:LET A4=32:LET A5=32:LET A6=32:LET A7=S1:LET A8=S1:LET A9=S1
8908 LET A10=32:LET A11=32:LET A12=32:LET A13=S1:LET A14=S1:LET A15=S1
8909 LET P(9)=P(9)+1:RETURN
8910 IF Q <>10 THEN GO TO 8920
8911 LET V1=144
8912 IF P(10)=0 THEN LET K=0:LET S1=147:GO TO 8917
8913 IF P(10)=1 THEN LET K=0:LET S1=148:GO TO 8917
8914 IF P(10)=2 THEN LET K=2:LET S1=145:GO TO 8917
8915 IF P(10)=3 THEN LET K=2:LET S1=146
8917 LET A1=S1:LET A2=32:LET A3=S1:LET A4=S1:LET A5=32:LET A6=S1:LET A7=S1:LET A8=32:LET A9=S1
8918 LET A10=S1:LET A11=32:LET A12=S1:LET A13=S1:LET A14=32:LET A15=S1
8919 LET P(10)=P(10)+1:RETURN
8920 IF Q <>11 THEN GO TO 8930
8921 LET V1=74
8922 IF P(11)=0 THEN LET K=2:LET S1=145:GO TO 8929
8923 IF P(11)=1 THEN LET K=0:LET S1=148:GO TO 8929
8924 IF P(11)=2 THEN LET K=0:LET S1=147:GO TO 8929
8925 IF P(11)=3 THEN LET K=2:LET S1=146
8929 LET P(11)=P(11)+1:LET C(L)=10:RETURN
8930 IF Q <>12 THEN GO TO 8940
8931 LET V1=81
8932 IF P(12)=0 THEN LET K=0:LET S1=147:GO TO 8939
8933 IF P(12)=1 THEN LET K=2:LET S1=146:GO TO 8939
8934 IF P(12)=2 THEN LET K=2:LET S1=145:GO TO 8939
8935 IF P(12)=3 THEN LET K=0:LET S1=148
8939 LET P(12)=P(12)+1:LET C(L)=10:RETURN
8941 LET V1=75
8942 IF P(13)=0 THEN LET K=2:LET S1=145:GO TO 8949
8943 IF P(13)=1 THEN LET K=0:LET S1=148:GO TO 8949
8944 IF P(13)=2 THEN LET K=0:LET S1=147:GO TO 8949
8945 IF P(13)=3 THEN LET K=2:LET S1=146
8949 LET P(13)=P(13)+1:LET C(L)=10:RETURN
8999 REM \{20}\{1}SHUFFEL\{20}\{0}
9000 RANDOMIZE :PRINT AT 7,11; PAPER 0; INK 2; FLASH 1; INVERSE 1; BRIGHT 1;"SHUFFELING"
9002 FOR I=1 TO 52:LET C(I)=I:BEEP .001,I:NEXT I
9004 FOR I=1 TO 52:LET R= INT (52* RND)+1:LET Z=C(I):LET C(I)=C(R):LET C(R)=Z:BEEP .001,I:NEXT I
9006 FOR I=1 TO 52
9008 IF C(I)<14 THEN LET C(I)=C(I)
9009 IF C(I)>13 AND C(I)<27 THEN LET C(I)=C(I)-13
9010 IF C(I)>26 AND C(I)<40 THEN LET C(I)=C(I)-26
9011 IF C(I)>39 THEN LET C(I)=C(I)-39
9012 BEEP .001,I:NEXT I
9014 FOR I=1 TO 13:LET P(I)=0:BEEP .01,I*3:NEXT I
9015 LET DT=0:LET PT=0:LET L=0:LET A=0:LET PC1=0:LET PC2=0:LET PC3=0:LET PC4=0:LET PC5=0:LET PC6=0:LET PC7=0:LET PC8=0:LET PC9=0:LET PC10=0:LET PC11=0:LET DC1=0:LET DC2=0:LET DC3=0:LET DC4=0:LET DC5=0:LET DC6=0
9018 PRINT AT 7,11; PAPER 4; INK 0; FLASH 0; INVERSE 0; BRIGHT 0;" "
9022 RETURN
9100 CLS
9110 FOR I=0 TO 21:PRINT AT I,0; PAPER 1,,:PAUSE 5:NEXT I
9120 INK 7:PLOT 30,71:DRAW 200,0:DRAW 0,-11:DRAW -200,0:DRAW 0,11
9130 PLOT 40,60:DRAW 0,-50:DRAW 180,0:DRAW 0,50
9140 PLOT 80,25:DRAW -20,0:DRAW 0,25:DRAW 130,0:DRAW 10,-10:DRAW 0,-15:DRAW -20,0
9150 CIRCLE 90,25,5:CIRCLE 170,25,5:PLOT 100,25:DRAW 60,0:PLOT 60,40:DRAW 120,0
9160 DRAW 0,-15
9170 PRINT AT 17,12; INK 0;"GRAYHOUND"
9180 PRINT AT 11,5; PAPER 1;"NEXT"; AT 12,5;"I"; AT 12,8;"I":PLOT 38,79:DRAW 0,9:DRAW 35,0:DRAW 0,-9:DRAW -35,0
9190 PRINT AT 2,12; PAPER 1;"LAS VEGAS"
9192 PRINT AT 5,10; PAPER 1; INK 7;"TICKET COUNTER"
9194 PRINT AT 7,2; PAPER 7; INK 0;" BUS LEAVES EVERY 30 MINUTES"
9498 PAUSE 0
9499 STOP
9500 PRINT AT 0,0;,,,,,,,,,,,,,,,,,,,,; AT 14,0;,,,,,,,,,,,,,,,, AT 10,16;" ":GO SUB 9000:GO TO 5000
9700 GO TO 9830:REM \{20}\{1}RULES\{20}\{0}
9701 PRINT :PRINT " THE OBJECT OF BLACKJACK IS TO "
9702 PRINT :PRINT " REACH A POINT TOTAL OF 21 "
9704 PRINT :PRINT " ...WITHOUT GOING OVER...."
9706 PRINT :PRINT " IF YOU GO OVER YOU ""BUST"" "
9708 PRINT :PRINT " (I hear it happens a lot)"
9710 PRINT :PRINT " THE FOLLOWING LIST THE DETAILS"
9712 GO SUB 9850
9713 CLS
9714 PRINT :PRINT " A BLACKJACK (AUTOMATIC 21) IS"
9716 PRINT :PRINT " AN ACE AND ANY FACE CARD."
9718 PRINT :PRINT " IF YOU HAVE A BLACKJACK AND "
9720 PRINT :PRINT " THE HOUSE HAS ONE AT THE SAME "
9722 PRINT : PRINT " TIME; THIS IS CALLED A ""PUSH"""
9724 PRINT :PRINT " ( A TIE IN ENGLISH ) AND THE "
9726 PRINT :PRINT " HAND AND BET ARE CANCELED"
9728 PRINT :PRINT " THIS RULE APPLIES TO ALL TIES"
9730 GO SUB 9850
9731 CLS
9732 PRINT :PRINT " YOU PLACE YOUR BET DEFORE THE"
9734 PRINT :PRINT " CARDS ARE DEALT UP TO THE MAX."
9736 PRINT :PRINT " IF YOUR FIRST TWO CARDS EQUAL"
9738 PRINT :PRINT " TEN OR ELEVEN THE COMPUTER "
9740 PRINT :PRINT " WILL ASK ""DOUBLE ?"". IF YOU"
9742 PRINT :PRINT " ENTER ""N"" (NO) THE HAND WILL"
9744 PRINT :PRINT " CONTINUE. IF YOU ENTER ""Y""(YES)"
9746 PRINT :PRINT " YOUR BET WILL DOUBLE AND YOU"
9748 PRINT :PRINT " WILL RECEIVE (ONLY) ONE CARD"
9750 GO SUB 9850
9751 CLS
9770 PRINT :PRINT " IF THE DEALER HAS AN ACE FACE"
9772 PRINT :PRINT " UP THE COMPUTER WILL ASK IF "
9774 PRINT :PRINT " YOU WANT INSURANCE. IF YOU "
9776 PRINT :PRINT " HAVE A GOOD HAND AND YOU THINK"
9778 PRINT :PRINT " THE DEALER HAS BLACKJACK THEN"
9780 PRINT :PRINT " YOU BET UP TO 1/2 OF YOUR "
9782 PRINT :PRINT " CURRENT BET. IF THE DEALER"
9784 PRINT :PRINT " DOESN'T HAVE BLACKJACK THEN "
9786 PRINT :PRINT " YOU LOSE YOUR INSURANCE BET."
9788 GO SUB 9850
9789 CLS
9790 PRINT :PRINT " IF THE DEALER DOES HAVE A"
9792 PRINT :PRINT " BLACKJACK THEN YOU LOSE YOUR"
9793 PRINT :PRINT " BET AND ARE PAID DOUBLE FOR "
9794 PRINT :PRINT " YOUR INSURANCE WAGER."
9795 PRINT :PRINT " YOU INSURANCE BET ACTUALY "
9796 PRINT :PRINT " NULLIFIES HIS BLACKJACK."
9797 GO SUB 9850
9798 CLS
9799 PRINT ''" YOU HAVE $1000. "
9800 PRINT ''" THE MAXIMUM BET AT THIS TABLE IS $50"
9802 PRINT ''" TO GET ANOTHER CARD YOU ""HIT"""
9804 PRINT ''" YOU ""STAND"" IF YOU DON'T WANT ANY MORE CARDS"
9806 PRINT ''" 2-9=FACE VALUE",," 10-J-Q-K=10",," A=1 OR 11"
9808 PRINT ''" PRESS ENTER TO PLACE YOUR BET"
9825 GO SUB 9850:CLS :RETURN
9830 PRINT AT 2,0;" PRESS KEY ""Y"" TO SEE RULES"," PRESS ENTER TO START GAME"
9835 INPUT A$
9840 IF A$="Y" THEN GO TO 9701
9845 CLS :RETURN
9850 INPUT "PRESS ENTER TO CONTINUE"; LINE Z$:BEEP .05,10:RETURN
9899 RETURN
9900 REM \{20}\{1}INITILISE\{20}\{0}
9901 PAPER 4:BORDER 1:CLS
9910 LET G=0:LET L=0:LET DT=0:LET PT=0:LET Q=0:DIM P(13):DIM C(52):LET BT=0:LET BK=1000:LET Z=21
9920 RETURN
9999 PAPER 7:BORDER 7:INK 0
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

