Exemplo n.º 1
0
void
show (hand *h, int reveal) {
    card *c;
    if (clist_length(h->cards) == 0) {
        printf("[no cards]\n");
        return;
    } else {
        if (reveal) {
            printf(" %s\n", card_name(*h->cards.first));
        } else {
            printf(" one face down card\n");
        }
    }
    for (c=h->cards.first->next; c!=NULL; c=c->next)
        printf(" %s\n", card_name(*c));

    showvalue(h, reveal);
    if (h->bet > 0)
        printf ("Bet: $%0.2f\n", h->bet);
}
Exemplo n.º 2
0
int
hit (hand *h) {
    card c = draw();
    printf("%s\n", card_name(c));
    add(h, c);
    showvalue(h, 1);
    if (busted(h)) {
        printf("[BUST]\n");
        return 0;
    } else {
        return handvalue(h);
    }
}
Exemplo n.º 3
0
int
main (int argc, char **argv) {
  hand h;
  printf("%s\n", card_name(draw()));
  printf("%s\n", card_name(draw()));
  printf("%s\n", card_name(draw()));
  printf("%s\n", card_name(draw()));
  printf("%s\n", card_name(draw()));
  printf("%s\n", card_name(draw()));
  printf("%s\n", card_name(draw()));

  h = hand_new();
  printf("Hit:\n");
  hit(&h);
  hit(&h);
  hit(&h);
  exit(0);
}
Exemplo n.º 4
0
// YOLOYOLO
int main()
{
	printf("\n\n\n----- STARTING A NEW GAME -----");
	init();
	printf("\nInitialization complete.");

 	srand(alt_timestamp()); // TODO change in de2 env
	int i;
	int new_player_count = 2;

	bool first_game = true;
	GameState state = SETUP;

	for (;;) {

	switch (state) {
	  case SETUP:
		printf("\n\n----- ENTERING SETUP STATE -----\n\n");
		initialize_dealer(new_player_count);
		printf("Initialized dealer.");

		joining_period();

		/* Move dealer chip to the next player */
		if (dealer_chip == dealer->number_players-1) dealer_chip = 0;
		else dealer_chip++;

		state = DEAL_HANDS;
		break;

	  case DEAL_HANDS:

		printf("\n\n ----- ENTERING DEAL_HANDS STATE -----\n\n");

		deal_hands();
		send_player_hands();

		for (i=0; i<dealer->number_players; i++) {
		  printf("\n\nDealt cards for Player %d: Suite %d, Value %d & Suite %d, Value %d", i,
			dealer->players[i].hand[0].suite, dealer->players[i].hand[0].value,
			dealer->players[i].hand[1].suite, dealer->players[i].hand[1].value);
		}

		state = ANTY_CALL;
		break;

	  case FLOP:
		flop();
		printf("\n\n----------------------------------------");
		printf("\nFLOP (%s) (%s) (%s) \n",
		  card_name(dealer->cards_on_table[0]),
		  card_name(dealer->cards_on_table[1]),
		  card_name(dealer->cards_on_table[2]));

		state = BET;
		break;

	  case TURN:
		turn();
		printf("\n\n----------------------------------------");
		printf("\nTURN (%s) (%s) (%s) (%s) \n",
		  card_name(dealer->cards_on_table[0]),
		  card_name(dealer->cards_on_table[1]),
		  card_name(dealer->cards_on_table[2]),
		  card_name(dealer->cards_on_table[3]));

		state = BET;
		break;

	  case RIVER:
		river();

		printf("\n\n----------------------------------------");
		printf("\nRIVER (%s) (%s) (%s) (%s) (%s) \n",
		  card_name(dealer->cards_on_table[0]),
		  card_name(dealer->cards_on_table[1]),
		  card_name(dealer->cards_on_table[2]),
		  card_name(dealer->cards_on_table[3]),
		  card_name(dealer->cards_on_table[4]));

		state = BET;
		break;

	  case ANTY_CALL:
		printf("\nCalling anty from all players");

		get_bet_for_player(dealer_chip);
		if (dealer_chip == dealer->number_players-1) {
		  for (i=0; i<dealer->number_players-1; i++) {
			if (dealer->players[i].active) {
			  get_bet_for_player(i);
			  if (dealer->number_active_players == 1) {state = GAME_OVER; goto HOTSTUFF;}
			}
		  }
		} else {
		  for (i=dealer_chip+1; i<dealer->number_players; i++) {
			if (dealer->players[i].active) {
			  get_bet_for_player(i);
			  if (dealer->number_active_players == 1) {state = GAME_OVER; goto HOTSTUFF;}
			}
		  }
		  for (i=0; i<dealer_chip; i++) {
			if (dealer->players[i].active) {
			  get_bet_for_player(i);
			  if (dealer->number_active_players == 1) {state = GAME_OVER; goto HOTSTUFF;}
			}
		  }
		}
		/* Put bet money into the pot */
		for (i=0; i<dealer->number_players; i++) {
		  dealer->pot += dealer->players[i].money;
		  dealer->players[i].money = 0;
		  dealer->current_bet = 0;
		}

		printf("\n----------------------------------------\n");
		printf("\nPOT %d", dealer->pot);
		printf("\n----------------------------------------\n");

	  state = BET;
	  break;

	  case BET:
		  for (i=0; i<dealer->number_players; i++) {
			  if (dealer->players[i].active && dealer->players[i].total_money > 0)
			  	sprintf(dealer->players[i].message, " ");
		  }

	  /* Betting Round 1 */
		get_bet_for_player(dealer_chip);
		if (dealer_chip == dealer->number_players-1) {
		  for (i=0; i<dealer->number_players-1; i++) {
			if (dealer->players[i].active) {
			  get_bet_for_player(i);
			  if (dealer->number_active_players == 1) {state = GAME_OVER; goto HOTSTUFF;}
			}
		  }
		} else {
		  for (i=dealer_chip+1; i<dealer->number_players; i++) {
			if (dealer->players[i].active) {
			  get_bet_for_player(i);
			  if (dealer->number_active_players == 1) {state = GAME_OVER; goto HOTSTUFF;}
			}
		  }
		  for (i=0; i<dealer_chip; i++) {
			if (dealer->players[i].active) {
			  get_bet_for_player(i);
			  if (dealer->number_active_players == 1) {state = GAME_OVER; goto HOTSTUFF;}
			}
		  }
		}

		/* If still betting, continue that */
		while (still_betting()) {
		  for (i=dealer_chip; i<dealer->number_players; i++) {
			if (player_still_playing(i)) {
			  get_bet_for_player(i);
			  if (dealer->number_active_players == 1) {state = GAME_OVER; goto HOTSTUFF;}
			}
		  }
		  for (i=0; i<dealer_chip; i++) {
			if (player_still_playing(i)) {
			  get_bet_for_player(i);
			  if (dealer->number_active_players == 1) {state = GAME_OVER; goto HOTSTUFF;}
			}
		  }
	   }
		switch (dealer->number_cards_on_table) {
		  case 0: state = FLOP; break;
		  case 3: state = TURN; break;
		  case 4: state = RIVER; break;
		  case 5: state = GAME_OVER; break;
		}


	   HOTSTUFF:;

		/* Put bet money into the pot */
		for (i=0; i<dealer->number_players; i++) {
		  dealer->pot += dealer->players[i].money;
		  dealer->players[i].money = 0;
		  dealer->current_bet = 0;
		}

		printf("\n----------------------------------------\n");
		printf("\nPOT %d", dealer->pot);
		printf("\n----------------------------------------\n");

		break;

	  case GAME_OVER:
		if (dealer->number_active_players > 1) {
		  rank_poker_hands();
		  split_pot();
		} else {
		  last_man_standing();
		}

		send_game_results();
		printf("\n\nWaiting for response from all players.\n");
		receive_replay_status();

		state = SETUP;

		free(dealer->deck);
		free(dealer->players);
		free(dealer);
		free(ph);

		break;
	}
	game_screen();
	}


	 return 0;
}
Exemplo n.º 5
0
void rank_poker_hands() {
  int i, j, k, m, l; ph = malloc(sizeof(PokerHand)*dealer->number_players);

  Card null_card;
  null_card.value = -1;
  null_card.suite = -1;

  printf("\n");
  for (i=0; i<dealer->number_players; i++) {
    printf("\nPlayer %d: %s and %s", i,
      card_name(dealer->players[i].hand[0]), card_name(dealer->players[i].hand[1]));
  }
  printf("\n\nCards on table %s, %s, %s, %s and %s\n",
    card_name(dealer->cards_on_table[0]), card_name(dealer->cards_on_table[1]),
    card_name(dealer->cards_on_table[2]), card_name(dealer->cards_on_table[3]),
    card_name(dealer->cards_on_table[4]) );

  for (i=0; i<dealer->number_players && dealer->players[i].active; i++) {
    ph[i].type = UNDETERMINED;
    ph[i].value = -1;
    ph[i].value_secondary = -1;
    for (j=0; j<5; j++) ph[i].hand[j] = null_card;
    ph[i].kicker = null_card;
    int num_filled = 0;


    /* Create hash maps */
    int suite_count[4]; Card by_suite[4][7];
    for (j=0; j<4; j++) suite_count[j]=0;
    int value_count[13]; Card by_value[13][4]; // For value count, 0-12 represents Two to Ace
    for (j=0; j<13; j++) value_count[j]=0;
    by_suite[dealer->players[i].hand[0].suite][suite_count[dealer->players[i].hand[0].suite]] = dealer->players[i].hand[0];
    suite_count[dealer->players[i].hand[0].suite]++;
    by_suite[dealer->players[i].hand[1].suite][suite_count[dealer->players[i].hand[1].suite]] = dealer->players[i].hand[1];
    suite_count[dealer->players[i].hand[1].suite]++;
    for (j=0; j<dealer->number_cards_on_table; j++) {
      by_suite[dealer->cards_on_table[j].suite][suite_count[dealer->cards_on_table[j].suite]] = dealer->cards_on_table[j];
      suite_count[dealer->cards_on_table[j].suite]++;
    }

    int val = dealer->players[i].hand[0].value == 0 ? 12 : dealer->players[i].hand[0].value - 1;
    by_value[val][value_count[val]] = dealer->players[i].hand[0];
    value_count[val]++;
    val = dealer->players[i].hand[1].value == 0 ? 12 : dealer->players[i].hand[1].value - 1;
    by_value[val][value_count[val]] = dealer->players[i].hand[1];
    value_count[val]++;
    for (j=0; j<dealer->number_cards_on_table; j++) {
      val = dealer->cards_on_table[j].value == 0 ? 12 : dealer->cards_on_table[j].value - 1;
      by_value[val][value_count[val]] = dealer->cards_on_table[j];
      value_count[val]++;
    }

    /* Check for best hand */
    for (j=0; j<4; j++) {
      if (suite_count[j] >= 5) {
        /* Flush */
        if (ph[i].type < FLUSH) {
          ph[i].type = FLUSH;
          ph[i].hand[0] = by_suite[j][0];
          ph[i].hand[1] = by_suite[j][1];
          ph[i].hand[2] = by_suite[j][2];
          ph[i].hand[3] = by_suite[j][3];
          ph[i].hand[4] = by_suite[j][4];

          ph[i].value = ph[i].hand[0].value;
          for (k=0; k<5; k++) {
            if (comp_value(ph[i].hand[k].value, ph[i].value) == 1) ph[i].value = ph[i].hand[k].value;
          }
          num_filled = 5;
        }
      }
    }

    /* Straight */
    for (j=12; j>=4; j--) {
      if (j == 4 && value_count[12]>=1 && value_count[j]>=1 && value_count[j-1]>=1 && value_count[j-2]>=1
        && value_count[j-3]>=1) {
          ph[i].type = STRAIGHT;
          ph[i].value = j;
          ph[i].hand[0] = by_value[j][0];
          ph[i].hand[1] = by_value[j-1][0];
          ph[i].hand[2] = by_value[j-2][0];
          ph[i].hand[3] = by_value[j-3][0];
          ph[i].hand[4] = by_value[12][0];
          num_filled = 5;
          break;
      } else if (value_count[j]>=1 && value_count[j-1]>=1 && value_count[j-2]>=1
        && value_count[j-3]>=1 && value_count[j-4]>=1) {
          ph[i].type = STRAIGHT;
          ph[i].value = j;
          ph[i].hand[0] = by_value[j][0];
          ph[i].hand[1] = by_value[j-1][0];
          ph[i].hand[2] = by_value[j-2][0];
          ph[i].hand[3] = by_value[j-3][0];
          ph[i].hand[4] = by_value[j-4][0];
          num_filled = 5;
          break;
      }
    }

    /* 4 of a kind */
    for (j=12; j>=0; j--) {
      if (value_count[j] == 4 && ph[i].type < FOUR_OF_A_KIND) {
          ph[i].type = FOUR_OF_A_KIND;
          ph[i].value = j;
          ph[i].hand[0] = by_value[j][0];
          ph[i].hand[1] = by_value[j][1];
          ph[i].hand[2] = by_value[j][2];
          ph[i].hand[3] = by_value[j][3];
          num_filled = 4;
          break;
      }
    }


    /* Full house and 3 of a kind */
    for (j=12; j>=0; j--) {
      if (value_count[j] == 3) {
        /* Check for 3 of a kind */
        for (k=12; k>=0 && k!=j; k--) {
          if (value_count[k] == 2
              && ph[i].type < FULL_HOUSE) {
            ph[i].type = FULL_HOUSE;
            ph[i].value = j;
            ph[i].value_secondary = k;
            ph[i].hand[0] = by_value[j][0];
            ph[i].hand[1] = by_value[j][1];
            ph[i].hand[2] = by_value[j][2];
            ph[i].hand[3] = by_value[k][0];
            ph[i].hand[4] = by_value[k][1];
            num_filled = 5;
            break;
          }
        }

        /* If not full house, is a 3 of a kind */
        if (ph[i].type < THREE_OF_A_KIND || (ph[i].type == THREE_OF_A_KIND && comp_value(ph[i].value, j) == -1)) {
          ph[i].type = THREE_OF_A_KIND;
          ph[i].value = j;
          ph[i].hand[0] = by_value[j][0];
          ph[i].hand[1] = by_value[j][1];
          ph[i].hand[2] = by_value[j][2];
          num_filled = 3;
        }
      }
    }

    for (j=12; j>=0; j--) {
      if (value_count[j] == 2) {
        /* Check for two pair */
        for (k=12; k>=0 && k!=j; k--) {
          if (value_count[k] == 2 && ph[i].type < TWO_PAIR) {
            ph[i].type = TWO_PAIR;
            ph[i].value = j;
            ph[i].value_secondary = k;
            ph[i].hand[0] = by_value[j][0];
            ph[i].hand[1] = by_value[j][1];
            ph[i].hand[2] = by_value[k][0];
            ph[i].hand[3] = by_value[k][1];
            num_filled = 4;
            break;
          }
        }

        /* If not 2 pair, is a single pair */
        if (ph[i].type < PAIR) {
          ph[i].type = PAIR;
          ph[i].value = j;
          ph[i].hand[0] = by_value[j][0];
          ph[i].hand[1] = by_value[j][1];
          num_filled = 2;
          break;
        }
      }
    }

    for (j=12; j>=0; j--) {
      if (value_count[j] >= 1 && ph[i].type < HIGH_CARD ) {
          ph[i].type = HIGH_CARD;
          ph[i].value = j;
          ph[i].hand[0] = by_value[j][0];
          num_filled = 1;
          break;
      }
    }

    /* Fill up remaining spots in best hand */
    for (j=12; j>=0 && num_filled<5; j--) {
      for (k=0; k<value_count[j] && num_filled<5; k++) {
        int flag = 0;
        for (l=0; l<num_filled; l++) {
          if (by_value[j][k].value == ph[i].hand[l].value && by_value[j][k].suite == ph[i].hand[l].suite) flag = 1;
        }
        if (flag == 0) {
          ph[i].hand[num_filled] = by_value[j][k];
          num_filled++;
        }
      }
    }

    /* Kicker */
    for (j=12; j>=0; j--) {
      for (k=0; k<value_count[j] && ph[i].kicker.value == -1; k++) {
        int flag = 0;
        for (l=0; l<num_filled; l++) {
          if (by_value[j][k].value == ph[i].hand[l].value && by_value[j][k].suite == ph[i].hand[l].suite) flag = 1;
        }
        if (flag == 0) {
          ph[i].kicker = by_value[j][k];
        }
      }
    }
  }


  for (i=0; i<dealer->number_players && dealer->players[i].active; i++) {
    char *s;
    switch (ph[i].type) {
        case ROYAL_FLUSH: s = "Royal Flush";
          break;
        case STRAIGHT_FLUSH: s = "Straight Flush";
          break;
        case FOUR_OF_A_KIND: s = "Four of a Kind";
          break;
        case FULL_HOUSE: s = "Full House";
          break;
        case FLUSH: s = "Flush";
          break;
        case STRAIGHT: s = "Straight";
          break;
        case THREE_OF_A_KIND: s = "Three of a Kind";
          break;
        case TWO_PAIR: s = "Two Pair";
          break;
        case PAIR: s = "Pair";
          break;
        case HIGH_CARD: s = "High Card";
          break;
        case UNDETERMINED: printf("\nError: Player hand should not be UNDETERMINED"); break;
    }
    printf("\nPlayer %d: %s with %s, %s, %s, %s, %s and kicker %s", i, s, card_name(ph[i].hand[0]), card_name(ph[i].hand[1]),
      card_name(ph[i].hand[2]), card_name(ph[i].hand[3]), card_name(ph[i].hand[4]), card_name(ph[i].kicker));
  }
  printf("\n");
}
Exemplo n.º 6
0
static SCM open_card(SCM device) {
	// soundcard acquisition and configuration
	char *dname;
	snd_pcm_t *handle;
	ALSA_CARD *card;
	snd_pcm_sw_params_t *sparams;
	SOURCE_HANDLE *src;
	snd_pcm_format_t f, format;
	SCM smob;
	int i, ret, dir;
	unsigned int rate, buffer_time;
	dname = scm_to_locale_string(device);
	for (i = 0; i < 10; i++) {
		ret = snd_pcm_open(&handle, dname, SND_PCM_STREAM_CAPTURE, SND_PCM_NONBLOCK);
		if (ret >= 0) break;
		}
	if (ret < 0) {
		log_msg("ALSA: can't open %s (%s)\n", dname, snd_strerror(ret));
		free(dname);
		return SCM_BOOL_F;
		}
	card = (ALSA_CARD *)my_malloc(sizeof(ALSA_CARD), "alsa card");
	card->device = dname;
	card->name = card_name(card->device);
	card->ringbuf = NULL;
	init_source(&card->base);
	card->handle = handle;
	card->running = 0;
	snd_pcm_hw_params_malloc(&card->hparams);
	snd_pcm_hw_params_any(card->handle, card->hparams);
	for (f = format = 0; f < SND_PCM_FORMAT_LAST; f++) {
		ret = snd_pcm_hw_params_test_format(card->handle, card->hparams, f);
		if (ret == 0) {
			log_msg("ALSA: - %s\n", snd_pcm_format_name(f));
			format = f;
			}
		}
	ret = snd_pcm_hw_params_set_access(card->handle, card->hparams,
				SND_PCM_ACCESS_RW_INTERLEAVED);
	if (ret < 0) log_msg("ALSA: access %s\n", snd_strerror(ret));
	ret = snd_pcm_hw_params_set_format(card->handle, card->hparams, format);
	log_msg("ALSA: format: %s\n", snd_pcm_format_description(format));
	if (ret < 0) log_msg("ALSA: format error %s\n", snd_strerror(ret));
	snd_pcm_hw_params_get_buffer_time_max(card->hparams, &buffer_time, 0);
	rate = sampling_rate;
	ret = snd_pcm_hw_params_set_rate(card->handle, card->hparams, rate, 0);
	log_msg("ALSA: rate %d\n", rate);
	if (ret < 0) log_msg("ALSA: rate error %s\n", snd_strerror(ret));
	snd_pcm_hw_params_set_channels(card->handle, card->hparams,
						QMX_CHANNELS);
	card->blocksize = BLOCKSIZE;
	snd_pcm_hw_params_set_period_size(card->handle, card->hparams,
					card->blocksize, 0);
	log_msg("ALSA: period %ld\n", card->blocksize);
	snd_pcm_hw_params_set_buffer_time_near(card->handle, card->hparams,
					&buffer_time, &dir);
	log_msg("ALSA: buffer time %u\n", buffer_time);
	if ((ret = snd_pcm_hw_params(card->handle, card->hparams)) < 0) {
		log_msg("ALSA: can't set hardware: %s\n", snd_strerror(ret));
		close_card(card);
		return SCM_BOOL_F;
		}
	else log_msg("ALSA: hardware configd\n");
	snd_pcm_sw_params_malloc(&sparams);
	snd_pcm_sw_params_current(card->handle, sparams);
	snd_pcm_sw_params_set_avail_min(card->handle, sparams, card->blocksize);
	snd_pcm_sw_params_set_start_threshold(card->handle, sparams, 0U);
	if ((ret = snd_pcm_sw_params(card->handle, sparams)) < 0) {
		log_msg("ALSA: can't set software: %s\n", snd_strerror(ret));
		}
	else log_msg("ALSA: software configd\n");
	snd_pcm_sw_params_free(sparams);
	card->link = cards;
	cards = card;
	src = (SOURCE_HANDLE *)my_gc_malloc(sizeof(SOURCE_HANDLE), "alsa_card",
				"alsa card handle");
	src->body = (void *)card;
	src->src = &card->base;
	log_msg("ALSA: opened %s '%s'\n", card->device, card->name);
	SCM_NEWSMOB(smob, alsa_card_tag, src);
	return smob;
	}
