'BJ.BAS 'by Justin Rosenberg ' 'taken from The QBasic Page at http://qbasic.com DECLARE SUB hit () DECLARE SUB ext () DECLARE SUB stik () DECLARE SUB CHOICES () DECLARE SUB intro () DECLARE SUB makedeck () DECLARE SUB first3 () DECLARE SUB backgrnd () DECLARE SUB ASSIGN () ' Game ' Black Jack ' Programming by Justin Rosenberg RANDOMIZE TIMER you = 0 deal = 0 push = 0 intro makedeck start: backgrnd first3 x = 1 y = 300 a = 45 b = 330 control = 0 again: SLOW = SLOW + 1: IF SLOW / 50 = INT(SLOW / 50) THEN C = RND * 15 LINE (x, y)-(a, b), C, B key$ = INKEY$ IF key$ = CHR$(0) + "M" THEN x = x + 60: a = a + 60 IF key$ = CHR$(0) + "K" THEN x = x - 60: a = a - 60 IF x > 151 THEN x = x - 60: a = a - 60 IF x < 1 THEN x = x + 60: a = a + 60 IF key$ = CHR$(13) THEN GOTO sort LINE (1, 300)-(45, 330), 4, B LINE (61, 300)-(105, 330), 4, B LINE (121, 300)-(165, 330), 4, B IF control = 1 THEN GOTO endy GOTO again sort: IF x = 1 THEN hit IF x = 61 THEN stik IF x = 121 THEN ext GOTO again endy: GOTO start SUB ASSIGN SHARED CHOICE, card$, card card = 0 IF CHOICE <= 36 THEN card = VAL(card$): GOTO finish IF card$ = "J " OR card$ = "Q " OR card$ = "K " THEN card = 10: GOTO finish IF card$ = " J" OR card$ = " Q" OR card$ = " K" THEN card = 10: GOTO finish IF card$ = "J" OR card$ = "Q" OR card$ = "K" THEN card = 10: GOTO finish card = 11 finish: END SUB SUB backgrnd SHARED uX, dx CLS SCREEN 9 ' Drawing background graphics CIRCLE (320, 10), 425, 6 PAINT (320, 1), 6 CIRCLE (320, 1), 425, 0 CIRCLE (320, 10), 425, 0 CIRCLE (320, 10), 425.8, 4 PAINT (360, 349), 4 LINE (120, 25)-(520, 250), 2, BF ' Drawing boxes where the cards will go LINE (125, 30)-(195, 125), 15, BF LINE (125, 150)-(195, 245), 15, BF LINE (205, 30)-(275, 125), 1, BF FOR y = 30 TO 125 STEP 5 LINE (205, y)-(275, y), 14 NEXT y FOR x = 205 TO 275 STEP 5 LINE (x, 30)-(x, 125), 0 NEXT x LINE (205, 150)-(275, 245), 15, BF LINE (285, 30)-(355, 125), 1, B LINE (285, 150)-(355, 245), 1, B LINE (365, 30)-(435, 125), 1, B LINE (365, 150)-(435, 245), 1, B LINE (445, 30)-(515, 125), 1, B LINE (445, 150)-(515, 245), 1, B dx = 125 uX = 205 ' Labeling areas COLOR 1 LOCATE 1, 1 PRINT "Spider Casino" LOCATE 2, 1 PRINT "Dealer hits " LOCATE 3, 1 PRINT "on 16 and less" LOCATE 23, 2 PRINT "HIT" LOCATE 23, 9 PRINT "STICK" LOCATE 23, 17 PRINT "EXIT" LOCATE 23, 63 PRINT "YOUR HAND =" LOCATE 1, 62 PRINT "DEALER'S HAND=" END SUB SUB ext SHARED you, dealer, push, control, utot, dtot, card5 IF card5 = 1 THEN LOCATE 20, 20: PRINT "You got 5 cards without going over. You win": card5 = 0 LOCATE 21, 27 PRINT "Press the enter to continue" enter: IF INKEY$ <> CHR$(13) THEN GOTO enter LOCATE 10, 1 PRINT "Wins"; you PRINT "Loses"; dealer PRINT "Ties"; push PRINT "Winning" PRINT "Percentage "; IF you = 0 THEN PRINT 0 ELSE PRINT INT(you / (you + dealer + push) * 100); LOCATE 20, 2 PRINT "Play" LOCATE 21, 2 PRINT "Again?" LOCATE 23, 2 PRINT "YES" LOCATE 23, 9 PRINT "NO " LOCATE 23, 17 PRINT " " x = 1 y = 300 a = 45 b = 330 SLOW = 0 REM Covers up white space around text LINE (121, 300)-(165, 330), 4, BF LINE (80, 290)-(104, 325), 4, BF trap: SLOW = SLOW + 1: IF SLOW / 50 = INT(SLOW / 50) THEN C = RND * 15 LINE (x, y)-(a, b), C, B key$ = INKEY$ IF key$ = CHR$(0) + "M" THEN x = x + 60: a = a + 60 IF key$ = CHR$(0) + "K" THEN x = x - 60: a = a - 60 IF x > 120 THEN x = x - 60: a = a - 60 IF x < 1 THEN x = x + 60: a = a + 60 IF key$ = CHR$(13) THEN GOTO endtrap LINE (1, 300)-(45, 330), 4, B LINE (61, 300)-(105, 330), 4, B GOTO trap endtrap: IF x = 1 THEN control = 1: GOTO ENDIT IF x = 61 THEN GOTO Gameover: ENDIT: utot = 0 dtot = 0 GOTO endend: Gameover: SCREEN 0, 0, 0 x = 1 y = 1 a = 1 b = 23 times = 1 WHILE INKEY$ = "" AND times < 333 times = times + 1 LOCATE y, x PRINT " " IF x = 71 THEN controlx$ = "left" IF x = 1 THEN controlx$ = "right" IF y = 1 THEN controly$ = "down" IF y = 23 THEN controly$ = "up" IF controlx$ = "left" THEN x = x - 2 IF controlx$ = "right" THEN x = x + 2 IF controly$ = "down" THEN y = y + 1 IF controly$ = "up" THEN y = y - 1 LOCATE b, a PRINT " " IF a = 61 THEN controla$ = "left" IF a = 1 THEN controla$ = "right" IF b = 1 THEN controlb$ = "down" IF b = 23 THEN controlb$ = "up" IF controla$ = "left" THEN a = a - 1 IF controla$ = "right" THEN a = a + 1 IF controlb$ = "down" THEN b = b + 1 IF controlb$ = "up" THEN b = b - 1 IF (y = b AND x > a AND x < a + 19) OR (b = y AND a > x AND a < x + 9) THEN GOTO collision RETURN.back: LOCATE y, x COLOR RND * 10 PRINT "Game Over" LOCATE b, a COLOR RND * 10 PRINT "Thanks for playing!" FOR stall = 1 TO 1900 NEXT stall WEND SYSTEM collision: IF controly$ = "down" THEN controly$ = "up" ELSE controly$ = "down" IF controlb$ = "down" THEN controlb$ = "up" ELSE controlb$ = "down" GOTO RETURN.back endend: END SUB SUB first3 SHARED card, CHOICE, card$, utot, dtot, uX, ul1, ul2, dl1, dl2, dx, you ' Dealing fist 3 cards over: CLOSE OPEN "Deck.dat" FOR RANDOM AS #1 LEN = 4 FIELD #1, 3 AS card$, 1 AS SUIT$ Q = 1 WHILE Q <> 0 TRYAGAIN: CHOICE = INT(RND * 52) + 1 IF CHOICE < 1 OR CHOICE > 52 THEN GOTO TRYAGAIN GET #1, CHOICE IF VAL(card$) <> 1 THEN Q = 0: ASSIGN: GOTO oto1 qq = 0 FOR x = 1 TO 52 GET #1, x IF VAL(card$) <> 1 THEN qq = 1 NEXT x IF qq = 0 THEN LOCATE 20, 30: PRINT "Deck reshuffled.": makedeck: GOTO over oto1: WEND CHOICE1 = CHOICE CARD1$ = card$ CARD1 = card SUIT1$ = SUIT$ LSET card$ = STR$(1) PUT #1, CHOICE Q = 1 WHILE Q <> 0 TRYAGAIN1: CHOICE = INT(RND * 52) + 1 IF CHOICE < 1 OR CHOICE > 52 THEN GOTO TRYAGAIN1 GET #1, CHOICE IF VAL(card$) <> 1 THEN Q = 0: ASSIGN: GOTO oto2: qq = 0 FOR x = 1 TO 52 GET #1, x IF VAL(card$) <> 1 THEN qq = 1 NEXT x IF qq = 0 THEN LOCATE 20, 30: PRINT "Deck reshuffled.": makedeck: GOTO over oto2: WEND card2$ = card$ card2 = card SUIT2$ = SUIT$ LSET card$ = STR$(1) PUT #1, CHOICE Q = 1 WHILE Q <> 0 TRYAGAIN2: CHOICE = INT(RND * 52) + 1 IF CHOICE < 1 OR CHOICE > 52 THEN GOTO TRYAGAIN2 GET #1, CHOICE IF VAL(card$) <> 1 THEN Q = 0: ASSIGN: GOTO oto3 qq = 0 FOR x = 1 TO 52 GET #1, x IF VAL(card$) <> 1 THEN qq = 1 NEXT x IF qq = 0 THEN LOCATE 20, 30: PRINT "Deck reshuffled.": makedeck: GOTO over oto3: WEND card3$ = card$ card3 = card SUIT3$ = SUIT$ LSET card$ = STR$(1) PUT #1, CHOICE CLOSE ' Displaying cards LOCATE 4, 21 IF SUIT1$ = "S" OR SUIT1$ = "C" THEN COLOR 8, 63 IF SUIT1$ = "D" OR SUIT1$ = "H" THEN COLOR 4, 63 IF SUIT1$ = "S" THEN chr = 6 IF SUIT1$ = "H" THEN chr = 3 IF SUIT1$ = "D" THEN chr = 4 IF SUIT1$ = "C" THEN chr = 5 PRINT CARD1$; CHR$(chr) dl1 = 21 dl2 = 17 LOCATE 9, 17 IF SUIT1$ = "S" OR SUIT1$ = "C" THEN COLOR 8, 63 IF SUIT1$ = "D" OR SUIT1$ = "H" THEN COLOR 4, 63 IF SUIT1$ = "S" THEN chr = 6 IF SUIT1$ = "H" THEN chr = 3 IF SUIT1$ = "D" THEN chr = 4 IF SUIT1$ = "C" THEN chr = 5 PRINT CARD1$; CHR$(chr) LOCATE 17, 17 IF SUIT2$ = "S" OR SUIT2$ = "C" THEN COLOR 8, 63 IF SUIT2$ = "D" OR SUIT2$ = "H" THEN COLOR 4, 63 IF SUIT2$ = "S" THEN chr = 6 IF SUIT2$ = "H" THEN chr = 3 IF SUIT2$ = "D" THEN chr = 4 IF SUIT2$ = "C" THEN chr = 5 PRINT card2$; CHR$(chr) LOCATE 12, 21 IF SUIT2$ = "S" OR SUIT2$ = "C" THEN COLOR 8, 63 IF SUIT2$ = "D" OR SUIT2$ = "H" THEN COLOR 4, 63 IF SUIT2$ = "S" THEN chr = 6 IF SUIT2$ = "H" THEN chr = 3 IF SUIT2$ = "D" THEN chr = 4 IF SUIT2$ = "C" THEN chr = 5 PRINT card2$; CHR$(chr) LOCATE 12, 31 IF SUIT3$ = "S" OR SUIT3$ = "C" THEN COLOR 8, 63 IF SUIT3$ = "D" OR SUIT3$ = "H" THEN COLOR 4, 63 IF SUIT3$ = "S" THEN chr = 6 IF SUIT3$ = "H" THEN chr = 3 IF SUIT3$ = "D" THEN chr = 4 IF SUIT3$ = "C" THEN chr = 5 PRINT card3$; CHR$(chr) LOCATE 17, 27 IF SUIT3$ = "S" OR SUIT3$ = "C" THEN COLOR 8, 63 IF SUIT3$ = "D" OR SUIT3$ = "H" THEN COLOR 4, 63 IF SUIT3$ = "S" THEN chr = 6 IF SUIT3$ = "H" THEN chr = 3 IF SUIT3$ = "D" THEN chr = 4 IF SUIT3$ = "C" THEN chr = 5 PRINT card3$; CHR$(chr) ul1 = 31 ul2 = 27 ' adding cards dtot = CARD1 utot = card2 + card3 COLOR 1 LOCATE 1, 76 PRINT dtot LOCATE 23, 74 PRINT utot IF utot = 21 THEN LOCATE 20, 30: PRINT "Black Jack. You win": you = you + 1: ext: backgrnd: GOTO over IF utot = 22 THEN utot = 12 END SUB SUB hit SHARED utot, dtot, CHOICE, card, card$, uX, dx, ul1, ul2, dl1, dl2, you, dealer, push, control2, card5 over2: CLOSE OPEN "Deck.dat" FOR RANDOM AS #1 LEN = 4 FIELD #1, 3 AS card$, 1 AS SUIT$ Q = 1 WHILE Q <> 0 TRYAGAINhit: CHOICE = INT(RND * 100) + 1 IF CHOICE < 1 OR CHOICE > 52 THEN GOTO TRYAGAINhit GET #1, CHOICE IF VAL(card$) <> 1 THEN Q = 0: ASSIGN: GOTO oto4 qq = 0 FOR x = 1 TO 52 GET #1, x IF VAL(card$) <> 1 THEN qq = 1 NEXT x IF qq = 0 THEN LOCATE 20, 30: PRINT "Deck reshuffled.": makedeck: GOTO over2 oto4: WEND cardd$ = card$ LSET card$ = STR$(1) PUT #1, CHOICE COLOR 1 utot = utot + card LOCATE 23, 74 PRINT utot uX = uX + 80 LINE (uX, 150)-(uX + 70, 245), 15, BF ul1 = ul1 + 10 ul2 = ul2 + 10 LOCATE 12, ul1 IF SUIT$ = "S" OR SUIT$ = "C" THEN COLOR 8, 63 IF SUIT$ = "D" OR SUIT$ = "H" THEN COLOR 4, 63 IF SUIT$ = "S" THEN chr = 6 IF SUIT$ = "H" THEN chr = 3 IF SUIT$ = "D" THEN chr = 4 IF SUIT$ = "C" THEN chr = 5 PRINT cardd$; CHR$(chr) LOCATE 17, ul2 IF SUIT$ = "S" OR SUIT$ = "C" THEN COLOR 8, 63 IF SUIT$ = "D" OR SUIT$ = "H" THEN COLOR 4, 63 IF SUIT$ = "S" THEN chr = 6 IF SUIT$ = "H" THEN chr = 3 IF SUIT$ = "D" THEN chr = 4 IF SUIT$ = "C" THEN chr = 5 PRINT cardd$; CHR$(chr) IF utot > 21 THEN LOCATE 20, 30: PRINT "You Busted. Dealer wins": dealer = dealer + 1: ext IF utot = 21 THEN LOCATE 20, 30: PRINT "You win": you = you + 1: ext IF uX = 445 AND utot < 21 THEN card5 = 1: you = you + 1: backgrnd: ext CLOSE END SUB SUB intro ' Intro to Black Jack Game ' By: Justin Rosenberg ' This is the intro to Black Jack CLS COLOR 2 ' CIRCLES SCREEN 12 RANDOMIZE TIMER SCREEN 9 FOR Q = 1 TO 5 FOR E = 0 TO 1 STEP .01 C = RND * 15 x = RND * 600 y = RND * 400 FOR R = 10 TO 100 STEP 10 CIRCLE (x, y), R, C, , , E IF INKEY$ <> "" THEN GOTO skippy NEXT R NEXT E C = INT(RND * 15) IF C = 0 THEN C = 1 COLOR C LOCATE 13, 35 PRINT "BLACK JACK" LOCATE 23, 65 PRINT "SPIDER SOFTWARE" FOR PAUSE = 1 TO 5000 NEXT PAUSE NEXT Q skippy: COLOR 2 CLS SCREEN 9 COLOR 3 PRINT "SPIDER SOFTWARE PRESENTS BLACK JACK." PRINT "PROGRAMMED BY JUSTIN ROSENBERG." PRINT "ANY SUGESTIONS SHOULD BE SENT TO JPROSE@UIT.NET" PRINT "INSTRUCTIONS" PRINT "THE GAME IS PLAYED LIKE REGULAR BLACK JACK EXCEPT FOR A FEW EXCEPTIONS." PRINT "-----------------------------------------------------------------------" PRINT "1.> ACES ARE 11 UNLESS YOU ARE DEALT 2 ACES." PRINT "2.> DEALER HITS ON 16 OR LESS." PRINT "3.> USE LEFT AND RIGHT ARROW KEYS TO SELECT ACTION." PRINT "4.> ACTIONS ARE AS FOLLOWS HIT,STICK,AND EXIT." PRINT "5.> ONLY ONE DECK IS USED." PRINT "6.> YOU WILL NOT BE TOLD WHEN THAT DECK IS SHUFFLED." PRINT "7.> THE DECK WILL NOT BE SHUFFLED TILL IT IS OUT OF CARDS." PRINT "8.> HAVE FUN." PRINT "Press the enter to continue." enter1: IF INKEY$ <> CHR$(13) THEN GOTO enter1 END SUB SUB makedeck ' Creating Deck CLOSE OPEN "Deck.dat" FOR RANDOM AS #1 LEN = 4 FIELD #1, 3 AS card$, 1 AS SUIT$ location = 0 FOR x = 2 TO 10 location = location + 1 crd$ = STR$(x) LSET card$ = crd$ LSET SUIT$ = "C" PUT #1, location NEXT x FOR x = 2 TO 10 location = location + 1 crd$ = STR$(x) LSET card$ = crd$ LSET SUIT$ = "D" PUT #1, location NEXT x FOR x = 2 TO 10 location = location + 1 crd$ = STR$(x) LSET card$ = crd$ LSET SUIT$ = "H" PUT #1, location NEXT x FOR x = 2 TO 10 location = location + 1 crd$ = STR$(x) LSET card$ = crd$ LSET SUIT$ = "S" PUT #1, location NEXT x FOR x = 1 TO 4 crd$ = "J" LSET card$ = crd$ IF x = 1 THEN LSET SUIT$ = "C" IF x = 2 THEN LSET SUIT$ = "D" IF x = 3 THEN LSET SUIT$ = "H" IF x = 4 THEN LSET SUIT$ = "S" location = location + 1 PUT #1, location NEXT x FOR x = 1 TO 4 crd$ = "Q" IF x = 1 THEN LSET SUIT$ = "C" IF x = 2 THEN LSET SUIT$ = "D" IF x = 3 THEN LSET SUIT$ = "H" IF x = 4 THEN LSET SUIT$ = "S" LSET card$ = crd$ location = location + 1 PUT #1, location NEXT x FOR x = 1 TO 4 crd$ = "K" LSET card$ = crd$ IF x = 1 THEN LSET SUIT$ = "C" IF x = 2 THEN LSET SUIT$ = "D" IF x = 3 THEN LSET SUIT$ = "H" IF x = 4 THEN LSET SUIT$ = "S" location = location + 1 PUT #1, location NEXT x FOR x = 1 TO 4 crd$ = "A" LSET card$ = crd$ IF x = 1 THEN LSET SUIT$ = "C" IF x = 2 THEN LSET SUIT$ = "D" IF x = 3 THEN LSET SUIT$ = "H" IF x = 4 THEN LSET SUIT$ = "S:" location = location + 1 PUT #1, location NEXT x CLOSE END SUB SUB stik SHARED dtot, utot, dl1, dl2, dx, card, card$, you, push, dealer, control, CHOICE, card5 ' Dealer recives his cards WHILE dtot < 17 over1: CLOSE OPEN "Deck.dat" FOR RANDOM AS #1 LEN = 4 FIELD #1, 3 AS card$, 1 AS SUIT$ Q = 1 WHILE Q <> 0 TRYAGAINstik: CHOICE = INT(RND * 52) + 1 IF CHOICE < 1 OR CHOICE > 52 THEN GOTO TRYAGAINstik GET #1, CHOICE IF VAL(card$) <> 1 THEN Q = 0: ASSIGN: GOTO oto5 qq = 0 FOR x = 1 TO 52 GET #1, x IF VAL(card$) <> 1 THEN qq = 1 NEXT x IF qq = 0 THEN LOCATE 20, 30: PRINT "Deck reshuffled.": makedeck: GOTO over1 oto5: WEND cardd$ = card$ LSET card$ = STR$(1) PUT #1, CHOICE dtot = dtot + card COLOR 1 LOCATE 1, 75 PRINT dtot dx = dx + 80 LINE (dx, 30)-(dx + 70, 125), 15, BF dl1 = dl1 + 10 dl2 = dl2 + 10 LOCATE 4, dl1 IF SUIT$ = "S" OR SUIT$ = "C" THEN COLOR 8, 63 IF SUIT$ = "D" OR SUIT$ = "H" THEN COLOR 4, 63 IF SUIT$ = "S" THEN chr = 6 IF SUIT$ = "H" THEN chr = 3 IF SUIT$ = "D" THEN chr = 4 IF SUIT$ = "C" THEN chr = 5 PRINT cardd$; CHR$(chr) LOCATE 9, dl2 IF SUIT$ = "S" OR SUIT$ = "C" THEN COLOR 8, 63 IF SUIT$ = "D" OR SUIT$ = "H" THEN COLOR 4, 63 IF SUIT$ = "S" THEN chr = 6 IF SUIT$ = "H" THEN chr = 3 IF SUIT$ = "D" THEN chr = 4 IF SUIT$ = "C" THEN chr = 5 PRINT cardd$; CHR$(chr) IF dtot = 21 THEN LOCATE 20, 30: PRINT "Dealer wins.": dealer = dealer + 1: ext IF dtot > 21 THEN LOCATE 20, 30: PRINT "Dealer busts. You win": you = you + 1: ext IF dx = 445 AND dtot < 21 THEN card5 = 1: dealer = dealer + 1: ext IF control = 1 THEN GOTO indY WEND IF utot = dtot THEN LOCATE 20, 30: PRINT "Push.": push = push + 1: GOTO skip IF utot > dtot THEN LOCATE 20, 30: PRINT "You Win.": you = you + 1 ELSE LOCATE 20, 30: PRINT "Dealer Wins.": dealer = dealer + 1 skip: ext indY: END SUB