Ich hatte bereits einen anderen Thread zu diesem Thema geöffnet, wo ich Fragen zum Zeichnen mit QT gestellt und geklärt habe.
http://entwickler-forum.de/showthrea...eichnen-mit-QT
Da das Thema des Threads nicht wirklich mehr zu den Fragen passt, öffne ich hier einen neuen.
Es geht um die Programmierung folgender Simulation:
http://de.wikipedia.org/wiki/Wator
Stand:
Die Initialisierung des Spielfelds funktioniert soweit, ist aber sehr langsam. Die Visualisierung des Spielfelds funktioniert.
Nun zu dem Problem:
Für die Initialisierung speichere ich alle möglichen Positionen für das Spielfeld in einem Vector:
Im Anschluss vergebe ich für alle Positionen eine Spielfigur:
Am Ende muss ich die gerade verwendete Position noch aus dem Vector löschen, damit diese nicht nochmal verwendet wird. Es gibt leider keine andere Möglichkeit aus einem Vector ein Element zu löschen, als über einen Iterator. Um an den Iterator zu gelangen muss ich jedes mal den Vector durchlaufen und den Wert des aktuellen Iterators mit dem Gesuchten zu vergleichen. Das geht bei einem Spielfeld mit 50x50 Felder noch recht Zügig wird aber bereits bei 150x150 extrem langsam.
Habt ihr eine andere Idee wie ich das umsetzen könnte? Hab ich vllt einen Fehler gemacht und es geht doch?!
Grüße
MaX
http://entwickler-forum.de/showthrea...eichnen-mit-QT
Da das Thema des Threads nicht wirklich mehr zu den Fragen passt, öffne ich hier einen neuen.
Es geht um die Programmierung folgender Simulation:
http://de.wikipedia.org/wiki/Wator
Stand:
Die Initialisierung des Spielfelds funktioniert soweit, ist aber sehr langsam. Die Visualisierung des Spielfelds funktioniert.
Nun zu dem Problem:
Für die Initialisierung speichere ich alle möglichen Positionen für das Spielfeld in einem Vector:
Code:
for (int z = 0; z < worldSize.second; z++) //Zeilen { for (int s = 0; s < worldSize.second; s++) //Spalten { positions.push_back(std::pair<int, int>(z, s)); }//end for }//end for Zeilen
Code:
while(positions.size() > 0) { //Generiere Zufallszahl für Position randomPos = rand() % positions.size(); //Erstelle neues Individuum newIndividual = _createRandomIndividual(); //Setze neues Individuum auf Spielfeld _setPlayingFieldValue(positions.at(randomPos).first, positions.at(randomPos).second, *newIndividual); //Entferne die gerade genutzten Positionen aus den Vectoren int counter = 0; for (std::vector<std::pair<int, int> >::iterator it = positions.begin(); it != positions.end(); it++) { if (*it == positions.at(randomPos)) { positions.erase(it); break; }//end if else counter ++; }//end for xPosition }//end while
Habt ihr eine andere Idee wie ich das umsetzen könnte? Hab ich vllt einen Fehler gemacht und es geht doch?!
Grüße
MaX
Comment