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.