本文整理汇总了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;
//.........这里部分代码省略.........
示例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();
}