C++ do-while-Schleife

Habe ich eine Vektor-holding 10 items (alle von der gleichen Klasse für die Einfachheit nennen es 'ein'). Was ich tun möchte, ist zu überprüfen, dass 'A' ist nicht entweder a) ausblenden der Wände oder b) versteckt sich ein weiteres 'A'. Ich habe eine collisions Funktion, die dies tut.

Die Idee besteht einfach darin, diese Schleife Klasse gehen und bewegen, 'A', um die nächste position, wenn, dass der Trank verursacht eine Kollision, dann muss es zu geben, selbst eine neue, zufällige position auf dem Bildschirm. Weil der Bildschirm klein ist, ist es eine gute chance, dass das element auf ein anderes (oder von oben von der Wand etc.). Die Logik der code funktioniert auch in meinem Kopf - aber das Debuggen Sie den code, der das Objekt einfach stecken bleibt in der Schleife, und bleiben in der gleichen position. 'A' soll sich auf dem Bildschirm bewegen, aber es bleibt immer noch!

Wenn ich kommentieren Sie die Do while-Schleife, und verschieben Sie die " MoveObject ()' - Funktion, bis der code funktioniert einwandfrei und das 'A' bewegen sich über den Bildschirm. Es ist nur, wenn ich versuchen, und fügen Sie zusätzliche Funktionen, um es, wenn es nicht funktioniert.

    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());
        }

}

Die folgende Klasse ist die Kollisionserkennung. Diese werde ich dann später erweitern.

    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;

    }

}

Jede Hilfe wäre sehr geschätzt werden. Ich werde kaufen Sie ein virtuelles Bier 🙂

Dank

Edit:

ResetPostion -> dieses wird das element A einer beliebigen position auf dem Bildschirm
moveObject -> dieses wird sich mit der Richtung des Objekts und stellen Sie die x-und Y-Kabel ist angemessen.

  • +1 für das virtuelle Bier.
  • nicht ->SetPosition() so ziemlich das gleiche tun wie moveObject()? Vielleicht entfernen eine oder andere aus dem code-Beispiel, um Verwirrung zu vermeiden? Auch, warum die unendliche while()**;**? und auch ohne das Semikolon, warum bewegen i zweimal in einer Schleife?
  • Die 10 Elemente in einem array. Der erste index, der von 0 startet nicht bei 1, nicht wahr? Was sowieso ResetPosition tut? Nichts?
  • Guter Punkt. Nehmen Sie Ihren Punkt an Bord. Ich merge die zwei in eins Funktion.
InformationsquelleAutor KingJohnno | 2013-04-15
Schreibe einen Kommentar