Pour un système très simple (rien n'est paramétrable, et les updates ne sont pas basés sur le temps écoulé) c'est pas si mal. Je te laisse voir comment le faire évoluer, je te donne juste les choses que je trouve mauvaises dans ce code :
1. Ne mets pas tout dans la fonction main(), sépare bien les classes / fonctions.
2. Ne cherche pas à réduire le nombre de lignes de code, mais plutôt à l'augmenter : utilise des noms de variables plus explicites, ne mets pas plusieurs instructions par ligne, aère ton code ; le but c'est qu'il soit lisible, tu ne fais pas un concours de lignes de code.
3. "
if (a) ... else if (a == false) ...", c'est juste "
if (a) ... else ..."
4. Probablement le plus important : ta gestion de la mémoire est très inefficace. Les particules nouvelles sont ajoutées en fin de tableau, ce qui fait que celles à supprimer sont toujours celles du début. Or un std::vector est très mauvais pour effacer en début de séquence (il doit redéplacer tout le reste pour boucher le trou). Trois solutions :
- utiliser un conteneur plus efficace pour les effacements en début de séquence, tel que std::deque ou std::list
- utiliser l'idiome erase-remove (cf. Google)
- recycler les particules mortes au lieu d'en supprimer / créer constamment