unsigned long clickAmount;
float money;
float priceFirstUpgrade = 10;
float priceSecondUpgrade = 100;
float priceThirdUpgrade = 1000;
float priceFourthUpgrade = 10000;
float priceAutoUpgradeOne = 50000;
float priceAutoUpgradeTwo = 500000;
float priceCooldownUpgrade = 500;
float moneyPerClick = 1;
float autoMoney;
unsigned long totalMoney;
unsigned long cooldown = 500;
float priceModifier = 1.3;
float cooldownModifier = 0.8;
float resetModifier = 1;
unsigned long resetValue = 2500000;
void Initialize() {
// Initializes game and lets the player know what is happening
Serial.print("Cost of Upgrade 1 is: ");
Serial.print(priceFirstUpgrade);
Serial.print(", It adds ");
Serial.print(resetModifier);
Serial.println(" extra money per click.");
Serial.print("Cost of Upgrade 2 is: ");
Serial.print(priceSecondUpgrade);
Serial.print(", It adds ");
Serial.print(5*resetModifier);
Serial.println(" extra money per click.");
Serial.print("Cost of Upgrade 3 is: ");
Serial.print(priceThirdUpgrade);
Serial.print(", It adds ");
Serial.print(100*resetModifier);
Serial.println(" extra money per click.");
Serial.print("Cost of Upgrade 4 is: ");
Serial.print(priceFourthUpgrade);
Serial.print(", It adds ");
Serial.print(1000*resetModifier);
Serial.println(" extra money per click.");
Serial.print("Cost of Auto Upgrade 1 is: ");
Serial.print(priceAutoUpgradeOne);
Serial.print(", It autogenerates ");
Serial.print(resetModifier*.25);
Serial.println(" extra money at very fast rates.");
Serial.print("Cost of Auto Upgrade 2 is: ");
Serial.print(priceAutoUpgradeTwo);
Serial.print(", It autogenerates ");
Serial.print(resetModifier*1.25);
Serial.println(" extra money at very fast rates.");
Serial.print("Cost of Cooldown Upgrade is: ");
Serial.print(priceCooldownUpgrade);
Serial.println(", It lowers your cooldown by 20% (the minimum is 50ms).");
Serial.println("The button that gives you money is yellow. It also lets you check in on your money that is autogenerating");
Serial.println("The red button shows you your stats.");
Serial.println("The click upgrades are black buttons.");
Serial.println("The cooldown upgrade button is the blue button.");
Serial.println("The auto-generation upgrades are green buttons.");
Serial.println("The reset button is grey (it resets the game and adds a reset modifier).");
Serial.print("You can reset at ");
Serial.print(resetValue);
Serial.println(" money, this adds a modifier to your money, and the amount of money you need to reset gets bigger.");
Serial.println("If you want to see this block of exposition again, press the orange button.");
}
void setup() {
Serial.begin(9600);
pinMode(13, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
Initialize();
Serial.println("Game begins");
delay(500);
Serial.println("NOW!");
}
void loop() {
//money per click, click detection, and auto-money
if (digitalRead(13) == LOW) {
delay(50);
if (digitalRead(13) == HIGH) { //so no holding down the button
money += moneyPerClick*resetModifier;
totalMoney += moneyPerClick*resetModifier;
clickAmount++;
Serial.print("money: ");
Serial.println(money);
delay(cooldown);
} else {
}
}
money += autoMoney*resetModifier;
totalMoney += autoMoney*resetModifier;
// Upgrade 1
if (money >= priceFirstUpgrade && digitalRead(2) == LOW) {
moneyPerClick += 1;
money -= priceFirstUpgrade;
priceFirstUpgrade = priceModifier*priceFirstUpgrade;
Serial.print("Cost of Upgrade 1 is now: ");
Serial.println(priceFirstUpgrade);
Serial.print("The money per click is now: ");
Serial.println(moneyPerClick*resetModifier);
Serial.print("Money left from buying the upgrade: ");
Serial.println(money);
delay(200);
} else if (digitalRead(2) == LOW && money < priceFirstUpgrade) {
Serial.println("not enough money");
delay(200);
}
// Upgrade 2
if (money >= priceSecondUpgrade && digitalRead(3) == LOW) {
moneyPerClick += 5;
money -= priceSecondUpgrade;
priceSecondUpgrade = priceModifier*priceSecondUpgrade;
Serial.print("Cost of Upgrade 2 is now: ");
Serial.println(priceSecondUpgrade);
Serial.print("The money per click is now: ");
Serial.println(moneyPerClick*resetModifier);
Serial.print("Money left from buying the upgrade: ");
Serial.println(money);
delay(200);
} else if (digitalRead(3) == LOW && money < priceSecondUpgrade) {
Serial.println("not enough money");
delay(200);
}
// Upgrade 3
if (money >= priceThirdUpgrade && digitalRead(4) == LOW) {
moneyPerClick += 100;
money -= priceThirdUpgrade;
priceThirdUpgrade = priceModifier*priceThirdUpgrade;
Serial.print("Cost of Upgrade 3 is now: ");
Serial.println(priceThirdUpgrade);
Serial.print("The money per click is now: ");
Serial.println(moneyPerClick*resetModifier);
Serial.print("Money left from buying the upgrade: ");
Serial.println(money);
delay(200);
} else if (digitalRead(4) == LOW && money < priceThirdUpgrade) {
Serial.println("not enough money");
delay(200);
}
// Upgrade 4
if (money >= priceFourthUpgrade && digitalRead(8) == LOW) {
moneyPerClick += 1000;
money -= priceFourthUpgrade;
priceFourthUpgrade = priceModifier*priceFourthUpgrade;
Serial.print("Cost of Upgrade 4 is now: ");
Serial.println(priceFourthUpgrade);
Serial.print("The money per click is now: ");
Serial.println(moneyPerClick*resetModifier);
Serial.print("Money left from buying the upgrade: ");
Serial.println(money);
delay(200);
} else if (digitalRead(8) == LOW && money < priceFourthUpgrade) {
Serial.println("not enough money");
delay(200);
}
// Auto Upgrade 1
if (money >= priceAutoUpgradeOne && digitalRead(5) == LOW) {
autoMoney += .25;
money -= priceAutoUpgradeOne;
priceAutoUpgradeOne = priceModifier*priceAutoUpgradeOne;
Serial.print("Cost of Auto Upgrade 1 is now: ");
Serial.println(priceAutoUpgradeOne);
Serial.print("The money autogenerated is now: ");
Serial.println(autoMoney*resetModifier);
Serial.print("Money left from buying the upgrade: ");
Serial.println(money);
delay(200);
} else if (digitalRead(5) == LOW && money < priceAutoUpgradeOne) {
Serial.println("not enough money");
delay(200);
}
// Auto Upgrade 2
if (money >= priceAutoUpgradeTwo && digitalRead(6) == LOW) {
autoMoney += 1.25;
money -= priceAutoUpgradeTwo;
priceAutoUpgradeTwo = priceModifier*priceAutoUpgradeTwo;
Serial.print("Cost of Auto Upgrade 2 is now: ");
Serial.println(priceAutoUpgradeTwo);
Serial.print("The money autogenerated is now: ");
Serial.println(autoMoney*resetModifier);
Serial.print("Money left from buying the upgrade: ");
Serial.println(money);
delay(200);
} else if (digitalRead(6) == LOW && money < priceAutoUpgradeTwo) {
Serial.println("not enough money");
delay(200);
}
// Cooldown Upgrade
if (money >= priceCooldownUpgrade && digitalRead(9) == LOW) {
cooldown = cooldown*cooldownModifier;
money -= priceCooldownUpgrade;
priceCooldownUpgrade = priceModifier*priceCooldownUpgrade;
Serial.print("Cost of Cooldown Upgrade is now: ");
Serial.println(priceCooldownUpgrade);
Serial.print("Cooldown is now: ");
Serial.print(cooldown + 50);
Serial.println(" milliseconds");
Serial.print("Money left from buying the upgrade: ");
Serial.println(money);
delay(200);
} else if (digitalRead(9) == LOW && money < priceCooldownUpgrade) {
Serial.println("not enough money");
delay(200);
}
// Stats
if (digitalRead(7) == LOW) {
Serial.print("total money made: ");
Serial.println(totalMoney);
Serial.print("total clicks: ");
Serial.println(clickAmount);
Serial.print("speed of money autogeneration: ");
Serial.println(autoMoney*resetModifier);
Serial.print("money generated each click: ");
Serial.println(moneyPerClick*resetModifier);
Serial.print("cooldown time (in milliseconds): ");
Serial.println(cooldown);
delay(200);
}
// Exposition Button
if (digitalRead(11) == LOW) {
Initialize();
delay(200);
}
// Victory Condition, can be changed (if changed, remember to change that part in the initialize)
if (money >= resetValue && digitalRead(10) == LOW) {
money = 0;
moneyPerClick = 1;
autoMoney = 0;
cooldown = 500;
priceFirstUpgrade = 10;
priceSecondUpgrade = 100;
priceThirdUpgrade = 1000;
priceFourthUpgrade = 10000;
priceAutoUpgradeOne = 50000;
priceAutoUpgradeTwo = 500000;
priceCooldownUpgrade = 500;
resetValue = 1.2*resetValue;
resetModifier = 1.25*resetModifier;
Serial.println("YOU WIN! (kind of)");
Serial.print("The reset value needed is now: ");
Serial.println(resetValue);
Serial.print("The reset modifier is now: ");
Serial.println(resetModifier);
Serial.println("Resetting in");
Serial.println("3");
delay(1000);
Serial.println("2");
delay(1000);
Serial.println("1");
delay(1000);
Serial.println("RESET");
} else if (digitalRead(10) == LOW && money < resetValue) {
delay(500);
Serial.println("not enough money");
delay(200);
}
}