Как я могу добавить ярлык, который показывает, сколько у меня чемпионов? - PullRequest
0 голосов
/ 09 ноября 2018

Я застрял при добавлении метки для того, сколько символов у меня есть.Например, я бы нажал золотую кнопку 20 раз.Теперь у меня есть 20 золотых, так как у меня есть 20 золотых, я могу потратить эти 20 золотых, чтобы купить персонажа.Теперь у меня есть 1 символ, я хочу, чтобы появился ярлык, показывающий, сколько символов у меня есть.Для предыдущего примера появится метка с надписью «У вас есть 1 символ».

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Clicker {
    int first = 0;
    int second = 1;
    Clicker() {
        JButton button = new JButton ("gold");
        button.setBounds(0,0,100,40);

        JButton button1 = new JButton ("Gold mult");
        button1.setBounds(0,80,100,40);

        JButton button2 = new JButton ("Champion");
        button2.setBounds(0,140,100,40);

        final JLabel label = new JLabel ("First # "+ first);
        label.setBounds(110,0,200,40);

        final JLabel label1 = new JLabel ("Second # "+ second);
        label1.setBounds(110,80,100,40);

        JFrame frame = new JFrame ("clicker game");
        frame.add(button);
        frame.add(button1);
        frame.add(button2);
        frame.add(label);
        frame.add(label1);

        frame.setVisible(true);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400,500);
        frame.setLayout(null);

        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                first += second;
                label.setText("First #"+ first);
            }
        });

        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(first > 2*second){
                    second++;
                    first-=2*second;
                    //first= first - (2*second);
                    label.setText("First #" + first);
                    label.setText("second # " + second);                       
                }
            }
        });

        button2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (first>=20) {
                    if (second==2){
                        first++;   
                    }
                    first -= 20;
                    label.setText("first # " + first);
                    label1.setText("second # " + second);
                }

            }
        });
    }

    public static void main(String[] args) {
        new Clicker();
    }
}

1 Ответ

0 голосов
/ 12 ноября 2018

Я не понял твою игру Clicker. Я рекомендую вам сделать дизайн игры (изображения помогает) перед началом кодирования.

  1. Если вы используете Eclipse-IDE, существует метод рефакторинга, в котором вы можете изменить имя ваших переменных, и оно будет распространяться через ваш код. Для использования этикетки: lblOfGold Для использования кнопки: btnOfGold
  2. Создайте свой собственный JButton, например, ClickerButton расширяет JButton и добавляет некоторые свойства и методы, которые имеют отношение к вашей игре.
  3. Создайте класс Controller, который будет управлять вашим игровым взаимодействием, и, открыв свой ClickerButton, вы сможете выполнить некоторые действия. Я рекомендую вам зарегистрировать вашу кнопку в контроллере, и контроллер выполнит действие за вас. Не помещайте свой код в слушатель действия для каждой кнопки. Это увеличит сложность и сделает код неясным. Используйте новый класс для ActionListener. И зарегистрируйте свои кнопки внутри контроллера. Контроллер вызовет ваш класс ClickerActionListener и обработает действие.

  4. Я рекомендую вам использовать Java-FX, если вы хотите разработать Clicker Game. Вы можете создать сцену, а также использовать 3D-модели в вашей сцене и некоторые приятные анимации.

enter image description here

Пример кода:

