Schlagwort-Archive: entwicklung

Testserver einrichten mit Vagrant

Testserver einrichten mit Vagrant

Um ein Webprojekt sinnvoll entwickeln und testen zu können, muss man einen lokalen Testserver einrichten. Idealerweise bildet man dabei die Konfiguration der Live-Umgebung (Webserver, auf dem man seine Seiten veröffentlicht) möglichst 1:1 ab.

Welche Möglichkeiten man dabei hat, zeigt dieser Artikel.

Testserver einrichten mit Vagrant weiterlesen

Die Kunst, ein Programm zu schreiben

Die Kunst, ein Programm zu schreiben

Nach dem Angebot von Horst, ob ich nicht einen Gastbetrag machen wollte, habe ich gerne zugesagt. Doch dann fiel es mir gar nicht so leicht, ein Thema zu finden, welches dem Experinox Blog angemessen ist.

Ein Gedanke, dem ich schon länger nachhänge, ist die Frage, was Programmieren eigentlich genau ist, bzw. alles sein kann. Ich würde gerne eine meiner aktuellen Ableitungen mit Euch teilen.

Die Kunst, ein Programm zu schreiben weiterlesen

Bitte nicht alle gleichzeitig!

Bitte nicht alle gleichzeitig!

Bitte nicht alle gleichzeitig oder warum Holz sammeln kompliziert sein kann.

„Holz sammeln soll kompliziert sein? Ach so, in einem Browserspiel wie eXperinox, wo Spieler Holz sammeln können, verstehe! Aber auch das ist sicher nicht kompliziert.“

Will man meinen. Aber so einfach ist das nun auch wieder nicht. Warum? Weiterlesen!

Bitte nicht alle gleichzeitig! weiterlesen

Dev-Blog Donnerstag 51/15

Dev-Blog Donnerstag 51/15

Von Entwicklern für Entwickler

[Horst (Slayer)]

Während unsere Spieler die erst letzte Woche aktivierten Weihnachtspiraten jagen, beschäftigen wir uns weiterhin mit UnitTests und dem Logging / Tracing bzw. der Anzeige von Fehlern.

Kurze Hintergrundinfo: wir zeichnen an allen möglichen Stellen im Spiel Zustände auf, die so nicht sein sollen. Wenn also eine Methode oder eine Datenbankabfrage ein unerwartetes Ergebnis liefert, wird das an unseren Log-Handler geschickt.

Je nach Art des Fehlers werden weitere Aktionen ausgelöst. So schicken wir uns zusätzlich ein Mail, wenn im CronJob (erledigt Hintergrundberechnungen wie z.B. Ressourcenproduktion) ein schwerer Fehler oder eine Exception passiert. Das ermöglicht uns, bei solchen zumeist fatalen Ereignissen so rasch als möglich zu reagieren.

Für manche Fehler schickten wir uns bisher eine Ingame Message. Fehler, die nicht ganz so fatal sind, aber die wir uns auf jeden Fall näher ansehen sollten. Im Bereich der UnitTests hat das allerdings gestört. Iwan hat ein sehr gutes Tool gefunden, welches wir nun einsetzen. Pimp my Log heißt das Teil. Ingame Fehler-Messages an unsere Team-Accounts sind damit Geschichte.

Aufgrund der aktuellen Aktivitäten im Bereich des Refactorings & Testings und der Vorbereitung neuer Features (bei mir steht die Flottenteilung an), ist der Kampftrainer mit Construct derzeit komplett in den Hintergrund geraten.

Die Spenden für die Sonneninsel laufen im Verhältnis zur Anzahl aktuell aktiver Spieler sehr gut, wir stehen nun bei 85€. Hier wurde mittlerweile innerhalb von 2 Wochen mehr gespendet, als für eXperinox für das gesamte Jahr. eXperinox hat also Spieler mit Herz – darauf sind wir direkt etwas stolz 🙂 .

[Iwan (shlainn)]

