mirror of
https://github.com/Noratrieb/ClickerGameSwing.git
synced 2026-01-14 15:45:04 +01:00
format
This commit is contained in:
parent
e36c7d258b
commit
5b021182c2
11 changed files with 230 additions and 22 deletions
|
|
@ -1,11 +1,23 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_14">
|
||||
<output url="file://$MODULE_DIR$/target/classes" />
|
||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.7.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.7.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.7.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.7.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.7.0" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
24
pom.xml
Normal file
24
pom.xml
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>ch.nilstrieb</groupId>
|
||||
<artifactId>TimosClickerGame</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter</artifactId>
|
||||
<version>RELEASE</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>14</maven.compiler.source>
|
||||
<maven.compiler.target>14</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
|
|
@ -9,6 +9,8 @@ public class ClickerPresenter {
|
|||
private final ClickerModel clickerModel;
|
||||
private final ArrayList<UpgradePanel> upgradePanels;
|
||||
|
||||
LargeFormatter formatter = new LargeFormatter();
|
||||
|
||||
private final Timer loop;
|
||||
|
||||
public ClickerPresenter(ClickerView clickerView) {
|
||||
|
|
@ -20,14 +22,16 @@ public class ClickerPresenter {
|
|||
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 sihlcity = new UpgradePanel("Sihlcity", 1000000, 1.1, 50000, this);
|
||||
|
||||
|
||||
UpgradePanel debugger = new UpgradePanel("Debugger", 1, 1, 100, this);
|
||||
UpgradePanel debugger = new UpgradePanel("Debugger", 1, 1, 1000000000, this);
|
||||
clickerView.addUpgrade(illusion);
|
||||
clickerView.addUpgrade(cloneMachine);
|
||||
clickerView.addUpgrade(mysteriousCave);
|
||||
clickerView.addUpgrade(factory);
|
||||
clickerView.addUpgrade(herblingen);
|
||||
clickerView.addUpgrade(sihlcity);
|
||||
clickerView.addUpgrade(debugger);
|
||||
|
||||
upgradePanels = new ArrayList<>();
|
||||
|
|
@ -36,11 +40,12 @@ public class ClickerPresenter {
|
|||
upgradePanels.add(mysteriousCave);
|
||||
upgradePanels.add(factory);
|
||||
upgradePanels.add(herblingen);
|
||||
upgradePanels.add(sihlcity);
|
||||
upgradePanels.add(debugger);
|
||||
|
||||
clickerModel = new ClickerModel();
|
||||
|
||||
loop = new Timer(1000/TARGET_FPS, e -> refresh());
|
||||
loop = new Timer(1000 / TARGET_FPS, e -> refresh());
|
||||
loop.start();
|
||||
}
|
||||
|
||||
|
|
@ -50,17 +55,15 @@ public class ClickerPresenter {
|
|||
|
||||
public void nicolasButtonClick() {
|
||||
clickerModel.setNicolas(clickerModel.getNicolas() + 1);
|
||||
//refresh();
|
||||
}
|
||||
|
||||
private void refresh() {
|
||||
clickerView.setNicolasAmount(String.format("%.0f Nicolas", clickerModel.getNicolas()));
|
||||
clickerView.setNicolasAmount(formatter.formatBigNumber(clickerModel.getNicolas()) + " Nicolas");
|
||||
upgradePanels.forEach(UpgradePanel::refresh);
|
||||
}
|
||||
|
||||
public void removeNicolas(double amount) {
|
||||
clickerModel.setNicolas(clickerModel.getNicolas() - amount);
|
||||
//refresh();
|
||||
}
|
||||
|
||||
public double getNicolas() {
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
public class ClickerView extends JFrame {
|
||||
private JButton nicolasButton;
|
||||
37
src/main/java/LargeFormatter.java
Normal file
37
src/main/java/LargeFormatter.java
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
public class LargeFormatter {
|
||||
|
||||
private static final String[] suffixes = {"", "k", "M", "B", "T", "q", "Q", "s", "S", "O", "N"};
|
||||
//private static final String[] suffixes = {"", "k"}; //for large number testing
|
||||
|
||||
//input: 10 230 000 -> 10.23M
|
||||
public String formatBigNumber(double number) {
|
||||
int suffixSize = 0;
|
||||
boolean scientific = false;
|
||||
|
||||
while (number > 999) {
|
||||
|
||||
if(suffixSize == suffixes.length - 1){
|
||||
scientific = true;
|
||||
break;
|
||||
}
|
||||
|
||||
suffixSize++;
|
||||
number /= 1000;
|
||||
}
|
||||
|
||||
if(scientific){
|
||||
int exp = 3 * suffixSize;
|
||||
while(number >= 10){
|
||||
exp++;
|
||||
number /= 10;
|
||||
}
|
||||
return String.format("%.2fE%d", number, exp);
|
||||
} else {
|
||||
if(Math.floor(number) == number){
|
||||
return String.format("%.0f%s", number, suffixes[suffixSize]);
|
||||
} else {
|
||||
return String.format("%.2f%s", number, suffixes[suffixSize]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="UpgradePanel">
|
||||
<grid id="27dc6" binding="mainPanel" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<grid id="27dc6" binding="mainPanel" layout-manager="GridLayoutManager" row-count="2" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<xy x="20" y="20" width="270" height="74"/>
|
||||
<xy x="20" y="20" width="337" height="74"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
<grid id="51553" layout-manager="GridLayoutManager" row-count="1" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="2" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
<grid row="0" column="0" row-span="1" col-span="3" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
|
|
@ -44,12 +44,28 @@
|
|||
</grid>
|
||||
<component id="29e2a" class="javax.swing.JButton" binding="upgradeButton">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="2" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Upgrade: 34805 Nicolas"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="30c13" class="javax.swing.JButton" binding="x10Button">
|
||||
<constraints>
|
||||
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="x10"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="c7089" class="javax.swing.JButton" binding="x100Button">
|
||||
<constraints>
|
||||
<grid row="1" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="x100"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</form>
|
||||
|
|
@ -8,6 +8,8 @@ public class UpgradePanel extends JPanel {
|
|||
private JLabel nameLabel;
|
||||
private JLabel levelLabel;
|
||||
private JLabel gainLabel;
|
||||
private JButton x10Button;
|
||||
private JButton x100Button;
|
||||
|
||||
private String name;
|
||||
|
||||
|
|
@ -22,6 +24,7 @@ public class UpgradePanel extends JPanel {
|
|||
private long lastFrameTimeStamp = System.currentTimeMillis();
|
||||
|
||||
private final ClickerPresenter presenter;
|
||||
private final LargeFormatter lf = new LargeFormatter();
|
||||
|
||||
public UpgradePanel(String name, double baseCost, double costMultiplier, double baseGain, ClickerPresenter presenter) {
|
||||
add(mainPanel);
|
||||
|
|
@ -35,20 +38,33 @@ public class UpgradePanel extends JPanel {
|
|||
this.nameLabel.setText(name);
|
||||
|
||||
upgradeButton.addActionListener(e -> upgrade(1));
|
||||
x10Button.addActionListener(e -> upgrade(10));
|
||||
x100Button.addActionListener(e -> upgrade(100));
|
||||
}
|
||||
|
||||
public void upgrade(int amount) {
|
||||
|
||||
presenter.removeNicolas(calculateExp(cost, costMultiplier, amount));
|
||||
gain += baseGain * amount;
|
||||
level += amount;
|
||||
|
||||
cost *= Math.pow(costMultiplier, amount);
|
||||
|
||||
System.err.println(calculateExp(cost, costMultiplier, 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);
|
||||
x10Button.setEnabled(presenter.getNicolas() >= calculateExp(cost, costMultiplier, 10));
|
||||
x100Button.setEnabled(presenter.getNicolas() >= calculateExp(cost, costMultiplier, 100));
|
||||
|
||||
//should nicolas be added?
|
||||
long currentTime = System.currentTimeMillis();
|
||||
|
|
@ -56,6 +72,7 @@ public class UpgradePanel extends JPanel {
|
|||
double timePerNicolas = 1 / gain * 1000;
|
||||
|
||||
if (timePerNicolas < lastAddDeltaTime) {
|
||||
//add nicolas
|
||||
long frameDeltaTime = currentTime - lastFrameTimeStamp;
|
||||
|
||||
System.out.printf("tpn=%.2f ladt=%d Δt=%d", timePerNicolas, lastAddDeltaTime, frameDeltaTime);
|
||||
|
|
@ -76,12 +93,22 @@ public class UpgradePanel extends JPanel {
|
|||
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));
|
||||
gainLabel.setText(lf.formatBigNumber(gain) + " Nicolas");
|
||||
|
||||
upgradeButton.setText("Upgrade: " + lf.formatBigNumber(cost) + " Nicolas");
|
||||
x10Button.setText("x10: " + lf.formatBigNumber(calculateExp(cost, costMultiplier, 10)) + " Nicolas");
|
||||
x100Button.setText("x100: " + lf.formatBigNumber(calculateExp(cost, costMultiplier, 100)) + " Nicolas");
|
||||
|
||||
}
|
||||
|
||||
private double calculateExp(double c, double fac, double amount) {
|
||||
//x10 cost = c + c*x + c*x*x + c*x*x*x... = c * x^1 + c*x^2 + c*x^3 + c*x^4 + c*x^5... =
|
||||
// c * (x^0 + x^1 + x^2 + x^3...)
|
||||
//new cost = c * x^amount
|
||||
double result = 0;
|
||||
for (int i = 0; i < amount; i++) {
|
||||
result += Math.pow(fac, i);
|
||||
}
|
||||
return result * c;
|
||||
}
|
||||
}
|
||||
49
src/test/java/LargeFormatterLargeTest.java
Normal file
49
src/test/java/LargeFormatterLargeTest.java
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class LargeFormatterLargeTest {
|
||||
|
||||
LargeFormatter lf;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
lf = new LargeFormatter();
|
||||
}
|
||||
|
||||
@Test
|
||||
void normal(){
|
||||
double n = 100000;
|
||||
String s = "100k";
|
||||
assertEquals(s, lf.formatBigNumber(n));
|
||||
}
|
||||
|
||||
@Test
|
||||
void smallestSci(){
|
||||
double n = 1000000;
|
||||
String s = "1.00E6";
|
||||
assertEquals(s, lf.formatBigNumber(n));
|
||||
}
|
||||
|
||||
@Test
|
||||
void biggerSci(){
|
||||
double n = 10000000;
|
||||
String s = "1.00E7";
|
||||
assertEquals(s, lf.formatBigNumber(n));
|
||||
}
|
||||
|
||||
@Test
|
||||
void decimalSci(){
|
||||
double n = 16900000;
|
||||
String s = "1.69E7";
|
||||
assertEquals(s, lf.formatBigNumber(n));
|
||||
}
|
||||
|
||||
@Test
|
||||
void pointNine(){
|
||||
double n = 9780000;
|
||||
String s = "9.78E6";
|
||||
assertEquals(s, lf.formatBigNumber(n));
|
||||
}
|
||||
}
|
||||
42
src/test/java/LargeFormatterTest.java
Normal file
42
src/test/java/LargeFormatterTest.java
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class LargeFormatterTest {
|
||||
|
||||
LargeFormatter lf;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
lf = new LargeFormatter();
|
||||
}
|
||||
|
||||
@Test
|
||||
void tinyNumberTest(){
|
||||
double n = 0.1;
|
||||
String s = "0.10";
|
||||
assertEquals(s, lf.formatBigNumber(n));
|
||||
}
|
||||
|
||||
@Test
|
||||
void smallNumberTest(){
|
||||
double n = 10;
|
||||
String s = "10";
|
||||
assertEquals(s, lf.formatBigNumber(n));
|
||||
}
|
||||
|
||||
@Test
|
||||
void kTest(){
|
||||
double n = 1000;
|
||||
String s = "1k";
|
||||
assertEquals(s, lf.formatBigNumber(n));
|
||||
}
|
||||
|
||||
@Test
|
||||
void mTest(){
|
||||
double n = 10230000;
|
||||
String s = "10.23M";
|
||||
assertEquals(s, lf.formatBigNumber(n));
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue