Bonjour!

Je suis en train de programmer un jeu où des invaders apparaissent au haut de l'écran et qu'ils descendent. Le vaisseau (personnage principal) peut se déplacer en X seulement et appuyer sur la barre espace.
Lorsqu'il appuie sur space bar, un missile apparait et monte vers le haut de l'écran. Si le missile touche un enemy, le missile et l'enemy disparaissent. Tout marche bien, sauf qu'une erreur majeure semble être présente ici.
Effectivement, lorsque je "spam" la barre espace pour lancer plusieurs missile, un crash survient parfois au niveau des collisions disant:
Unhandled exception at 0x0FCFCAB6 (ucrtbased.dll) in SpaceShip.exe: An invalid parameter was passed to a function that considers invalid parameters fatal. occurred
J'ai pourtant beau vérifier mes ranges de vectors (vector d'enemy et vector de shoot), il n'y a pas de dépassement du range...

Fonction de collision:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 
void checkCollisions(character Character, vector<shoot> &Shoot, vector<enemy> &Enemies, bool &gameover) {
	//Collision enemy - Character
	for (int i = 0; i < Enemies.size(); i++) {
		//Compteur condition au lieu de faire une vérification imbriquée
		int CompteurCondition = 0;
		if (Enemies[i].getY() + Enemies[i].getHeight() >= Character.getY() && Enemies[i].getY() + Enemies[i].getHeight() <= Character.getY() + Character.getHeight()) {
			CompteurCondition++;
		}
 
		else if (Enemies[i].getY() <= Character.getY() + Character.getHeight() && Enemies[i].getY() >= Character.getY()) {
			CompteurCondition++;
		}
 
		if (Enemies[i].getX() + Enemies[i].getWidth() >= Character.getX() && Enemies[i].getX() + Enemies[i].getWidth() <= Character.getX() + Character.getWidth()) {
			CompteurCondition++;
		}
 
		else if (Enemies[i].getX() <= Character.getX() + Character.getWidth() && Enemies[i].getX() >= Character.getX()) {
			CompteurCondition++;
		}
		//Si au moins deux conditions sont vraies
		if (CompteurCondition >= 2) {
			//Afficher Game Over etc...
			gameover = true;
		}
		else {
 
		}
	}
	//Collision enemy - shoot
	for (int i = 0; i < Enemies.size(); i++) {
		for (int j = 0; j < Shoot.size(); j++) {
			int ConditionEnemy = 0;
			if (Enemies[i].getY() + Enemies[i].getHeight() >= Shoot[j].getY() && Enemies[i].getY() + Enemies[i].getHeight() <= Shoot[j].getY() + Shoot[j].getHeight()) {
				ConditionEnemy++;
			}
 
			else if (Enemies[i].getY() <= Shoot[j].getY() + Shoot[j].getHeight() && Enemies[i].getY() >= Shoot[j].getY()) {
				ConditionEnemy++;
			}
 
			if (Enemies[i].getX() + Enemies[i].getWidth() >= Shoot[j].getX() && Enemies[i].getX() + Enemies[i].getWidth() <= Shoot[j].getX() + Shoot[j].getWidth()) {
				ConditionEnemy++;
			}
 
			else if (Enemies[i].getX() <= Shoot[j].getX() + Shoot[j].getWidth() && Enemies[i].getX() >= Shoot[j].getX()) {
				ConditionEnemy++;
			}
			//Si au moins deux conditions sont vraies : clear la case des vector Enemies et Shoot
			if (ConditionEnemy >= 2) {
				Enemies.erase(Enemies.begin() + i);
				Shoot.erase(Shoot.begin() + j);
			}
			else {
 
			}
		}
	}
}
Classe enemy:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
class enemy : public entity
{
public:
	enemy();
	~enemy();
	void displayEnemy();
	void moveEnemy();
};
enemy::enemy()
{
	x = rand() % Width;
	y = 0;
	image = ChargerImage("enemy.bmp");
}
 
enemy::~enemy()
{
}
 
void enemy::displayEnemy() {
	AfficherImage(image, x, y);
}
 
void enemy::moveEnemy() {
	y = y + 1;
}
Classe Shoot:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
class shoot : public entity
{
public:
	shoot::shoot(character Character);
	shoot();
	~shoot();
	void displayShoot();
	void moveShoot();
};
 
shoot::shoot(character Character)
{
	x = Character.getX();
	y = Character.getY() - 1;
	image = ChargerImage("shoot.bmp");
}
 
shoot::shoot() {
 
}
 
shoot::~shoot()
{
}
 
void shoot::moveShoot() {
	y = y - 5;
}
 
void shoot::displayShoot() {
	AfficherImage(image, x, y);
}
Merci énormément!