Kitchen

Hi,

ich habe mal wieder ein kleines Projekt gestartet. In KitchenChef (ja ich weiß Name ist doppelt gemoppelt) muss man eine KI schreiben und die bestimmte Rezepte kochen soll. Es ähnelt Overcooked natürlich, aber auch dem genialen Brettspiel KitchenRush (wovon derzeit auch der Hintergrund ist). Es gibt verschiedene Spielmodi (mit verschiedenen Küchenchefs (zwischen 1 und 3, alle durch die KI gesteuert), verschiedene Anzahl an Punkten zu erreichen und verschiedene Anzahl an Gerichten bereitzustellen etc).
Es macht einfach Spaß, mal wieder etwas zu bauen.

Da das Spiel noch in Entstehung ist, gibt es erst mal nur ein Screenshot. Werde den Thread planmäßig als Tagebuch nutzen.

Hallo liebes Tagebuch,

heute ein kurzes Update. In der Nacht kam mir eine Idee.

Da das Spiel als möglicher Programmierwettbewerb an der Universität gedacht ist, steht natürlich das Schreiben einer KI im Vordergrund und das kommt gut voran. =)
Ich bin aber auch ein großer Freund das Spiel als Mensch selber zu spielen. Deshalb habe ich mich dazu entschieden auch den menschlichen Spieler gleich von Anfang an mit umzusetzen. Das bedeutet mit einem Spieler funktioniert alles super, wenn man als Mensch aber nun 3 Küchenchefs gleichzeitig steuern soll, kommt man an seine Grenzen (also ich auf jeden Fall).

Da kam mit in der Nacht die glorreiche Idee, das Spiel als Mensch ähnlich zu gestalten wie beim Schreiben einer KI.
Mein Plan nun ist es, dem menschlichen Spieler zu ermöglichen, seine Spielfiguren nicht nur mit wasd zu steuern, sondern wie bei Human Ressource Machine (HRM) ihnen eine Abfolge von Befehlen mit an die Hand zu geben und somit die Aufgaben zu erledigen. Also bei drei Spielern kann der Mensch einen per Hand steuern und den beiden anderen wie bei HRM Befehle geben, die sie abarbeiten.
Anders als bei HRM aber die Befehle natürlich immer wieder auf die Gegebenheiten anpassen. Ich denke das könnte echt spaßig werden.

1 „Gefällt mir“

Hallo Tagebucheintrag:

Um das Ziel zu erreichen, das Spiel so zu gestalten, dass es auch mit mehreren Spielern gut spielbar ist, bin ich auf das „kleine“ Problem der Wegfindung gestoßen (ich möchte ja schnell sagen können, laufe mal zum Kunden und hol dir von ihm die Bestellung oder renne mit dem Essen zum Backofen). Bis jetzt in meinen Spielen gab es immer ein Array und zwischen diesen konnte ich schnell und einfach den A* gestalten.
Tja bei diesem Spiel gibt es aber nur eine Fläche und irgendwo Wände. Wie komme ich nun also am schnellsten von Punkt A nach Punkt B.
Erster Ansatz einfach ein Raster über die Fläche legen und dann ist das 2D Array da, welches ich nutzen kann. Problem hierbei war aber die Performance. Sehr klein aufgelöst (z.B. alle 5 Pixel - bei einer Fläche von 1500 px x 800 px wird das Array sehr groß), gibt es SEHR viele Punkte und wenn die freie Fläche sehr groß ist, dann gibt es auch SEHR viele Nachbarn etc … Wenn es zu grob aufgelöst ist, können dünne Durchgänge vlt nicht mehr gefunden werden. Diese Lösung habe ich also verworfen.

Zweiter Ansatz es wie bei der Berechnung von SIchtlinien zu machen und von allen Wänden sich die Ecken geben (welche nicht durch eine Wand verdeckt ist) lassen und damit zu rechnen. Und was soll ich sagen, das klappt SUPER. Und ich bin echt glücklich mit der Lösung. Im Bild seht ihr die Wände und auch die Wegpunkte. Wenn ich jetzt berechnen will, dass der SPieler zu einem bestimmten Punkt hinlaufen will, ist der Graph sehr klein und damit die Berechnung viel besser, schneller. Ach ich freue mich. =)

