示例#1
0
void Game::changeCardsUEC( Result *result ){
    //UECdaルールによる手札の交換
    COUT<<"change"<<endl;
    
    //Gameコンストラクタですでに搾取されている
    //コンストラクタ時点で足されていたものを修復する
    for(int i=0; i<result->mChange.size(); i++){
        if(result->mChange[i].mFrom == players.mibunId(HINMIN)){
            deleteCard(players.id[players.mibunId(HINMIN)].cards, result->mChange[i].mCards);
        }else if(result->mChange[i].mFrom == players.mibunId(DAIHINMIN)){
            deleteCard(players.id[players.mibunId(DAIHINMIN)].cards, result->mChange[i].mCards);
        }
    }
    
    //交換するカードを受け取り、確認を行う(通信)
    //大富豪から大貧民へ
    int data[8][15] = {{0}};
    recv815(data, players.id[players.mibunId(DAIFUGO)].sockfd);
    if( !checkChangeCardUEC(data, players.id[players.mibunId(DAIFUGO)]) ){//
        cout << " DAIFUGO change faled " << endl;
        //ダメなら、UECサーバは勝手に搾取してしまうようだ
        memset(data, 0, sizeof(data));
        selectHighCard(data, players.id[players.mibunId(DAIFUGO)].cards, 2);
    }
    //PRINT815(data);
    result->addChange(players.mibunId(DAIFUGO), players.mibunId(DAIHINMIN), data);//大富豪の交換カードを保存
    deleteCard(players.id[players.mibunId(DAIFUGO)].cards, data);//交換できるなら削除して
    addCard(players.id[players.mibunId(DAIHINMIN)].cards, data);//押し付ける

    //富豪から貧民へ
    memset(data, 0, sizeof(data));
    recv815(data, players.id[players.mibunId(FUGO)].sockfd);
    if( !checkChangeCardUEC(data, players.id[players.mibunId(FUGO)]) ){//
        cout << " FUGO change faled " << endl;
        //ダメなら、UECサーバは勝手に搾取してしまうようだ
        memset(data, 0, sizeof(data));
        selectHighCard(data, players.id[players.mibunId(FUGO)].cards, 1);
    }
    //PRINT815(data);
    result->addChange(players.mibunId(FUGO), players.mibunId(HINMIN), data);//富豪の交換カードを保存
    deleteCard(players.id[players.mibunId(FUGO)].cards, data);//交換できるなら削除して
    addCard(players.id[players.mibunId(HINMIN)].cards, data);//押し付ける
    
    if(0){
        COUT<<"CHANGE"<<endl;
        for(int i=0; i<result->mChange.size(); i++){
            result->mChange[i].print();
        }
    }
}
示例#2
0
void Monopoly::CardDeck::shuffle()
{
  srand(time(NULL));
  
  int cardsLeft= m_numberCards;			// number of cards which have not been put into the array
  int randomNumber;
  int* tempCards = new int[m_numberCards];
  
  for(int i=0; i<cardsLeft; i++)			//saves all cards in a temporary list
  {
    tempCards[i]=m_deck[i];
  }
  
  for(int i=0; i< m_numberCards; i++)		// fills in the card list from front to back by randomly selecting a card from temp, inserting it in deck and deleting it from temp.
  {
    randomNumber=rand()%cardsLeft;			// which card to chose
    m_deck[i]=tempCards[randomNumber];		// choses therandomly selected card and adds it to the deck;
    cardsLeft--;				// decreases the cardsLeft, 
    deleteCard(randomNumber,cardsLeft, tempCards); //selected card is being deleted from the temp list, so that it can't be chosen again
  }
  delete [] tempCards;
}