home *** CD-ROM | disk | FTP | other *** search
/ Big Blue Disk 16 / bbd16.zip / BLACKJAC.SP < prev    next >
Text File  |  1987-06-23  |  6KB  |  288 lines

  1. BEGIN  {Program written by Steve Helm.}
  2. INTEGER ARRAY DECK(52,2);
  3. INTEGER A,C,DECK_PNTR,P_COUNT,D_COUNT,CARD,MONEY,X,Y,T,BET,SUM_P,SUM_D,
  4.           SUM_X;
  5. STRING WHO,S_OR_H,CARD_STR,ACE_P,ACE_D,ACE;
  6.  
  7. PROCEDURE INITIALIZE;
  8. BEGIN
  9.  INTEGER SUIT,VALUE,CARD;
  10.  CARD := 1;
  11.  FOR SUIT:=1 STEP 1 UNTIL 4 DO
  12.  BEGIN
  13.   FOR VALUE:=1 STEP 1 UNTIL 13 DO
  14.   BEGIN 
  15.    DECK(CARD,1) := VALUE;
  16.    DECK(CARD,2) := SUIT;
  17.   CARD := CARD + 1;
  18.   END
  19.  END
  20. END
  21.  
  22.  
  23.  
  24. PROCEDURE SHUFFLE;
  25. BEGIN
  26.  INTEGER TEMP_CARD,TEMP_SUIT;
  27.  INTEGER X,RANDOM;
  28.  FOR X:=52 STEP -1 UNTIL 1 DO
  29.  BEGIN 
  30.   RANDOMIZE VAL(RIGHT$(TIME$,2));
  31.   TEMP_CARD := DECK(X,1);
  32.   TEMP_SUIT := DECK(X,2);
  33.   RANDOM := INT(RND*52)+1;
  34.   DECK(X,1) := DECK(RANDOM,1);
  35.   DECK(X,2) := DECK(RANDOM,2);
  36.   DECK(RANDOM,1):= TEMP_CARD;
  37.   DECK(RANDOM,2) := TEMP_SUIT;
  38.  DECK_PNTR := 1;
  39.  END
  40. END
  41.  
  42.  
  43. PROCEDURE PRINT_CARD;
  44. BEGIN
  45.  LOCATE Y,X;OUTPUT(' _______');
  46.  LOCATE Y+1,X;OUTPUT('|       |');
  47.  LOCATE Y+2,X;OUTPUT('|       |');
  48.  LOCATE Y+3,X;OUTPUT('|       |');
  49.  LOCATE Y+4,X;OUTPUT('|       |');
  50.  LOCATE Y+5,X;OUTPUT('|_______|');
  51. END
  52.  
  53. PROCEDURE HEAD;
  54. BEGIN
  55.  LOCATE 2,1;
  56.  OUTPUT ('         mmmmmmmm');
  57.  OUTPUT ('      /~~~~~~~~~~~~\');
  58.  OUTPUT ('     /              \');
  59.  OUTPUT ('     |              |');
  60.  OUTPUT ('    (|              |');
  61.  OUTPUT ('     |       _\     |');
  62.  OUTPUT ('     |              |');
  63.  OUTPUT ('      \     ===    /');
  64.  OUTPUT ('        \_________/');
  65. END
  66.  
  67. PROCEDURE EYES;
  68. BEGIN
  69.  LOCATE 4,7;OUTPUT('            ');
  70.  LOCATE 5,7;OUTPUT('  ~o~    ~o~ ');
  71. END
  72.  
  73.  
  74. PROCEDURE TALK;
  75. BEGIN
  76.  LOCATE 8,12;OUTPUT(' ___');
  77.   LOCATE 9,12;OUTPUT ('(___)');
  78.  FOR C:=1 STEP 1 UNTIL 50 DO BEGIN END
  79.  LOCATE 8,12;OUTPUT('      ');
  80.  LOCATE 9,12;OUTPUT(' === ');
  81.  FOR C:=1 STEP 1 UNTIL 50 DO BEGIN END
  82. END
  83.  
  84.  
  85. PROCEDURE MAD;
  86. BEGIN
  87.  LOCATE 4,7;OUTPUT('~~~  \ / ~~~');
  88.  LOCATE 5,7;OUTPUT('  o        o');
  89.  CALL TALK;
  90.  LOCATE 23,1;OUTPUT(' PLAYER');
  91.  CALL TALK;
  92.  LOCATE 23,10;OUTPUT('WINS   ');
  93.  FOR A:=1 STEP 1 UNTIL 1000 DO BEGIN END
  94.  LOCATE 23,1;OUTPUT('                            ');
  95.  CALL EYES;
  96. END
  97.  
  98.  
  99.  
  100. PROCEDURE SMILE;
  101. BEGIN
  102.  CALL TALK;
  103.  LOCATE 23,1;OUTPUT('DEALER');
  104.  CALL TALK;
  105.  LOCATE 23,8;OUTPUT('WINS');
  106.  LOCATE 9,12;OUTPUT('\___/');
  107.  FOR T:=1 STEP 1 UNTIL 1000 DO BEGIN END
  108.  LOCATE 9,12;OUTPUT(' === ');
  109.  LOCATE 23,1;OUTPUT('                            ');
  110. END
  111.      
  112.  
  113. PROCEDURE SUM;
  114. BEGIN
  115.  IF CARD > 1 THEN
  116.  BEGIN
  117.   IF CARD < 10 THEN
  118.   BEGIN
  119.    CARD_STR := CHR$(CARD+48);
  120.   END
  121.   IF CARD = 10 THEN
  122.   BEGIN
  123.    CARD_STR := '10';
  124.   END
  125.   IF CARD = 11 THEN
  126.   BEGIN
  127.    CARD_STR := 'J';CARD := 10;
  128.   END
  129.   IF CARD = 12 THEN
  130.   BEGIN
  131.    CARD_STR := 'Q';CARD := 10;
  132.   END
  133.   IF CARD = 13 THEN
  134.   BEGIN
  135.    CARD_STR := 'K';CARD := 10;
  136.   END
  137.  END
  138.  ELSE
  139.  BEGIN
  140.   CARD_STR := 'A';
  141.   IF SUM_X + 11 > 21 THEN
  142.   BEGIN
  143.    CARD := 1;
  144.   END
  145.   ELSE 
  146.   BEGIN
  147.    CARD := 11;
  148.    ACE := 'Y';
  149.   END
  150.  END
  151.  SUM_X := SUM_X + CARD;
  152.  IF SUM_X > 21 THEN
  153.  BEGIN
  154.   IF ACE = 'Y' THEN
  155.   BEGIN
  156.    SUM_X := SUM_X - 10;
  157.    ACE := 'N';
  158.   END
  159.  END
  160. END
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167. PROCEDURE PRINT_PLAYER;
  168. BEGIN
  169.  P_COUNT := P_COUNT+1;
  170.  Y := 14;
  171.  X := P_COUNT*13-3;
  172.  CALL PRINT_CARD;
  173.  LOCATE 17,P_COUNT*13;
  174.  OUTPUT (CARD_STR);
  175. END
  176.  
  177.    
  178. PROCEDURE PRINT_DEALER;
  179. BEGIN
  180.  D_COUNT := D_COUNT+1;
  181.  Y := 5;
  182.  X := D_COUNT*13+8;
  183.  CALL PRINT_CARD;
  184. LOCATE 8,D_COUNT*13+11;
  185.  OUTPUT (CARD_STR);
  186. END
  187.  
  188. PROCEDURE DEAL;
  189. BEGIN
  190.  CARD := DECK(DECK_PNTR,1);
  191.  IF WHO = 'D' 
  192.   THEN
  193.   BEGIN
  194.    SUM_X := SUM_D ; ACE := ACE_D;
  195.    CALL SUM;
  196.    SUM_D := SUM_X ; ACE_D := ACE;
  197.    CALL PRINT_DEALER;
  198.   END
  199.   ELSE
  200.   BEGIN
  201.    SUM_X := SUM_P; ACE := ACE_P;
  202.    CALL SUM;
  203.    SUM_P := SUM_X; ACE_P := ACE;
  204.    CALL PRINT_PLAYER;
  205.   END
  206.  DECK_PNTR := DECK_PNTR+1;
  207.  IF DECK_PNTR > 52 THEN CALL SHUFFLE;
  208. END
  209.  
  210.  
  211.  MONEY := 1000;
  212.  CALL INITIALIZE;CALL SHUFFLE;
  213.  WHILE MONEY > 0 DO
  214.  BEGIN
  215.   FOR A:=1 STEP 1 UNTIL 50 DO BEGIN OUTPUT(' ');END
  216.   CALL HEAD;CALL EYES;
  217.   LOCATE 2,50;OUTPUT(' CREDIT ......$ ');
  218.   LOCATE 2,66;OUTPUT(MONEY);
  219.   CALL TALK;LOCATE 23,1;OUTPUT('PLACE ');
  220.   CALL TALK;LOCATE 23,7;OUTPUT('YOUR ');
  221.   CALL TALK;LOCATE 23,12;OUTPUT('BET ');
  222.   LOCATE 23,17;INPUT(BET);
  223.   LOCATE 23,1;OUTPUT('                          ');
  224.   P_COUNT := 0;D_COUNT := 0;SUM_P := 0;SUM_D := 0;
  225.   ACE_P := 'N'; ACE_D := 'N';
  226.   WHO := 'P';CALL DEAL;
  227.   WHO := 'D';CALL DEAL;
  228.   WHO := 'P';CALL DEAL;
  229.   WHO := 'D';CALL DEAL;
  230.   WHO := 'P';
  231.   CALL TALK;LOCATE 23,1;OUTPUT('STAY ');
  232.   CALL TALK;LOCATE 23,6;OUTPUT('OR ');
  233.   CALL TALK;LOCATE 23,9;OUTPUT('HIT ');
  234.   LOCATE 23,14;INPUT(S_OR_H);
  235.   LOCATE 23,1;OUTPUT('                      ');
  236.   WHILE S_OR_H = 'H' DO
  237.   BEGIN
  238.    CALL DEAL;
  239.    IF SUM_P < 21  THEN
  240.    BEGIN
  241.     CALL TALK;LOCATE 23,1;OUTPUT('STAY ');
  242.     CALL TALK;LOCATE 23,6;OUTPUT('OR ');
  243.     CALL TALK;LOCATE 23,9;OUTPUT('HIT ');
  244.     LOCATE 23,14;INPUT(S_OR_H);
  245.     LOCATE 23,1;OUTPUT('                       ');
  246.    END
  247.    ELSE S_OR_H := 'S';
  248.   END
  249.   WHO := 'D';
  250.   IF SUM_P < 22 THEN
  251.   BEGIN
  252.    WHILE SUM_D < 16 DO
  253.    BEGIN
  254.     CALL DEAL;
  255.     CALL SUM;
  256.    END
  257.   END
  258.   IF SUM_P > 21 THEN 
  259.   BEGIN
  260.    CALL SMILE;
  261.    MONEY := MONEY - BET;
  262.   END
  263.   ELSE
  264.   BEGIN
  265.    IF SUM_D > 21 THEN
  266.    BEGIN
  267.     CALL MAD;
  268.     MONEY := MONEY + BET;
  269.    END
  270.    ELSE
  271.    BEGIN
  272.     IF SUM_P <= SUM_D THEN
  273.     BEGIN
  274.      CALL SMILE;
  275.      MONEY := MONEY - BET;
  276.     END
  277.     ELSE 
  278.     BEGIN
  279.      CALL MAD;
  280.      MONEY := MONEY + BET;
  281.     END
  282.    END
  283.   END
  284.  END
  285. END
  286. 
  287.  
  288.