3

砲弾を発射する戦車を使った C++ コンソール ゲームです。問題はタンクシェル部分。クラス PlayerTankShell のオブジェクトを作成し、スペース ボタンが押されるたびにリンク リストに追加したいと考えています。どうやってやるの ?

これが私のコードです:

#include <iostream>
#include <conio.h>
#include <list>

using namespace std;

#define ATTACK  32

class PlayerTankShell
{
    int x;
    int y;
    int speed;
    bool isExist;

public:
    PlayerTankShell(bool exists)
    {
        isExist = exists;
    }
    bool getExistense()
    {
        return isExist;
    }
};

int main()
{
    char input;
    input = getch();

    if (input == ATTACK)
    {
        // Here create an object and add it to the linked list
    }

    // My test so far:
    PlayerTankShell *s1 = new PlayerTankShell(1);
    PlayerTankShell *s2 = new PlayerTankShell(1);
    PlayerTankShell *s3 = new PlayerTankShell(1);

    list<PlayerTankShell> listShells;

    listShells.push_back(*s1);
    listShells.push_back(*s2);
    listShells.push_back(*s3);

    list<PlayerTankShell>::iterator i;

    for (i = listShells.begin(); i != listShells.end(); i++)
    {
        cout << "exists=" << i->getExistense() << endl;
    }

    return 0;
}
4

2 に答える 2

0

ポインタPlayerTankShellリストに格納する場合は、次のようなスマートポインタテンプレートクラスを使用することをお勧めします(コードshared_ptrPlayerTankShellの部分でもポインタが共有されている場合は、参照カウントがゼロに達するとすぐに破棄されます。 STLコンテナとshared_ptrあなたは「決定論的ガベージコレクター」を持っています):

// List of smart pointers to PlayerTankShell
list<shared_ptr<PlayerTankShell>> shells;

// Add new PlayerTankShell to the list
shells.push_back( make_shared<PlayerTankShell>(true) );
于 2012-10-05T14:49:59.817 に答える
0

あなたは次のようなものが欲しいです:

std::list<PlayerTankShell> shells;

次に、次のように追加できます。

shells.push_back(PlayerTankShell(true))
于 2012-10-05T13:08:39.723 に答える