bool genCards(pokerCard *deck, pokerCard * cards, int requestNum) { if (deck->dealt) { return false; } int i = 0; int available = CARD_COUNT; for (i=0; i<CARD_COUNT; i++) { if ((deck+i)->dealt) { available = i+1; break; } } if (available<requestNum) { return false; } for (i=0; i<requestNum; i++) { (deck+i)->dealt = 1; copyCard(deck+i, cards+i); swapCards(&deck[i], &deck[available-1]); available--; } return true; }
bool genRandomCards(pokerCard *deck, pokerCard *cards, int requestNum) { if (deck->dealt) { return false; } int i = 0; int available = CARD_COUNT; for (i=0; i<CARD_COUNT; i++) { if ((deck+i)->dealt) { available = i+1; break; } } if (available<requestNum) { return false; } // generate a random index and copy to cards // swap this card with the last card that is not dealt on the deck for (i=0; i<requestNum; i++) { int rnum = ran_int(0, available-1); (deck+rnum)->dealt = 1; copyCard(deck+rnum, cards+i); swapCards(&deck[rnum], &deck[available-1]); available--; } return true; }
void Game::dealCards( Result *result){ COUT<<"dc"<<endl; //カードを配る vector<int> deck; //通常のカード for(int i=0; i<4; i++){ for(int j=1; j<=13; j++){ deck.push_back( i*14 + j ); } } //jokerの枚数 for(int i=0; i<config.JOKER_NUM; i++){ deck.push_back( 14*4 + 1 ); } //deckをshuffle for(int i=0; i<deck.size()*2; i++){ int a = (int)( (deck.size()-1) * random->rand() ); int b = (int)( (deck.size()-1) * random->rand() ); int c = deck[a]; deck[a] = deck[b]; deck[b] = c; } //プレイヤのカードを初期化してから for(int i=0; i<players.size(); i++){ players.id[i].initCard(); } //deckを一枚ずつ分配していく //身分差があれば大富豪を起点、でなければ席順の若い人を起点 int target = players.convIDtoSekiNum( ( players.isInequality() ) ? players.mibunId(DAIFUGO) : players.sekijun[0]);//大富豪から while( !deck.empty() ){ players.id[players.sekijun[target]].cards[deck[0]/14][deck[0]%14] = 1;//入れて players.id[players.sekijun[target]].cards_num++;//枚数を増やして deck.erase( deck.begin() );//削除 //次の人 target = ( target + 1 ) % ( players.size() ); } int tefuda[5][8][15]={{0}}; for(int i=0;i<players.size();i++){ copyCard( tefuda[i], players.id[i].cards ); } result->setFirstCards( tefuda ); //搾取が行われれば行う exploit( result ); }