public class JumpTest {
private static final Dimension WINDOW_SIZE = new Dimension(350, 350);
private final Player player;
private JComponent world;
public JumpTest() {
this.player = new Player(50, 260);
buildAndShowUI();
startGameLoop();
}
private void startGameLoop() {
Timer timer = new Timer(5, e -> {
player.update();
world.repaint();
});
timer.start();
}
private void buildAndShowUI() {
JFrame frame = new JFrame();
frame.setSize(WINDOW_SIZE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
world = new JComponent() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillRect(player.getX(), player.getY(), player.getWidth(), player.getHeight());
}
};
world.setFocusable(true);
world.addKeyListener(getJumpListener());
frame.add(world);
frame.setVisible(true);
}
private KeyListener getJumpListener() {
return new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
player.setJump(true);
}
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
player.setJump(false);
}
}
};
}
public static void main(String[] args) {
JumpTest test = new JumpTest();
}
class Player {
private Rectangle bounds;
private boolean jump;
private int gravity;
private final int startY;
public Player(int x, int y) {
this.bounds = new Rectangle(x, y, 50, 50);
this.startY = y;
}
public void update() {
if(jump) {
gravity = -3;
} else {
gravity = bounds.y > startY ? 0 : 3;
}
bounds.y += gravity;
}
}
}