Schlagwort-Archive: Mathematik

Eine reichlich produktive Woche liegt hinter mir. Ein paar müßige Woche mussten nämlich ausgeglichen werden, jedenfalls im Bereich der Spieleentwicklung. Aber seit Montag konnte sich meine Entwicklungsumgebung nicht über zuwenig Aufmerksamkeit beklagen. Es gibt daher schon wieder einen kleinen Update-Bericht zu SPACOLA Eclipse.

spaclipse034

Als erstes möchte ich bekanntgeben, dass ich eine gedankliche Schwelle überschritten habe: Ich bin mir jetzt hundertprozentig sicher, dass ich das kleine Retro-Spieleprojekt eines Tages wirklich zum Abschluss bringen muss. Nachdem ich bisher stets darauf hingewiesen habe, dass ich keine Garantie dafür geben werde, dass ich meine kaum spielbare Monochrom-Demo nicht eines Tages doch noch aus plötzlichem Desinteresse wieder einstampfe, bin ich nun sicher, dass mir das nicht mehr passieren kann. Zuviel Mühe, Zeit und Erfahrung stecken inzwischen in dem bald 13000 Zeilen langen Quellcode.

Außerdem ist das zwar noch weitestgehend unfertige Spiel längst mit einem tatsächlich recht drolligen Gameplay gesegnet. Auf dem Bildschirm wuseln und explodieren schon eine ganze Menge Raumschiffe hektisch umher, ballern aus allen Rohren, Geschütztürme verfolgen aufgeschreckt jede Bewegung des Spielers. Selbst die winkenden Männchen in den Raumstationen trinken schon gierig ihre Cola, wenn man sie mit der wertvollen Ware beliefert. Mit maximalem Schub versucht man der Anziehungskraft schwarzer Löcher zu entkommen, oftmals vergeblich. Ja tatsächlich, Geschütztürme und schwarze Löcher sind in dieser Woche fertig geworden.

Ich habe endlich meine neue Vortex-Klasse für Strudel- bzw. Wirbeleffekte (z.B. Intro-Animation und Gameover-Animation) in Betrieb genommen. Für den Wirbeleffekt (logarithmische Spirale) und für die Gravitationsberechnung schwarzer Löcher musste ich mir wieder mal eine ganze Menge Mathematik anschauen. Selten habe ich soviel über irgendwelchen Formeln gebrütet wie die letzten Tage, aber es hat sich ausgezahlt. Der Effekt ist wirklich spannend und funktioniert sehr gut. Den neuen Code für die Gravitation konnte ich auch gleich für zwei Sammler-Powerups und für die Container einbauen, so dass das Thema auch abgehakt wäre. Von seiner eigenen Code-Kreation brutal über den Haufen geschossen oder ins Nirvana gezogen zu werden, das macht einen auch irgendwie stolz.

Aber ich will niemandem etwas vormachen: Die Todo-Liste wird eher länger statt kürzer. Für jedes Feature, das ich mühsam umsetze, fallen mir zwei neue ein. Und das schließt Ideen für Erweiterungen und Bugs nichtmal ein. Alle paar Monate meldet sich mal ein SPACOLA-Fan bei mir, was mich immer ganz besonders freut. Manchmal ist das sogar die nötige Motivation, die ich brauche, um mich nach faulen Phasen mal wieder ins Gefecht zu stürzen. Und ich bin noch optimistisch, dass das Projekt Ende des Jahres wirklich vorzeigbar wird! Bis dahin wird es noch ein weiteres Gameplay-Video geben, das alle neuen Funktionen demonstriert und dass man nun sogar das Spiel verlieren und seinen Highscore-Eintrag hinterlassen kann. Wenn die vielen Spielmechaniken mal irgendwann alle fertig implementiert sind, dann kann ich mich endlich um das wirkliche Spieldesign kümmern, also um die Levels, das Feintuning, ein korrektes Gegnerverhalten, uvm.