Der nächste Schritt nun eine kleine KI schreiben, um zu schauen wie „leicht“ es ist und dann den HumanRessourceMachine Ansatz weiterbringen.

1 „Gefällt mir“

Haha als ich gesehen habe, dass es den Thread hier gibt und wir zufällig am Wochenende Kitchen Rush zum ersten Mal gespielt habe, dachte ich mir, wäre doch lustig das zu programmieren und Netzwerkfähig zu machen hinsichtlich Kontaktbeschränkungen :smiley:

Zufälle gibts

1 „Gefällt mir“

Hallo Tagebuch,

ich bin mit der KI echt gut vorangekommen. Sie ist schon ein guter Küchenchef.
Auch habe ich nun ein paar Bilder für die Köche und Kunden eingefügt.
Außerdem noch das Bewertungssystem für ein Essen verändert, nun kommt es darauf an wie schnell das Essen beim Kunden landet, ob alle Zutaten richtig sind etc

Glücklich macht mich der Umstand, dass eine Freundin ein paar schicke Grafiken basteln möchte.

Als nächstes kommt nun wirklich das HumanRessourceSystem für den Menschen. Bin gespannt wie es wird. =)

1 „Gefällt mir“

Hallo Tagebuch,

um in etwas Weihnachtsstimmung zu kommen, gibt es nun einen Weihnachtshintergrund und somit ein weiteres Level.
Außerdem kann man nun einstellen wie viele Bots mitspielen sollen (zwischen 1 und 3), es gibt neue Rezepte, die man nicht mehr zwangsläufig kochen muss und die Chef KI kommt mit zwei Personen sehr gut klar. Ach das war ein Kampf. =) Aber nun bin ich sehr glücklich.

Jetzt kann ich wirklich damit starten zu überlegen, wie ich die Steuerung bei mehr als 1 Spieler genau umsetze. Aber toll =)

Hallo Tagebuch,

damit ihr euch minimal vorstellen könnt, wie das Spiel derzeit abläuft, habe ich mal ein Video hochgeladen.

1 „Gefällt mir“

Hallo Tagebuch,

in den letzten Tagen wollte ich „nur“ noch die letzten bekannten Bugs aus der Chef KI entfernen. Aber ja, das hat länger gedauert als erwartet. Jetzt bleibt sie aber nicht mehr einfach nur stehen.
Auch haben die Köche nun unterschiedliche Mützen bekommen, damit sie besser unterscheidbar sind und auch sonst einige kleine Anpassungen an der GUI.
Meine nächsten Ziele sind nun erst einmal eine Website für das Spiel und den Wettbewerb bauen. Falls jemand dies liest und Lust hat zu helfen, würde ich mich freuen.

Hi Tagebuch,

nun gibt es die erste Version der Website unter Kitchen . Naja wenn ich ehrlich bin … so richtig glücklich bin ich nicht, aber sie ist funktional. :smiley: Ich müsste da so viel mehr Arbeit und vor allem Zeit reinstecken, aber dazu habe ich gerade noch keine Lust.
Jetzt baue ich erst einmal ein paar Videos mit Erklärungen. Dann starte ich endlich mal mein Ziel der Steuerung verschiedener Küchenchefs als Mensch. =)

Hallo Tagebuch,

jetzt gibt es neue Missionen, die auch der gute Chef Bot nicht wirklich immer schafft. Zeigt mir, dass ich ihn auch noch stark verbessern kann. =)
Auch verlassen die Kunden nach einer bestimmten Zeit das Lokal wieder und man bekommt Minuspunkte.
Auch wurden einige Bugs behoben und jetzt wird nicht nur auf die Fläche gemalt, sondern der Spieler kann hinter Wände gelangen (sieht man im Video sehr gut, wenn der Bot Zutaten und Gewürze holt).
Kleinigkeiten halt, aber die machen die Sache runder.

2 „Gefällt mir“

