text: /*
   * File: craps.c
   * -------------
   * This program plays the dice game called craps.  For a discussion
   * of the rules of craps, please see the GiveInstructions function.
   */
  
  #include <stdio.h>
  #include "genlib.h"
  #include "random.h"
  #include "simpio.h"
  #include "strlib.h"
  
  /* Function prototypes */
  
  void GiveInstructions(void);
  void PlayCrapsGame(void);
  int RollTwoDice(void);
  bool GetYesOrNo(string prompt);
  
  /* Main program */
  
  main()
  {
      Randomize();
      if (GetYesOrNo("Would you like instructions? ")) {
          GiveInstructions();
      }
      while (TRUE) {
          PlayCrapsGame();
          if (!GetYesOrNo("Would you like to play again? ")) break;
      }
  }
  
  /*
   * Function: GiveInstructions
   * Usage: GiveInstructions();
   * -----------------------
   * This function welcomes the player to the game and gives
   * instructions on the rules to craps.
   */
  
  void GiveInstructions(void)
  {
      printf("Welcome to the craps table!\n\n");
      printf("To play craps, you start by rolling a pair of dice\n");
      printf("and looking at the total.  If the total is 2, 3, or\n");
      printf("12, that's called 'crapping out' and you lose.  If\n");
      printf("you roll a 7 or an 11, that's called a 'natural' and\n");
      printf("you win.  If you roll any other number, that number\n");
      printf("becomes your 'point' and you keep on rolling until\n");
      printf("you roll your point again (in which case you win)\n");
      printf("or a 7 (in which case you lose).\n");
  }
  
  /*
   * Function: PlayCrapsGame
   * Usage: PlayCrapsGame();
   * -----------------------
   * This function plays one game of craps.
   */
  
  void PlayCrapsGame(void)
  {
      int total, point;
  
      printf("\nHere we go!\n");
      total = RollTwoDice();
      if (total == 7 || total == 11) {
          printf("That's a natural.  You win.\n");
      } else if (total == 2 || total == 3 || total == 12) {
          printf("That's craps.  You lose.\n");
      } else {
          point = total;
          printf("Your point is %d.\n", point);
          while (TRUE) {
              total = RollTwoDice();
              if (total == point) {
                  printf("You made your point.  You win.\n");
                  break;
              } else if (total == 7) {
                  printf("That's a seven.  You lose.\n");
                  break;
              }
          }
      }
  }
  
  /*
   * Function: RollTwoDice
   * Usage: total = RollTwoDice();
   * -----------------------------
   * This function rolls two dice and returns their sum.  As part
   * of the implementation, the result is displayed on the screen.
   */
  
  int RollTwoDice(void)
  {
      int d1, d2, total;
  
      printf("Rolling the dice . . .\n");
      d1 = RandomInteger(1, 6);
      d2 = RandomInteger(1, 6);
      total = d1 + d2;
      printf("You rolled %d and %d -- that's %d.\n", d1, d2, total);
      return (total);
  }
  
  /*
   * Function: GetYesOrNo
   * Usage: if (GetYesOrNo(prompt)) . . .
   * ------------------------------------
   * This function asks the user the question indicated by prompt
   * and waits for a yes/no response.  If the user answers "yes"
   * or "no", the program returns TRUE or FALSE accordingly.
   * If the user gives any other response, the program asks
   * the question again.
   */
  
  bool GetYesOrNo(string prompt)
  {
      string answer;
  
      while (TRUE) {
          printf("%s", prompt);
          answer = GetLine();
          if (StringEqual(answer, "yes")) return (TRUE);
          if (StringEqual(answer, "no")) return (FALSE);
          printf("Please answer yes or no.\n");
      }
  }
  
  
  