Selasa, 05 Mei 2026

JAVA Netbeans Menu Launcher Game

 





/*

 * 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 gamemenu1;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.util.ArrayList;

import java.util.Iterator;


public class GameMenu1 extends JFrame {


    private CardLayout cardLayout;

    private JPanel mainPanel;


    public GameMenu1() {

        setTitle("Game Menu");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setSize(800, 600);

        setLocationRelativeTo(null);


        cardLayout = new CardLayout();

        mainPanel = new JPanel(cardLayout);


        // Menu Panel

        JPanel menuPanel = new JPanel();

        menuPanel.setLayout(new GridLayout(4, 1, 10, 10));

        JButton btnLevel1 = new JButton("Level 1");

        JButton btnLevel2 = new JButton("Level 2");

        JButton btnLevel3 = new JButton("Level 3");

        JButton btnClose = new JButton("Close");


        menuPanel.add(btnLevel1);

        menuPanel.add(btnLevel2);

        menuPanel.add(btnLevel3);

        menuPanel.add(btnClose);


        // Game Panel (Level 1)

        GamePanel level1Panel = new GamePanel(this);


        // Add panels to CardLayout

        mainPanel.add(menuPanel, "Menu");

        mainPanel.add(level1Panel, "Level1");


        // Button actions

        btnLevel1.addActionListener(e -> {

            cardLayout.show(mainPanel, "Level1");

            level1Panel.requestFocusInWindow();

        });


        btnLevel2.addActionListener(e -> JOptionPane.showMessageDialog(this, "Level 2 not implemented yet."));

        btnLevel3.addActionListener(e -> JOptionPane.showMessageDialog(this, "Level 3 not implemented yet."));

        btnClose.addActionListener(e -> System.exit(0));


        add(mainPanel);

        setVisible(true);

    }


    public void showMenu() {

        cardLayout.show(mainPanel, "Menu");

    }


    // Game Panel Class

    static class GamePanel extends JPanel implements ActionListener {

        private int playerX = 100, playerY = 100;

        private final int playerSize = 30;

        private final int speed = 5;


        private java.util.List<Rectangle> missiles = new ArrayList<>();

        private Timer timer;

        private GameMenu1 parent;


        public GamePanel(GameMenu1 parent) {

            this.parent = parent;

            setBackground(Color.BLACK);

            setFocusable(true);


            // Key Bindings for movement

            bindKey("W", () -> playerY -= speed);

            bindKey("S", () -> playerY += speed);

            bindKey("A", () -> playerX -= speed);

            bindKey("D", () -> playerX += speed);

            bindKey("SPACE", this::fireMissile);

            bindKey("ESCAPE", () -> parent.showMenu());


            timer = new Timer(16, this); // ~60 FPS

            timer.start();

        }


        private void bindKey(String key, Runnable action) {

            getInputMap(WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(key), key);

            getActionMap().put(key, new AbstractAction() {

                @Override

                public void actionPerformed(ActionEvent e) {

                    action.run();

                }

            });

        }


        private void fireMissile() {

            missiles.add(new Rectangle(playerX + playerSize / 2 - 2, playerY - 10, 4, 10));

        }


        @Override

        public void actionPerformed(ActionEvent e) {

            // Move missiles upward

            Iterator<Rectangle> it = missiles.iterator();

            while (it.hasNext()) {

                Rectangle m = it.next();

                m.y -= 10;

                if (m.y < 0) it.remove();

            }

            repaint();

        }


        @Override

        protected void paintComponent(Graphics g) {

            super.paintComponent(g);


            // Draw player (circle)

            g.setColor(Color.YELLOW);

            g.fillOval(playerX, playerY, playerSize, playerSize);


            // Draw missiles

            g.setColor(Color.RED);

            for (Rectangle m : missiles) {

                g.fillRect(m.x, m.y, m.width+2, m.height+2);

            }

        }

    }


    public static void main(String[] args) {

        SwingUtilities.invokeLater(GameMenu1::new);

    }

}

Tidak ada komentar: