예제 #1
0
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);
}
예제 #2
0
파일: testing2.c 프로젝트: qiubix/Cyclops
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;
    }



}
예제 #3
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]
예제 #4
0
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);
};
예제 #5
0
파일: plm.cpp 프로젝트: angeldv95/pokerspot
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*)&currentInstr_, 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;
        }
    }
}
예제 #6
0
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;
}