10 REM **************** 20 REM Blackjack 30 REM By Duncan Fumi 40 REM **************** 50 REM NC100/200 Version : 1995 60 REM Downloaded from Tim's Amstrad NC User's Site 70 REM http://www.ncus.org.uk 80 REM Originally from the Amstrad Notepad Users' Web 90 PROCinit 100 PROCGetdeck 110 PROCPlay 120 PROCGoodbye 130 END 140 : 150 DEFPROCinit 160 CLS 170 PRINT"Duncan's card table, enjoy!" 180 crap=RND(-TIME):REM Seed random number generator. 190 DIM cardval%(51) 200 DIM cardsuit$(51) 210 DIM cardname$(51) 220 DIM cardvalue%(51) 230 DIM playedcards%(5,10):REM max of five cards per player 240 DIM numofcards%(10):REM number of cards played 250 DIM playname$(10):REM Name of players 260 DIM score%(10):REM Player's exiting score 270 numcard%=51 280 quit%=0 290 ENDPROC 300 DEFPROCGetdeck 310 REM Number for cards:eg. 102. First 1 suit. Last 2,value. 320 REM Deck begins with 52 cards. cards taken from the top and 330 REM numcard% is decremented accordingly. it is set to 51 upon 340 REM shuffling the deck. 350 PRINT"Making up deck, please wait...." 360 FOR T=0TO51 370 READ cardno% 380 suit%=INT(cardno%/100) 390 number%=cardno% MOD 100 400 cardvalue%(T)=cardno% 410 IF suit%=1 THEN cardsuit$(T)="Hearts" 420 IF suit%=2 THEN cardsuit$(T)="Diamonds" 430 IF suit%=3 THEN cardsuit$(T)="Spades" 440 IF suit%=4 THEN cardsuit$(T)="Clubs" 450 IF number%=2 THEN cardname$(T)="a 2":cardval%(T)=2 460 IF number%=3 THEN cardname$(T)="a 3":cardval%(T)=3 470 IF number%=4 THEN cardname$(T)="a 4":cardval%(T)=4 480 IF number%=5 THEN cardname$(T)="a 5":cardval%(T)=5 490 IF number%=6 THEN cardname$(T)="a 6":cardval%(T)=6 500 IF number%=7 THEN cardname$(T)="a 7":cardval%(T)=7 510 IF number%=8 THEN cardname$(T)="a 8":cardval%(T)=8 520 IF number%=9 THEN cardname$(T)="a 9":cardval%(T)=9 530 IF number%=10 THEN cardname$(T)="a 10":cardval%(T)=10 540 IF number%=11 THEN cardname$(T)="a Jack":cardval%(T)=10 550 IF number%=12 THEN cardname$(T)="a Queen":cardval%(T)=10 560 IF number%=13 THEN cardname$(T)="a King":cardval%(T)=10 570 IF number%=14 THEN cardname$(T)="an Ace":cardval%(T)=11 580 NEXT T 590 CLS 600 ENDPROC 610 : 620 DEFPROCShuffle 630 REM Shuffles cards by moving cards to random positions. 640 PRINT"Shuffling....." 650 FOR c1=0TO51 660 REPEAT 670 c2=RND(numcard%)-1 680 UNTIL c2<>c1 690 value1%=cardvalue%(c1) 700 suit1$=cardsuit$(c1) 710 name1$=cardname$(c1) 720 val1%=cardval%(c1) 730 cardvalue%(c1)=cardvalue%(c2) 740 cardsuit$(c1)=cardsuit$(c2) 750 cardname$(c1)=cardname$(c2) 760 cardval%(c1)=cardval%(c2) 770 cardvalue%(c2)=value1% 780 cardsuit$(c2)=suit1$ 790 cardname$(c2)=name1$ 800 cardval%(c2)=val1% 810 NEXT c1 820 numcard%=51 830 CLS 840 ENDPROC 850 : 860 DEFPROCPlay 870 quit%=0 880 REPEAT 890 CLS 900 PRINT"You are now ready to play, make your choice" 910 PRINT"1) Blackjack (simple version)" 920 PRINT"2) Quit to basic" 930 choice$=GET$ 940 IF choice$="1" THEN PROCBlackjack 950 IF choice$="2" THEN quit%=1 ELSE quit%=0 960 UNTIL quit%=1 970 ENDPROC 980 DEFPROCBlackjack 990 CLS 1000 PROCShuffle 1010 PROCBlackinit 1020 PROCBlackfirst 1030 FOR player%=1TOnumplayer% 1040 PROCBlackplay 1050 NEXT player% 1060 PROCwhoone 1070 ENDPROC 1080 DEFPROCBlackinit 1090 REM Subroutine to initialise variables and get player details. 1100 REPEAT 1110 INPUT"Number of players(1>10):"playnum$ 1120 numplayer%=VAL(playnum$) 1130 UNTIL numplayer%>1ANDnumplayer%<11 1140 FOR getname%=1TOnumplayer% 1150 PRINT"Name of player ";getname%;:INPUT":"playname$(getname%) 1160 numofcards%(getname%)=0 1170 NEXT getname% 1180 ENDPROC 1190 DEFPROCBlackfirst 1200 REM Subroutine to deal out the first two cards to all players. 1210 FOR card%=1TO2 1220 FOR player%=1TOnumplayer% 1230 playedcards%(card%,player%)=numcard% 1240 numcard%=numcard%-1 1250 numofcards%(player%)=numofcards%(player%)+1 1260 NEXT player% 1270 NEXT card% 1280 ENDPROC 1290 DEFPROCBlackplay 1300 CLS 1310 PRINT"Player number ";player%;",";playname$(player%);" Press a key.." 1320 crap=GET 1330 stick%=0 1340 REPEAT 1350 CLS 1360 PRINT"Player number ";player%;",";playname$(player%) 1370 PROCShowcards 1380 PRINT"Do you want to 1-Twist, 2-Stick or 3-Change ace value."; 1390 choice1$=GET$ 1400 IF choice1$="1" AND value%<22 THEN PROCTwist 1410 IF choice1$="2" THEN stick%=1 1420 IF choice1$="3" THEN PROCChangeace 1430 UNTIL stick%=1 1440 PROCgetscore 1450 CLS 1460 ENDPROC 1470 DEFPROCChangeace 1480 CLS 1490 FOR card%=1 TO numofcards%(player%) 1500 dekpos%=playedcards%(card%,player%) 1510 isace%=cardvalue%(dekpos%)MOD100 1520 IF isace%=14THEN PROCChangeit 1530 NEXT card% 1540 ENDPROC 1550 DEFPROCChangeit 1560 PRINT"Card number ";card%;" is an ace, currently worth ";cardval%(dekpos%) 1570 PRINT"Change it (y/n)?" 1580 IF GET$="Y" THEN PROCChange 1590 ENDPROC 1600 DEFPROCChange 1610 temp%=cardval%(dekpos%) 1620 IF temp%=11 THEN cardval%(dekpos%)=1 1630 IF temp%=1 THEN cardval%(dekpos%)=11 1640 ENDPROC 1650 DEFPROCShowcards 1660 value%=0 1670 PRINT"You have:" 1680 FOR card%=1TOnumofcards%(player%) 1690 deckno%=playedcards%(card%,player%) 1700 PRINT cardname$(deckno%);" of ";cardsuit$(deckno%) 1710 value%=value%+cardval%(deckno%) 1720 NEXT card% 1730 PRINT"With total value:";value% 1740 IF value%>21 THEN PROCBust 1750 ENDPROC 1760 DEFPROCBust 1770 PRINT"You are bust. Change the value of an ace or end your turn." 1780 ENDPROC 1790 DEFPROCTwist 1800 IF numofcards%(player%)<5 THEN PROCAddacard ELSE PROCfiverror 1810 ENDPROC 1820 DEFPROCfiverror 1830 PRINT"You cannot have more than five cards, press enter to continue...." 1840 crap=GET 1850 ENDPROC 1860 DEFPROCAddacard 1870 numofcards%(player%)=numofcards%(player%)+1 1880 playedcards%(numofcards%(player%),player%)=numcard% 1890 numcard%=numcard%-1 1900 ENDPROC 1910 DEFPROCgetscore 1920 score%(player%)=value% 1930 ENDPROC 1940 DEFPROCwhoone 1950 FOR scores%=1 TO numplayer% 1960 PRINT playname$(scores%);" got a total score of ";score%(scores%) 1970 PRINT "using ";numofcards%(scores%);" press enter too continue..." 1980 crap=GET 1990 NEXT scores% 2000 ENDPROC 2010 DEFPROCtest 2020 FOR deck%=0TO51 2030 PRINT cardname$(deck%);" of ";cardsuit$(deck%) 2040 a=GET 2050 NEXT deck% 2060 ENDPROC 2070 DEFPROCebuf 2080 REPEAT 2090 a=INKEY(1) 2100 UNTIL a=-1 2110 ENDPROC 2120 DEFPROCGoodbye 2130 PRINT"See you later, have a nice day........." 2140 ENDPROC 2150 : 2160 DATA 102, 103, 104, 105, 106, 107, 108, 109, 110, 111 2170 DATA 112, 113, 114, 202, 203, 204, 205, 206, 207, 208 2180 DATA 209, 210, 211, 212, 213, 214, 302, 303, 304, 305 2190 DATA 306, 307, 308, 309, 310, 311, 312, 313, 314, 402 2200 DATA 403, 404, 405, 406, 407, 408, 409, 410, 411, 412 2210 DATA 413, 414 2220 REM Data for cards