Die Woche ging schon mal schlecht los – Erkältung 🙁 Ansonsten stecke ich mitten im Aufbau des Handels und dem damit verbundenen Refactoring verschiedener Interna von eXperinox. Das produziert leider wenige „screenshotbare“ Ergebnisse…

Daneben habe ich endlich den Server, den ich vor einigen Wochen für interne Aufgaben von eXperinox eingerichtet habe, einer sinnvollen Nutzung zugeführt – nämlich den von Horst erwähnten Unit Tests. Das hat ein paar unrunde Stellen in den Tests aufgedeckt – die daraufhin behoben wurden.

Construct 2 Tutorial: Functions

Construct 2 Tutorial: Functions

Functions in Construct arbeiten ähnlich wie Funktionen in einer prozeduralen Programmiersprache – sie kapseln Funktionalität, damit man sie wiederverwenden kann.

Für unseren Kampftrainer wollen wir Funktionen für die im letzten Tutorial behandelten Waffen der Raumschiffe verwenden und auch die Berechnung der spawnDistance beim Erstellen der Raumschiffe wollen wir in eine allgemein verwendbare Funktion auslagern.

Construct 2 Tutorial: Functions weiterlesen

Dev-Blog Donnerstag 50/15

Dev-Blog Donnerstag 50/15

Von Entwicklern für Entwickler

[Horst (Slayer)]

Um nicht Gefahr zu laufen, das mit den UnitTests wieder aufzuschieben, habe ich letzten Freitag gleich damit begonnen, alle alten UnitTests wieder zum Laufen zu bringen. Mit dabei einer, der seit dem Umbau des Message-Systems nicht angepasst wurde. Genau genommen ein No-Go, denn normalerweise sollte man vor dem Releasen eines solchen Umbaus zuerst die UnitTests wieder zum Laufen bringen. Aber genau das ist der Unterschied zwischen Theorie und Praxis! Theoretisch müsste das schon so sein, aber in der Praxis findet sich bei nicht ganz so beliebten Arbeiten sehr schnell ein Grund, es vorerst einmal aufzuschieben. Der Grund damals war die GameStage Expo 2014. Ja, 2014. Wie die Zeit vergeht 😉 .

Wie auch immer. Jedes Mal, wenn ich an UnitTests arbeite, bin ich erneut davon überzeugt, dass diese sehr viel Sinn machen. Man testet damit seinen Code und vor allem die Interfaces / public Methoden noch einmal und findet fast immer etwas, was man verbessern kann. Und auch den ein oder anderen Fehler, weil man sich noch einmal ganz intensiv mit der entsprechenden Funktionalität beschäftigt.

Und dann war es auch an der Zeit, das Blog etwas besser zu kategorisieren. Mittlerweile haben wir 152 (!) Blog-Beiträge veröffentlicht. Eine stolze Zahl und ein weiterer Beweis, für Durchhaltevermögen. Denn viele Blogs starten rasant durch und geben nach ein paar Beiträgen auf, weil dann noch immer nicht hunderte Besucher mit Begeisterung das bisher so vermisste Blog aufsuchen 😉 .

Rein funktional habe ich das Reparieren der Raumschiffe nun dahingehend abgeändert, dass es ab sofort auch Slots in den entsprechenden Fabriken belegt. Es fühlte sich immer etwas unrund an, dass man Raumschiffe quasi im Freien reppen (neudeutsch für reparieren) konnte. Auch vom Balancing ist es nicht schlecht, wenn damit allzu aggressive Zeitgenossen etwas eingebremst werden, weil das reparieren vieler beschädigter Raumschiffe nicht mehr so schnell geht.

XMAS Flotten im noXiversum
XMAS Flotten im noXiversum

Neben dem Aktivieren der X-MAS-Flotten (simple Änderung in einer DB-Tabelle) habe ich auch noch eine neue Piratenflotte integriert. Das geht aufgrund unseres relativ sauberen Codes in diesem Bereich recht einfach – samt individueller noX und DNA Belohnungen beim Abschuss.

