diff --git a/player.java b/src/entities/Player.java similarity index 55% rename from player.java rename to src/entities/Player.java index 08f6516..7780eed 100644 --- a/player.java +++ b/src/entities/Player.java @@ -1,44 +1,97 @@ +package entities; + 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.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; 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 int x = 400; private int y = 512; private int spd = 1; + private int fdelay = 850; //Time in ms between shots //Movement bools private boolean leftPressed = false; private boolean rightPressed = false; private boolean upPressed = false; private boolean downPressed = false; - private boolean shootPressed = false; - //Game loop timer - private Timer timer; + //Cannon bools + private boolean shootPressed = false; + private boolean canShoot = true; + private List 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"); sprite = icon.getImage(); setFocusable(true); addKeyListener(this); setPreferredSize(new Dimension(800, 600)); //Timer to set target framerate to 60 (~16ms/frame) - timer = new Timer(1000 / 60, this); - timer.start(); + gameTimer = new Timer(1000 / 60, this); + 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 (rightPressed) x += spd; if (upPressed) 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 protected void paintComponent(Graphics g) { super.paintComponent(g); @@ -102,7 +155,7 @@ public class player extends JPanel implements KeyListener, ActionListener { } public void actionPerformed(ActionEvent e) { - updatePlayerPos(); + updatePosition(); repaint(); } } diff --git a/src/entities/PlayerBullet.java b/src/entities/PlayerBullet.java new file mode 100644 index 0000000..f89bcb3 --- /dev/null +++ b/src/entities/PlayerBullet.java @@ -0,0 +1,35 @@ +package entities; + +import javax.swing.*; +import java.awt.*; + +public class PlayerBullet { + private int x, y; + private int spd = 5; + private Image sprite; + + //Constructor + public PlayerBullet(int startX, int startY) { + this.x = startX; + this.y = startY; + ImageIcon icon = new ImageIcon("spr/bullet.png"); + sprite = icon.getImage(); + } + + public void update() { + y -= spd; + } + + public void draw(Graphics g) { + g.drawImage(sprite, x, y, null); + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } +} + diff --git a/main.java b/src/main/Main.java similarity index 86% rename from main.java rename to src/main/Main.java index d8ba178..d19d281 100644 --- a/main.java +++ b/src/main/Main.java @@ -1,10 +1,14 @@ +package main; + +import entities.Player; + import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; -public class main { +public class Main { public static void main(String[] args) { System.out.println("I like birds."); JFrame mainframe = new JFrame(); @@ -17,7 +21,7 @@ public class main { //JLabel label = new JLabel("Label test!", JLabel.CENTER); //mainframe.add(label); - player playerPanel = new player(); + Player playerPanel = new Player(); mainframe.add(playerPanel); playerPanel.requestFocusInWindow(); diff --git a/src/sound/shoot1.wav b/src/sound/shoot1.wav new file mode 100644 index 0000000..2dbd562 Binary files /dev/null and b/src/sound/shoot1.wav differ diff --git a/src/spr/bullet.png b/src/spr/bullet.png new file mode 100644 index 0000000..678afb9 Binary files /dev/null and b/src/spr/bullet.png differ diff --git a/spr/tank1.png b/src/spr/tank1.png similarity index 100% rename from spr/tank1.png rename to src/spr/tank1.png