import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class player extends JPanel implements KeyListener, ActionListener { private Image sprite; private int x = 400; private int y = 512; private int spd = 1; //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; 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(); } private void updatePlayerPos() { if (leftPressed) x -= spd; if (rightPressed) x += spd; if (upPressed) y -= spd; if (downPressed) y += spd; } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(sprite, x, y, this); } @Override public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); switch (key) { case KeyEvent.VK_LEFT: case KeyEvent.VK_A: leftPressed = true; break; case KeyEvent.VK_RIGHT: case KeyEvent.VK_D: rightPressed = true; break; case KeyEvent.VK_UP: case KeyEvent.VK_W: upPressed = true; break; case KeyEvent.VK_DOWN: case KeyEvent.VK_S: downPressed = true; break; case KeyEvent.VK_SPACE: shootPressed = true; break; } } @Override public void keyReleased(KeyEvent e) { int key = e.getKeyCode(); switch (key) { case KeyEvent.VK_LEFT: case KeyEvent.VK_A: leftPressed = false; break; case KeyEvent.VK_RIGHT: case KeyEvent.VK_D: rightPressed = false; break; case KeyEvent.VK_UP: case KeyEvent.VK_W: upPressed = false; break; case KeyEvent.VK_DOWN: case KeyEvent.VK_S: downPressed = false; break; case KeyEvent.VK_SPACE: shootPressed = false; break; } } @Override public void keyTyped(KeyEvent e) { //UNUSED } public void actionPerformed(ActionEvent e) { updatePlayerPos(); repaint(); } }