c++ - 仅为特定条件重置变量值,为其他一切设置固定值

标签 c++ loops variables if-statement constants

我正在更新游戏。

在游戏中,有拥有不同数量武器的单位。比如:毒刃超重型坦克(毒刃加农炮、爆破加农炮和重型爆弹枪)。
有些武器有特殊的武器特性,有些则没有。特性为零的武器显示为“”(不为空,只有空格)。
在我的示例中,Baneblade Cannon 是 "" , 爆破炮是 "Siege" , 重型 bolt 是 "" .
我想做的是:如果武器有 "Siege"特征,敌人掩护将被忽略,它将是 0 .

我可以这样做:

for (int w = 0; w < 4; w++)
{
    ... // some other codes

    int nDefCover = g_arrTerrainTypes[m_arrUnitEx[nDef].nTerrain].nCover; //     to reset nCover
    const auto& traits = m_arrUnitEx[nAtt].unit.pType->arrWeapons[w]->strTraits;

    // I check if a number w weapon has "Siege" string
    if (traits.Find("Siege") != std::string::npos) 
    {
        // nCover gives the value of enemy's cover.
        g_arrTerrainTypes[m_arrUnitEx[nDef].nTerrain].nCover = 0;
    }

    ... // some other weapon trait codes

    if (traits.Find("") != std::string::npos)
    {
        g_arrTerrainTypes[m_arrUnitEx[nDef].nTerrain].nCover = nDefCover;
    }
}

在此之后,我必须重置 nCover值(value)或从现在开始,所有武器将无视敌人的掩护奖励。我只想攻城武器忽略掩体。
所以,我使用g_arrTerrainTypes[m_arrUnitEx[nDef].nTerrain].nCover = nDefCover;重置 nCover其他武器的实际值(value)。

但是系统是这样工作的:
它看着第一个武器。这是"" , 所以它改变了 nCover到它的原始值。
它看着第二件武器,它是"Siege" , 所以它改变了 nCover0 .
它查看第三件武器,它是 "" , 所以它改变了 nCover到它的原始值。
最后,nCover返回其原始值和 Siege武器特性毫无意义。就像0或者 0或者 1情况。
如果一个单位有 Siege武器在其最后一个武器插槽中此代码可以工作,但武器顺序随每个单元而变化。
我怎样才能改变nCover0对于 Siege weapon 但对于所有其他情况,更改为原始值而不更改 Siege武器 nCover ?我应该用一个循环来做到这一点,但找不到把它放在哪里以及我应该使用哪个循环。

最佳答案

我的意思是你应该计算每件武器的伤害,而不是之后, 所以你应该有这样的东西:

for (auto& weapon : m_arrUnitEx[nAtt].unit.pType->arrWeapons)
{
    // if (distance(nAtt, nDef) > weapon.range) continue;
    dealDamage(weapon, nDef);
}

与:

void dealDamage(Weapon& weapon, int nDef)
{
    const auto& traits = weapon.strTraits;
    int nDefCover = g_arrTerrainTypes[m_arrUnitEx[nDef].nTerrain].nCover;
    if (traits.Find("Siege") != std::string::npos) 
    {
        nDefCover = 0;
    }

    m_arrUnitEx[nDef].hitPoints -= computeDamage(weapon, nDefCover);
    --weapon.ammo;
}

关于c++ - 仅为特定条件重置变量值,为其他一切设置固定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45149423/

相关文章:

variables - 平衡面板数据中的时间趋势变量,Stata

c++ - 如何在OpenGL中绘制由5个三角形组成的VAO?

c++ - 用于删除调试信息的 MSVC 命令行选项

c++ - std::auto_ptr 与 std::tr1::shared_ptr

bash - powershell bash 循环随机卡住等待键盘输入

javascript - 循环基础

c++ - 为什么 boost::function 慢?

javascript - 无法在 json 数组对象迭代中获得所需或类似的输出?

javascript - 在javascript中使用变量的值作为变量

java - 重复方法调用 VS 局部变量