Ich bin wieder dazu gekommen, etwas dran zu basteln.

  • Es gibt nun ein weiteres Level („Cafe“),
  • eine Replayfunktion,
  • alles „zufällige“ auf einen Randomseed gepackt, sodass ich Level wiederholen kann.
  • dann habe ich zum ersten Mal auch eine Headless libgdx Version gebaut, um den Wettbewerb leichter auszuwerten ohne GUI und außerdem eine schöne Startübung für ein Client/Server Spiel. Der Server benötigt keine GUI. =)
  • ein paar weitere Methoden hinzugefügt, um das Schreiben einer KI zu vereinfachen

Jetzt versuche ich wirklich mal die Steuerung für den Menschen auf die „Human Ressource“ Mechanik umzubauen.

Jetzt gibt es noch Upgrades und eine weitere Mission. Außerdem wurden einige kleine mögliche Bugs entfernt und die Website aktualisiert.
Es wird, es wird.

Habs grad gespielt und bin auf einen kleinen Bug gestoßen. Wenn ich wärend das Essen auf dem Ofen steht zum nächsten Kunden gehe und die Essensbestellung aufnehme, kann ich das fertige essen nicht mehr vom Ofen nehmen.
LG

Vielen Dank fürs Testen. Die menschliche Steuerung ist derzeit wirklich schrecklich, deshalb möchte ich es ja ersetzen durch einen „programatischen“ Ansatz wie in Human Resource Machine.
Ziel war es bis jetzt eine API bereit zu stellen ,damit man leicht eine eigene KI erstellen kann.

Jetzt kann auch „minimal“ schon programmiert werden. Es geht in die richtige Richtung. Also ich finde es super spannend.
Bis jetzt klappen nur die Befehle goto mit Auswahl wohin und der use Befehl zum Ausführen der Anweisung auf dem ActionPoint.
Jetzt folgt die if Anweisung und das Speichern von eigenen Variablen in mem und dann wird es noch für jeden Spieler möglich sein, ein eigenes „Program“ zu schreiben. Also ich bin schwer begeistert bis jetzt :smiley:

1 „Gefällt mir“

ach man muss Kitchen über diese Scratch-like Schnittstelle programmieren? Hatte auf eine Java API gehofft und mit euren Studenten den Boden gewischt. (Oder vielleicht auch anders herum :smiley: ).

Im Browser läuft es leider sehr langsam. Also wenn ich der Anzeige links (Schneiden: 8s) glauben schenken darf, dann braucht das in meinem Browser aber bis zu einer Minute. Es läuft aber nicht nur langsam, sondern auch unregelmäßig schnell. Als würde der Puffer der Spielschleife nicht richtig eingestellt sein. Nach dem ich 2 Kunden abgespeisst hatte, lief es dann für gute 20s erst mal wieder richtig flüssig.

Die lokale Jar hab ich jetzt nicht überprüft, weil ich kein Java 8 mehr auf meinem Rechner habe.

Nein nein,

die eigentlichen KIs haben eine Java API jetzt schon, aber ich wollte wenn es jemand als Mensch spielt und drei Figuren gleichzeitig steuern muss … es ermöglichen. du kannst es ja so gestalten, du steuerst Spieler 1 mit der Tastatur und Spieler 2 und 3 halt über diese Clicki Bunti GUI Schnittstelle. =)
Finde es aber sehr spannend gerade diese GUI Schnittstelle zu bauen. Bringt doch einige Probleme mit sich, die ich nicht sofort auf dem Schirm hatte. =) Aber macht Spaß bis jetzt =)

ah okay, sehr gut :slight_smile:

Es wird. =) Jetzt können if Befehle hinzugefügt werden und damit kann auch das Christmas level schon leicht gelöst werden. Jetzt kommt die Speicherung von Variablen dran. Die Umsetzung ist anspruchsvoll, aber macht Spaß. =)

Jetzt gibt es auch 5 Variablen, die man nutzen kann und bei if kann man or oder and dazupacken und einige neue Funktionen wie scrollen, damit man mehr „programmieren kann“ sind dazu gekommen. Jetzt kann man wirklich schon einen kompletten Bot schreiben. =)
Jetzt folgt das Speichern und die Möglichkeit jedem Spieler einen eigenen Code hinzuzufügen. Ach toll =)