'=========================================================================== ' Subject: BLACK JACK Date: 06-29-96 (20:16) ' Author: Jonathan Leger Code: QB, QBasic, PDS ' Origin: leger@mail.dtx.net Packet: GAMES.ABC '=========================================================================== DECLARE FUNCTION cval! (c$) DECLARE SUB makedeck (deck$()) DECLARE SUB drawcard (c$, Xc, Yc) DECLARE SUB center (s$, l) DECLARE SUB cline (l) SCREEN 0, 0, 0 COLOR 7, 0, 0 WIDTH 80, 25 VIEW PRINT 1 TO 25 CLS OPTION BASE 1 DIM d$(52), hh$(10), ch$(10) games = 0: score = 0 DO makedeck d$() COLOR 15, 1: CLS COLOR 0, 4: cline 1: COLOR 4, 7: center " Jon-Boy's Black Jack ", 1 COLOR 0, 7: cline 13: LOCATE 13, 5: PRINT "[ Computer's Cards ]"; cline 25: LOCATE 25, 5: PRINT "[ Your Cards ]"; COLOR 5, 7: LOCATE 13, 30: PRINT "[H]it [S]tay [Q]uit" hh$(1) = d$(1): hh$(2) = d$(3) ch$(1) = d$(2): ch$(2) = d$(4) hs = cval(hh$(1)) + cval(hh$(2)) cs = cval(ch$(1)) + cval(ch$(2)) dp = 5: hp = 3: cp = 3 drawcard ch$(1), 1, 4 drawcard "--", 14, 4 drawcard hh$(1), 1, 16 drawcard hh$(2), 14, 16 DO DO a$ = "" a$ = UCASE$(INKEY$) LOOP UNTIL a$ <> "" SELECT CASE a$ CASE "H" hh$(hp) = d$(dp) hs = hs + cval(hh$(hp)) drawcard hh$(hp), 1 + ((hp - 1) * 13), 16 IF hs > 21 THEN FOR X = 1 TO hp IF MID$(hh$(X), 1, 1) = "A" THEN hh$(X) = "1" + MID$(hh$(X), 2, 1) hs = hs - 10 IF hs <= 21 THEN EXIT FOR END IF NEXT X END IF IF hs > 21 THEN FOR X = 1 TO cp drawcard ch$(X), 1 + ((X - 1) * 13), 4 NEXT X COLOR 11, 1: cline 14: center "YOU BUSTED!!! ", 14 games = games + 1 WHILE INKEY$ = "": WEND cline 14: center "Play again (Y/N)?", 14 DO a$ = "" a$ = UCASE$(INKEY$) LOOP UNTIL a$ = "Y" OR a$ = "N" IF a$ = "N" THEN COLOR 7, 0, 0: CLS PRINT "Ending scores: [ You ]"; score; "[ Me ]"; games - score PRINT "": WHILE INKEY$ = "": WEND END END IF EXIT DO END IF hp = hp + 1 dp = dp + 1 CASE "S" m = INT(RND * 5) + 1 DO WHILE cs < 13 + m ch$(cp) = d$(dp) cs = cs + cval(ch$(cp)) IF cs > 21 THEN FOR X = 1 TO cp IF MID$(ch$(X), 1, 1) = "A" THEN ch$(X) = "1" + MID$(ch$(X), 2, 1) cs = cs - 10 IF cs <= 21 THEN EXIT FOR END IF NEXT X END IF IF cs > 21 THEN FOR X = 1 TO cp IF MID$(ch$(X), 1, 1) = "1" THEN drawcard "A" + MID$(ch$(X), 2, 1), 1 + ((X - 1) * 13), 4 ELSE drawcard ch$(X), 1 + ((X - 1) * 13), 4 END IF NEXT X COLOR 11, 1: cline 14: center "I BUSTED! ACK!!! ", 14 games = games + 1 score = score + 1 WHILE INKEY$ = "": WEND cline 14: center "Play again (Y/N)?", 14 DO a$ = "" a$ = UCASE$(INKEY$) LOOP UNTIL a$ = "Y" OR a$ = "N" IF a$ = "N" THEN COLOR 7, 0, 0: CLS PRINT "Ending scores: [ You ]"; score; "[ Me ]"; games - score PRINT "": WHILE INKEY$ = "": WEND END END IF done = 1 EXIT DO END IF cp = cp + 1 dp = dp + 1 LOOP IF done = 1 THEN done = 0: EXIT DO FOR X = 1 TO (cp - 1) IF MID$(ch$(X), 1, 1) = "1" THEN drawcard "A" + MID$(ch$(X), 2, 1), 1 + ((X - 1) * 13), 4 ELSE drawcard ch$(X), 1 + ((X - 1) * 13), 4 END IF NEXT X FOR X = 1 TO (hp - 1) IF MID$(ch$(X), 1, 1) = "1" THEN drawcard "A" + MID$(hh$(X), 2, 1), 1 + ((X - 1) * 13), 16 ELSE drawcard hh$(X), 1 + ((X - 1) * 13), 16 END IF NEXT X IF hs > cs THEN COLOR 11, 1: cline 14: center "YOU WIN!!! ", 14 score = score + 1 ELSEIF hs = cs THEN COLOR 11, 1: cline 14: center "TIE GAME. ", 14 games = games - 1 ELSE COLOR 11, 1: cline 14: center "I WIN!!! ", 14 END IF games = games + 1 WHILE INKEY$ = "": WEND cline 14: center "Play again (Y/N)?", 14 DO a$ = "" a$ = UCASE$(INKEY$) LOOP UNTIL a$ = "Y" OR a$ = "N" IF a$ = "N" THEN COLOR 7, 0, 0: CLS PRINT "Ending scores: [ You ]"; score; "[ Me ]"; games - score PRINT "": WHILE INKEY$ = "": WEND END END IF EXIT DO CASE "Q" COLOR 11, 1 cline 14: center "Are you sure you want to quit (Y/N)?", 14 DO a$ = "" a$ = UCASE$(INKEY$) LOOP UNTIL a$ = "Y" OR a$ = "N" IF a$ = "Y" THEN COLOR 7, 0, 0: CLS PRINT "Ending scores: [ You ]"; score; "[ Me ]"; games - score PRINT "": WHILE INKEY$ = "": WEND END END IF cline 14 END SELECT LOOP LOOP SUB center (s$, l) LOCATE l, ((80 - LEN(s$)) / 2): PRINT s$; END SUB SUB cline (l) LOCATE l, 1: PRINT STRING$(80, " "); END SUB FUNCTION cval (c$) SELECT CASE MID$(c$, 1, 1) CASE "A" cval = 11 CASE "K", "Q", "J", "0" cval = 10 CASE ELSE cval = VAL(MID$(c$, 1, 1)) END SELECT END FUNCTION SUB drawcard (c$, Xc, Yc) SELECT CASE MID$(c$, 2, 1) CASE "S" COLOR 0, 7 s$ = CHR$(6) CASE "C" COLOR 0, 7 s$ = CHR$(5) CASE "D" COLOR 4, 7 s$ = CHR$(4) CASE "H" COLOR 4, 7 s$ = CHR$(3) CASE "-" COLOR 0, 4 END SELECT SELECT CASE MID$(c$, 1, 1) CASE "-" LOCATE Yc, Xc: PRINT "³ ³" LOCATE Yc + 1, Xc: PRINT "³ ³" LOCATE Yc + 2, Xc: PRINT "³ ³" LOCATE Yc + 3, Xc: PRINT "³ ³" LOCATE Yc + 4, Xc: PRINT "³ ³" LOCATE Yc + 5, Xc: PRINT "³ ³" LOCATE Yc + 6, Xc: PRINT "³ ³" CASE "2" LOCATE Yc, Xc: PRINT "³2 ³" LOCATE Yc + 1, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 2, Xc: PRINT "³ ³" LOCATE Yc + 3, Xc: PRINT "³ ³" LOCATE Yc + 4, Xc: PRINT "³ ³" LOCATE Yc + 5, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 6, Xc: PRINT "³ 2³" CASE "3" LOCATE Yc, Xc: PRINT "³3 ³" LOCATE Yc + 1, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 2, Xc: PRINT "³ ³" LOCATE Yc + 3, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 4, Xc: PRINT "³ ³" LOCATE Yc + 5, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 6, Xc: PRINT "³ 3³" CASE "4" LOCATE Yc, Xc: PRINT "³4 ³" LOCATE Yc + 1, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 2, Xc: PRINT "³ ³" LOCATE Yc + 3, Xc: PRINT "³ ³" LOCATE Yc + 4, Xc: PRINT "³ ³" LOCATE Yc + 5, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 6, Xc: PRINT "³ 4³" CASE "5" LOCATE Yc, Xc: PRINT "³5 ³" LOCATE Yc + 1, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 2, Xc: PRINT "³ ³" LOCATE Yc + 3, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 4, Xc: PRINT "³ ³" LOCATE Yc + 5, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 6, Xc: PRINT "³ 5³" CASE "6" LOCATE Yc, Xc: PRINT "³6 ³" LOCATE Yc + 1, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 2, Xc: PRINT "³ ³" LOCATE Yc + 3, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 4, Xc: PRINT "³ ³" LOCATE Yc + 5, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 6, Xc: PRINT "³ 6³" CASE "7" LOCATE Yc, Xc: PRINT "³7 ³" LOCATE Yc + 1, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 2, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 3, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 4, Xc: PRINT "³ ³" LOCATE Yc + 5, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 6, Xc: PRINT "³ 7³" CASE "8" LOCATE Yc, Xc: PRINT "³8 ³" LOCATE Yc + 1, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 2, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 3, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 4, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 5, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 6, Xc: PRINT "³ 8³" CASE "9" LOCATE Yc, Xc: PRINT "³9 ³" LOCATE Yc + 1, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 2, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 3, Xc: PRINT "³ " + s$ + " " + s$ + " " + s$ + " ³" LOCATE Yc + 4, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 5, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 6, Xc: PRINT "³ 9³" CASE "0" LOCATE Yc, Xc: PRINT "³10 ³" LOCATE Yc + 1, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 2, Xc: PRINT "³ " + s$ + " " + s$ + " " + s$ + " ³" LOCATE Yc + 3, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 4, Xc: PRINT "³ " + s$ + " " + s$ + " " + s$ + " ³" LOCATE Yc + 5, Xc: PRINT "³ " + s$ + " " + s$ + " ³" LOCATE Yc + 6, Xc: PRINT "³ 10³" CASE "J" LOCATE Yc, Xc: PRINT "³J ³" LOCATE Yc + 1, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 2, Xc: PRINT "³ ³" LOCATE Yc + 3, Xc: PRINT "³ ³" LOCATE Yc + 4, Xc: PRINT "³ ³" LOCATE Yc + 5, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 6, Xc: PRINT "³ J³" CASE "Q" LOCATE Yc, Xc: PRINT "³Q ³" LOCATE Yc + 1, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 2, Xc: PRINT "³ ³" LOCATE Yc + 3, Xc: PRINT "³ ³" LOCATE Yc + 4, Xc: PRINT "³ ³" LOCATE Yc + 5, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 6, Xc: PRINT "³ Q³" CASE "K" LOCATE Yc, Xc: PRINT "³K ³" LOCATE Yc + 1, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 2, Xc: PRINT "³ ³" LOCATE Yc + 3, Xc: PRINT "³ ³" LOCATE Yc + 4, Xc: PRINT "³ ³" LOCATE Yc + 5, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 6, Xc: PRINT "³ K³" CASE "A" LOCATE Yc, Xc: PRINT "³A ³" LOCATE Yc + 1, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 2, Xc: PRINT "³ ³" LOCATE Yc + 3, Xc: PRINT "³ ³" LOCATE Yc + 4, Xc: PRINT "³ ³" LOCATE Yc + 5, Xc: PRINT "³ " + s$ + " ³" LOCATE Yc + 6, Xc: PRINT "³ A³" END SELECT END SUB SUB makedeck (deck$()) temp$ = " 2S 2C 2D 2H 3S 3C 3D 3H 4S 4C 4D 4H 5S 5C 5D 5H 6S 6C 6D 6H" temp$ = temp$ + " 7S 7C 7D 7H 8S 8C 8D 8H 9S 9C 9D 9H 0S 0C 0D 0H JS JC JD JH" temp$ = temp$ + " QS QC QD QH KS KC KD KH AS AC AD AH" RANDOMIZE TIMER FOR X = 1 TO 52 n = INT(RND * (52 - X)) + 1 deck$(X) = MID$(temp$, ((n - 1) * 3) + 2, 2) IF X < 52 THEN temp$ = LEFT$(temp$, ((n - 1) * 3) + 1) + RIGHT$(temp$, (LEN(temp$) - (((n - 1) * 3) + 4))) END IF NEXT X END SUB