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;
}
Exemple #3
0
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 );
}