Die Spiegel-Autoren haben es geschafft. Ich bin endlich geheilt. Noch vor einigen Monaten hielt man mich vermutlich zu Recht für einen fiesen, ekligen Rechtschreibnazi. Sogar an einigen Textbeiträgen zu diesem Thema versuchte ich mich hin und wieder, alleine in der Hoffnung, die Welt ein bisschen besser zu machen. Man stelle sich vor, auch im Bekanntenkreis pochte ich auf Facebook zumindest auf Korrektur der wildesten Fehler, weil mir die Augen schmerzten vor soviel Rechtschreibunvermögen unter erwachsenen, gebildeten Studenten. Reaktionen provozierte ich damit durchaus, meistens wurde ich wenigstens orthographisch sehr kreativ beleidigt. Bekanntlich haben Rechtschreibnazis keine Argumente und keine Freunde, daher musste ich endlich umschulen. Viel zu oft verwechselte ich die Unfähigkeit, halbwegs korrekte Sätze zu tippen mit fehlender Intelligenz. Das war natürlich in höchstem Maß naiv und falsch. Mein Kreuzzug gegen die Volkskrankheit Legasthenie ist damit hoffentlich zu Ende und ich kann mich wieder um die wirklich wichtigen Dinge im Leben kümmern. Danke!

Endlich begreife ich die Nichteinhaltung der Rechtschreibregeln als Evolution der Rechtschreibung und nicht länger als Verfall selbiger. Ein junger Kollege von mir umschreibt den Sachverhalt gerne mit „lebendiger Sprache“. Ein Artikel auf Spiegel Online beschreibt diesen Effekt, der mir schon seit einigen Jahren nur zu deutlich auffällt: Deutsche Schüler lernen keine Rechtschreibung mehr. Der Artikel konnte mir die Augen öffnen. Anstatt mich wie früher fälschlich darüber zu beklagen, dass unsere Sprache vor die Hunde geht, will ich das Pferd heute mal von hinten aufzäumen und das ganze aus der Sicht der Schüler sehen. Die Generation Facebook und WhatsApp kommt mit den simpelsten Rechtschreibregeln nicht mehr klar, außerdem kostet Rechtschreibung zuviel Zeit beim Tippen, daher bildet sich nun endlich eine völlig neue internet-taugliche Rechtschreibung. Ich wage eine kurze Prognose, wie sich das in den kommenden Jahren entwickeln wird:

  • Groß- und Kleinschreibung werden abgeschafft. Auch am Satzanfang schreibt man künftig klein.
  • Punkt und Komma werden abgeschafft.
  • Satzbau, bzw. Haupt- und Nebensatz werden abgeschafft. Ab sofort gibt es das Gebilde „Satz“ nicht mehr, nur noch „Message“. Das geht konform mit der Abschaffung von Punkt und Komma.
  • Ausrufe- und Fragezeichen kommen nur noch in größerer Zahl vor, um Emotionen auszudrücken, nicht mehr um Sätze zu beenden.
  • Smileys und Capslock werden überall dort verwendet, wo noch mehr Emotionen ausgedrückt werden sollen.
  • Um ganz besonders starke Emotionen auszudrücken, verwendet man Abkürzungen wie OMG, LOL, ROFL, YOLO, HDL, LW („Langweilig“), KZ („Keine Zeit“), und was einem sonst noch so einfällt.
  • Jedes deutsche Wort ist beliebig durch entsprechend bessere englische Vokabeln ersetzbar. („Das kriegst du back!!!!11“)
  • Auch aus anderen Sprachen sollten möglichst viele Lehnwörter verwendet werden, dabei ist die Schreibweise nebensächlich. („Repertwar“, „Blamasche“)
  • Die Backspace-Taste wird abgeschafft. Da ohnehin niemand mehr liest, was er schreibt, sondern lieber blind absendet, braucht man dieses Relikt schon bald nicht mehr.
  • Orthographie wird abgeschafft.

In Zukunft gilt stattdessen nur noch eine Rechtschreibregel, und die ist ganz leicht zu merken: „schrieb so wie du wilst lol!!! ;D“. Wer im Chat, in E-Mails, und in Kurznachrichten komplett auf Rechtschreibung scheißt, der gewöhnt sie sich früher oder später ganz ab, vielleicht ohne es zu merken. So sorgt man wie automatisch dafür, dass man irgendwann in geschäftlichen Schreiben, in wissenschaftlichen Arbeiten, in journalistischen Beiträgen und in formalen Briefen schreibt, als wäre es eine SMS an eine gute Freundin. Dazu gibt es übrigens auch einen recht interessanten Artikel auf Spiegel Online. Aber das nur am Rande.