открытый класс ClickerGame расширяет JFrame {

private static final String APPLICATION_TITLE = "Clicker Game (Kaisel)";

private static final int WINDOW_WIDTH = 400;
private static final int WINDOW_HEIGHT = 500;

private static final int BUTTON_WIDTH = 100;
private static final int BUTTON_HEIGHT = 40;
private static final int LABEL_HEIGHT = 40;

private ClickerController controller;
private Map<String, ClickerLabel> mapOfLabels;
int first = 0;
int second = 1;

List<String> labelsName;
List<String> labelsKey;
List<String> buttonsName;
List<String> buttonsKey;
List<List<Integer>> boundsLabel;
List<List<Integer>> boundsButton;

ClickerGame() {
    controller = new ClickerController();
    mapOfLabels = new HashMap<>();
    loadResources();
}

private void loadResources() {
    labelsName = Arrays.asList("First # "+ first, "Second # "+ second);
    labelsKey = Arrays.asList("FirstKey", "SecondKey");
    buttonsName = Arrays.asList("Gold", "Gold mult", "Champion");
    buttonsKey = Arrays.asList("GoldKey", "GoldMultKey", "ChampionKey");
    boundsLabel = Arrays.asList(
            Arrays.asList(110,0,200,LABEL_HEIGHT),
            Arrays.asList(110,80,100,LABEL_HEIGHT) );
    boundsButton = Arrays.asList(
            Arrays.asList(0,0,BUTTON_WIDTH,BUTTON_HEIGHT),
            Arrays.asList(0,80,BUTTON_WIDTH,BUTTON_HEIGHT),
            Arrays.asList(0,140,BUTTON_WIDTH,BUTTON_HEIGHT) );
}

public void buildUI() {
    // variables
    int i;
    ClickerLabel label;
    ClickerButton button;
    // bounds rectangle
    int x;
    int y;
    int width;
    int height;
    List<Integer> boundRectangle;

    GridLayout layout = new GridLayout();
    JPanel panel = new JPanel();
    panel.setLayout(null);

    i = 0;
    for (String name : labelsName) {
        label = new ClickerLabel(name);
        boundRectangle = boundsLabel.get(i);
        x = boundRectangle.get(0);
        y = boundRectangle.get(1);
        width = boundRectangle.get(2);
        height = boundRectangle.get(3);
        label.setBounds( x, y, width, height );
        mapOfLabels.put(labelsKey.get(i),label);
        panel.add(label);
        i++;
    }

    i = 0;
    for (String name : buttonsName) {
        button = new ClickerButton(name);
        button.setId(buttonsKey.get(i));
        controller.register(button);

        boundRectangle = boundsButton.get(i);
        x = boundRectangle.get(0);
        y = boundRectangle.get(1);
        width = boundRectangle.get(2);
        height = boundRectangle.get(3);
        button.setBounds( x, y, width, height );

        panel.add(button);
        i++;
    }

    this.add(panel);
}

public void launchApplication() {
    setTitle(APPLICATION_TITLE);
    setVisible(true);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(WINDOW_WIDTH,WINDOW_HEIGHT);
}

public static void main(String[] args) {
    ClickerGame game = new ClickerGame();
    game.buildUI();
    game.launchApplication();
}

private class ClickerButton extends JButton {
    private String buttonIdentification;
    ClickerButton(String parText) {
        super(parText);
    }
    public String getId() {
        return buttonIdentification;
    }
    public void setId(String btnId) {
        this.buttonIdentification = btnId;
    }
}

private class ClickerLabel extends JLabel {
    private String identification;
    ClickerLabel(String parText) {
        super(parText);
    }
    public String getId() {
        return identification;
    }
    public void setId(String btnId) {
        this.identification = btnId;
    }
}

private class ClickerActionListener implements ActionListener {
    private ClickerController controller;
    ClickerActionListener(ClickerController parController) {
        controller = parController;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        ClickerButton source = (ClickerButton) e.getSource();
        if (source != null) {
            controller.handle(source.getId());
        }
    }
}

private class ClickerController {
    ClickerActionListener listener;
    ClickerController() {
        listener = new ClickerActionListener(this);
    }
    public boolean register(ClickerButton parButton) {
        if (parButton != null) {
            parButton.addActionListener(listener);
            return true;
        }
        return false;
    }
    public void handle(String parId) {
        if (parId.equals("GoldKey")) {
            controller.handlingGold();
        } else if (parId.equals("GoldMultKey")) {
            controller.handlingGoldMult();
        } else if (parId.equals("ChampionKey")) {
            controller.handlingChampion();
        }
    }

    private void handlingGold() {
        ClickerLabel lblFirst = mapOfLabels.get("FirstKey");
        // TODO document in here what this code is doing..
        first += second;
        lblFirst.setText("First #"+ first);
    }

    private void handlingGoldMult() {
        ClickerLabel lblFirst = mapOfLabels.get("FirstKey");
        ClickerLabel lblSecond = mapOfLabels.get("SecondKey");
        // TODO document in here what this code is doing..
        if(first > 2*second){
            second++;
            first-=2*second;
            //first= first - (2*second);
            lblFirst.setText("First #" + first);
            lblSecond.setText("second # " + second);                       
        }
    }

    private void handlingChampion() {
        ClickerLabel lblFirst = mapOfLabels.get("FirstKey");
        ClickerLabel lblSecond = mapOfLabels.get("SecondKey");
        // TODO document in here what this code is doing..
        if (first>=20) {
            if (second==2){
                first++;   
            }
            first -= 20;
            lblFirst.setText("first # " + first);
            lblSecond.setText("second # " + second);
        }
    }
}

}

...