mirror of
https://inf.pirckheimer-gymnasium.de/kebab/kebab
synced 2026-08-26 16:31:23 +00:00
Final final steps. Improved Sonic img, tried dark mode and neglected, added better sound and animation at the end
This commit is contained in:
@@ -8,73 +8,69 @@ Kleine Indie-Company. Sehr bescheiden. Wir machen. Döner. Revolutionär.
|
|||||||
|
|
||||||
## Story
|
## Story
|
||||||
|
|
||||||
* unsere Idee: Döner Bude errichten
|
- unsere Idee: Döner Bude errichten
|
||||||
* Investition kleine Hüte kaufen
|
- Investition kleine Hüte kaufen
|
||||||
* Döner laden aufmachen nach und nach lvln und Geld machen
|
- Döner laden aufmachen nach und nach lvln und Geld machen
|
||||||
* Upgrades Arbeiter und mehr DÖNER Mehr kunden
|
- Upgrades Arbeiter und mehr DÖNER Mehr kunden
|
||||||
* Cookie clicker like main Story
|
- Cookie clicker like main Story
|
||||||
* und Mini-Spiele um Geld zu verdienen zb Jump n Run
|
- und Mini-Spiele um Geld zu verdienen zb Jump n Run
|
||||||
|
|
||||||
|
|
||||||
## Kollaboration
|
## Kollaboration
|
||||||
|
|
||||||
* Sprache auf Englisch
|
- Sprache auf Englisch
|
||||||
* erst pullen!!! (IMMER)
|
- erst pullen!!! (IMMER)
|
||||||
* Dateien speichern bevor commit
|
- Dateien speichern bevor commit
|
||||||
* um zu commiten (git commit -a -m "-Nachricht-")
|
- um zu commiten (git commit -a -m "-Nachricht-")
|
||||||
* bitte immer bei Nachricht hereinschreiben was geändert wurde
|
- bitte immer bei Nachricht hereinschreiben was geändert wurde
|
||||||
|
|
||||||
|
|
||||||
## Weiterführende Links
|
## Weiterführende Links
|
||||||
|
|
||||||
* [Javadocs der Engine Pi](https://engine-pi.github.io/javadocs/pi/package-summary.html)
|
- [Javadocs der Engine Pi](https://engine-pi.github.io/javadocs/pi/package-summary.html)
|
||||||
* [Doku der Engine Pi](https://engine-pi.github.io/engine-pi/)
|
- [Doku der Engine Pi](https://engine-pi.github.io/engine-pi/)
|
||||||
|
|
||||||
|
|
||||||
## Rahmenbedingungen für das Projekt
|
## Rahmenbedingungen für das Projekt
|
||||||
|
|
||||||
* Freiwillige Benotung (mündliche Noten, individuell)
|
- Freiwillige Benotung (mündliche Noten, individuell)
|
||||||
* Abgabetermin des Projekts: Montag, der 27. Juli, 9:25 Uhr
|
- Abgabetermin des Projekts: Montag, der 27. Juli, 9:25 Uhr
|
||||||
* Game-Engine: engine-pi
|
- Game-Engine: engine-pi
|
||||||
* [Anforderungen des Lehrplans](https://www.lehrplanplus.bayern.de/fachlehrplan/gymnasium/12/informatik/grundlegend)
|
- [Anforderungen des Lehrplans](https://www.lehrplanplus.bayern.de/fachlehrplan/gymnasium/12/informatik/grundlegend)
|
||||||
* einfache graphische Benutzeroberflächen
|
- einfache graphische Benutzeroberflächen
|
||||||
* überprüfen die Funktionalität eines vorgegebenen Softwareprodukts mit unterschiedlichen Testverfahren
|
- überprüfen die Funktionalität eines vorgegebenen Softwareprodukts mit unterschiedlichen Testverfahren
|
||||||
* verwenden dabei die zugehörige Dokumentation
|
- verwenden dabei die zugehörige Dokumentation
|
||||||
* verwenden Versionsverwaltung
|
- verwenden Versionsverwaltung
|
||||||
* UML-Diagramme
|
- UML-Diagramme
|
||||||
* KI-Verwendung erlaubt
|
- KI-Verwendung erlaubt
|
||||||
* Lizenz: frei; _wir: GPLv3_
|
- Lizenz: frei; _wir: GPLv3_
|
||||||
* Anwesenheit zu den Unterrichtszeiten
|
- Anwesenheit zu den Unterrichtszeiten
|
||||||
|
|
||||||
## Einführung Game
|
## Einführung Game
|
||||||
|
|
||||||
### Ziel des Projekts
|
### Ziel des Projekts
|
||||||
|
|
||||||
* Kleiner Dönerladen-Simulator
|
- Kleiner Dönerladen-Simulator
|
||||||
* Kunde erscheint an der Bude
|
- Kunde erscheint an der Bude
|
||||||
* Spieler verkauft Döner per Button
|
- Spieler verkauft Döner per Button
|
||||||
* Spieler erhält Geld
|
- Spieler erhält Geld
|
||||||
* Geld kann für Upgrades ausgegeben werden
|
- Geld kann für Upgrades ausgegeben werden
|
||||||
* Upgrade erhöht die Anzahl der Kunden
|
- Upgrade erhöht die Anzahl der Kunden
|
||||||
|
|
||||||
### Geplanter Spielablauf
|
### Geplanter Spielablauf
|
||||||
|
|
||||||
* Kunde erscheint
|
- Kunde erscheint
|
||||||
* Spieler klickt auf „Döner verkaufen“
|
- Spieler klickt auf „Döner verkaufen“
|
||||||
* Geld erhöht sich
|
- Geld erhöht sich
|
||||||
* Kunde verschwindet
|
- Kunde verschwindet
|
||||||
* Neuer Kunde erscheint
|
- Neuer Kunde erscheint
|
||||||
* Spieler kann Upgrades kaufen
|
- Spieler kann Upgrades kaufen
|
||||||
* Mehr Upgrades = mehr Kunden
|
- Mehr Upgrades = mehr Kunden
|
||||||
|
|
||||||
### Benötigte Klassen
|
### Weitere Ideen
|
||||||
|
|
||||||
* GameController
|
|
||||||
* Customer
|
|
||||||
* MoneyManager
|
|
||||||
* UpgradeManager
|
|
||||||
* UI
|
|
||||||
|
|
||||||
|
- Minigames (Jump n' Run)
|
||||||
|
- Startmenu mit versch. Schwierigkeitsgraden, die gespeichert werden
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package project;
|
package project;
|
||||||
|
|
||||||
import project.scenes.LoadingScene;
|
import project.scenes.GameScene;
|
||||||
import project.utils.Statistics;
|
import project.utils.Statistics;
|
||||||
import pi.Controller;
|
import pi.Controller;
|
||||||
import pi.config.ConfigLoader;
|
import pi.config.ConfigLoader;
|
||||||
@@ -23,7 +23,8 @@ public class Main
|
|||||||
public static void main(String[] args)
|
public static void main(String[] args)
|
||||||
{
|
{
|
||||||
Controller.instantMode(false);
|
Controller.instantMode(false);
|
||||||
Controller.start(new LoadingScene(), WINDOW_WIDTH, WINDOW_HEIGHT);
|
Controller.title("Royal Kebab");
|
||||||
|
Controller.start(new GameScene(), WINDOW_WIDTH, WINDOW_HEIGHT);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Cursor customCursor = Toolkit.getDefaultToolkit().createCustomCursor(
|
Cursor customCursor = Toolkit.getDefaultToolkit().createCustomCursor(
|
||||||
|
|||||||
@@ -25,9 +25,10 @@ public class GameScene extends Scene implements FrameListener, MouseClickListene
|
|||||||
Image tatli;
|
Image tatli;
|
||||||
Text[] texts;
|
Text[] texts;
|
||||||
Image[] ingredients; // array of all ingredients (including the final kebab lol)
|
Image[] ingredients; // array of all ingredients (including the final kebab lol)
|
||||||
static int INGREDIENTS_X = 13;
|
Image ingredientsOutline;
|
||||||
|
static int INGREDIENTS_X = 10;
|
||||||
static int INGREDIENTS_X_TRESHOLD = 7;
|
static int INGREDIENTS_X_TRESHOLD = 7;
|
||||||
static int INGREDIENTS_Y = -25;
|
static int INGREDIENTS_Y = -22;
|
||||||
|
|
||||||
int[] current_kebab; // used for remembering which ingredients have already been added to the current kebab build
|
int[] current_kebab; // used for remembering which ingredients have already been added to the current kebab build
|
||||||
Actor[] customers;
|
Actor[] customers;
|
||||||
@@ -66,15 +67,44 @@ public class GameScene extends Scene implements FrameListener, MouseClickListene
|
|||||||
|
|
||||||
// initialize ingredients and current_kebab arrays
|
// initialize ingredients and current_kebab arrays
|
||||||
ingredients = createIngredients();
|
ingredients = createIngredients();
|
||||||
|
ingredientsOutline = createIngredientsOutline(ingredients);
|
||||||
current_kebab = new int[ingredients.length-1];
|
current_kebab = new int[ingredients.length-1];
|
||||||
|
|
||||||
mouse_pressed_on_kebab = false;
|
mouse_pressed_on_kebab = false;
|
||||||
|
|
||||||
// add all actors
|
// add all actors with correct sorting
|
||||||
add(bg);
|
add(bg);
|
||||||
add(customers);
|
add(customers);
|
||||||
add(ingredients);
|
|
||||||
add(tatli);
|
add(tatli);
|
||||||
|
add(ingredientsOutline);
|
||||||
|
add(ingredients);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void sellKebabStatistics(int amount) {
|
||||||
|
s.kebabSold(s.kebabSold()+amount);
|
||||||
|
s.money(s.money() + s.kebabPrice());
|
||||||
|
Main.CONFIG.save();
|
||||||
|
setKebabSold(texts, s.kebabSold());
|
||||||
|
setMoney(texts, s.money());
|
||||||
|
|
||||||
|
if(s.money() >= 67) {
|
||||||
|
resetStats();
|
||||||
|
Controller.transitionToScene(new VictoryScene());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void incrementLostCustomers(int amount) {
|
||||||
|
s.lostCustomers(s.lostCustomers() + amount);
|
||||||
|
Main.CONFIG.save();
|
||||||
|
setLostCustomers(texts, s.lostCustomers());
|
||||||
|
}
|
||||||
|
public void resetStats() {
|
||||||
|
s.totalEarned(s.totalEarned() + s.money()-Statistics.STARTER_MONEY);
|
||||||
|
s.money(Statistics.STARTER_MONEY);
|
||||||
|
s.kebabPrice(5);
|
||||||
|
s.kebabSold(0);
|
||||||
|
s.lostCustomers(0);
|
||||||
|
Main.CONFIG.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -139,14 +169,25 @@ public class GameScene extends Scene implements FrameListener, MouseClickListene
|
|||||||
mouse_pressed_on_kebab = false;
|
mouse_pressed_on_kebab = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Static helper methods
|
// Static helper methods
|
||||||
|
public static Image createIngredientsOutline(Image[] ingredients) {
|
||||||
|
double ingredients_width = (ingredients[ingredients.length-1].anchor().x()+ingredients[ingredients.length-1].width()) - ingredients[0].anchor().x();
|
||||||
|
int padding_width = 3;
|
||||||
|
int padding_height = 2;
|
||||||
|
|
||||||
|
Image io = new Image("images/pixui-pack/Buttons/Button_White_Outline (5).png").width(ingredients_width + padding_width*2).height(6 + padding_height*2);
|
||||||
|
io.center(INGREDIENTS_X - ingredients[0].width()/2 + (ingredients_width)/2, INGREDIENTS_Y);
|
||||||
|
|
||||||
|
return io;
|
||||||
|
}
|
||||||
public static Image[] createIngredients() {
|
public static Image[] createIngredients() {
|
||||||
Image[] ingredients = new Image[5];
|
Image[] ingredients = new Image[5];
|
||||||
|
|
||||||
ingredients[0] = new Image("images/kebab-pack/onion-256x256.png");
|
ingredients[0] = new Image("images/kebab-pack/bread-256x256.png");
|
||||||
ingredients[1] = new Image("images/kebab-pack/meat-256x256.png");
|
ingredients[1] = new Image("images/kebab-pack/lettuce-96x96.png");
|
||||||
ingredients[2] = new Image("images/kebab-pack/bread-256x256.png");
|
ingredients[2] = new Image("images/kebab-pack/onion-256x256.png");
|
||||||
ingredients[3] = new Image("images/kebab-pack/lettuce-96x96.png");
|
ingredients[3] = new Image("images/kebab-pack/meat-256x256.png");
|
||||||
ingredients[4] = new Image("images/kebab-pack/kebab-128x128.png");
|
ingredients[4] = new Image("images/kebab-pack/kebab-128x128.png");
|
||||||
ingredients[4].visible(false);
|
ingredients[4].visible(false);
|
||||||
|
|
||||||
@@ -229,38 +270,4 @@ public class GameScene extends Scene implements FrameListener, MouseClickListene
|
|||||||
public static void setLostCustomers(Text[] texts, int lostCustomers) {
|
public static void setLostCustomers(Text[] texts, int lostCustomers) {
|
||||||
texts[2].content(String.valueOf(lostCustomers));
|
texts[2].content(String.valueOf(lostCustomers));
|
||||||
}
|
}
|
||||||
public void sellKebabStatistics(int amount) {
|
|
||||||
s.kebabSold(s.kebabSold()+amount);
|
|
||||||
s.money(s.money() + s.kebabPrice());
|
|
||||||
Main.CONFIG.save();
|
|
||||||
setKebabSold(texts, s.kebabSold());
|
|
||||||
setMoney(texts, s.money());
|
|
||||||
|
|
||||||
if(s.money() >= 67) {
|
|
||||||
resetStats();
|
|
||||||
Controller.transitionToScene(new VictoryScene());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public void incrementLostCustomers(int amount) {
|
|
||||||
s.lostCustomers(s.lostCustomers()+amount);
|
|
||||||
Main.CONFIG.save();
|
|
||||||
setLostCustomers(texts, s.lostCustomers());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void saveStats(Text[] texts) {
|
|
||||||
int money = Integer.parseInt(texts[0].content());
|
|
||||||
int kebabSold = Integer.parseInt(texts[1].content());
|
|
||||||
int lostCustomers = Integer.parseInt(texts[2].content());
|
|
||||||
|
|
||||||
System.out.println(money);
|
|
||||||
System.out.println(kebabSold);
|
|
||||||
System.out.println(lostCustomers);
|
|
||||||
}
|
|
||||||
public void resetStats() {
|
|
||||||
s.money(2);
|
|
||||||
s.kebabPrice(5);
|
|
||||||
s.kebabSold(0);
|
|
||||||
s.lostCustomers(0);
|
|
||||||
Main.CONFIG.save();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -7,14 +7,18 @@ import pi.actor.Animation;
|
|||||||
import pi.actor.Rectangle;
|
import pi.actor.Rectangle;
|
||||||
import pi.actor.Text;
|
import pi.actor.Text;
|
||||||
import pi.event.FrameListener;
|
import pi.event.FrameListener;
|
||||||
|
import pi.event.MouseButton;
|
||||||
|
import pi.event.MouseClickListener;
|
||||||
import pi.graphics.geom.Vector;
|
import pi.graphics.geom.Vector;
|
||||||
|
import pi.resources.sound.SoundPlayback;
|
||||||
import project.Main;
|
import project.Main;
|
||||||
|
|
||||||
import static pi.Controller.fonts;
|
import static pi.Controller.fonts;
|
||||||
|
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
|
|
||||||
|
|
||||||
public class VictoryScene extends Scene implements FrameListener {
|
public class VictoryScene extends Scene implements FrameListener, MouseClickListener {
|
||||||
Font font;
|
Font font;
|
||||||
boolean faded_out;
|
boolean faded_out;
|
||||||
Text designer;
|
Text designer;
|
||||||
@@ -23,9 +27,15 @@ public class VictoryScene extends Scene implements FrameListener {
|
|||||||
Rectangle rect;
|
Rectangle rect;
|
||||||
Actor sixseven;
|
Actor sixseven;
|
||||||
|
|
||||||
|
boolean clicked;
|
||||||
|
boolean game_over_playing;
|
||||||
|
|
||||||
public VictoryScene() {
|
public VictoryScene() {
|
||||||
Controller.jukebox.playSound("sounds/reward.mp3");
|
Controller.jukebox.playSound("sounds/reward.mp3");
|
||||||
|
|
||||||
|
clicked = false;
|
||||||
|
game_over_playing = false;
|
||||||
|
|
||||||
font = fonts.get("fonts/BitcountGridDouble-Regular.ttf");
|
font = fonts.get("fonts/BitcountGridDouble-Regular.ttf");
|
||||||
|
|
||||||
designer = new Text("Design: Alf");
|
designer = new Text("Design: Alf");
|
||||||
@@ -40,7 +50,7 @@ public class VictoryScene extends Scene implements FrameListener {
|
|||||||
programmer.color("#ffffff");
|
programmer.color("#ffffff");
|
||||||
programmer.font(font);
|
programmer.font(font);
|
||||||
programmer.height(1.5);
|
programmer.height(1.5);
|
||||||
rect = new Rectangle(Main.WINDOW_WIDTH/camera().meter(), Main.WINDOW_HEIGHT/camera().meter());
|
rect = new Rectangle(Main.WINDOW_WIDTH/camera().meter(), Main.WINDOW_HEIGHT/camera().meter()+5);
|
||||||
rect.color("#4d0000");
|
rect.color("#4d0000");
|
||||||
|
|
||||||
designer.center(0, 4);
|
designer.center(0, 4);
|
||||||
@@ -67,5 +77,33 @@ public class VictoryScene extends Scene implements FrameListener {
|
|||||||
public void onFrame(double pastTime)
|
public void onFrame(double pastTime)
|
||||||
{
|
{
|
||||||
sixseven.center(rect.center());
|
sixseven.center(rect.center());
|
||||||
|
|
||||||
|
if(clicked) {
|
||||||
|
for(SoundPlayback sp : Controller.jukebox.allSounds()) {
|
||||||
|
if(sp.toString().contains("Mozart") || sp.toString().contains("reward")) {
|
||||||
|
sp.volume(sp.volume()*0.97);
|
||||||
|
if(sp.volume() < 0.01) {
|
||||||
|
if(!game_over_playing) {
|
||||||
|
Controller.jukebox.playSound("sounds/Game-Over.mp3");
|
||||||
|
game_over_playing = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
camera().zoomOut(0.01);
|
||||||
|
|
||||||
|
if (camera().meter() < 0.5) {
|
||||||
|
System.exit(0);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMouseDown(Vector position, MouseButton button)
|
||||||
|
{
|
||||||
|
sixseven.visible(false);
|
||||||
|
rect.visible(false);
|
||||||
|
|
||||||
|
clicked = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,20 +3,20 @@ package project.utils;
|
|||||||
import pi.config.ConfigGroup;
|
import pi.config.ConfigGroup;
|
||||||
|
|
||||||
public class Statistics extends ConfigGroup {
|
public class Statistics extends ConfigGroup {
|
||||||
|
public static int STARTER_MONEY = 2;
|
||||||
|
|
||||||
private int money = 0;
|
private int money = 0;
|
||||||
private int kebabPrice = 5;
|
private int kebabPrice = 5;
|
||||||
private int upgradeLevel = 0;
|
private int upgradeLevel = 0;
|
||||||
private int kebabSold = 0;
|
private int kebabSold = 0;
|
||||||
private int workers = 0;
|
|
||||||
private int lostCustomers = 0;
|
private int lostCustomers = 0;
|
||||||
private int totalEarned = 0;
|
private int totalEarned = 0;
|
||||||
|
|
||||||
public Statistics() {
|
public Statistics() {
|
||||||
money(2);
|
money(STARTER_MONEY);
|
||||||
kebabPrice(5);
|
kebabPrice(5);
|
||||||
upgradeLevel(0);
|
upgradeLevel(0);
|
||||||
kebabSold(0);
|
kebabSold(0);
|
||||||
workers(0);
|
|
||||||
lostCustomers(0);
|
lostCustomers(0);
|
||||||
totalEarned(0);
|
totalEarned(0);
|
||||||
}
|
}
|
||||||
@@ -60,16 +60,6 @@ public class Statistics extends ConfigGroup {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- workers ---
|
|
||||||
public int workers() {
|
|
||||||
return workers;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Statistics workers(int workers) {
|
|
||||||
set("workers", workers);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- lostCustomers ---
|
// --- lostCustomers ---
|
||||||
public int lostCustomers() {
|
public int lostCustomers() {
|
||||||
return lostCustomers;
|
return lostCustomers;
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 349 KiB After Width: | Height: | Size: 325 KiB |
Binary file not shown.
Reference in New Issue
Block a user