Glücklicherweise behauptet heute niemand mehr, dass diese Entwicklung etwa auf sprachliche Defizite zurückginge, sondern dass das ein begrüßenswerter Schritt hin zu „kreativerem Schreiben“ ist. Wer kreativ schreiben will, für den ist das veraltete Konzept der Rechtschreibung nur hinderlich. In der Mathematik wird das eines Tages vielleicht ähnlich ablaufen, wenn es darum geht, kreativer zu rechnen. 2 + 2 = 5 ist nach den (im Moment noch) geltenden mathematischen Regeln vielleicht ein bisschen falsch, aber es ist auf jeden Fall viel kreativer. Die Botschaft ist wichtig, nicht die Art wie sie vermittelt wird.

In ein paar Jahren, wenn die jetzige Schülergeneration erwachsen geworden und in die Stellen der Personalentscheider gerutscht ist, dann sind viele Rechtschreibfehler, Smileys, LOLs, OMGs und ein turbulenter Satzbau in Bewerbungen tatsächlich salonfähig und gelten als Ausdrucksmittel von kreativer Persönlichkeit. Gruftis wie ich finden mit ihren altmodischen, standardkonformen, völlig uncoolen Anschreiben leider keine Anstellung mehr in dieser Welt, aber das ist womöglich gut so, denn man will ja bewusst eine Veränderung erreichen.

Ich erinnere mich dunkel an meine Schulzeit, als ich dutzende Aufsätze und Tests im Deutschunterricht schreiben musste. In jeder Klassenarbeit brach ich mir fast einen ab, weil ich mich vor Nervosität beispielsweise nicht mehr daran erinnern konnte, ob es nun „wiederspiegeln“ oder „widerspiegeln“ heißen muss. In jedem Diktat rechnete man pro zwei Fehler jeweils eine halbe Note schlechter. In einem Test über Kommasetzung war ich vor lauter Kommasetzungsregeln so verwirrt, dass ich weiterhin „nach Gefühl“ Kommata verteilte, und obwohl ich damit in weit über 80% der Fälle richtig lag, gab es vermutlich trotzdem nur eine 4 dafür. Bei solchen unfairen Lehrern und Maßstäben würden Kinder heute gnadenlos durchfallen. Wenn ich meine damalige Rechtschreibung mit den Textergüssen heutiger Schüler vergleiche, dann müsste ich mich doch zwangsläufig wie der Einäugige unter den Blinden fühlen. Aber stattdessen betrachte ich mich heute als Zeuge dieses faszinierenden sprachlichen Wandels. Zum Glück gibt es solche restriktiven Regeln bald nicht mehr, weil sich kommende Generationen von den Ketten der Rechtschreibung befreien und irgendwann jeder so schreiben kann, wie es ihm gefällt.

Um meine Sympathie zu dieser Anti-Rechtschreib-Bewegung zu beweisen, werde ich in sämtlichen kommenden Artikeln auf Success Denied zusätzlich zu meinen zahlreichen üblichen Rechtschreib- und Tippfehlern absichtlich einige mehr einbauen.

So viel zu tun, so wenig Zeit. Irgendwie finde ich es traurig, dass ich im Prinzip zu überhaupt nichts mehr komme, wenn ich nicht manchmal einfach ein Stoppschild aufstelle (und Leute enttäusche). Die Wochenenden sind bereits komplett verplant, bevor sie überhaupt angefangen haben, und unter der Woche geht ja sowieso nichts, wenn man erst um 21 Uhr sein täglich zu absolvierendes Alltagsprogramm abgespult hat. Aber genug Geheule für heute. Der nächste Urlaub kommt bestimmt.

Trotz allem ist es mir ein großes Vergnügen, die neuesten Fortschritte bei meinem kleinen Feierabend-Hobby-Projekt vorzustellen: Mein Dongleware-Remake Spacola Eclipse ist jetzt praktisch „spielbar“ in der Version 0.19. Das letzte Mal als ich nennenswert am Code arbeitete, war Anfang Juli. Vor einer Woche packte es mich dann endlich wieder, als ich mich der alten Sound-Problematik annahm. Nach langem Herumgebastele und mit der Unterstützung eines Indie-Spieleentwicklers konnte ich es zu meiner Zufriedenheit hinbiegen. Es geht tatsächlich, allerdings muss man sich um das Abspielen selbst kümmern. Der Sound funktioniert seitdem besser denn je und es sind viele Ingame-Samples dazugekommen. Dadurch hatte ich die nötige Motivation um auch andere Dinge anzupacken.

