Sudoku Solver
Im Urlaub habe ich (wiedermal) Sudoku für mich entdeckt. Da ich beim Lösen recht systematisch vorgegangen bin, habe ich mich gefragt, ob man diese langweilige Aufgabe nicht einem Computer überlassen könnte. Heute habe ich meine Ideen mal in Code gefasst und die Regeln, die mir im Urlaub geholfen haben implementiert.
Leider musste ich feststellen, dass mein Solver von Zeit zu Zeit in eine Sackgasse rennt und nicht weiterkommt. Prinzipiell könnte man solche festgefahrenen Situationen zwar mit ausprobieren und Backtracking lösen, jedoch wollte ich lieber versuchen die Lösung allein durch anwenden verschiedener Regeln zu produzieren. An dieser Stelle hänge ich im Moment - vielleicht gibt es ja draußen jemanden, der noch eine elementare Regel findet und mir (und dem Solver) auf die Sprünge helfen kann.
Download Source (Eclipse Project)
Weitere Pläne für den Vampire Mutator
Nachdem ich nun die Health-Gain Kurve des in Vampire Mutator für Unreal Tournament (UT99) entwickelten Mutators gesehen habe, denke ich, dass diese etwas suboptimal sind und noch einiger Verbesserung bedürfen.
Geplant habe ich die beiden folgenden Versionen zu implementieren und zu testen:
Zum einen ist im linken/oberen Bild der “quadratische Vampir” zu sehen. Bei ihm sieht die Formel für den Health-Gain folgendermaßen aus:
gain = (1-Attacker.Health/MaxHealth)^2 * ActualDamage
Das rechte/untere Bild zeigt den “kubischen Vampir”. Dieser saugt die Lebenskraft mit
gain = (1-Attacker.Health/MaxHealth)^3 * ActualDamage
auf. Die Idee hinter diesen modifizierten Vampiren ist, dass ein Spieler, der wenig Health hat schneller fremdes Health aufnehmen kann, als ein Spieler, der schon nahe dem Sättigungspunkt ist.
Sobald diese Versionen programmiert und getestet wurden werde ich sie auch an dieser Stelle veröffentlichen. Dazu muss ich jedoch erst noch rausfinden, wie man möglichst einfach die Exponentiation in Unreal-Script lösen kann.
Nachtrag:
Ich habe herausgefunden, wie man quadriert beziehungsweise hoch3 nimmt, was einfacher ist als erwartet und vor allem genauso, wie in gnuplot, welches ich für die Grafiken benutzt habe. Die Klasse Vampire wurde durch den Klasse LinearVampire ersetzt. Zusätzlich kamen 2 neue Klassen hinzu: QuadraticVampire und QubicVampire, die jeweils von LinearVampire erben und dessen gainFactor(int AttackerHealth) Funktion überschreiben.
Download Vampire Mutator (NextGen)
Vampire Mutator für Unreal Tournament (UT99)
Ich habe endlich Zeit gefunden, wie man für UT99 Mutatoren progarmmiert und bin dabei über eine kleine Einführung gestoßen. In dieser Anleitung wird ein Vampire Mutator beschrieben, den ich ein wenig modifiziert habe.
Beim Modifizierten Mutator werden nicht - wie beim Original - die Hitpoints 1:1 vom Opfer zum Angreifer transferiert, stattdessen bekommt der Angreifer nur einen Teil der Hitpoints. Dieser Teil ist variabel und wird weniger, je mehr Hitpoints der Angreifer hat.
Formel: gain = ((MaxHealth - Attacker.Health) / MaxHealth) * ActualDamage;
MaxHealth ist hierbei eine Variable, die bestimmt bis zu welchem Punkt die Hitpoints eines Angreifers “aufgeladen” werden können. Diese Grenze ist jedoch nicht fest, es ist durchaus möglich, dass ein Angreifer mehr als MaxHealth Hitpoints bekommt. Wenn jedoch Attacker.Health > MaxHealth ist, dann werden dem Angreifer für jeden Punkt Schaden, den er einem Opfer zufügt auch ein gewisser Teil Schaden zugefügt.
Vielleicht fragen sich einige, warum ich die Formel nicht auf die folgende Vereinfacht habe:
gain = (1-Attacker.Health/MaxHealth)*ActualDamage
Der Grund ist folgender: Wenn ich den Gain so geschrieben habe hat Unreal Tournament nicht das gemacht, was ich wollte. Meine Vermutung geht dahin, dass es mit der Art und Weise zusammenhängt, wie ausgewertet wird und das Attacker.Health nur Integer-Werte annehmen kann.
Der Mod wurde innerhalb 3 Stunden programmiert und getestet, wenn er noch nicht ganz balanciert ist bitte ich dies zu entschuldigen!
Zum Schluss noch eine Grafik, die bei einem MaxHealth von 999 (im Motator eingestellt) den Gain abhängig von Health des Angreifers (attackers health) und verursachtem Schaden beim Opfer (dealt damage).