/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package gamelauncher4;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Iterator;
public class GameLauncher4 extends JFrame {
public GameLauncher4() {
setTitle("Game Launcher");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 600);
setLocationRelativeTo(null);
// Main menu panel
JPanel menuPanel = new JPanel();
menuPanel.setLayout(new GridLayout(3, 1, 10, 10));
JButton btnLevel1 = new JButton("Level 1");
JButton btnLevel2 = new JButton("Level 2");
JButton btnLevel3 = new JButton("Level 3");
menuPanel.add(btnLevel1);
menuPanel.add(btnLevel2);
menuPanel.add(btnLevel3);
add(menuPanel);
// Button actions
btnLevel1.addActionListener(e -> startLevel1());
btnLevel2.addActionListener(e -> JOptionPane.showMessageDialog(this, "Level 2 not implemented yet."));
btnLevel3.addActionListener(e -> JOptionPane.showMessageDialog(this, "Level 3 not implemented yet."));
}
private void startLevel1() {
getContentPane().removeAll();
GamePanel gamePanel = new GamePanel();
add(gamePanel);
revalidate();
repaint();
gamePanel.requestFocusInWindow();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
GameLauncher4 launcher = new GameLauncher4();
launcher.setVisible(true);
});
}
}
// Game panel for Level 1
class GamePanel extends JPanel implements ActionListener, KeyListener {
private Timer timer;
private double angle = 0;
private int centerX = 400, centerY = 300;
private int moveSpeed = 4;
private ArrayList<Missile> missiles = new ArrayList<>();
public GamePanel() {
setBackground(Color.BLACK);
setFocusable(true);
addKeyListener(this);
timer = new Timer(16, this); // ~60 FPS
timer.start();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// Draw rotating circles
g.setColor(Color.CYAN);
int radius = 80;
for (int i = 0; i < 4; i++) {
double theta = angle + i * (Math.PI / 2);
int x = (int) (centerX + radius * Math.cos(theta));
int y = (int) (centerY + radius * Math.sin(theta));
g.fillOval(x - 10, y - 10, 20, 20);
}
// Draw center point
g.setColor(Color.YELLOW);
g.fillOval(centerX - 15, centerY - 15, 30, 30);
// Draw missiles
g.setColor(Color.RED);
for (Missile m : missiles) {
g.fillRect(m.x, m.y, 5, 10);
}
}
@Override
public void actionPerformed(ActionEvent e) {
// Rotate
angle += 0.05;
// Update missiles
Iterator<Missile> it = missiles.iterator();
while (it.hasNext()) {
Missile m = it.next();
m.y -= m.speed;
if (m.y < 0) it.remove();
}
repaint();
}
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_W) centerY -= moveSpeed;
if (key == KeyEvent.VK_S) centerY += moveSpeed;
if (key == KeyEvent.VK_A) centerX -= moveSpeed;
if (key == KeyEvent.VK_D) centerX += moveSpeed;
if (key == KeyEvent.VK_SPACE) {
missiles.add(new Missile(centerX, centerY - 20));
}
}
@Override public void keyReleased(KeyEvent e) {}
@Override public void keyTyped(KeyEvent e) {}
}
// Missile class
class Missile {
int x, y;
int speed = 8;
public Missile(int startX, int startY) {
this.x = startX;
this.y = startY;
}
}

Tidak ada komentar:
Posting Komentar