class * object = new class [size]

时间:2015-10-06 05:43:25

标签: c++

我正在尝试学习如何使用课程,但我很难理解它,所以我试图创建一个游戏。

我想在堆中访问我的10名玩家,我想初始化每10名玩家的技能。我真的不知道我在做什么,请帮助我。如果您认为我的程序结构是垃圾,请告诉我并告诉我如何正确地完成它。感谢

的main.cpp

int main()
{
    Player *p = new Player[10];
    p->createPlayer(&p,10);
}

标头文件

class Player
{
    public:
        Player();
        ~Player();

        int genRanNum(int);
        void createPlayer(Player *, int);
    private:
        int plyrSkill1,plyrSkill2,plyrSkill3;
        int plyrId;
};

CPP档案

Player::Player()
{
}

int Player::genRanNum(int num)
{
    return 1+(rand()%num);
}

void Player::createPlayer(Player *p, int si)
{

    for(int i = 0; i < si; i++)
    {
        *p->staId = i;
        *p->staSkills1 = genRanNum(10);
        *p->staSkills2 = genRanNum(10);
        *p->staSkills3 = genRanNum(10);
    }
}

2 个答案:

答案 0 :(得分:0)

  

我正在努力学习如何使用课程,但我很难过   试图理解它,所以我试图创建一个游戏。

由于您想创建游戏,可视化所有角色和场景或任何您想要的东西。

模拟您对游戏的想法/观点..

示例:

game model

一旦确定了所需的所有课程以及它们之间的关系,您现在可以用您想要的任何语言开始编写它们。

我知道这需要时间,但这是学习设计的更好方法,从长远来看,这些技能会有所帮助。

答案 1 :(得分:0)

Player *p = new Player[10];中的第一行是在堆上创建一个包含10个玩家的数组。

似乎你想用第二行p->createPlayer(&p,10);'初始化'这10个玩家,但代码错了:

createPlayer()函数中的循环始终在同一个播放器上运行(它递增i但p始终相同)。

试试这个:

class Player
{
    public:
        Player(); /// can be private if players can be instantiated only by createPlayer()
        ~Player();

        static int genRanNum(int);
        static Player* createPlayer(int);
    private:
        int plyrSkill1,plyrSkill2,plyrSkill3;
        int plyrId;
};

createPlayer()和getRanNum()是静态的,因为它们是类方法(特别是与一个实例无关)

Player * Player::createPlayer(int si)
{
    Player *player = new Player();
    player->staId = si;
    player->staSkills1 = genRanNum(10);
    player->staSkills2 = genRanNum(10);
    player->staSkills3 = genRanNum(10);

     return player;   
}

最后在主要:

int main()
{
    std::vector<Player *> p(10); 
    for (int iPlayer=0; iPlayer<10; iPlayer++)
    {
       p[iPlayer] = Player::createPlayer(iPlayer);
    }

    ...
    /// Don't forget to delete players
}