 Das Mikro, das Mikrofon ist jetzt offen, sehr schön. Top! Willkommen hier im OpenCode für unseren, für unseren ersten Talk. Es geht um die ältere Generation kennt das Spiel vielleicht noch vom Handy. Snake, Nokia hatte das drauf. Es hat so ein paar Iterationen erlebt. Es gibt, kann ich bitte ein bisschen mehr Dampf auf den, auf den Speakers haben. Ist das jetzt besser? Gut. Also, die älteren unter euch. Geht das jetzt? Wir können auch Mikros tauschen. Gut. Nächster. Ja. Es funktioniert die verdammte Hacke. Okay, so. 90er Jahre Snake auf Nokia Handy kennt ihr alle. Es ist ganz hart, so ein paar Iterationen. Und man kann es auf den Brauch machen. Man kann mit immer mehr Tricks und die Dinger müssen sich was zu futtern holen. Und man kann damit Programmieren. Man kann das halt eben viel selber ein bisschen Code ein bisschen machen. Und es haben zwei Leute gemacht. Siefreak. Und ich habe viel Spaß. Gut. Hallo. Ah. Zum Einstieg vielleicht eine kleine Frage. Wer von euch ist denn schon länger auf der GPN? Und nicht bloß Heuer oder die letzten drei Jahre? Fast niemand. Die Eltern würden sich vielleicht noch daran erinnern, dass es hier öfter mal Programmierspiele gab. Ich erinnere mich zum Beispiel gut an die Weltraumprogrammiernacht. Was im Wesentlichen Server war, auf dem man Code abladen konnte und damit gegen die anderen um die Wette spielen konnte. Die Eltern haben sich vielleicht noch daran erinnern, dass es hier öfter mal Programmierspiele gab. Das war was, was uns die letzten Jahre gefehlt hat. Und deswegen haben wir uns beschlossen, haben wir beschlossen Heuer im Januar, da müsste man mal was machen. Und die Zeit verging wie im Flug und jetzt das GPN und ein bisschen was haben wir vielleicht. Nein, also wir haben ein Programmierspiel und wir können auf dieser GPN wieder spielen. Ja, es geht im Prinzip um Snake. Ich würde eher sagen, es geht um ein, so was wie ein Clone von Slither.io. Was ein Spiel auf Handys und im Web ist, wo man mit der Maus oder durch Touch seine Schlange steuern kann, durch die Gegend fliegen lassen kann, Futter fressen kann und andere Schlangen fangen, töten, jagen, sonst was kann. Unsere Idee war jetzt, wir bauen was sehr ähnliches, die Schlange nicht selber steuern, sondern man muss ein Skript schreiben, dass diese Schlange steuert. Genau. Gut, vielleicht noch vorne weg. Nein, das haben nicht nur wir beide gemacht, also Siefreak und Xor, sondern das ist mehr so eine Gemeinschaftsleistung aus dem Bytewerk in Ingolstadt, Ingolstadt's besten Hackerspace, wer in der Nähe ist, kommt vorbei und helft das nächste Mal mit. Gut, wie gesagt, jeder kann mitmachen, man sieht, das läuft jetzt hier lokal, weil da haben wir Demodaten drauf, da können wir was zeigen. Genau. Aber man kann es dann einfach erreichen unter Schlangen.bytewerk.org. So, wenn man auf die Webseite geht, dann kann man als erstes mal da auf Watch gehen und was man dann sieht, ist das aktuelle Spielfeld mit den einzelnen Schlangen. Die Schlangen müssen sich bewegen, die bewegen sich von alleine, aber was man machen muss, ist in einem Skript der Schlange sagen, wohin sie fahren soll. Es funktioniert folgendermaßen, das Spiel ist in Frames aufgeteilt, momentan läuft das mit 60 Frames die Sekunde, mal schauen, wie es läuft, wenn wir echt viele Bots haben. Und in jedem Frame gibt man der Schlange vor, in welche Richtung sie sich drehen soll. In dem man einfach ein Winkel in Radien angebt, Minus B bis Plus B, in Wirklichkeit kann sie diesen Winkel nicht fahren, sondern sie kann halt nur kleine Winkeländerungen in jeder Runde quasi ausführen. Ziel des Spiels ist, erst mal viel Futter fressen, um selber größer zu werden und in zweiter Linie natürlich möglichst lang überleben. Und das tue ich, indem ich in keine anderen Schlangen reinfahre. Also ich kann, wie man vielleicht schon gesehen hat, in mich selber reinfahren, das ist kein Problem. Aber ich darf mit meinem Kopf keine andere Schlange berühren, sonst bin ich tot. Tot heißt, ich spawne neu mit Mini-Klein. Was wir jetzt gerade gesehen haben, ist eine Schlange, die gestorben ist. Und ein Bot, der so mäßig mitbekommen hat, da gibt es Futter und man kann dieses Futter fressen. Weil das ist genau das, was passiert, wenn eine Schlange stirbt, dann hinterlässt sie ungefähr die Hälfte von der Masse, die sie mal gefressen hat, als Futter. Es gibt noch ein extra Feature, was man hier glaube ich nicht sieht. Doch da oben rechts ist der Ritchie. Der tut das, glaube ich. Schlangen können temporär Gas geben, um zum Beispiel vom anderen Gegner wegzulaufen oder einen einzufangen. Das kostet allerdings Masse, also Futter. Wer es hier durch die Gegend speedet, verliert Futter, das bleibt wieder auf der Karte liegen. Und wenn er zu lange speedet, dann wird er sterben, weil er verhungert. Wichtiger Punkt vielleicht noch, das Spielfeld ist kein Rechteck, wie es hier vielleicht aussieht, sondern ist eine Toruswelt. Das heißt, was rechts rauskommt, kommt links wieder rein und was oben rauskommt, kommt unten wieder rein. Und für die Bots ist die Welt unendlich. Das heißt, die sehen nicht, dass das ein Ende hat. Das Spielfeld, das wir hier gerade sehen, ist ein bisschen kleiner als das, dass man auf dem Server läuft und wir werden das auf dem Server anpassen auf die Menge Spieler, die da sind, sodass die Schlangendichte irgendwie vernünftig ist. Was man vielleicht zeigen könnte, ist genau, dass man hier rauszoomen kann. Vielleicht zeige ich noch ein paar Worte zur Statistik. Seid ich das schnell tun? Ja. Also, hier sehen wir gerade die 20 größten Schlangen auf dem Spielfeld auf der rechten Seite mit ihrer Masse, die Sie gerade haben. Und was man außerdem sieht, das ist eigentlich mehr ein Gag von uns, ist, wie Sie diese Masse erreicht haben, nämlich wie viel Futter Sie gefressen haben von welcher Sorte. Es gibt nämlich drei Sorten Futter. Das erste ist das vegetarische Futter, das auf der Welt ständig spawnt. Das Futter wird, wenn es mal da ist, immer kleiner, solange bis es verschwindet. Das vegetarische Futter, wenn verschwunden ist, dann erscheint an einer anderen Stelle wieder ein neues Futter. Das ist der Ars. Wenn nicht Überreste von Schlangen zählig gestorben sind und die Fresse, dann wird man das als Ars aufgerechnet. Außer, ich habe diese Schlange selber erlegt. Wenn ich die erlegt habe, dann wird es zählt, dass Futter als Handel von mir erjagt. Wir überlegen uns noch, ob wir daraus nachher Statistiken fahren und vielleicht Preise vergeben. Gut. Du kannst vielleicht noch schnell auf ein Bot klicken oder so, dass man den mal nachfährt. Wenn ich einen treff. Das funktioniert noch. Wenn man zum Beispiel auf den Kopf oder auf der Statistik auf Bots klickt, dann folgt ihnen das Spiel und man kann zuschauen, was der genau tut. Aus meiner Sicht wäre das so das Spielprinzip. Wir würden dann kurz zeigen, wie das Programmieren von diesem Spiel funktioniert oder das Mitspielen. Das ist der Punkt, erst mal ein Account zu erstellen. Die Spelle dafür ist relativ niedrig. Es braucht ein Benutzernamen. Es braucht ein Passwort. Das Passwort muss mindestens 5 Zeichen haben und es sollte nicht zu den 1.000 häufigsten Passwörtern gehören. Genau, das haben wir schon angemeldet. Sind wir schon drin? Wir werden direkt auf dem Web-Editor für den Code abgeschmissen. Was hier schon mal ist, mit vielen Kommentaren, dass so die Basisfunktionen zeigt, was man machen kann. Wie gesagt, der Code ist Lua. Ganz oben in den Kommentaren steht, das ist Lua. Wer Lua nicht kennt, da ist die Doku zu Lua. Es ist nicht unsere bevorzugte Programmiersprache, muss man dazu sagen, aber man kann sie sehr leicht in C einbetten und das ist der Grund, warum es bei uns hier läuft. Weil Python relativ schwierig zur Sandboxen ist, soweit ich das Erfahrung gebracht habe. Sonst wäre es Python geworden, auf jeden Fall. Okay. In diesem Script muss man damit funktionieren kann, mindestens eine Funktion definieren. Jeder, der irgendwas auf sich hält, hat mindestens 2 Funktionen, nämlich eine Innetfunktion und eine Stepfunktion. Die Innetfunktion wird aufgerufen, wenn der Bot zum Leben erweckt wird und dort, und nur dort, kann er zum Beispiel seine Farben setzen. Wir haben noch Features offen, die wir gerne implementieren möchten. Vielleicht wird das was in der GPN, so was wie man kann sich sein Gesicht raussuchen, aber kann ich noch nicht versprechen. Was man hier sieht, ist die Innetfunktion, in der gesetzt wird, dass die Farbe von unserem Bot abwechselnd, oder vielleicht hat man das gesehen, die Bots bestehen aus Segmenten von 2, 3 Segmenten bis ein paar 100 oder sogar ein paar 1000, wenn es ein echt großer Bot ist, und die Segmenten sind einzeln eingefärbt. Was man bei Self Colors in dieser Innetfunktion eintragen kann, ist eine Reihenfolge von Farben und die wird dann immer wiederholt für den Bot, solange erhalt ist, für jedes Segment. Neben der Innetfunktion, die eigentlich wichtige Funktion, ist die Stepfunktion. Die wird aufgerufen jedes Mal, wenn der Server einen neuen Freien berechnet, im Idealfall also 60 mal pro Sekunde. In dieser Funktion muss ich irgendwie die Welt um mich herum erkunden, mir überlegen, was ich tun möchte und dann als Rückgabewert zurückgeben, was ich tun möchte und dann wird der Server damit weiterarbeiten. Für diese ganze Lua Umgebung gibt es eine API, die ist auch beschrieben, wenn man oben im Navigationsmenü auf API geht, dann sieht man erstens mal, welche Lua Funktionen zur Verfügung stehen, und welche Funktionen unsere API anbietet. Über die API kann man zum Beispiel oder hauptsächlich Futter suchen um den eigenen Kopf herum. Abhängig von der eigenen Größe hat man Sichtradius, wie viel man sehen kann. Das kann am Anfang sehr wenig sein und abgesehen von Futter suchen kann ich auch Segmente von gegnerischen Wörmern suchen, um denen ausweichen zu können. Das sind zwei Funktionen, die man auf jeden Fall irgendwie tun muss, damit man eine Chance hat in dem Spiel. Wir machen das jetzt erstmal nicht. Wir wollen jetzt einfach nur zeigen, wie das System funktioniert. Dazu haben wir uns überlegt, lassen wir die Schlange schlängeln. Genau. Gerade läuft ihr einfach nur den großen Kreis. Also ihr wird einfach ein sehr kleiner Winkel zurückgegeben, der konstant ist. Das heißt, jeden Frame bewegt sie sich einen Tick was in den großen Kreis ergibt. Wir können jetzt die Frames mitzählen und dadurch sozusagen eine Zeitvariable bekommen und die einen Sinus geben und dann fährt die Schlange hoffentlich schlangenlinieren. Das demonstriere ich mal. Ich nenne nie mal T die Variable. Dann können wir die hier jeden Frame hochzählen und dann hier mit der Sinusfunktion schlangenlinien fahren abhängig von T. Genau. Das dürfte gewesen sein. Dann klicken wir auf ran. In dem Moment wird die aktuelle Inkarnation der Schlange getötet und spawnet irgendwo neu mit dem neuen Code. Man sieht jetzt auch die IDE verfolgt die neue Schlange und wie erwartet fährt sie schlangenlinieren. Das war eigentlich, was wir zeigen wollten. Wie man das Spiel wirklich spielt und sich gegen die anderen behaupten kann, das müsst ihr selber rausfinden. In dem Beispiel Code steht wie man seine Umgebung sieht, wie man über diese Umgebung oder diese Objekte, die man sieht, drüber iteriert. In der API steht welche Eigenschaften diese Objekte haben und was man damit machen kann. Ansonsten wir haben einen IRC Channel eingerichtet SPN 18. Channel SPN 18 auf Hackint oder wenn Fragen bestehen oder Anregungen, wir haben ein mittelgroßes Snog aufgebaut, das Snake Operations Center. Das befindet sich ungefähr am Eingang oder also bei der Launch auf der Seite von der Bundesanwaltschaft. Gut, dass es Heißkurs gibt nach der maximal erreichten Masse in der Zeit, in der wir uns ein paar kleine Preise verschenken. Wir wissen allerdings noch nicht genau wo und wann wahrscheinlich während der Abschlussveranstaltung. Ja. Kann man noch was? Das dürft es gewesen sein. Gut, dann hätten wir jetzt vielleicht noch ein bisschen Zeit für Fragen. Ja, ich gebe mal das Mikrofon weiter. Nur organisatorisch, weil wir gerade die Webseite noch nicht gefunden haben, wann ist die Masse drauf? Das ist jetzt noch lokal. Die ist tatsächlich schon online. Schlangen.beitwerk.org Gut, weitere Fragen? Ja. Wenn die Bots Turbo einschalten wenn die Bots den Turbo einschalten verlieren sie ja Masse. Ist das Futter und gilt das als Vegan oder was anderes? Also Masse, das verloren wird wenn gebrustet wird gilt als natürliches Futter. Gibt es noch Fragen? Wie sieht es mit Rechenzeit aus? Wie viel Zeit, wie viel Operation kann man aushören oder gibt es da irgendein System, das ist begrenzt? Also es sind verschiedene Sachen begrenzt. Zum einen die Rechenzeit in Echtzeit. Die ist 100 Millisekunden. Dann die Rechenzeit in Lua Instructions was auch immer das genau bedeutet. Das sind 100.000. Eine Million. Der Rahmen ist begrenzt auf 10 Megabyte und genau das war es. Gut, dann danken wir euch herzlich für den Vortrag. Viel Spaß beim Programmieren und viel Spaß auf der KPN. Test 1, 2 Test 1, 2 Test, Test, Test 1, 2 Eigentlich würde ich ja gerne den Equalizer einstellen. Da gibt es doch das hat sich halt alles geändert.