home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / BEEHIVE / GAMES / BLACKJAC.ARC / BJ.C next >
Text File  |  1988-08-07  |  10KB  |  239 lines

  1. /*
  2. +--------------------------------------------------------------------+
  3. |                                                                    |
  4. |     ***** B L A C K J A C K *****                                  |
  5. |                                                                    |
  6. |     HI-TECH C Version by Harry Purvis.                             |
  7. |                                                                    |
  8. |     Based on Microworld Basic version by Rob Askew 10/9/1983.      |
  9. |                                                                    |
  10. +--------------------------------------------------------------------+
  11. */
  12.  
  13. /* function prototypes. */
  14. /*------------------------------------------------------------------------*/
  15. extern int open (char *, int);                 /* Open a file             */
  16. extern int read (int, char *, int);            /* Read bytes from file    */
  17. extern void copy_bytes (char *, int, int);     /* (from, to, count)       */
  18. extern void draw_border (int, int, int, int);  /* (x, y, width, height)   */
  19. extern void show_card (int, int, int);         /* (card, x, y)            */
  20. extern void erase_card (int, int);             /* (x, y)                  */
  21. extern void put_string (int, int, char *);     /* (x, y, string)          */
  22. extern void play_game (char, char);            /* play one game.          */
  23. extern void delay (int);                       /* delay.                  */
  24. extern char get_reply (char *);                /* get reply from user.    */
  25.  
  26. int    random (int, int);                      /* generate a random int   */
  27. int    draw_card (void);                       /* select a card from pack */
  28. /*------------------------------------------------------------------------*/
  29.  
  30. /* includes */
  31.  
  32. #include <stdio.h>
  33. #include <conio.h>
  34. #include <stdlib.h>
  35.  
  36. /* defines */
  37.  
  38. #define DRAWN 7
  39. #define AVAIL 0
  40. #define BACK  54
  41.  
  42. /* Global Variables */
  43. /*----------------------------------------------------------------------*/
  44. char deck [53];           /* deck of 52 cards 1 - 52                    */
  45. char hands [2] [11];      /* two hands with a maximum of 11 cards each. */
  46. char values [11];         /* card values in a hand.                     */
  47. int  scores [2];          /* total scores for player and banker.        */
  48. int  cards  [2];          /* number of cards in hands.                  */
  49. int  dealt;               /* number of cards taken from pack.           */
  50. long min_bet;             /* minimum bet.                               */
  51. long max_bet;             /* maximum bet.                               */
  52. long bank;                /* funds in bank.                             */
  53. long funds;               /* players funds.                             */
  54. char message [80];        /* message to user.                           */
  55. char bankt   [12];        /* decoded number.                            */
  56. char fundt   [12];        /* decoded number.                            */
  57. char bett    [12];        /* decoded number.                            */
  58. char mint    [12];        /* decoded number.                            */
  59. char maxt    [12];        /* decoded number.                            */
  60. /*----------------------------------------------------------------------*/
  61.  
  62. void get_pcg()
  63. {
  64. /*
  65.   Procedure to read the file CARDS.FON and set up the PCG characters
  66.   used to display the cards.
  67.  
  68.   An array of bytes is obtained from free memory and is returned when
  69.   the data has been placed into the PCG memory.
  70.  
  71.   Note that it is not possible to read the data directly into PCG memory
  72.   because the BIOS changes the memory banks and the PCG memory is not
  73.   found at $F800.
  74. */
  75.     char *pcgdat;
  76.     int pcg_file;
  77.     int result;
  78.  
  79.     pcg_file = open ("CARDS.FON",0);         /* open the PCG data file.   */
  80.     pcgdat = malloc (2048);                  /* get some memory.          */
  81.     result = read (pcg_file, pcgdat, 2048);  /* read 2048 bytes.          */
  82.     copy_bytes (pcgdat, 0xF800, 2048);       /* put data into PCG memory. */
  83.     close (pcg_file);                        /* close the data file.      */
  84.     free (pcgdat);                           /* Return memory to system.  */
  85. }
  86.  
  87. /*-----------------------------------------------------------------*/
  88.  
  89. int random (min, max)
  90. int min, max;
  91. {
  92.     long product;
  93.     int  result;
  94.  
  95.     product = ((long) rand () + 1) * ((long)(max - min + 1));
  96.     result  = (product >> 15) + min;
  97.     return result;
  98. }
  99.  
  100. /*-----------------------------------------------------------------*/
  101.  
  102. int draw_card()
  103. {
  104.     int card, j, k;
  105.     char list [7];
  106.  
  107.     dealt++;  /* count cards dealt. */
  108.  
  109.     if (dealt > 52)
  110.     {
  111.  
  112.       /* make all cards available. */
  113.  
  114.         put_string (3, 13, "Time to shuffle the cards.");
  115.         for (j = 0; j <= 52; j++) deck [j] = AVAIL; 
  116.  
  117.      /* except those cards in current hands. */
  118.  
  119.         for (j = 0; j < 2; j++)
  120.         {
  121.              for (k = 0; k < cards [j]; k++)
  122.              {
  123.                  card = hands [k] [k];
  124.                  deck [card] = DRAWN;
  125.              }
  126.         }
  127.         dealt = cards [0] + cards [1] + 1;
  128.         delay (100);
  129.     }
  130.  
  131.     if (dealt < 47)
  132.     {
  133.         card = random (1, 52); /* random card number */
  134.         while (deck [card] == DRAWN)
  135.         {
  136.             card = random (1, 52); /* random card number */
  137.         }
  138.  
  139.         deck [card] = DRAWN;
  140.     }
  141.     else
  142.     {
  143.         j = 0;
  144.         for (k = 1; k < 53; k++)
  145.         {
  146.             if (deck [k] == AVAIL) 
  147.             {
  148.                 j++;
  149.                 list [j] = k;
  150.              }
  151.         }
  152.         card = random (1, j); /* random card number */
  153.         card = list [card];
  154.         deck [card] = DRAWN;
  155.     }
  156.  
  157.     return card;
  158. }
  159.  
  160. /*-----------------------------------------------------------------*/
  161.  
  162. main()
  163. {
  164.     char  clear= 0x1A;     /* ^Z is used to clear the screen. */ 
  165.  
  166.     char  command;         /* command from user.              */
  167.     char  location;        /* blackjack location.             */
  168.     char  wealth;          /* wealth of player.               */
  169.  
  170. /*-----------------------------------------------------------------*/
  171.  
  172.     get_pcg();                /* Set up the PCG memory to display cards. */
  173.     putchar (clear);            /* Clear the screen.                       */
  174.     draw_border (0, 0, 80, 24); /* draw a border around the screen.        */
  175.     show_card   ( 1,  2,  3);   /* Ace of spades.                          */
  176.     show_card   (11, 11,  3);   /* Jack of spades.                         */
  177.     show_card   (40, 60,  3);   /* Ace of hearts.                          */
  178.     show_card   (51, 69,  3);   /* Queen of hearts.                        */
  179.     put_string  (26,  2, "**** B L A C K J A C K ****");
  180.     put_string  (26,  3, "---------------------------");
  181.     put_string  (26,  5, "Version 1.0 by Harry Purvis");
  182.     put_string  (26,  7, " Based on a Basic program  ");
  183.     put_string  (26,  8, " by Rob Askew 10/9/1983.   ");
  184.     put_string  (31, 10, "-- Instructions --");
  185.     put_string  (16, 12, " 1. Dealer always sits at 17 or over.");
  186.     put_string  (16, 13, " 2. Blackjack pays double unless dealer gets one.");
  187.     put_string  (16, 14, " 3. Five cards less than 21 pay three times.");
  188.     put_string  (16, 15, " 4. Six cards less than 21 pay four times.");
  189.     put_string  (16, 16, " 5. Three sevens pays five times.");
  190.     put_string  (16, 17, " 6. You lose double if you bust and dont tell me.");
  191.     put_string  (16, 19, " Press any key to begin the game.");
  192.  
  193.     command = getch();
  194.  
  195.     while (command != '4')
  196.     {
  197.         putchar (clear);             /* Clear the screen.            */
  198.         draw_border (0, 10, 80, 14); /* draw a border on the screen. */
  199.         show_card   (14,  2,  3);    /* Ace of clubs.                */
  200.         show_card   (26, 11,  3);    /* King of clubs.               */
  201.         show_card   (27, 60,  3);    /* Ace of diamonds.             */
  202.         show_card   (37, 69,  3);    /* Jack of diamonds.            */
  203.         put_string  (16, 13, " Where would you like to play :-");
  204.         put_string  (16, 15, " 1. Monte Carlo.");
  205.         put_string  (16, 16, " 2. Nifty's at Darlinghurst.");
  206.         put_string  (16, 17, " 3. A quiet social game.");
  207.         put_string  (16, 18, " 4. Exit Program.");
  208.         put_string  (16, 20, " Select a location and press the digit key.");
  209.  
  210.         command = get_reply ("1234");
  211.  
  212.         location = command;
  213.  
  214.         if (command != '4')
  215.         {
  216.             putchar (clear);             /* Clear the screen.  */
  217.             draw_border (0, 10, 80, 14); /* draw a border.     */
  218.             show_card   ( 2,  2,  3);    /* Two of spades.     */
  219.             show_card   ( 5, 11,  3);    /* Five of spades.    */
  220.             show_card   (30, 60,  3);    /* Four of diamonds.  */
  221.             show_card   (33, 69,  3);    /* Seven of diamonds. */
  222.             put_string  (16, 13, " In terms of ready legal tender, are you :-");
  223.             put_string  (16, 15, " 1. Filthy Rich.");
  224.             put_string  (16, 16, " 2. About average.");
  225.             put_string  (16, 17, " 3. Small time.");
  226.             put_string  (16, 18, " 4. Exit Program.");
  227.             put_string  (16, 20, " Press the digit key.");
  228.  
  229.             command = get_reply ("1234");
  230.  
  231.             wealth = command;
  232.  
  233.             if (command != '4') play_game (location, wealth);
  234.         }         
  235.  
  236.      } /* end of while command not 4 */
  237.  
  238. } /* end of program. */
  239.