|
|
@ -1,44 +1,97 @@
|
|
|
|
|
|
|
|
package entities;
|
|
|
|
|
|
|
|
|
|
|
|
import javax.swing.*;
|
|
|
|
import javax.swing.*;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import javax.sound.sampled.AudioSystem;
|
|
|
|
|
|
|
|
import javax.sound.sampled.Clip;
|
|
|
|
import java.awt.*;
|
|
|
|
import java.awt.*;
|
|
|
|
import java.awt.event.ActionEvent;
|
|
|
|
import java.awt.event.ActionEvent;
|
|
|
|
import java.awt.event.ActionListener;
|
|
|
|
import java.awt.event.ActionListener;
|
|
|
|
import java.awt.event.KeyEvent;
|
|
|
|
import java.awt.event.KeyEvent;
|
|
|
|
import java.awt.event.KeyListener;
|
|
|
|
import java.awt.event.KeyListener;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import entities.PlayerBullet;
|
|
|
|
|
|
|
|
|
|
|
|
public class player extends JPanel implements KeyListener, ActionListener {
|
|
|
|
|
|
|
|
|
|
|
|
public class Player extends JPanel implements KeyListener, ActionListener {
|
|
|
|
private Image sprite;
|
|
|
|
private Image sprite;
|
|
|
|
private int x = 400;
|
|
|
|
private int x = 400;
|
|
|
|
private int y = 512;
|
|
|
|
private int y = 512;
|
|
|
|
private int spd = 1;
|
|
|
|
private int spd = 1;
|
|
|
|
|
|
|
|
private int fdelay = 850; //Time in ms between shots
|
|
|
|
|
|
|
|
|
|
|
|
//Movement bools
|
|
|
|
//Movement bools
|
|
|
|
private boolean leftPressed = false;
|
|
|
|
private boolean leftPressed = false;
|
|
|
|
private boolean rightPressed = false;
|
|
|
|
private boolean rightPressed = false;
|
|
|
|
private boolean upPressed = false;
|
|
|
|
private boolean upPressed = false;
|
|
|
|
private boolean downPressed = false;
|
|
|
|
private boolean downPressed = false;
|
|
|
|
private boolean shootPressed = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Game loop timer
|
|
|
|
//Cannon bools
|
|
|
|
private Timer timer;
|
|
|
|
private boolean shootPressed = false;
|
|
|
|
|
|
|
|
private boolean canShoot = true;
|
|
|
|
|
|
|
|
private List<PlayerBullet> bullets = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private Timer gameTimer; //Game loop timer
|
|
|
|
|
|
|
|
private Timer shotTimer; //Player shot timer
|
|
|
|
|
|
|
|
|
|
|
|
public player() {
|
|
|
|
public Player() {
|
|
|
|
ImageIcon icon = new ImageIcon("spr/tank1.png");
|
|
|
|
ImageIcon icon = new ImageIcon("spr/tank1.png");
|
|
|
|
sprite = icon.getImage();
|
|
|
|
sprite = icon.getImage();
|
|
|
|
setFocusable(true);
|
|
|
|
setFocusable(true);
|
|
|
|
addKeyListener(this);
|
|
|
|
addKeyListener(this);
|
|
|
|
setPreferredSize(new Dimension(800, 600));
|
|
|
|
setPreferredSize(new Dimension(800, 600));
|
|
|
|
//Timer to set target framerate to 60 (~16ms/frame)
|
|
|
|
//Timer to set target framerate to 60 (~16ms/frame)
|
|
|
|
timer = new Timer(1000 / 60, this);
|
|
|
|
gameTimer = new Timer(1000 / 60, this);
|
|
|
|
timer.start();
|
|
|
|
gameTimer.start();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
shotTimer = new Timer(fdelay, new ActionListener() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
|
|
|
canShoot = true; // Allow shooting again after fdelay milliseconds
|
|
|
|
|
|
|
|
shotTimer.stop(); // Stop the timer until the next shot
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
private void updatePlayerPos() {
|
|
|
|
private void updatePosition() {
|
|
|
|
if (leftPressed) x -= spd;
|
|
|
|
if (leftPressed) x -= spd;
|
|
|
|
if (rightPressed) x += spd;
|
|
|
|
if (rightPressed) x += spd;
|
|
|
|
if (upPressed) y -= spd;
|
|
|
|
if (upPressed) y -= spd;
|
|
|
|
if (downPressed) y += spd;
|
|
|
|
if (downPressed) y += spd;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Update bullet positions
|
|
|
|
|
|
|
|
for (int i = 0; i < bullets.size(); i++) {
|
|
|
|
|
|
|
|
PlayerBullet bullet = bullets.get(i);
|
|
|
|
|
|
|
|
bullet.update();
|
|
|
|
|
|
|
|
if (bullet.getY() < -32) {
|
|
|
|
|
|
|
|
bullets.remove(i);
|
|
|
|
|
|
|
|
i--;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void playSound(String soundFile) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
Clip clip = AudioSystem.getClip();
|
|
|
|
|
|
|
|
clip.open(AudioSystem.getAudioInputStream(new File(soundFile)));
|
|
|
|
|
|
|
|
clip.start();
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
|
|
System.out.println("Error playing sound: " + e.getMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void playerShoot() {
|
|
|
|
|
|
|
|
if (canShoot) {
|
|
|
|
|
|
|
|
PlayerBullet newBullet = new PlayerBullet(x + sprite.getWidth(null) / 2, y);
|
|
|
|
|
|
|
|
bullets.add(newBullet); //Add to bullets list
|
|
|
|
|
|
|
|
playSound("sound/shoot1.wav");
|
|
|
|
|
|
|
|
canShoot = false;
|
|
|
|
|
|
|
|
shotTimer.start();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
protected void paintComponent(Graphics g) {
|
|
|
|
protected void paintComponent(Graphics g) {
|
|
|
|
super.paintComponent(g);
|
|
|
|
super.paintComponent(g);
|
|
|
@ -102,7 +155,7 @@ public class player extends JPanel implements KeyListener, ActionListener {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
updatePlayerPos();
|
|
|
|
updatePosition();
|
|
|
|
repaint();
|
|
|
|
repaint();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|