Rabu, 06 Mei 2026

JAVA Netbeans Menu Launcher Game 3 Spaceship with Missile

 






/*

 * 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: