All pastes #740766 Raw Edit

Untitled

public text v1 · immutable
·published 2007-10-18 06:52 UTC
rendered paste body
/* Kevin Bernfeld
   COP3223 Section 2
   10/18/2007
   
   This is a program to simulate a casino. 
        Games: Craps, Arup's game of dice
        Meta: Buy chips, sell chips, cash out 
        
   TODO: 
         pair_of_dice() -- Random numbers aren't necessarily very random, but it works.
         craps() -- Should work. Yay fflush
         arups_dice() -- Works nicely.
         buy_chips() -- DONE. 
         sell_chips() -- Works nicely.
         status_report() -- Yay for single line functions. (Done)
         main() -- Should be complete.
*/

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
        
/* Functions */
int pair_of_dice();
int craps();
int arups_dice();
int buy_chips(int *cash);
int sell_chips(int num_chips);
void status_report(int num_chips, int cash);

/* Global variables */
static int chips_on_hand = 0;
static int cash_on_hand = 1000;

/**
* Main. Takes care of menu function.
*/

int main() {
    extern cash_on_hand, chips_on_hand;
    int choice = 0; //Menu choice. 
    //int num_chips = 0; //Number of chips currently held
    //int cash = 1000; //Cash on hand
    while (choice != 6) {
          printf("Welcome to the casino! Here are your choices: \n");
          printf("1) Buy Chips\n");
          printf("2) Sell Chips\n");
          printf("3) Play Craps\n");
          printf("4) Play Arup's Game of Dice\n");
          printf("5) Status report\n");
          printf("6) Cash out (quit)\n");
          printf("Enter your choice: ");
          scanf("%d", &choice);
          
          /* Menu Choices */
          if (choice == 1) {
             int go_on = 0;
             while (go_on == 0) {
                printf("How much money do you want to spend on chips? They cost $11. ");
                int want_to_spend = 0;
                scanf("%d", &want_to_spend);
             
                if (want_to_spend > cash_on_hand) {
                   printf("Sorry, you can't spend that much.\n");
                }//End if
                else {
                   int *spending;
                   spending = &want_to_spend;
                   buy_chips(spending);
                   go_on = 1;
                }//End else
             }//End while
          }//End if (menu choice 1)
          
          if (choice == 2) {
             int go_on = 0;
             while (go_on == 0) {
                printf("How many chips do you want to sell? You get $10 for each chip. ");
                int want_to_sell = 0;
                scanf("%d", &want_to_sell);
                
                if (want_to_sell <= 0) {
                   printf("You need to actually sell some chips.\n");
                }//End if
                else if (want_to_sell >= chips_on_hand) {
                   printf("You're trying to sell too many chps.\n");
                }//End elseif
                else {
                   sell_chips(want_to_sell);
                }//End else
             }//End while
          }//End if
          
          if (choice == 3) {
             craps();
          }//End if (menu choice 3)
          
          if (choice == 4) {
             arups_dice();
          }//End if (menu choice 4)
          
          if (choice == 5) {
             status_report(chips_on_hand, cash_on_hand);
          }//End if (menu choice 5)
          
          /* On exit, print this. */
          if (choice == 6) {
             sell_chips(chips_on_hand);
             printf("You cashed out with $%d. Goodbye!\n", cash_on_hand);
          } //End if
          
    } //End While
    
    system("pause");
    return 0;
} //End Main

/* Meta! */

    
/**
*   *cash mod 11 gives the leftover cash. 
*   Subtract that from *cash to give a number divisible by 11
*   Divide *cash by 11 to get the number of chips obtained. 
*   Modify chips_on_hand, cash_on_hand and return chips_obtained 
*   Since chips_on_hand and cash_on_hand are global, return value shouldn't be used.
*/
int buy_chips(int *cash) {
    /* Pull global variables */
    extern cash_on_hand, chips_on_hand;

    int returned = *cash % 11;
    *cash -= returned;
    int chips_obtained = (*cash / 11);
    chips_on_hand += chips_obtained;
    cash_on_hand -= *cash;
    
    return chips_obtained;
}//End buy_chips()

/**
* Subtracts the number of chips returned from the number held
* Adds the cash gained to the cash already had. 
* Returns the cash gained.
*/
int sell_chips(num_chips) {
    extern cash_on_hand, chips_on_hand;
    
    chips_on_hand -= num_chips;
    cash_on_hand += (num_chips * 10);
    
    return (num_chips * 10);
}//End sell_chips()

/**
* Prints chips_on_hand and cash_on_hand to STDOUT
*/
void status_report(int num_chips, int cash) {
     printf("You currently have $%d and %d chips.\n", cash, num_chips);
}//End status_report()

/* Games! */



/**
* Returns the sum of two random dice rolls.
*/
int pair_of_dice() {
    int dice1 = 0;
    int dice2 = 0;
    
    srand(time(NULL));
    dice1 = ((rand() % 6) + 1);
    //printf("Dice1: %d\n", dice1);
    dice2 = ((rand() % 6) + 1);
    //printf("Dice2: %d\n", dice2);
    
    return (dice1 + dice2);
} //End pair_of_dice()

