这是我的混乱开始的地方,所以首先声明一个空指针。然后执行选择,运行任何输入,然后函数randomEncounter来。
cout << "1) Move, 2) Rest, 3) View Stats, 4) Quit: ";
cin >> selection;
Monster* monster = 0;
switch( selection )
{
case 1:
gameMap.movePlayer();
// Check for a random encounter. This function
// returns a null pointer if no monsters are
// encountered.
monster = gameMap.checkRandomEncounter();
// 'monster' not null, run combat simulation.
if( monster != 0 )
接下来当函数通过时,是
//refering to the once null pointer and now modifies something real?
monster = new Monster
是
0 = gameMap.checkRandomEncounter();
或者它指向的是什么,而不是零的实际值,并耐心地等待指向的东西?所以
0 = null;
直到函数运行:这是函数
Monster* Map::checkRandomEncounter()
{
int roll = Random(0, 20);
Monster* monster = 0;
if( roll <= 5 )
{
// No encounter, return a null pointer.
return 0;
}
else if(roll >= 6 && roll <= 10)
{
monster = new Monster("Orc", 10, 8, 200, 1,
"Short Sword", 2, 7);
cout << "You encountered an Orc!" << endl;
cout << "Prepare for battle!" << endl;
cout << endl;
}
遇到遭遇时也是如此:
monster = new Monster();
这会修改指向现在真实对象的一次空指针,还是会创建一个全新的对象?我很困惑这一切是如何联系在一起的。在函数中还有第二个
Monster* monster = 0;
这是一个使用过的地方,以及它如何回到有一次遭遇的调用函数。我意识到它以某种方式通过指针返回,但肯定需要一些清晰度
答案 0 :(得分:1)
如果没有自我解释,发布的代码中的注释都没有。
调用方只是以Monster
指针开始,该指针最初为NULL(0)(故意指向无对象),如果checkRandomEncounter()
为selection
,则为1
指定返回值Monster
。如果该函数返回非空地址,则表示已返回// Check for a random encounter. This function
// returns a null pointer if no monsters are
// encountered.
monster = gameMap.checkRandomEncounter();
// 'monster' not null, run combat simulation.
if( monster != 0 ) ...
,并且应采取特定的响应行动。
checkRandomEncounter()
关于if( roll <= 5 )
{
// No encounter, return a null pointer.
return 0;
}
Monster
因此,如果roll低于5,则函数返回空指针,否则如果它在6和10之间,则分配新的else if(roll >= 6 && roll <= 10)
{
monster = new Monster("Orc", 10, 8, 200, 1,
"Short Sword", 2, 7);
cout << "You encountered an Orc!" << endl;
cout << "Prepare for battle!" << endl;
cout << endl;
}
并返回指向该值的指针。
monster
虽然没有显示,但最好有一些代码来处理滚动在11到20之间时发生的事情,我猜测可能会生成不同的怪物类型,每个类型都有不同的随机范围。 (只是在黑暗中拍摄)。
无论如何,如果有可能或者作者在发生的事情上更具体,我很想看看如何。如果仍然不清楚,你需要花时间在C ++中学习基本的指针细微差别,然后再进一步剖析。
最后,如果变量 names 让您感到困惑,那么知道主代码中的checkRandomEncounter()
指针变量 nothing 是否有用呢?与{{1}}中的那个?除了后者用于计算由于代码结构最终将分配给前者的返回值之外,它们完全无关,不同的指针。
答案 1 :(得分:0)
你需要返回if的另一边的指针(或者你没有包括我认为是的最后两行
return monster;
}
来自gameMap.checkRandomEncounter方法的。
此外,您不应该在该方法中打印出东西 - 只需关注是否触发了遭遇,然后这会影响游戏的流程。