[Iwan (shlainn)]

Zwischen Weihnachtsfeiern und anderen real-life Veranstaltungen ist derzeit wenig Zeit für eXperinox. Nichtsdestotrotz haben wir in einer äußerst produktiven Session weitere Details des Handelssystems, und des damit einhergehenden Refactorings unseres internen Handlings von Ressourcen festklopfen können.

Ressourcen sind ein zentraler Bestandteil von eXperinox und spielen an vielen  Stellen eine Rolle. Gebäude bauen, Raumschiffe konstruieren, Ressourcen sammeln und verarbeiten, Reparaturen und Recycling, Transport und demnächst auch Handel  bewegen auf die eine oder andere Art Ressourcen hin und her (zumindest aus der Perspektive des Programmierers). All diese Interaktionen objektorientiert abzubilden ist nicht ganz einfach, denn eine Klasse von Objekten soll immer nur für eine einzige Sache zuständig sein – die Faustregel lautet „Wenn du das Wort ‚und‘ brauchst um in einem Satz zu Beschreiben was die Klasse tut,  brauchst du zwei Klassen“. Ach, die Freuden von OOP (in PHP)… 😉

Dev-Blog Donnerstag 49/15

Dev-Blog Donnerstag 49/15

Von Entwicklern für Entwickler

[Horst (Slayer)]

In einer sehr konstruktiven Session mit Iwan haben wir festgelegt, dass wir den Handel nicht gemeinsam entwickeln werden, da wir uns bei dem Feature potentiell im Source-Code zu rasch gegenseitig auf die Füße steigen würden. Vor allem auch wegen des im letzten Blog angesprochenen, notwendigen Refactorings im Bereich der Ressourcen. Wir werden das natürlich mit der entsprechenden Vorsicht und in kleinen Schritten angehen und durch gemeinsame Reviews und viel Testen zu verhindern wissen, dass dabei etwas schief geht.

Eigentlich wäre das ein sehr guter Zeitpunkt, unsere doch recht stiefmütterlich behandelten UnitTests wieder einmal in die Hand zu nehmen und zumindest für den Bereich Ressourcen auch etwas zu erweitern. Als ersten Schritt habe ich zumindest damit begonnen, die bestehenden Tests wieder zum Laufen zu bringen.

Dann habe ich noch das für Mitte Jänner geplante Recycling einiges umgebaut. Bisher konnte unsere Raumschiffqueue nur sehr bedingt Aufträge für mehrere Raumschiffe gleichzeitig annehmen. Was dazu geführt hat, dass ich zum Recyclen von 5 Raumschiffen einfach 5 Aufträge abgesetzt habe. Allerdings hat das zu 5 Zeilen in der Auftragsqueue geführt (auch für den Spieler sichtbar) und in weiterer Folge zu 5 Zeilen in der Timeline. Bei 50 Boonglidern ist das Spam pur. Durch den Umbau ist es nun möglich, mehrere zu recyclende Raumschiffe innerhalb eines Auftrages abzusetzen. Damit gibt es auch nur noch einen Auftrag und am Ende einen zusammenfassenden Eintrag in der Timeline. So muss eXperinox!

Auch das Reparieren von Raumschiffen konnte davon profitieren – das habe ich auch entsprechend umgebaut. Beim Update ist leider ein kleiner Fehler passiert, der aktuell laufende Reparaturen schief gehen ließ. Den Bug habe ich aber am selben Abend innerhalb einer Stunde beheben können und so hielt sich der Schaden in Grenzen.

Dieses Wochenende startete auch unsere Ingame Spendenaktion für die Sonnensinsel, einer Einrichtung zur Nachbetreuung krebskranker und schwer erkrankter Kinder. Der Start verlief gut, erste Spenden gingen schon am ersten Tag ein. Aktuell sind es 6 Spenden im Gesamtwert von 45€.

