我想调试一些空间入侵者类型游戏的代码,其中有20艘外星飞船,我们必须拍摄。游戏显示当前在屏幕上的船只数量。当你射击并摧毁一艘船时,每艘被摧毁的船只的船舶总数应减1。因此,对于20艘船舶,当你拍摄全部20艘时,显示器应该为剩余的船舶数量表示“0”。但是,由于某些原因,我不明白,当我拍摄所有20艘船时,显示屏将显示“-2”或“-3”,这对我来说没有意义,因为不能有负数的船只。在线程游戏中使用锁
我试图修复这个解决方案的ReentrantLock
,因为这个游戏使用多线程,但并不真正知道如何正确地做到这一点。下面是检查是否一个外星飞船和子弹碰撞(也就是当船舶应被销毁)段:
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;
}
}
}
}
}
很大程度上取决于哪些线程在您的系统中执行什么操作。有更多的人调用这个方法吗? – zapl