我正在尝试学习如何使用课程,但我很难理解它,所以我试图创建一个游戏。
我想在堆中访问我的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);
}
}
答案 0 :(得分:0)
我正在努力学习如何使用课程,但我很难过 试图理解它,所以我试图创建一个游戏。
由于您想创建游戏,可视化所有角色和场景或任何您想要的东西。
模拟您对游戏的想法/观点..
示例:
一旦确定了所需的所有课程以及它们之间的关系,您现在可以用您想要的任何语言开始编写它们。
我知道这需要时间,但这是学习设计的更好方法,从长远来看,这些技能会有所帮助。
答案 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
}