Exemplo n.º 7
0
int main (int argc, char** argv) {
  struct gameState G;
  struct gameState *p = &G;

  srand(atoi(argv[1]));
  
  int a[20] = {adventurer, council_room, feast, gardens, mine, remodel, smithy, 
			village, baron, great_hall, minion, steward, tribute, ambassador, 
			cutpurse, embargo, outpost, salvager, sea_hag, treasure_map};
  
  int j[10], k[10];
  
  int i, ii;
  for(i=0; i<10; i++){
	  int loop = 1;
	  while(loop){
		  j[i] = rand()%20;
		  for(ii=0; ii<i; ii++){
			  if(j[ii] == j[i]){
				  loop++;
				  break;
			  }
		  }
		  loop--;
	  }
  }
  
  for(i=0; i<10; i++){
	k[i] = a[j[i]];
  }
  
  for(i=0; i<10; i++){
	  printf("%s ", card_name(k[i]));
	  //printf("%d %s\n", k[i], card_name(k[i]));
  }
  printf("\n");
  
  int players = rand()%3+2;
  printf("Players: %d\n\n", players);

  printf ("Starting game.\n");
  
  initializeGame(players, k, atoi(argv[1]), p);
  
  i = 0;

  while (!isGameOver(p)) {
	
	int active = whoseTurn(p);
	
	printf("Player %d\n", active);
	
	i = 0;
	while(p->numActions > 0){
		int playing = rand()%p->handCount[active]+1;
		if(i > 100){
			playing = p->handCount[active];
		}
		if(playing == p->handCount[active]){	//Chance to stop playing cards early
			printf("Stop playing cards early\n");
			break;
		}
		else{
			if(playCard(playing, rand()%20, rand()%20, rand()%20, p) != -1){
				printf("Playing %s\n", card_name(handCard(playing,p)));
			}
		}
		i++;
	}
	
	while(p->numBuys > 0){
		int action = rand()%18;
		
		if(i > 100){
			action = 17;;
		}
		
		if(action <= 6){			//Attempting to get a utility card, i.e. silver or province
			if(buyCard(action, p) != -1){
				printf("Buying %s\n", card_name(action));
			}
		}
		else if(action == 17){		//Chance to end turn early
			printf("Stop buying cards early\n");
			break;
		}
		else{						//Attempt to buy one of the randomly selected cards
			if(buyCard(k[action-7], p) != -1){
				printf("Buying %s\n", card_name(k[action-7]));
			}
		}
		i++;
	}
	
	printf("END_TURN\n\n");
	
	printf ("Player %d: %d\n", active, scoreFor(active, p));
	printf("Deck Size: %d\nDiscard Size: %d\n\n", p->deckCount[active], p->discardCount[active]);
	
	endTurn(p);
	
      
	    
  } // end of While

  printf ("Finished game.\n");
  printf ("Player 0: %d\nPlayer 1: %d\n", scoreFor(0, p), scoreFor(1, p));

  return 0;
}
Exemplo n.º 8
0
/* Main */
int main() {
  srand(time(NULL)); int i; // TODO change in de2 env
  GameState state = SETUP;

  //test_rank_poker_hands(); return 0;
  
  for (;;) {
    switch (state) {
      case SETUP:
        initialize_dealer(2);

        /* Move dealer chip to the next player */
        if (dealer_chip == dealer->number_players-1) dealer_chip = 0;
        else dealer_chip++;

        state = DEAL_HANDS;
        break;

      case DEAL_HANDS:
        deal_hands();

        for (i=0; i<dealer->number_players; i++) {
          printf("\n\nDealt cards for Player %d: %s and %s", i,
            card_name(dealer->players[i].hand[0]),
            card_name(dealer->players[i].hand[1]));
        }

        state = BET;
        break;

      case FLOP:
        flop();
        printf("\n\n----------------------------------------");
        printf("\nFLOP %s, %s and %s", 
          card_name(dealer->cards_on_table[0]),
          card_name(dealer->cards_on_table[1]),
          card_name(dealer->cards_on_table[2]));

        state = BET;
        break;

      case TURN:
        turn();
        printf("\n\n----------------------------------------");
        printf("\nTURN %s", 
          card_name(dealer->cards_on_table[3]));

        state = BET;
        break;

      case RIVER:
        river();

        printf("\n\n----------------------------------------");
        printf("\nRIVER %s", 
          card_name(dealer->cards_on_table[4]));

        state = BET;
        break;

      case BET:
        /* Betting Round 1 */
        get_bet_for_player(dealer_chip);
        if (dealer_chip == dealer->number_players-1) {
          for (i=0; i<dealer->number_players-1; i++) {
            if (dealer->players[i].active) {
              get_bet_for_player(i);
              if (dealer->number_active_players == 1) {state = GAME_OVER; goto HOTSTUFF;}
            }
          }
        } else {
          for (i=dealer_chip+1; i<dealer->number_players; i++) {
            if (dealer->players[i].active) {
              get_bet_for_player(i);
              if (dealer->number_active_players == 1) {state = GAME_OVER; goto HOTSTUFF;}
            }
          }
          for (i=0; i<dealer_chip; i++) {
            if (dealer->players[i].active) {
              get_bet_for_player(i);
              if (dealer->number_active_players == 1) {state = GAME_OVER; goto HOTSTUFF;}
            }
          }
        }

        /* If still betting, continue that */
        while (still_betting()) {
          for (i=dealer_chip; i<dealer->number_players; i++) {
            if (player_still_playing(i)) {
              get_bet_for_player(i);
              if (dealer->number_active_players == 1) {state = GAME_OVER; goto HOTSTUFF;}
            }
          }
          for (i=0; i<dealer_chip; i++) {
            if (player_still_playing(i)) {
              get_bet_for_player(i);
              if (dealer->number_active_players == 1) {state = GAME_OVER; goto HOTSTUFF;}
            }
          }
       }
        switch (dealer->number_cards_on_table) {
          case 0: state = FLOP; break;
          case 3: state = TURN; break;
          case 4: state = RIVER; break;
          case 5: state = GAME_OVER; break;
        }


       HOTSTUFF:;

        /* Put bet money into the pot */
        for (i=0; i<dealer->number_players; i++) {
          dealer->pot += dealer->players[i].money;
          dealer->players[i].money = 0;
          dealer->current_bet = 0;
        }

        printf("\n----------------------------------------\n");
        printf("\nPOT %d", dealer->pot);
        printf("\n----------------------------------------\n");

        break;

      case GAME_OVER:
        if (dealer->number_active_players > 1) {
          rank_poker_hands();
          split_pot();
        } else {
          last_man_standing();
        }

        free(dealer->deck);
        free(dealer->players);
        free(dealer);
        free(ph);

        printf("\n\nContinue play? (0 - No, 1 - Yes) ");
        int m;
        scanf("%d", &m);
        if (m==0) return 0;
        else state = SETUP;
        break;
    }
  }


}