如何同时弹出2个堆栈

时间:2016-08-17 21:58:50

标签: c++ stack

我目前正在开发一个模拟游戏的程序,该游戏包含2个团队,其中包含许多玩家。每个团队都表示为一个堆栈(alienStack1和alienStack2);这两个堆栈每个都包含许多玩家。为了让两个玩家战斗(每个堆叠一个),我必须从堆栈中弹出相应的外星人以对抗彼此,但我不知道如何同时弹出两个堆栈。我们应该将弹出的项目发送到队列中,但在我尝试尝试之前,我想首先解决这个问题。如果有人可以帮我解决这个问题,我将不胜感激。

到目前为止,这是我的代码: 在我的battlefield()函数中,我遇到弹出2个堆栈的问题。

#include <iostream>
#include <string>
#include <stack>
using namespace std;

class Alien 
{
    public: 
        Alien();                    
        Alien(int h, int w, char g);  //set height to h,                                      
        void setHeight(int h);        //set height to h 
        void setWeight(int w);        //set weight to w 
        void setGender(char g);       //sets the gender to g 
        int getHeight();              //return the height
        int getWeight();              //return the weight 
        char getGender();             //return the gender 

        bool operator==(const Alien& alien) const; 
        bool operator!=(const Alien& alien) const; 
        bool operator<=(const Alien& alien) const; 
        bool operator<(const Alien& alien) const; 
        bool operator>=(const Alien& alien) const; 
        bool operator>(const Alien& alien) const;
        void putPlayersInStack(Alien alien, Alien alien2, Alien alien3, Alien alien4);
        void battlefield();
private: 
    int height;  //inches 
    int weight;  //pounds 
    char gender;  //the gender.  Either 'M' or 'F'
    stack <Alien> alienStack1;
    stack <Alien> alienStack2;
};

Alien::Alien()
{
    height = 60;
    weight = 100;
    gender = 'M';
    int statusPoints = 0;
}

Alien::Alien(int h, int w, char g)
{
    height = h;
    weight = w;
    gender = g;
    int statusPoints = 0;
}

void Alien::setHeight(int h)
{
    if (height > 0)
    {
        height = h;
    }
    else
    {
        cout << "Invalid height. Must be greater than zero. " << endl;
    }
}

void Alien::setWeight(int w)
{
    if (weight > 0)
    {
        weight = w;
    }
    else
    {
        cout << "Invalid weight. Must be greater than zero. " << endl;
    }
}

void Alien::setGender(char g)
{
    if (gender == 'M' && gender == 'F')
    {
        gender = g;
    }
    else
    {
        cout << "Invalid gender. Must be either M or F. " << endl;
    }
}

int Alien::getHeight()
{
    return height;
}

int Alien::getWeight()
{
    return weight;
}

char Alien::getGender()
{
    return gender;
}

static int getGenderValue(char g)
{
    int genderValue = 0;
    int statusPoints = 0;

    if (g == 'F')
    {
        genderValue = 3;
    }
    else
        genderValue = 2;

    return genderValue;
}

static int getStatusPoint(Alien alien)
{
    int genderValue = getGenderValue(alien.getGender());

    return (alien.getHeight() * alien.getWeight() * genderValue);
}

bool Alien::operator==(const Alien& alien) const
{
    return getStatusPoint(*this) == getStatusPoint(alien);
}

bool Alien::operator!=(const Alien& alien) const
{
    return getStatusPoint(*this) != getStatusPoint(alien);
}

bool Alien::operator<=(const Alien& alien) const
{
    return getStatusPoint(*this) <= getStatusPoint(alien);
}

bool Alien::operator>=(const Alien& alien) const
{
    return getStatusPoint(*this) >= getStatusPoint(alien);
}

bool Alien::operator<(const Alien& alien) const
{
    return getStatusPoint(*this) < getStatusPoint(alien);
}

bool Alien::operator>(const Alien& alien) const
{
    return getStatusPoint(*this) > getStatusPoint(alien);
}

void Alien::putPlayersInStack(Alien alien, Alien alien2, Alien alien3, Alien alien4)
{
    stack <Alien> alienStack1;
    stack <Alien> alienStack2;

    // Team 1
    alienStack1.push(alien);
    alienStack1.push(alien2);

    //Team 2
    alienStack2.push(alien3);
    alienStack2.push(alien4);
}

void Alien::battlefield()
{
    cout << "Prepare for battle " << endl;

    while (!alienStack1.empty())
    {
        alienStack1.top();
        alienStack1.pop();
    }

    while (!alienStack2.empty())
    {
        alienStack2.top();
        alienStack2.pop();
    }

}

int main()
{
    // Driver to test all 6 operators 

        Alien alien1(40, 120, 'M');
        Alien alien2(50, 130, 'F');
        Alien alien3(60, 140, 'M');
        Alien alien4(70, 150, 'F');

        Alien sendToStack;
        sendToStack.putPlayersInStack(alien1, alien2, alien3, alien4);


        /*if (player1 == player2)
        {
            cout << "Same score, it's a tie! " << endl;
            cout << endl;
        }

        if (player1 != player2)
        {
            cout << "players are NOT equal " << endl;
            cout << endl;
        }

        if (player1 <= player2)
        {
            cout << "It's a tie or the player 2 wins!" << endl;
            cout << endl;
        }

        if (player1 < player2)
        {
            cout << "Player 2 wins!" << endl;
            cout << endl;
        }

        if (player1 >= player2)
        {
            cout << "It's a tie or player 1 wins!" << endl;
            cout << endl;
        }

        if (player1 > player2)
        {
            cout << "Player 1 wins!" << endl;
            cout << endl;
        }*/

    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

除了&#34; Cheers和hth&#34;指出的语法错误。 ...

(1)Alien类有两个堆栈作为成员。我想你想把玩家插入这两个堆栈。相反,Alien :: putPlayersInStack函数将玩家插入两个超出范围的临时堆栈,并在函数结束时销毁。

(2)我不确定游戏的规则是什么,但我猜你正试图做这样的事情:

void Alien::battlefield()
{
    cout << "Prepare for battle " << endl;
    Alien p1,p2;        
    while (1)
    {
        if (alienStack1.empty()) { /*battle ended*/ return; }
        if (alienStack2.empty()) { /*battle ended*/ return; }
        p1=alienStack1.top(); alienStack1.pop();
        p2=alienStack1.top(); alienStack2.pop();      

        /* Now compare players p1, p2 */
    }    
}