Im Anschluss schrieb ich lässig den Code für die Asteroiden und die Kollisionserkennung runter. Asteroiden kann man nun zerstören und mit dem Schiff an ihnen abprallen. Zugegeben, die Mathematik hinter dem „Abprall“-Effekt von Asteroiden, die wollte ich mir nicht mit dicken Mathebüchern herleiten. Da geht es um Drehung von Koordinatensystemen, damit man eine eindimensionale Kollision berechnen kann und den Abprallwinkel und die Abprallgeschwindigkeit beider Objekte bekommt. Gruseliges Zeug wenn man schnell fertig werden will. Für die Methode ließ ich mich bei anderen intelligenten Programmierern inspirieren. Es funktioniert noch nicht perfekt, aber immerhin.

In der Folge kamen weitere Powerups hinzu, so z.B. alle Schuss-Powerups und die Extraleben. An Stationen kann man jetzt andocken, so dass man entweder wüst beschimpft wird, oder das Sonnensystem vom Spiel als erfolgreich abgeschlossen beendet wird. Ja genau, endlich kann man im Spiel vorankommen und die Levels zumindest gewinnen. So kann man nach und nach alle Sonnensysteme auf der Übersichtskarte abhaken. Verlieren kann man bisher noch nicht, da das Sterben noch nicht implementiert ist und es weiterhin noch keine Gegner gibt (kommt, kommt!). Die Sektoren sind bisher alle zufallsgeneriert, was leider nicht ganz richtig ist, da das Original-Spacola hier gewisse Konfigurationen kennt, die in die Levelgenerierung mit einfließen. Auch der Zielsektor ist fest nach einem bestimmten Schema berechnet und nicht komplett dem Zufall überlassen. Für den Moment muss es aber so gehen.

Die Preis-, Fahndungs- und Bonuslisten sind fast fertig. Die Preise stimmen alle und die Screens sind alle eingebaut, aber bisher sind eben nur die Sprites für die Lieferartikel eingebunden – die Sprites für Gegner und andere Hindernisse fehlen noch. Ebenfalls fehlen die animierten Sprites für das Beschleunigen des eigenen Raumschiffs. Zur Vereinfachung habe ich stattdessen zwei Partikelstrahler-Objekte bei den Triebwerken platziert, die beim Beschleunigen Pixelpartikel emittieren. Sieht eigentlich sehr viel besser aus als im Original, aber es bleibt am Ende natürlich nicht so. Vermutlich lasse ich diesen Effekt für spätere Versionen drin.

Aus der Kategorie „zu doof für Mathematik, aber intelligent genug um sich trotzdem was einfallen zu lassen“: Heute habe ich mir mal wieder ausgiebig meinen alten Quellcode für meine Spacola-Maussteuerung vom August 2010 angesehen und mich daher auch mal wieder ein bisschen mit den mathematischen Grundlagen (Trigonometrie und Vektorarithmetik) auseinandergesetzt. Ein wenig Schmunzeln musste ich über meine unkonventionelle Lösung eines alten Problems, das ich damals hatte.

Man nehme einen Mauszeiger, der irgendwo in einem karthesischen Koordinatensystem liegt. Nun musste ich herausfinden, welchen Winkel der Richtungsvektor Ursprung->Mauszeiger mit der Y-Achse einschließt. Da ich selten mit der Mathematik einer Meinung war, aber dafür umso mehr gewillt, diese Aufgabe von alleine zu lösen, nahm ich mir seinerzeit Papier und Bleistift zur Hand und fing damit an, mir eine Lösung zu überlegen. Und ich fand einen Algorithmus, mit dem ich den Winkel näherungsweise bestimmen konnte.

Aber zunächst zur idealen und simpelsten Lösung:

