static void determine_win_counter(struct win_counter *const counter, const unsigned long long DECK, const unsigned long long COMMUNITY, const unsigned long long HAND, const unsigned NUM_CARDS){ const unsigned TOT_CARDS = 52; const unsigned long long BOUNDARY = 1ULL << TOT_CARDS; unsigned long long cards = (1ULL << NUM_CARDS) - 1; do{ if((cards & DECK) == cards){ struct hand best_hand; determine_hand(&best_hand, HAND|COMMUNITY|cards); showdown(counter, &best_hand, COMMUNITY|cards, DECK & (~cards)); } unsigned long long pos_mask = 1; while(!(cards & pos_mask)){ pos_mask <<= 1; } unsigned card_num = 0; while(cards & pos_mask){ card_num++; pos_mask <<= 1; } cards &= ~(pos_mask - 1); cards |= pos_mask; cards |= (1ULL << card_num-1) - 1; }while(cards < BOUNDARY); }
int winner() { int a,b; printf("Dealer: "); for(a=0; a<d; a++) printf("%c ",dealer[a]); printf(" \n"); printf("Gracz: "); for(b=0; b<p; b++) printf(" %c",player[b]); printf(" \n"); if(showdown()) { printf("Gratulacje! Wygrales! Masz %d p., a komputer %d p.\n",player_sum,dealer_sum); return 1; } else { if(player_sum>22) printf ("Niestety, przegrales. Przekroczyles liczbe 21!\n"); else printf("Niestety, przegrales. Komputer ma %d p., a Ty masz %d p.\n",dealer_sum, player_sum); return 0; } }
T get(const std::string& optionExpression, int at) const { T t; if(!get(t, optionExpression, at)) { couldntRetrieve(optionExpression); showdown("Unknown thang in pyconfig::View::get."); } return t; } // get[at]
void seletorRodada(Stats *stats){ do{ switch (stats->rodadaAtual){ case 0: prepR0(stats); calculoPote(stats); rodadaLoop(stats); (stats->nJogadoresAtivo>1)?(stats->rodadaAtual++):(stats->rodadaAtual = 7); break; case 1: prepR1(stats); novaRodada(stats); rodadaLoop(stats); (stats->nJogadoresAtivo>1)?(stats->rodadaAtual++):(stats->rodadaAtual = 7); break; case 2: prepR2(stats); novaRodada(stats); rodadaLoop(stats); (stats->nJogadoresAtivo>1)?(stats->rodadaAtual++):(stats->rodadaAtual = 7); break; case 3: prepR2(stats); novaRodada(stats); rodadaLoop(stats); (stats->nJogadoresAtivo>1)?(stats->rodadaAtual++):(stats->rodadaAtual = 7); break; case 4: showdown(stats); stats->rodadaAtual++; break; case 5: //Showdown break; case 6: //Desempate break; case 7: mostrarTelaFinal(stats); stats->rodadaAtual++; break; }; }while(stats->rodadaAtual!=8); };
void Cplm::mainLoop() { CStrOut message; int i = 0; // If a player left in the middle of hand, it might // happen that the pot still has money - if so, give // the chips here to the player if (!inGame_ && (table_->countPlayers(PLAYER_STATE_ACTIVE) < 2 || table_->numPlayersSittingIn() < 2 || CTournament::Inst()->pause())) { doCleanup(); Sys_Sleep(2000); if (!CTournament::Inst()->isTournament()) { // Players are sitting out CpduAnnounce pdu(table_); pdu.sendAnnounce("Waiting for players to sit in"); Sys_Sleep(2000); } return; } else { // The game thread function calls this repeatedly. // It only gets this far when there's enough players for a game. // First off, get the game number, and setLog all of the current players. memcpy((void*)¤tInstr_, pgl_->fetchInstr(), sizeof(pgl_instr_t)); switch (currentInstr_.opcode) { case (Instr_NOP): break; case (Instr_Deal): deal(); break; // Deal Cards To All Active Players case (Instr_Ante): // Do ANTE { table_->setGameNumber(); CpduGameNumber::SendGameNumber(table_); for (i = 0; i < 10; i++) { CPlayer* player = table_->getPlayerFromSlot(i); if (player) { message << CStrOut::Clear << "Seat " << i << ": " << player->getUsername() << " (" << player->getChips() << " in chips)"; table_->setLog(message.str()); } } ante(); } break; case (Instr_Draw): draw(); break; // Allow Players to Draw Cards case (Instr_Bet): bet(); break; // Do a betting Round case (Instr_Showdown): showdown(); break; // Do Showdown/Announce default: printf("Unknown operation %d!\n", (int)currentInstr_.opcode); break; } } }
int main(void){ unsigned long long deck = 0xFFFFFFFFFFFFF; unsigned bankroll; do{ char buffer[8]; printf("Bankroll: "); if(!fgets(buffer, sizeof(buffer), stdin)){ fprintf(stderr, "ERROR: Problem reading input.\n"); continue; } int retval = sscanf(buffer, "%u", &bankroll); if(retval < 1){ fprintf(stderr, "ERROR: Unable to parse input.\n"); continue; } break; }while(1); unsigned pot; do{ char buffer[8]; printf("Pot: "); if(!fgets(buffer, sizeof(buffer), stdin)){ fprintf(stderr, "ERROR: Problem reading input.\n"); continue; } int retval = sscanf(buffer, "%u", &pot); if(retval < 1){ fprintf(stderr, "ERROR: Unable to parse input.\n"); continue; } break; }while(1); printf("==Hole Cards==\n"); unsigned long long hand = get_card(&deck); hand |= get_card(&deck); const size_t H = get_lookup_index(hand); const unsigned long HAND_COMB = 2097572400UL; betting_round(&bankroll, &pot, begin_prob[H].counter, HAND_COMB); printf("Pot: %u\n", pot); printf("==Flop==\n"); unsigned long long flop = get_card(&deck); flop |= get_card(&deck); flop |= get_card(&deck); struct win_counter counter = {0}; determine_win_counter(&counter, deck, flop, hand, 2); const unsigned long FLOP_COMB = 1070190UL; betting_round(&bankroll, &pot, counter, FLOP_COMB); printf("Pot: %u\n", pot); printf("==Turn==\n"); unsigned long long turn = get_card(&deck); counter.split = 0; counter.win = 0; determine_win_counter(&counter, deck, flop|turn, hand, 1); const unsigned TURN_COMB = 45540U; betting_round(&bankroll, &pot, counter, TURN_COMB); printf("Pot: %u\n", pot); printf("==River==\n"); unsigned long long river = get_card(&deck); struct hand best_hand; determine_hand(&best_hand, hand|flop|turn|river); counter.split = 0; counter.win = 0; showdown(&counter, &best_hand, flop|turn|river, deck); const unsigned RIVER_COMB = 990; betting_round(&bankroll, &pot, counter, RIVER_COMB); printf("Pot: %u\n", pot); return 0; }