@Override public void actionPerformed(ActionEvent e) { long now = System.currentTimeMillis(); long millisSinceLastEvolve = now - timeAfterLastEvolve; timeAfterLastEvolve = now; if (player1_angle != 0) { facade.turn(player1, player1_angle); } if (player2 != null && player2_angle != 0) { facade.turn(player2, player2_angle); } if (player1_fire && facade.getShips(world).contains(player1)) { player1_fire = false; facade.fireBullet(player1); game.getSound().play("torpedo"); } if (player2 != null && player2_fire && facade.getShips(world).contains(player2)) { player2_fire = false; facade.fireBullet(player2); game.getSound().play("torpedo"); } facade.evolve(world, millisSinceLastEvolve / 1000., this); Iterator<Explosion> iter = explosions.iterator(); while (iter.hasNext()) { boolean done = iter.next().evolve(millisSinceLastEvolve / 1000.); if (done) iter.remove(); } boolean player1Alive = facade.getShips(world).contains(player1); if (player1Alive) { if (player2 != null && !facade.getShips(world).contains(player2)) { timer.stop(); msg = "Player 1 wins!"; } else if (facade.getAsteroids(world).isEmpty() && player2 == null) { timer.stop(); msg = "You win!"; } } else { timer.stop(); if (player2 == null || !facade.getShips(world).contains(player2)) { msg = "Asteroids win!"; } else { msg = "Player 2 wins!"; } } repaint(); }