From b2a80d1c40f52cbe516be3251827410024ec05ad Mon Sep 17 00:00:00 2001 From: Nilstrieb Date: Sat, 9 Jan 2021 17:57:05 +0100 Subject: [PATCH] base game --- src/ClickerModel.java | 15 +++++++ src/ClickerPresenter.java | 73 ++++++++++++++++++++++++++++++++ src/ClickerView.form | 61 +++++++++++++++++++++++++++ src/ClickerView.java | 35 ++++++++++++++++ src/UpgradePanel.form | 55 +++++++++++++++++++++++++ src/UpgradePanel.java | 87 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 326 insertions(+) create mode 100644 src/ClickerModel.java create mode 100644 src/ClickerPresenter.java create mode 100644 src/ClickerView.form create mode 100644 src/ClickerView.java create mode 100644 src/UpgradePanel.form create mode 100644 src/UpgradePanel.java diff --git a/src/ClickerModel.java b/src/ClickerModel.java new file mode 100644 index 0000000..dd6bc72 --- /dev/null +++ b/src/ClickerModel.java @@ -0,0 +1,15 @@ +public class ClickerModel { + + private double nicolas; + + public ClickerModel() { + } + + public double getNicolas() { + return nicolas; + } + + public void setNicolas(double nicolas) { + this.nicolas = nicolas; + } +} diff --git a/src/ClickerPresenter.java b/src/ClickerPresenter.java new file mode 100644 index 0000000..74ecd82 --- /dev/null +++ b/src/ClickerPresenter.java @@ -0,0 +1,73 @@ +import javax.swing.*; +import java.util.ArrayList; + +public class ClickerPresenter { + + public static final int TARGET_FPS = 30; + + private final ClickerView clickerView; + private final ClickerModel clickerModel; + private final ArrayList upgradePanels; + + private final Timer loop; + + public ClickerPresenter(ClickerView clickerView) { + this.clickerView = clickerView; + this.clickerView.setClickerPresenter(this); + + UpgradePanel illusion = new UpgradePanel("Illision", 10, 1.05, 0.1, this); + UpgradePanel cloneMachine = new UpgradePanel("Klonmaschine", 100, 1.1, 1, this); + UpgradePanel mysteriousCave = new UpgradePanel("Mysteriöse Höhle", 500, 1.1, 10, this); + UpgradePanel factory = new UpgradePanel("Massenfertigungsanstalt", 3000, 1.1, 150, this); + UpgradePanel herblingen = new UpgradePanel("Herblingen", 100000, 1.1, 6969, this); + + + UpgradePanel debugger = new UpgradePanel("Debugger", 1, 1, 100, this); + clickerView.addUpgrade(illusion); + clickerView.addUpgrade(cloneMachine); + clickerView.addUpgrade(mysteriousCave); + clickerView.addUpgrade(factory); + clickerView.addUpgrade(herblingen); + clickerView.addUpgrade(debugger); + + upgradePanels = new ArrayList<>(); + upgradePanels.add(illusion); + upgradePanels.add(cloneMachine); + upgradePanels.add(mysteriousCave); + upgradePanels.add(factory); + upgradePanels.add(herblingen); + upgradePanels.add(debugger); + + clickerModel = new ClickerModel(); + + loop = new Timer(1000/TARGET_FPS, e -> refresh()); + loop.start(); + } + + public static void main(String[] args) { + new ClickerPresenter(new ClickerView()); + } + + public void nicolasButtonClick() { + clickerModel.setNicolas(clickerModel.getNicolas() + 1); + //refresh(); + } + + private void refresh() { + clickerView.setNicolasAmount(String.format("%.0f Nicolas", clickerModel.getNicolas())); + upgradePanels.forEach(UpgradePanel::refresh); + } + + public void removeNicolas(double amount) { + clickerModel.setNicolas(clickerModel.getNicolas() - amount); + //refresh(); + } + + public double getNicolas() { + return clickerModel.getNicolas(); + } + + public void addNicolas(double gain) { + clickerModel.setNicolas(clickerModel.getNicolas() + gain); + } +} diff --git a/src/ClickerView.form b/src/ClickerView.form new file mode 100644 index 0000000..845f21d --- /dev/null +++ b/src/ClickerView.form @@ -0,0 +1,61 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ClickerView.java b/src/ClickerView.java new file mode 100644 index 0000000..784f9fb --- /dev/null +++ b/src/ClickerView.java @@ -0,0 +1,35 @@ +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class ClickerView extends JFrame { + private JButton nicolasButton; + private JPanel mainPanel; + private JPanel thingsPanel; + private JLabel nicolasLabels; + + private ClickerPresenter clickerPresenter; + + public ClickerView() { + setDefaultCloseOperation(EXIT_ON_CLOSE); + setSize(700, 500); + setContentPane(mainPanel); + setLocationRelativeTo(null); + setVisible(true); + + thingsPanel.setLayout(new BoxLayout(thingsPanel, BoxLayout.Y_AXIS)); + nicolasButton.addActionListener(e -> clickerPresenter.nicolasButtonClick()); + } + + public void setClickerPresenter(ClickerPresenter clickerPresenter) { + this.clickerPresenter = clickerPresenter; + } + + public void addUpgrade(UpgradePanel upgradePanel) { + thingsPanel.add(upgradePanel); + } + + public void setNicolasAmount(String amount) { + nicolasLabels.setText(amount); + } +} diff --git a/src/UpgradePanel.form b/src/UpgradePanel.form new file mode 100644 index 0000000..b8eafac --- /dev/null +++ b/src/UpgradePanel.form @@ -0,0 +1,55 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/UpgradePanel.java b/src/UpgradePanel.java new file mode 100644 index 0000000..d1502ec --- /dev/null +++ b/src/UpgradePanel.java @@ -0,0 +1,87 @@ +import javax.swing.*; + +public class UpgradePanel extends JPanel { + + private JPanel mainPanel; + + private JButton upgradeButton; + private JLabel nameLabel; + private JLabel levelLabel; + private JLabel gainLabel; + + private String name; + + private final double costMultiplier; + private final double baseGain; + + private double cost; + private double gain = 0; + private int level; + + private long lastAddedTimeStamp = 0; + private long lastFrameTimeStamp = System.currentTimeMillis(); + + private final ClickerPresenter presenter; + + public UpgradePanel(String name, double baseCost, double costMultiplier, double baseGain, ClickerPresenter presenter) { + add(mainPanel); + + this.name = name; + this.cost = baseCost; + this.costMultiplier = costMultiplier; + this.baseGain = baseGain; + this.presenter = presenter; + + this.nameLabel.setText(name); + + upgradeButton.addActionListener(e -> upgrade(1)); + } + + public void upgrade(int amount) { + for (int i = 0; i < amount; i++) { + presenter.removeNicolas(cost); + gain += baseGain; + + cost = cost * costMultiplier; + level++; + } + } + + public void refresh() { + upgradeButton.setEnabled(presenter.getNicolas() >= cost); + + //should nicolas be added? + long currentTime = System.currentTimeMillis(); + long lastAddDeltaTime = currentTime - lastAddedTimeStamp; + double timePerNicolas = 1 / gain * 1000; + + if (timePerNicolas < lastAddDeltaTime) { + long frameDeltaTime = currentTime - lastFrameTimeStamp; + + System.out.printf("tpn=%.2f ladt=%d Δt=%d", timePerNicolas, lastAddDeltaTime, frameDeltaTime); + lastAddedTimeStamp = currentTime; + + + if (timePerNicolas < frameDeltaTime) { + System.out.printf(" FN"); + double missedNicolas = frameDeltaTime / timePerNicolas; + System.out.printf(" mn=%.2f gain=%.2f add=%.2f", missedNicolas, gain, missedNicolas); + presenter.addNicolas(missedNicolas); + } else { + presenter.addNicolas(1); + } + + System.out.print("\n"); + } + lastFrameTimeStamp = currentTime; + + levelLabel.setText("Level: " + level); + if(gain < 10){ + gainLabel.setText(String.format("%.2f Nicolas", gain)); + } else { + gainLabel.setText(String.format("%.0f Nicolas", gain)); + } + upgradeButton.setText(String.format("Upgrade: %.0f Nicolas", cost)); + + } +}