/**
* Plays a game of craps. For reference, craps is played as follows: 
*       Roll a pair of fair six sided dice
*       If you roll a 7 or 11, you win!
*       If you roll a 2, 3, or 12, you lose =(
*       Otherwise, record what you've rolled. Let this sum be k, otherwise known as your point.
*       If you rolled a point, continue rolling the pair of dice until you roll your point or a sum of 7 on the two dice.
*       If your point comes up first, you win =D
*       If you roll a 7, you lose =(
* 
* Exceptions handled: 
*       Not enough chips
*       Not enough chips bet
*/

int craps() {
    extern int chips_on_hand; //Need the current number of chips for later use.
    int keep_going = 0; //Boolean test value. Checks to see if conditions are met.
    
    /* Begin */
    printf("Welcome to craps! How many chips would you like to bet? ");
    int chips_bet = 0;
    
    /* Error handling. Makes sure enough chips are bet, and that there are enough chips to bet. */
    while (keep_going == 0) {
        scanf("%d", &chips_bet); //This has to be here, or else you end up in an infinite loop.
        if (chips_bet > chips_on_hand) {
               printf("Sorry, you don't have enough chips. Try again.\n");
               return 0;
        }
        else if (chips_bet == 0) {
               printf("Sorry, you need to bet chips, or else you can't play. Try again.\n");
               return 0;
        }
        else {
             keep_going = 1;
        }
    }//End while
    
    /* First roll. */
    fflush(stdin); //flush the keyboard buffer or else it won't pause for getchar()
    char entry = 'q'; //I don't plan to do anything with this. Do they HAVE to enter r?
    printf("Press 'r' and hit enter for your first roll! ");
    entry = getchar();
    
    /* Win/loss check */
    int roll = pair_of_dice();
    printf("You rolled a %d.\n", roll);
    if (roll == 7 || roll == 11) {
       printf("You win!\n");
       chips_on_hand += chips_bet;
       return 1;
    }
    else if (roll == 2 || roll == 3 || roll == 12) {
       printf("You lose.\n");
       chips_on_hand -= chips_bet;
       return 0;
    }
    else {
       int finished = 0;
       int win_loss = 0;
       int point = roll; //I'd rather use point. It's more descriptive. 
       
       /* Next rolls. */
       while (finished == 0) {
             fflush(stdin); //Again, needs to be here so it will pause.
             printf("Press 'r' and hit enter for your next roll. ");
             entry = getchar();
             roll = pair_of_dice();
             printf("You rolled a %d.\n", roll);
             
             /* Win/loss check */
             if (roll == point) {
                printf("You win!\n");
                chips_on_hand += chips_bet;
                return 1;
             }
             else if (roll == 7) {
                printf("You lose.\n");
                chips_on_hand -= chips_bet;
                return 0;
             }
       } //End while
    } //End else
} //End craps()

/**
* 1) Roll a pair of dice.
* 2) If you roll a sum of 11 or 12, you win.
* 3) If you roll a sum of 2, you lose.
* 4) Otherwise, record what you've rolled. Let this sum be k; also known as your point.
* 5) Roll one more time. If this roll exceeds your point(k), you win!
* 6) If this roll is the same as your point(k) or lower, you lose.
*/
int arups_dice() {
    extern int chips_on_hand; //Need the current number of chips for later use.
    int keep_going = 0; //Boolean test value. Checks to see if conditions are met.
    
    /* Begin */
    printf("Welcome to Arup's Game of Dice! How many chips would you like to bet? ");
    int chips_bet = 0;
    
    /* Error handling. Makes sure enough chips are bet, and that there are enough chips to bet. */
    while (keep_going == 0) {
        scanf("%d", &chips_bet); //This has to be here, or else you end up in an infinite loop.
        if (chips_bet > chips_on_hand) {
               printf("Sorry, you don't have enough chips. Try again.\n");
               return 0;
        }
        else if (chips_bet == 0) {
               printf("Sorry, you need to bet chips, or else you can't play. Try again.\n");
               return 0;
        }
        else {
             keep_going = 1;
        }
    }//End while
    
    fflush(stdin);
    char entry;
    printf("Press 'r' and then enter for your first roll.\n");
    entry = getchar();
    
    /* Win/loss check */
    int roll = pair_of_dice();
    printf("You rolled a %d.\n", roll);
    if (roll == 2) {
       printf("Snake eyes. You lose.\n");
       chips_on_hand -= chips_bet;
       return 0;
    }
    
    else if (roll == 11 || roll == 12) {
       printf("You win!\n");
       chips_on_hand += chips_bet;
       return 1;
    }
    
    else {
       int point = roll;
       while (1) {
          printf("Press 'r' and then enter for your next roll.\n");
          fflush(stdin);
          entry = getchar();
          
          /* Win/loss check */
          roll = pair_of_dice();
          printf("You rolled a %d.\n", roll);
          if (roll > point) {
             printf("You win!\n");
             chips_on_hand += chips_bet;
             return 1;
          }
          else if (roll <= point) {
             printf("You lose.\n");
             chips_on_hand -= chips_bet;
             return 0;
          }//End elseif
       }//End while
    }//End else
}//End arups_dice()