C++ 做 while 循环

标签 c++ while-loop do-while

我有一个包含 10 个项目的 vector (为简单起见,所有项目都属于同一类,称其为“a”)。我想要做的是检查“A”不是 a) 隐藏墙壁或 b) 隐藏另一个“A”。我有一个碰撞函数可以做到这一点。

想法只是让这个循环类遍历并将“A”移动到下一个位置,如果该药水导致碰撞,那么它需要在屏幕上给自己一个新的随机位置。因为屏幕很小,所以元素很有可能会放在另一个屏幕上(或墙顶等)。代码的逻辑在我的脑海中运作良好 - 但调试对象只是卡在循环中的代码,并保持在相同的位置。 “A”应该在屏幕上移动,但它保持静止!

当我注释掉 Do while 循环并将“MoveObject()”函数向上移动时,代码完美运行,“A”在屏幕上移动。就在我尝试向它添加额外功能时,它不起作用。

    void Board::Loop(void){


        //Display the postion of that Element. 
        for (unsigned int i = 0; i <= 10; ++i){


            do {

                if (checkCollisions(i)==true){
                moveObject(i); 
                }
                else{
                    objects[i]->ResetPostion();

                }

            }
            while (checkCollisions(i) == false);
            objects[i]->SetPosition(objects[i]->getXDir(),objects[i]->getYDir());
        }

}

下面的类是碰撞检测。这个我后面会展开。

    bool Board::checkCollisions(int index){

    char boundry = map[objects[index]->getXDir()][objects[index]->getYDir()];

    //There has been no collisions - therefore don't change anything 
    if(boundry == SYMBOL_EMPTY){
        return false;
    }
    else{
        return true;

    }

}

任何帮助将不胜感激。我会给你买一杯虚拟啤酒:-)

谢谢

编辑:

ResetPostion -> 这将给元素 A 在屏幕上一个随机位置 moveObject -> 这将查看对象的方向并适当调整 x 和 Y 线。

最佳答案

我猜你需要:

do { ...
... } while (checkCollisions(i)); 

此外,如果您有 10 个元素,则 i = 0; i < 10; i++

顺便说一句。不要写 if (something == true) , 简单 if (something)if (!something)

关于C++ 做 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16022402/

相关文章:

java - 获取2个随机数的平均值 "30"

java - 无限循环。拖延程序

java - 在 Java 中执行 while 循环更改变量

java - 走出while循环

c++ - 在两个 C++ 程序之间交换消息

c++ - 给定硬币的所有可能总和

c++ - 使用二维数组读取 csv 文件

php - FPDF - PHP While 循环只返回第一个值

c++ - 让 CEF 使用单独的可执行文件来启动子进程 (C++/Windows)

c++ - 为什么这个do while循环会无限执行呢?