Man benötigt im Prinzip nur Delta X und Delta Y zwischen den beiden Punkten, also den Ortsvektor. Anschließend teilt man Delta Y durch den Betrag des Vektors und berechnet aus diesem Wert den Arkus-Kosinus. Das Ergebnis muss dann noch mit 360 multipliziert und wieder durch 2 Pi geteilt werden. Schnell und effizient. Ich bin kein Mathegott, aber ein paar Minuten Suchen hat mich auf die richtige Lösung gebracht.

Witzig fand ich dagegen meinen Algorithmus, der folgendermaßen aussieht:

Ich habe beliebig viele Punkte (im Extremfall 360 Stück, in meinem Fall aber nur 40) auf einem Einheitkreis um den Mittelpunkt generiert und von jedem dieser gedachten Punkte den Abstand zur Mauszeigerkoordinate bestimmt. Mein gedanklicher Ansatz war der, dass der Punkt, der den kürzesten Abstand zur Zielkoordinate hat, mehr oder weniger exakt denselben Winkel zur Y-Achse hat. Mit dem Vorteil, dass ich dessen Winkel (da selbst generiert) genau kannte. Anschließend habe ich noch eine merkwürdige Umrechnung vom Bogenmaß ins Gradmaß durchgeführt. Das Ergebnis war zufriedenstellend.

Für letzteres Codebeispiel schlagt mich bitte nicht. Ich wusste damals schon, dass das nur ein Provisorium ist. Ich weiß noch nicht einmal mehr wofür „targetCnt“ steht.

Zugegeben, meine Lösung ist extrem unperformant und relativ ungenau, aber nichts stärkt das Ego mehr als die Gewissheit, ein Problem selbst und ohne Hilfe bewältigt zu haben, wenn man es sich vorher nicht zugetraut hätte. Wie dem auch sei, heute habe ich meinen provisorischen Algorithmus abgelöst und durch die exakte Berechnung ersetzt.

Es gibt Neuigkeiten von Spacola Eclipse. Leider keine bahnbrechenden Neuigkeiten, aber immerhin. Aus irgendeinem mir bislang unerfindlichen Grund habe ich zur Zeit genug Motivation um wieder relativ intensiv an meinem kleinen Remake zu arbeiten. Die letzten Monate habe ich mir den Quellcode immer mal wieder angesehen und ein paar Verbesserungen eingefügt, aber ich habe mich konsequent davor gedrückt, neue Kernfeatures einzubauen, die dringend nötig wären. So darf ich nun (stolz) das Ergebnis der letzten drei Tage präsentieren:

In Spacola Eclipse darf jetzt scharf geschossen werden. Ich habe das Schießen endlich implementiert. Für drei Tage Arbeit ist das mickrig, sagt ihr? Ja ist es. Aber wenn ihr die Mathematikprüfungen im Studium gerade so bestanden habt (so wie ich), dann habt ihr vielleicht eine Vorstellung davon, wie mühsam es ist, sich trigonometrische Operationen, Vektorarithmetik und Koordinatensystemumwandlungen aus dem Kopf herzuleiten ohne danach zu googlen oder ein Mathebuch herzunehmen – vor allem dann wenn die letzte Mathematikvorlesung schon ein paar Jahre her ist. Alles was ich hier mache, lerne ich durch Trial and Error. Wenn ein Algorithmus nicht funktioniert, dann nehme ich ein Stück Papier zur Hand und überlege mir eine Lösung.

Leider gibt es noch nichts worauf geschossen werden kann. Die Gegnersprites sind zwar längst angelegt, aber die Gegner-KI ist praktisch noch „leer“. Zu diesem Zweck hab ich außerdem eine abstrakte Klasse für Gegner angelegt und die wichtigsten Methoden definiert. Leider ist es extrem schwer, das Gegnerverhalten rein aus der Beobachtung des Ergebnisses nachzubilden – also wenn man nicht weiß, was im Hintergrund alles passiert. Ich kann nur versuchen, etwas zu schreiben, das dem erwarteten Verhalten nahekommt.

Der erste Gegner wird der (von mir so bezeichnete) „Peashooter“ sein. Aus dem Handbuch des Originals ist der Name des Schiffs nicht ersichtlich, also hab ich ihn genau so genannt wie er aussieht – wie diese eine Pflanze aus „Plants vs. Zombies“. Er ist einer der wenigen Gegner, die auf den Spieler feuern können, und so ziemlich der erste, dem man im Spiel begegnet.