0

我正在看 Mojam(现场游戏编程,在HumbleBundle上),我在那里看到了这段代码(这里是代码的屏幕截图)我想知道最后一个 if 语句(即!wasmoving && ismoving)中的条件表达式如何计算为真(确实如此,程序员编译了它并且动画正在运行)。我已经在我的编译器中尝试过这个

#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
    bool ismoving=5>0;
    bool wasmoving=ismoving;
    cout << "ismoving"<< ismoving << " oraz wasmoving " << wasmoving << endl;
    if (!wasmoving && ismoving) cout << "1st = true 2nd = true" << endl;
    system("PAUSE");
    return 0;
}

当然,如果最后一个 if 采用错误的路径,则什么也不会发生。谁能解释屏幕截图中的代码是如何工作的?

4

2 回答 2

4

请注意,在屏幕截图中,ismoving变量在复制到wasmoving会更新,因此在评估条件时 的值很可能与 的值ismoving不同wasmoving

于 2013-02-22T13:00:14.370 回答
1

您从屏幕截图中转换的代码不准确。您已更改操作的顺序。

与大多数主流编程语言一样,C++ 和 Java 是“命令式”语言。这意味着程序由一个接一个地执行的指令序列组成。当该代码执行时:

boolean wasJumping = isJumping;
isJumping = ...someCalculation...;

首先将 wasJumping 的值设置为 isJumping 的当前值,然后将 isJumping 的值更改为其他值。wasJumping 没有改变 - 它仍然具有从 isJumping 获取的旧值。

如果您来自数学背景,这可能会令人困惑。我发现将“wasJumping = isJumping”解读为“wasJumping等于isJumping”而不是“wasJumping 等于 isJumping”会有所帮助。前者强调它描述的是变量的变化,而不是描述两个值之间的永久关系。

于 2013-02-22T13:03:13.953 回答