当前位置: 首页>>代码示例>>C++>>正文


C++ Human::discard方法代码示例

本文整理汇总了C++中Human::discard方法的典型用法代码示例。如果您正苦于以下问题:C++ Human::discard方法的具体用法?C++ Human::discard怎么用?C++ Human::discard使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Human的用法示例。


在下文中一共展示了Human::discard方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: main

int main(int argc, char* argv[]){
    //invite players
    Player *players [4];

    for(int i= 0; i<4; i++){
        cout << "Is player " << i+1 << " a human(h) or a computer(c)?" << endl << ">";
        string input;
        cin >> input;
        assert(input=="c" || input=="C" || input=="h" || input=="H");

        if(input=="c"||input=="C")
            players[i] = new Computer(i+1);
        else if(input=="h" || input=="H")
            players[i] = new Human(i+1);
    }

    createDeck();

    //seeding the random number 
    if(argc==2)
	srand48(atol(argv[1]));
    else
	srand48(0);

    //game loops while no one has more than 80 points
    while (players[0]->getTotalScore() < 80 && players[1]->getTotalScore() < 80 && players[2]->getTotalScore() < 80 && players[3]->getTotalScore() < 80)
    {
        shuffle();

        //reset tables
        tableC.clear();
        tableD.clear();
        tableH.clear();
        tableS.clear();
        int currentPlayer=0;
        //split the deck amongst the first four players
        for(int i = 0; i<CARD_COUNT; i++){
            players[i/13]->setHand(cards_[i]);
            if(cards_[i]->getSuit()==3 && cards_[i]->getRank()==6){
                currentPlayer=i/13;
            }
        }

        //gameplay starts
        cout << "A new round begins. It's player " << currentPlayer+1 << "'s turn to play." << endl;

        //loop for one round of the game
        for(int i = 0; i<52; i++)
        {
            players[currentPlayer]->turn(tableC, tableD, tableH, tableS);
            //human player turn
	    if(players[currentPlayer]->getptype() == "h")
            {
                Human * h = dynamic_cast<Human*>(players[currentPlayer]);
                Command c;
                bool acceptablePlayMade = false;
                while (!acceptablePlayMade)
                {
                    cout << ">";
                    cin >> c;
                    if(c.type == PLAY)
                    {
			//call play with respective table 
                        if(c.card.getSuit()==0)
                            acceptablePlayMade = h->play(c.card, tableC);
                        else if(c.card.getSuit()==1)
                            acceptablePlayMade = h->play(c.card, tableD);
                        else if(c.card.getSuit()==2)
                            acceptablePlayMade = h->play(c.card, tableH);
                        else if(c.card.getSuit()==3)
                            acceptablePlayMade = h->play(c.card, tableS);
                    }
                    else if(c.type == RAGEQUIT){
                        cout << "Player " << currentPlayer + 1 << " ragequits. A computer will now take over." << endl;
                        players[currentPlayer] = new Computer(h);
                        delete h;
                        acceptablePlayMade = true;
                        //decrement currentPlayer and i to restart this turn as computer
                        currentPlayer--;
                        i--;
                    }
                    else if(c.type == DECK){
                        for (int i = 0; i<CARD_COUNT; i++)
                        {
                            cout << *(cards_[i]);
                            if (i%13 == 12)
                                cout << endl;
                            else
                                cout << " ";
                        }
                    }
                    else if(c.type == DISCARD){
                        acceptablePlayMade = h->discard(c.card, tableC, tableD, tableH, tableS);
                    }
                    else if(c.type == QUIT){
                        return 0;
                    }
                }
            }
            currentPlayer = (++currentPlayer)%4;
//.........这里部分代码省略.........
开发者ID:Hamyli,项目名称:Straights,代码行数:101,代码来源:Straights.cpp

示例2: play

//plays the game, either play a legal play or discards
void Model::play(int pos)
{
    Human * h = dynamic_cast<Human*>(players[currentPlayer]);
    bool acceptablePlayMade = false;

    //check for ragequit
    if (pos == -1)
    {
        cout << "Player " << currentPlayer + 1 << " ragequits. A computer will now take over." << endl;
        players[currentPlayer] = new Computer(h);
        delete h;
        acceptablePlayMade = true;
        players[currentPlayer]->turn(tableC, tableD, tableH, tableS);
    }
    else
    {
        //check to see if a blank card is clicked
        if (pos >= h->hand.size())
            return;
        //play the card
        deque<Card*> playable = players[currentPlayer]->findLegalPlays(tableC, tableD, tableH, tableS);

        if(playable.size() != 0)
        {
            //call play with respective table
            if(h->hand[pos]->getSuit()==0)
                acceptablePlayMade = h->play(*(h->hand[pos]), tableC, false, tableS);
            else if(h->hand[pos]->getSuit()==1)
                acceptablePlayMade = h->play(*(h->hand[pos]), tableD, false, tableS);
            else if(h->hand[pos]->getSuit()==2)
                acceptablePlayMade = h->play(*(h->hand[pos]), tableH, false, tableS);
            else if(h->hand[pos]->getSuit()==3)
                acceptablePlayMade = h->play(*(h->hand[pos]), tableS, true, tableS);
        }
        else{
            acceptablePlayMade = h->discard(*(h->hand[pos]), tableC, tableD, tableH, tableS);
        }
    }

    //if an acceptable play is made, run computer turns until it's another human player's turn
    if (acceptablePlayMade)
    {
        currentPlayer = (++currentPlayer)%4;
        if (players[currentPlayer]->hand.size() == 0)
        {
            this->endRound();
            return;
        }
        players[currentPlayer]->turn(tableC, tableD, tableH, tableS);
        //loop until next human player
        while (players[currentPlayer]->getptype() != "h")
        {
            currentPlayer = (++currentPlayer)%4;
            if (players[currentPlayer]->hand.size() == 0)
            {
                this->endRound();
                return;
            }
            players[currentPlayer]->turn(tableC, tableD, tableH, tableS);
        }
    }
    notify();

}
开发者ID:Hamyli,项目名称:Straights,代码行数:65,代码来源:model.cpp


注:本文中的Human::discard方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。