import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.image.BufferedImage; public class HumanShip extends Ship { private boolean upPressed; private boolean downPressed; private boolean leftPressed; private boolean rightPressed; private long timeDownPressed; private long timeUpPressed; private long timeLeftPressed; private long timeRightPressed; private int startUpPressed; private int startDownPressed; private int startLeftPressed; private int startRightPressed; public HumanShip(final int newX, final int newY, final int newSpeed, final int newMaxHitpoints, final int newDamage, final int newShotSpeed, final int newShotInterval, final BufferedImage newPic, final BufferedImage newShotPic) { super(newX, newY, newSpeed, newMaxHitpoints, 0, newDamage, newShotSpeed, newShotInterval, 0, -25, newPic, newShotPic); this.upPressed = false; this.downPressed = false; this.leftPressed = false; this.rightPressed = false; this.timeDownPressed = 0L; this.timeUpPressed = 0L; this.timeLeftPressed = 0L; this.timeRightPressed = 0L; } public void handleEvent(final KeyEvent e) { switch (e.getKeyCode()) { case 38: { if (!this.upPressed) { this.timeUpPressed = System.currentTimeMillis(); this.startUpPressed = this.getY(); this.upPressed = true; break; } break; } case 40: { if (!this.downPressed) { this.timeDownPressed = System.currentTimeMillis(); this.startDownPressed = this.getY(); this.downPressed = true; break; } break; } case 37: { if (!this.leftPressed) { this.timeLeftPressed = System.currentTimeMillis(); this.startLeftPressed = this.getX(); this.leftPressed = true; break; } break; } case 39: { if (!this.rightPressed) { this.timeRightPressed = System.currentTimeMillis(); this.startRightPressed = this.getX(); this.rightPressed = true; break; } break; } } } public void draw(final Graphics g) { int xChange = 0; int yChange = 0; if (this.upPressed) { yChange -= (int)((System.currentTimeMillis() - this.timeUpPressed) * this.getSpeed() / 1000L); } if (this.downPressed) { yChange += (int)((System.currentTimeMillis() - this.timeDownPressed) * this.getSpeed() / 1000L); } if (this.leftPressed) { xChange -= (int)((System.currentTimeMillis() - this.timeLeftPressed) * this.getSpeed() / 1000L); } if (this.rightPressed) { xChange += (int)((System.currentTimeMillis() - this.timeRightPressed) * this.getSpeed() / 1000L); } if ((!this.downPressed || this.timeUpPressed < this.timeDownPressed) && this.upPressed) { this.setY(this.startUpPressed + yChange); } else if (this.downPressed) { this.setY(this.startDownPressed + yChange); } if (this.upPressed && this.downPressed) { this.timeUpPressed = System.currentTimeMillis(); this.timeDownPressed = System.currentTimeMillis(); this.startUpPressed = this.getY(); this.startDownPressed = this.getY(); } if ((!this.rightPressed || this.timeLeftPressed < this.timeRightPressed) && this.leftPressed) { this.setX(this.startLeftPressed + xChange); } else if (this.rightPressed) { this.setX(this.startRightPressed + xChange); } if (this.getX() < this.getPic().getWidth() / 2) { this.setX(this.getPic().getWidth() / 2); } if (this.getX() > 800 - this.getPic().getWidth() / 2) { this.setX(800 - this.getPic().getWidth() / 2); } if (this.getY() < 0 + this.getPic().getHeight() / 2) { this.setY(0 + this.getPic().getHeight() / 2); } if (this.getY() > 600 - this.getPic().getHeight() / 2) { this.setY(600 - this.getPic().getHeight() / 2); } if (this.leftPressed && this.rightPressed) { this.timeLeftPressed = System.currentTimeMillis(); this.timeRightPressed = System.currentTimeMillis(); this.startLeftPressed = this.getX(); this.startRightPressed = this.getX(); } super.draw(g); } public void reset() { super.reset(); this.upPressed = false; this.downPressed = false; this.leftPressed = false; this.rightPressed = false; this.timeDownPressed = 0L; this.timeUpPressed = 0L; this.timeLeftPressed = 0L; this.timeRightPressed = 0L; this.startUpPressed = 0; this.startDownPressed = 0; this.startLeftPressed = 0; this.startRightPressed = 0; } public void setUpPressed(final boolean pressed) { this.upPressed = pressed; } public void setDownPressed(final boolean pressed) { this.downPressed = pressed; } public void setLeftPressed(final boolean pressed) { this.leftPressed = pressed; } public void setRightPressed(final boolean pressed) { this.rightPressed = pressed; } }