|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 11904 (0x2e80) Types: TextFile Names: »BLAKJACK.BAS«
└─⟦dd59903ef⟧ Bits:30005887 Klub diskette for udveksling af software └─ ⟦this⟧ »BLAKJACK.BAS«
10 ' *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+* 20 ' *+ +* 30 ' *+ Graphics Games for the Osborne I Computer +* 40 ' *+ Courtesy of Kelly Smith, CP/M-Net +* 50 ' *+ (805) 527-9321 +* 60 ' *+ and +* 70 ' *+ Wizard of OsZ, (213) 341-9399 +* 80 ' *+ +* 90 ' *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+* 100 ' 110 ' Wizard of OsZ, P.O. Box 964, Chatsworth, CA 91311 (213) 341-9399 120 ' 130 ' ---------------- Osborne I Terminal Commands ------------------- 140 ' 150 ' 160 E$=CHR$(27): ' Escape Character 170 CLS$=CHR$(26): ' Clear Screen 180 DC$=E$+"=": ' Direct Cursor Addressing 190 GY$=E$+"g": ' Graphics On 200 GN$=E$+"G": ' Graphics Off 210 HO$=E$+CHR$(1): ' Cursor Home 220 EP$=E$+"T": ' Erase to End of Line 230 DY$=E$+")": ' DIM Display On 240 DN$=E$+"(": ' DIM Display Off 250 UY$=E$+"l": ' Start Underlining 260 UN$=E$+"m": ' End Underlining 270 'NOTE: The Osborne I uses the following scheme for direct cursor addressing: 280 ' Location= (CHR$(Line number+32));(CHR$(Column number+32)) 290 PRINT CLS$ 300 PRINT" The Wizard of OsZ - 'Black-Jack'" 310 PRINT 320 PRINT:PRINT"Do you require instructions (Y or N) ?"; 330 A$=INKEY$:IF LEN(A$)=0 THEN GOTO 330 ' get keyboard input 340 IF A$="N" OR A$="n" THEN PRINT CLS$:GOTO 430 350 PRINT CLS$;UY$;" The Wizard of OsZ Casino house limit is $10,000 ";UN$;:PRINT 360 PRINT:PRINT "Your choices to the question HIT are as follows:":PRINT 370 PRINT "0 <-- NO HIT";DY$;" on this hand";DN$ 380 PRINT "1 <-- HIT";DY$;" on this hand";DN$ 390 PRINT "2 <-- DOUBLE BET";DY$;" after seeing cards 1 and 2 and HIT";DN$ 400 PRINT "3 <-- SPLIT";DY$;" the hand, for two pairs";DN$ 410 PRINT:PRINT "To stop the game, enter a ";UY$;"0";UN$;" for your wager.":PRINT 420 DIM WÆ10Å 430 K=K1=W1=C2=0 440 NB$=STRING$(6,127) 450 MD$=STRING$(1,127)+STRING$(4,32)+STRING$(1,127) 460 DIM QÆ52Å:DIM DÆ52Å 470 PRINT:PRINT TAB(15);"Press any key to begin play..."; 480 IF INKEY$="" THEN RS=RS+1:GOTO 480 490 RANDOMIZE RS 500 PRINT CLS$ 510 FOR I=1 TO N/2 520 X=INT(RND*100):IF X>51 THEN GOTO 520 530 NEXT I 540 FOR A=1 TO 52 550 DÆAÅ=0 560 NEXT A 570 FOR A=0 TO 39 STEP 13 580 FOR C=1 TO 13 590 QÆA+CÅ=C 600 NEXT C 610 NEXT A 620 PRINT 630 K=K+1 640 FOR P=1 TO 5 650 EÆPÅ=0 660 VÆPÅ=0 670 TÆPÅ=0 680 NEXT P 690 VÆ3Å=1 700 ' ask for wager entry, clearing any overflow digits from screen 710 PRINT DC$+CHR$(53)+CHR$(32);"Enter your wager";EP$ 720 PRINT DC$+CHR$(53)+CHR$(48); ' reposition for new wager entry 730 P=1 740 INPUT W2 750 PRINT 760 WÆ2Å=W2 770 IF W2<=0 THEN GOTO 3490 780 IF W2<=10000 THEN GOTO 840 790 FOR I = 1 TO 50 800 PRINT DC$+CHR$(1)+CHR$(34);"That's too much...the casino limit is $10,000!"; 810 FOR X=1 TO 20:NEXT X:PRINT DC$+CHR$(1)+CHR$(32);EP$ 820 NEXT I 830 GOTO 710 840 PRINT DC$+CHR$(1)+CHR$(33); 850 FOR TPT=1 TO 20 860 PRINT DC$+CHR$(TPT+32)+CHR$(32);EP$ 870 NEXT TPT 880 PRINT DC$+CHR$(1)+CHR$(33);"Dealers hand";DC$+CHR$(12)+CHR$(33);"Your hand" 890 CLM=3 900 LN=2 910 PRINT HO$; ' home cursor 920 FOR HH=1 TO 9:PRINT EP$+CHR$(10);:NEXT HH ' sanitize screen 930 PRINT EP$ 940 GOSUB 2180 : ' deal the cards 950 GOSUB 3530:PRINT DY$; ' begin half intensity 960 FOR TPT=1 TO 3 ' dealers card down (and dirty!) 970 PRINT DC$+CHR$(LN+TPT)+CHR$(CLM+33);"****":NEXT TPT 980 PRINT DN$ ' end half intensity 990 IF EÆ1Å=0 THEN GOTO 1010 1000 VÆ4Å=1 1010 VÆ5Å=1 1020 GOSUB 2180 : ' deal the cards 1030 M=X 1040 P=2 1050 LN=10 1060 CLM=3 1070 GOSUB 2180 : ' deal the cards 1080 G=X 1090 ' next card up 1100 GOSUB 2180 : ' deal the cards 1110 IF VÆ2Å>0 THEN GOTO 1540 1120 S=X 1130 IF VÆ3Å<>1 THEN GOTO 1540 1140 IF TÆPÅ<>21 THEN GOTO 1260 1150 FOR I=1 TO 50 ' flash opponent blackjack win and ring bell 1160 PRINT DC$+CHR$(15)+CHR$(32);" >>>BLACKJACK<<<";CHR$(7); 1170 FOR X=1 TO 20:NEXT X:PRINT DC$+CHR$(15)+CHR$(41);EP$ 1180 NEXT I 1190 PRINT DC$+CHR$(8)+CHR$(32);"My hole card was ", 1200 X=M 1210 CLM=10 1220 LN=2 1230 GOSUB 2550 : ' print card 1240 W1=W1+W2*2 1250 GOTO 3130 1260 IF VÆ4Å=0 THEN GOTO 1450 1270 PRINT DC$+CHR$(7)+CHR$(32);"Do you want to buy insurance (Y for YES, N for NO)";EP$ 1280 PRINT "If YES and I have BLACKJACK, you ";UY$;"win $";W2;UN$ 1290 PRINT "If not, you ";UY$;"lose $";W2/2;UN$;" to the Wizard of OsZ Casino";EP$ 1300 INPUT X$ 1310 PRINT 1320 IF LEFT$(X$,1)="N" OR LEFT$(X$,1)="n" THEN GOTO 1400 1330 IF TÆ1Å<>21 THEN GOTO 1400 1340 W1=W1+W2 1350 FOR I=1 TO 50 ' flash "you win on insurance" 1360 PRINT DC$+CHR$(1)+CHR$(32);" You win $";W2;" on your insurance bet"; 1370 FOR X=1 TO 20:NEXT X:PRINT DC$+CHR$(1)+CHR$(32);EP$ 1380 NEXT I 1390 GOTO 1450 1400 W1=W1-W2/2 1410 FOR I=1 TO 50 ' flash "You lost on insurance" 1420 PRINT DC$+CHR$(1)+CHR$(32);" You lost $";W2/2;" on your insurance bet"; 1430 FOR X=1 TO 20:NEXT X:PRINT DC$+CHR$(1)+CHR$(32);EP$ 1440 NEXT I 1450 IF TÆ1Å<>21 THEN GOTO 1540 1460 FOR I=1 TO 50 ' flash dealer blackjack win and ring bell 1470 PRINT DC$+CHR$(7)+CHR$(32);" >>>BLACKJACK<<<";CHR$(7); 1480 FOR X=1 TO 20:NEXT X:PRINT DC$+CHR$(7)+CHR$(41);EP$ 1490 NEXT I 1500 X=M 1510 LN=2:CLM=10 1520 GOSUB 2550 : ' print card 1530 GOTO 3110 1540 IF TÆPÅ<=21 THEN GOTO 1650 1550 IF EÆPÅ>0 THEN GOTO 1630 1560 PRINT DC$+CHR$(16)+CHR$(32);"You busted! "; 1570 PRINT "Your total was";TÆPÅ;EP$; 1580 FOR I=1 TO 500:NEXT I ' delay for readability 1590 IF VÆ2Å=1 THEN GOTO 1950 1600 CLM=9 1610 LN=2 1620 GOTO 2890 : ' dealer plays 1630 EÆPÅ=EÆPÅ-1 1640 TÆPÅ=TÆPÅ-10 1650 IF VÆ1Å=2 THEN GOTO 1570 1660 VÆ3Å=VÆ3Å+1 1670 FOR I=1 TO 10:PRINT DC$+CHR$(15)+CHR$(32);EP$ 1680 FOR X=1 TO 10:NEXT X ' flash hit request on screen 1690 PRINT CHR$(7);DC$+CHR$(15)+CHR$(32);"Hit"; 1700 FOR X=1 TO 10:NEXT X 1710 NEXT I 1720 INPUT X:VÆ1Å=X 1730 IF VÆ1Å<>3 THEN GOTO 2090 1740 IF VÆ2Å>0 THEN GOTO 2070 1750 IF VÆ3Å<>2 THEN GOTO 2070 1760 IF QÆGÅ=QÆSÅ THEN GOTO 1790 1770 PRINT "Now really, does that look like a PAIR?";EP$ 1780 GOTO 1670 1790 VÆ2Å=1 1800 IF QÆGÅ<>1 THEN GOTO 1820 1810 VÆ1Å=2 1820 P=3 1830 PRINT DC$+CHR$(21)+CHR$(32);"Playing ";UY$;"HAND ONE";UN$;" now";EP$ 1840 ' 1st card 1850 CLM=3 1860 WÆ3Å=W2 1870 X=G 1880 GOSUB 1900 1890 GOTO 1090 : ' next card 1900 GOSUB 2460 1910 GOSUB 2550 : ' print card 1920 VÆ3Å=1 1930 TÆPÅ=C 1940 RETURN 1950 P=2 1960 VÆ2Å=2 1970 PRINT DC$+CHR$(21)+CHR$(32);"Playing ";UY$;"HAND TWO";UN$;" now" 1980 PRINT DC$+CHR$(42)+CHR$(32); ' boogie back to last hand position and... 1990 FOR HH=1 TO 5:PRINT EP$+CHR$(10);:NEXT HH ' clear last hand delt 2000 X=S 2010 LN=10 2020 CLM=3 2030 GOSUB 1900 2040 IF QÆGÅ=1 THEN GOTO 2060 2050 VÆ1Å=0 2060 GOTO 1090 : ' next card 2070 PRINT "No splits now, try again..." 2080 GOTO 1670 2090 IF VÆ1Å<>2 THEN GOTO 2140 2100 IF VÆ3Å=2 THEN GOTO 2130 2110 PRINT "Too late to double!";EP$ 2120 GOTO 1670 2130 WÆPÅ=2*WÆPÅ 2140 IF VÆ1Å>0 THEN GOTO 1090 : ' next card 2150 CLM=10 2160 LN=10 2170 GOTO 1570 2180 ' subroutine to deal the cards 2190 GOSUB 2290 2200 TÆPÅ=TÆPÅ+C 2210 IF VÆ5Å=0 THEN GOTO 2270 2220 VÆ5Å=0 2230 IF P<>2 THEN RETURN 2240 PRINT DC$+CHR$(16)+CHR$(32); 2250 PRINT USING "'Your total is ',D3.0,' '",TÆPÅ;EP$ 2260 RETURN 2270 GOSUB 2550 : ' print a card 2280 RETURN 2290 N=INT(RND*100):IF N>14 THEN GOTO 2290 2300 FOR A=1 TO N 2310 X=INT(RND*100):IF X>52 THEN 2310 2320 IF X=0 THEN GOTO 2310 2330 NEXT A 2340 IF DÆXÅ=0 THEN GOTO 2440 2350 R=R+1 2360 IF R<50 THEN GOTO 2290 2370 FOR A=1 TO 52 2380 IF DÆAÅ=K THEN GOTO 2400 2390 DÆAÅ=0 2400 NEXT A 2410 R=0 2420 PRINT DC$+CHR$(8)+CHR$(32);"I reshuffled the deck...";EP$ 2430 GOTO 2290 2440 R=0 2450 DÆXÅ=K 2460 IF QÆXÅ<>1 THEN GOTO 2500 2470 C=11 ' be sure that ace counts as 11 2480 EÆPÅ=EÆPÅ+1 2490 RETURN 2500 IF QÆXÅ>10 THEN GOTO 2530 2510 C=QÆXÅ 2520 RETURN 2530 C=10 2540 RETURN 2550 ' subroutine to print a card 2560 GOSUB 2590 2570 GOSUB 2730 : ' print suit 2580 RETURN 2590 IF QÆXÅ<>1 THEN GOTO 2620 2600 NMB$="A" ' ace 2610 RETURN 2620 IF QÆXÅ>10 THEN GOTO 2650 2630 X$=STR$(QÆXÅ):NMB$=MID$(X$,2,2) 2640 RETURN 2650 IF QÆXÅ>11 THEN GOTO 2680 2660 NMB$="J" ' jack 2670 RETURN 2680 IF QÆXÅ>12 THEN GOTO 2710 2690 NMB$="Q" ' queen 2700 RETURN 2710 NMB$="K" ' king 2720 RETURN 2730 ' subroutine to print suit 2740 IF X>39 THEN GOTO 2800 2750 IF X>26 THEN GOTO 2830 2760 IF X>13 THEN GOTO 2860 2770 SUT$="S" ' spade 2780 GOSUB 3610 : ' print cards 2790 RETURN 2800 SUT$="C" ' club 2810 GOSUB 3610 : ' print cards 2820 RETURN 2830 SUT$="H" ' heart 2840 GOSUB 3610 : ' print cards 2850 RETURN 2860 SUT$="D" ' diamond 2870 GOSUB 3610 : ' print cards 2880 RETURN 2890 ' subroutine for dealer play 2900 P=2 2910 PRINT DC$+CHR$(7)+CHR$(32); 2920 X=M 2930 LN=2 2940 CLM=10 2950 GOSUB 2550 : ' print card 2960 IF TÆ2Å<22 THEN GOTO 2990 2970 IF VÆ2Å=0 THEN GOTO 3110 2980 IF TÆ3Å>21 THEN GOTO 3110 2990 P=1 3000 IF TÆ1Å<17 THEN GOTO 3180 3010 IF TÆ1Å>17 THEN GOTO 3030 3020 IF EÆ1Å>0 THEN GOTO 3180 3030 IF TÆ1Å>21 THEN GOTO 3210 3040 P=2 3050 IF TÆPÅ>21 THEN GOTO 3110 3060 IF TÆ1Å>21 THEN GOTO 3090 3070 IF TÆ1Å>TÆPÅ THEN GOTO 3110 3080 IF TÆ1Å=TÆPÅ THEN GOTO 3120 3090 W1=W1+WÆPÅ 3100 GOTO 3120 3110 W1=W1-WÆPÅ 3120 IF VÆ2Å>0 THEN GOTO 3150 3130 GOSUB 3270 3140 GOTO 630 3150 P=3 3160 VÆ2Å=0 3170 GOTO 3050 3180 PRINT DC$+CHR$(6)+CHR$(32);"I Draw..." 3190 GOSUB 2180 : ' deal 3200 GOTO 2990 3210 IF EÆ1Å=0 THEN GOTO 3250 3220 EÆ1Å=EÆ1Å-1 3230 TÆ1Å=TÆ1Å-10 3240 GOTO 2990 3250 PRINT DC$+CHR$(7)+CHR$(32);"I busted!";EP$; 3260 GOTO 3040 3270 PRINT DC$+CHR$(8)+CHR$(32);"My total was ";TÆ1Å;EP$ 3280 PRINT EP$ ' flush next entry on comment line 3290 IF W1<0 THEN GOTO 3370 3300 IF W1=0 THEN GOTO 3430 3310 FOR I=1 TO 10 ' slowly flash current financial status 3320 FOR X=1 TO 50:NEXT X:PRINT DC$+CHR$(21)+CHR$(60);EP$ 3330 PRINT DC$+CHR$(21)+CHR$(60);"You're ";UY$;"ahead $";W1;UN$;EP$ 3340 FOR X=1 TO 50:NEXT X:PRINT DC$+CHR$(21)+CHR$(60);EP$ 3350 NEXT I 3360 RETURN 3370 FOR I=1 TO 10 ' slowly flash current financial status 3380 FOR X=1 TO 50:NEXT X:PRINT DC$+CHR$(21)+CHR$(60);EP$ 3390 PRINT DC$+CHR$(21)+CHR$(60);"You're "UY$;"behind $";-W1;UN$;EP$ 3400 FOR X=1 TO 50:NEXT X:PRINT DC$+CHR$(21)+CHR$(60);EP$ 3410 NEXT I 3420 RETURN 3430 FOR I=1 TO 10 ' slowly flash current financial status 3440 FOR X=1 TO 50:NEXT X:PRINT DC$+CHR$(21)+CHR$(60);EP$ 3450 PRINT DC$+CHR$(21)+CHR$(60);"You're ";UY$;"EVEN!";UN$;EP$ 3460 FOR X=1 TO 50:NEXT X:PRINT DC$+CHR$(21)+CHR$(60);EP$ 3470 NEXT I 3480 RETURN 3490 PRINT CLS$:INPUT"Do you really want to quit (Y or N)";X$ 3500 IF LEFT$(X$,1)="N" OR LEFT$(X$,1)="n" THEN GOTO 500 3510 PRINT CLS$ 3520 SYSTEM 3530 ' print blank card 3540 CLM=CLM+7 3550 PRINT DC$+CHR$(LN)+CHR$(32+CLM);NB$ 3560 PRINT DC$+CHR$(LN+1)+CHR$(32+CLM);MD$ 3570 PRINT DC$+CHR$(LN+2)+CHR$(32+CLM);MD$ 3580 PRINT DC$+CHR$(LN+3)+CHR$(32+CLM);MD$ 3590 PRINT DC$+CHR$(LN+4)+CHR$(32+CLM);NB$ 3600 RETURN 3610 ' print cards 3620 GOSUB 3530 3630 PRINT DY$ 3640 PRINT DC$+CHR$(LN+1)+CHR$(CLM+33);NMB$;SUT$ 3650 PRINT DC$+CHR$(LN+3)+CHR$(CLM+32+(4-LEN(NMB$)));NMB$;SUT$ 3660 PRINT DC$+CHR$(16)+CHR$(32); 3670 PRINT DN$; 3680 IF P=2 THEN PRINT "Your total is ";TÆPÅ;EP$ 3690 RETURN «eof»