[Iwan (shlainn)]

Eigentlich hatten wir ja angekündigt für den Adventskalender der diese Woche angelaufen ist keine extra Übersicht bauen zu wollen, aber dann hatte ich doch noch ein paar Stunden Zeit am Sonntag und habe noch was gebaut. Ein klick auf das eXperinox-Weihnachtslogo führt zur neuen Advents-Päckchenübersicht. Hier kann man sehen, welche Päckchen man geöffnet und welche man verpasst hat. Jeden Tag reinschauen lohnt sich 🙂

Adventkalender
Adventkalender

Neben den von Horst erwähnten Änderungen unter der Haube, habe ich einen ersten Entwurf für das Design einer Handelsstation entwickelt.

Erster Entwurf Handelsstation
Erster Entwurf Handelsstation

Dev-Blog Donnerstag 48/15

Dev-Blog Donnerstag 48/15

Von Entwicklern für Entwickler

[Horst (Slayer)]

Der Adventkalender ist fertig. Wer sich vom 1.12. bis 24.12. täglich ins Spiel anmeldet, wird also mit einer Überraschung belohnt werden. Da wir – wie schon letzte Woche angemerkt, den Handel nicht vergessen dürfen, haben wir vorerst auf eine Kalenderdarstellung verzichtet. Es wird also nach dem Login jeweils nur eine Seite eingeblendet, die die Überraschung des Tages darstellt.

Und dann hat Iwan im Rahmen der ersten Diskussionen zur Umsetzung des Handels wieder einmal in ein Wespennest gestochen. Acht Jahre alter Code ist nur selten eine gute Basis für Erweiterungen. Wir werden also den Code im Bereich der Ressourcen refactoren, bevor am Handel weitergebaut wird. Merciless! So, wie es sich gehört.

Dieses Wochenende startet unsere Ingame Spendenaktion für einen guten Zweck – nämlich die Sonnensinsel, einer Einrichtung zur Nachbetreuung krebskranker Kinder. Der entsprechende Code zum Spendenaufruf ist fertig umgesetzt und wir hoffen, dass der ein oder die andere unserem Aufruf zur Spende folgt.

[Iwan (shlainn)]

Diese Woche gibt es viel zu berichten. eXperinox, die eingeweihten werden es schon wissen, ist ja ein Weltraumspiel mit Raumschiffen. Daher würde man denken, dass der Code darauf ausgelegt ist, das  einfügen folgender Features so einfach wie möglich zu machen: mehr Weltraum, und mehr Dinge die man mit Raumschiffen machen kann. Dem ist leider nicht ganz so, wie Horst erwähnt hat. Das ist nicht ungewöhnlich bei einem Projekt, das sich seit langer Zeit in der Entwicklung befindet, erfordert jetzt aber doch ein wenig delikate Chirurgie, um am Ende etwas zu haben das besser spielbar und erweiterbar ist, und nicht Frankensteins Monster mit immer mehr angehängten Stücken.

Wir sind aber diese Woche dem Konzept, wie der Handel ablaufen soll, ein großes Stück näher gekommen. Im noXiversum verteilt wird es Handelsstationen geben, die wie regionale Märkte funktionieren. Wer etwas verkaufen will, der muss die Ressourcen zu einer solchen Station fliegen. Dort können sie dann zum Verkauf angeboten werden. Gekaufte Ressourcen werden ebenfalls in der Handelsstation gelagert bis sie abgeholt werden. Handelsstationen werden von der Gönnerrasse betrieben, Angriffe sind also nicht möglich. Gehandelt wird nur nox gegen Ressourcen, oder Ressourcen gegen nox. „Tausche Erz gegen Schaf“ ist ein anderes Spiel 😉

Anfangs wird der Handel auf Ressourcen beschränkt sein. Ob man später andere Dinge (Raumschiffe, DNA,…) wird handeln können, steht noch in den Sternen.