Je suis en train de déboguer du code pour un jeu de type Space Invaders où il y a 20 vaisseaux extraterrestres que nous devons tirer. Le jeu affiche le nombre de navires actuellement sur l'écran. Lorsque vous tirez et détruisez un navire, le nombre total de navires devrait diminuer de 1 pour chaque navire détruit. Ainsi, pour 20 navires, lorsque vous photographiez tous les 20, l'affichage devrait indiquer "0" pour le nombre de navires restants. Cependant, pour une raison que je ne comprends pas, quand je tire sur tous les 20 navires, l'affichage montrera "-2" ou "-3" ce qui n'a aucun sens pour moi car il ne peut y avoir un nombre négatif de navires.en utilisant des verrous dans un jeu avec des threads
J'ai essayé de résoudre cette solution avec un ReentrantLock
puisque ce jeu utilise plusieurs threads, mais je ne sais pas vraiment comment le faire correctement. Voici le segment qui vérifie si un navire étranger et balle entrent en collision (ce qui est quand le navire doit être détruit):
public void checkCollisions()
{
//check for alien ship and bullet collisions
for (AlienShip a : aships)
{
if (a.isAlive())
{
//check for bullet collisions
for (Bullet bullet : bullets)
{
if (bullet.isAlive())
{
//perform the collision test
if (a.getBounds().contains(bullet.getX(),
bullet.getY()))
{
bullet.setAlive(false);
a.setAlive(false);
shipLock.lock();
try
{
int shipCount = aliveShips;
shipCount--;
aliveShips = shipCount;
}
finally
{
shipLock.unlock();
}
continue;
}
}
}
}
}
Cela dépend beaucoup des threads qui font quoi dans votre système. Y at-il plus d'1 appelant cette méthode? – zapl