File : PhysicsSimulation.java
package physicssimulation;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
public class PhysicsSimulation extends JFrame {
private final SimulationPanel simulationPanel;
private final Timer timer;
public PhysicsSimulation() {
setTitle("2D Physics Simulation");
setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
simulationPanel = new SimulationPanel();
add(simulationPanel);
timer = new Timer(16, new ActionListener() { // ~60 FPS
@Override
public void actionPerformed(ActionEvent e) {
simulationPanel.updatePhysics();
simulationPanel.repaint();
}
});
timer.start();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new PhysicsSimulation().setVisible(true));
}
}
class SimulationPanel extends JPanel {
private final List<SimulatedObject> objects;
private final double gravity = 0.5; // Example gravity
public SimulationPanel() {
objects = new ArrayList<>();
// Add some initial objects
objects.add(new SimulatedObject(100, 100, 20, 0, 0));
objects.add(new SimulatedObject(300, 50, 30, 0, 0));
}
public void updatePhysics() {
for (SimulatedObject obj : objects) {
// Apply gravity
obj.velocityY += gravity;
// Update position
obj.x += obj.velocityX;
obj.y += obj.velocityY;
// Simple boundary collision (bounce)
if (obj.y + obj.size > getHeight()) {
obj.y = getHeight() - obj.size;
obj.velocityY *= -0.8; // Reduce velocity on bounce
}
if (obj.x + obj.size > getWidth() || obj.x < 0) {
obj.velocityX *= -1;
}
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// Draw objects
for (SimulatedObject obj : objects) {
g2d.fillOval((int) obj.x, (int) obj.y, (int) obj.size, (int) obj.size);
}
}
}
======================================================
File : SimulatedObject.java
package physicssimulation;
class SimulatedObject {
double x, y;
double size;
double velocityX, velocityY;
public SimulatedObject(double x, double y, double size, double velocityX, double velocityY) {
this.x = x;
this.y = y;
this.size = size;
this.velocityX = velocityX;
this.velocityY = velocityY;
}
}
Tidak ada komentar:
Posting Komentar