Вот пример игры с мячом, реализованной на Java с несколькими методами:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class BallGame extends JPanel implements KeyListener {
private int ballX = 250;
private int ballY = 250;
private int ballSpeedX = 3;
private int ballSpeedY = 3;
public BallGame() {
JFrame frame = new JFrame("Ball Game");
frame.setSize(600, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addKeyListener(this);
frame.add(this);
frame.setVisible(true);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillOval(ballX, ballY, 50, 50);
}
public void update() {
ballX += ballSpeedX;
ballY += ballSpeedY;
if (ballX < 0 || ballX > 550) {
ballSpeedX = -ballSpeedX;
}
if (ballY < 0 || ballY > 550) {
ballSpeedY = -ballSpeedY;
}
}
public void keyTyped(KeyEvent e) {}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT) {
ballSpeedX = -3;
} else if (key == KeyEvent.VK_RIGHT) {
ballSpeedX = 3;
} else if (key == KeyEvent.VK_UP) {
ballSpeedY = -3;
} else if (key == KeyEvent.VK_DOWN) {
ballSpeedY = 3;
}
}
public void keyReleased(KeyEvent e) {
ballSpeedX = 0;
ballSpeedY = 0;
}
public static void main(String[] args) {
BallGame game = new BallGame();
while (true) {
game.update();
game.repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
В этом примере класс BallGame
расширяет JPanel
и реализует интерфейс KeyListener
. Он создает окно с помощью JFrame
и прослушивает события клавиатуры. Метод paintComponent
переопределяется для рисования красного шарика на панели. Метод update
изменяет положение мяча в зависимости от его скорости и обрабатывает столкновение с краями окна. Методы keyPressed
и keyReleased
обрабатывают ввод с клавиатуры для управления движением мяча. Метод main
создает экземпляр BallGame
, постоянно обновляет и перерисовывает игру, а также приостанавливает короткий период времени между каждым кадром.