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 MovementGame extends JFrame {
private static final int WIDTH = 400;
private static final int HEIGHT = 400;
private int characterX = 50;
private int characterY = 50;
public MovementGame() {
setTitle("Movement Game");
setSize(WIDTH, HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MovementPanel movementPanel = new MovementPanel();
add(movementPanel);
addKeyListener(new MovementKeyListener());
Timer timer = new Timer(10, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
movementPanel.update();
}
});
timer.start();
}
private class MovementPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillRect(characterX, characterY, 30, 30);
}
public void update() {
repaint();
}
}
private class MovementKeyListener implements KeyListener {
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
switch (keyCode) {
case KeyEvent.VK_LEFT:
moveLeft();
break;
case KeyEvent.VK_RIGHT:
moveRight();
break;
case KeyEvent.VK_UP:
moveUp();
break;
case KeyEvent.VK_DOWN:
moveDown();
break;
}
}
@Override
public void keyTyped(KeyEvent e) {
// Not used
}
@Override
public void keyReleased(KeyEvent e) {
// Not used
}
private void moveLeft() {
characterX -= 5;
}
private void moveRight() {
characterX += 5;
}
private void moveUp() {
characterY -= 5;
}
private void moveDown() {
characterY += 5;
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MovementGame().setVisible(true);
}
});
}
}
In this example, the character (represented by a blue rectangle) can be moved using the arrow keys. The MovementGame class contains a MovementPanel class that extends JPanel and handles the drawing of the character. The MovementKeyListener class listens for arrow key presses and updates the character's position accordingly.
Comments