Dagaz: Einzelheiten

    BildDie Zahlen können nicht in pi gezählt werden,
    e ist unendlich gleich.
    Und wenn Sie sie am Ende schreiben, was wird mehr sein?

    Martin Gardner „Tic-Tac-Toe“


    Für diesen Artikel wollte ich eine andere Inschrift wählen, fand sie aber zu erbärmlich. Die nächste Veröffentlichung wurde erneut verschoben. In dieser Zeit habe ich den Job gewechselt! An einem neuen Ort zu arbeiten kostet viel Energie, aber ich finde immer noch Zeit für mein kleines Hobby. Und ich muss sagen, was ich dabei zu bewältigen habe, wird immer schwieriger. Ich werde es dir erzählen. Ich wollte mit einem anderen Epigraph beginnen, aber dieser ist auch nicht schlecht.

    Dieses Mal gab es neue Menschen und " Übergangsspiele " (das ist Halmaund ihre Verwandten). Eine Art Rennen, bei dem Sie das Haus Ihres Gegners mit Ihren Stücken vor sich nehmen müssen. Stücke (sowohl unsere als auch andere) können übersprungen werden (wie bei Dame ), aber es gibt keine Captures. Was erkläre ich dir? Sicherlich haben viele von Ihnen in Ihrer Kindheit Corners gespielt .


    Auf den ersten Blick sieht das Spiel einfach aus, aber die Probleme begannen bereits auf Kernel-Ebene. Erinnern Sie sich, ich sprach über zusammengesetzte Bewegungen? Aus vielen Gründen ist es bequemer, sie als zusammengesetzte darzustellen - als einzelnes Ganzes und nicht als Folge von Teilbewegungen. Dies ist für die KI praktischer, und aus gestalterischer Sicht gibt es Spiele, deren Beschreibung in Form von zusammengesetzten Zügen viel natürlicher aussieht. Es gibt jedoch ein Problem.

    Bei Checkern werden bei einem zusammengesetzten Zug die Figuren vom Brett entfernt (möglicherweise am Ende des Zuges). In den Ecken kannst du über deine eigenen oder die des Gegners ins Unendliche springen. Wörtlich. Und keine Erweiterungen hier sparen, weil alles in Zyklen abläuft, ohne sie zu erreichen, im Kernel, sogar in der Phase, in der die Liste der Züge erstellt wird. Ich musste diese Logik ändern und die Option implementieren (Detect-Loops ), über die man sich vorher Gedanken machen sollte.

    Auch mit dem Bot war es nicht einfach
    Das Hauptproblem bei dieser Spielefamilie ist, dass es nicht so einfach ist, eine Bewertungsfunktion auszuwählen, die die Situation auf dem Brett angemessen darstellt. Da das Ziel des Spiels darin besteht, die „Heimat“ des Gegners zu erreichen, ist es möglich, die Gesamtentfernung aller Spielsteine ​​zu den Zielfeldern ( Manhattan oder Euklidisch - kein Unterschied) zu schätzen. In Halm können die Spielsteine ​​unter erfolgreichen Umständen das gesamte Spielbrett auf einmal überspringen gibt wenig.

    Auch bei den Zielfeldern ist nicht alles klar. Sie können nicht alle Figuren in dasselbe Feld lenken. Die erste Figur, die genau dort ankommt und es nimmt. Es wäre ideal, die optimalen Zielfelder für jede der Figuren zu bestimmen und zu ihnen zu gelangen, aber dies ist hinsichtlich der Berechnung schwierig. Außerdem ändert sich die Situation auf dem Brett mit jedem Zug. Im Allgemeinen habe ich beschlossen, nicht weit nach vorne zu schauen und mich auf einen rein heuristischen Algorithmus zu beschränken .

    Bei einer solchen Beurteilung der Schlaganfallqualität
    Dagaz.AI.heuristic = function(ai, design, board, move) {
      var t = getTargets(design, board, board.player);
      var m = getMove(move);
      var r = 1;
      if (m !== null) {
          if (!design.inZone(0, board.player, m.start)) {
              if (_.indexOf(t.first, m.end) >= 0) {
                  r = 1000 + getDistance(t.first, m.start) - getDistance(t.first, m.end);
              }
              if (_.indexOf(t.goal, m.end) >= 0) {
                  r = 700 + getDistance(t.first, m.start) - getDistance(t.first, m.end);
              }
              if ((r == 1) && (_.indexOf(t.second, m.end) >= 0)) {
                  r = 500 - getDistance(t.second, m.end);
              }
          }
          if (r == 1) {
              if (design.inZone(2, board.player, m.end) && !design.inZone(2, board.player, m.start)) {
                  r = 300;
              }
          }
          if (bestFound(design, board, 300)) return -1;
          if (r == 1) {
              var goals = getGoals(design, board, board.player);
              if (!_.isUndefined(goals[m.start])) {
                  var goal = goals[m.start];
                  if (m.next == goal.next) {
                      r = 100 + distance(goal.end, m.start) - distance(goal.end, m.end);
                  }
              }
          }
          if (notBest(design, board, r)) return -1;
          var b = board.apply(move);
          if (isRestricted(design, b, board.player)) return -1;
      }
      return r;
    }
    

    Keine ideale Lösung, aber zunächst funktioniert es ganz gut. Wenn der Bot eine Bewegung sieht, mit der es möglich ist, in das "Haus" des Feindes "zu springen", wählt er diese aus. Andernfalls wird der Abstand zum Ziel allmählich verringert, um eine Überlastung zu vermeiden. Die traurigste Situation kann eintreten, wenn ein Spieler (aus Versehen oder absichtlich) seine Figur im "Haus" verlässt und der andere - mit einer doppelten Reihe seiner Figuren "verschließt".

    Natürlich ist die Wahrscheinlichkeit einer solchen Situation sehr gering.
    Dank der von Sidney Saxon, dem Erfinder und Sammler von Spielen aus New York, vorgeschlagenen Regel. Sein Vorschlag lautet wie folgt: Wenn eine Figur die Fähigkeit hat, ihre "Heimat" zu verlassen, indem sie durch eine gegnerische Figur oder durch eine Kette von Sprüngen springt, die von einer solchen Bewegung ausgehen, muss sie dies tun. Ich habe verschiedene Versionen der Regeln ausprobiert, ohne die Möglichkeit, Figuren in ihrem eigenen "Haus" einzuschließen, und fand die sächsische Sidney-Regel die erfolgreichste. Nach dem Verlassen seines „Zuhauses“ kann das Stück nicht mehr dorthin zurückkehren (obwohl es das Recht hat, es bei Abschluss des Umzugs zu passieren).

    Nur für den Fall, dass ich verbiete, dass der Gegner "sperrt" (wenn Sie nicht viele Züge vorausschauen müssen, können Sie sich recht komplizierte Heuristiken erlauben), indem Sie negative Bewertungen für sie festlegen, aber die Situation, leere Zielfelder zu "sperren", ist für den Bot nicht weniger gefährlich (insbesondere dies) auffällig im klassischen Halma (mit seinen rein orthogonalen Bewegungen). Im Allgemeinen hat dieser Bot Raum zum Wachsen.

    In Spielen, in denen Steine ​​genommen werden dürfen, ist es noch komplizierter. Und solche Spiele gibt es viele! Der vielleicht berühmteste davon ist der Camelot , der 1930 von George Parker erfunden wurde. Aber ich persönlich mag ein viel weniger bekanntes Spiel, das auf der gleichen Mechanik aufgebaut ist.


    Dieses Spiel ist die Geschichte selbst! Bereits 1908 kamen die Suffragisten auf die Idee, um ihre politischen Ansichten voranzubringen. Alles ist hier: das Unterhaus, die Albert Hall , das Stadtgefängnis und das Krankenhaus. Frauen- Suffragisten kämpfen gegen Polizisten. Ihr Ziel ist es, 6 ihrer Leute ins Unterhaus zu bringen. Sie können ihr Hauptquartier, Albert Hall, nicht betreten. Formen bewegen sich in jede Richtung. Das Springen durch freundliche und feindliche Figuren ist ebenfalls erlaubt.

    Eine Reihe von Sprüngen kann jedoch beliebig lang sein. Wenn der Fall in der "Arena" stattfindet, werden feindliche Figuren, wenn sie durch die Arena springen, abgeschnitten und in ein Gefängnis oder Krankenhaus gebracht. Gewöhnliche Figuren werden nur diagonal geschnitten, groß (Polizisten und Suffragistenführer) - in jede Richtung. Wenn 6 Figuren im Gefängnis und im Krankenhaus rekrutiert sind, können sie durch erneutes Betreten des Spiels "ausgetauscht" werden. So verlassen Stücke wie in Shogi oder Pillars nie das Spiel.

    Im Allgemeinen befasst sich diese gesamte Version nur mit solchen Optionen. Zum Beispiel habe ich die korrekte Umwandlung von Figuren im Schach endlich gemeistert (bis jetzt wurden alle Bauern nur zu Königinnen, was im Allgemeinen falsch ist). Ich habe mich nicht sehr darum gekümmert und den Auswahldialog direkt auf die Leinwand gezeichnet. Es stellte sich als ziemlich gut heraus (wenn ich meine Hände hätte loslassen können, um sie von der Matte zu unterscheiden, wäre es im Allgemeinen wunderbar gewesen).


    Eine weitere "nukleare" Verfeinerung war mit der Verbesserung der Benutzeroberfläche verbunden und hat einen eigenen Hintergrund. Seit einiger Zeit gibt es im Projekt einen Mechanismus , mit dem Sie die aktuelle Position durch Übergabe über die URL codieren können. In Anbetracht der Tatsache, dass Beschreibungen aller Spielzustände in diesem Format in das Protokoll geschrieben werden, hilft dies beim Debuggen erheblich. Das ist nur der Benutzer, der nichts über das Browser-Protokoll weiß, es ist von geringem Nutzen.

    Nein, nein, das ist nicht alles gut!
    Es gibt eine Reihe von Spielen, deren Gameplay aus vielen (möglicherweise heterogenen) Phasen besteht. Als Beispiel können Sie das beliebte Spiel von 2008 - Kamisado - anführen . Jede Phase dieses Spiels (bevor eine der Figuren an die letzte Horizontale übergeben wird) ist relativ kurz, aber nach Abschluss des Spiels wird das Spiel fortgesetzt. Die Spieler ordnen gemäß den vereinbarten Regeln ihre Figuren in der ersten Reihe neu an und versuchen erneut, die letzte Horizontale vor dem Gegner zu erreichen (die Figur, die in der vorherigen Stufe den Sieg gebracht hat, erhält neue Fähigkeiten).


    Es ist dieser Aspekt des Spiels, den die Option " progressive Stufen " automatisiert , die automatisch zur nächsten Stufe des Spiels übergeht, wenn einer der Spieler gewinnt. Und da die ursprüngliche Anordnung der Figuren von einer Stufe zur anderen unterschiedlich ist, wird sie vom Common-Setup- Modul berechnet und über die URL an die nächste Stufe des Spiels übergeben .


    Hand in Hand mit dieser Möglichkeit können Sie auch die ursprüngliche Anordnung der Zahlen variieren. Mit der Option " Selector " können Sie mehrere anfängliche Anordnungen (und sogar Platinenkonfigurationen) in einer einzigen JS-Datei codieren . Aktualisieren Sie Ihre Reversi- Homepage und Sie werden verstehen, was ich meine.

    Die neue Plug-in - Modul ist so konzipiert , um das Problem zu lösen. Strukturell handelt es sich um einen gewöhnlichen Baum, in dem alle in einer Spielsitzung vorgestellten Spielzustände gespeichert werden (und seit diesem Baum kann in Zukunft der gesamte Verlauf des Spiels in eine SGF- Datei hochgeladen werden). Der Benutzer hat die Möglichkeit, diese Zustände mithilfe der Schaltflächen am oberen Bildschirmrand zu "spiegeln".


    Das ist sehr praktisch, aber Sie können noch mehr von den beiden Pfeilen oben profitieren. Genau das macht die Option " Advisor-Modus ". Wenn der Benutzer länger als die angegebene Zeit nachdenkt, berechnet der Bot, mit dem er spielt, den Platz für ihn und legt den neuen Spielstatus im "Session-Manager" ab. Der vorgeschlagene Zug kann einfach durch Drücken der "Vorwärts" -Taste angenommen werden. Und wenn Ihnen der Umzug nicht gefällt, können Sie ihn jederzeit zurücksetzen.

    Viel Freude im Entwicklungsprozess brachte Ton (es scheint, das ist viel einfacher). Erste Implementierungerwies sich als zu naiv. Ich weiß nicht, womit das zusammenhängt, aber irgendwann in der Mitte des Spiels hörte der Sound einfach auf zu spielen, ohne dass Nachrichten im Protokoll waren. Dies manifestierte sich in allen Browsern, die ich hatte, bis ich anfing, die erstellten Sound-Objekte im Speicher zwischenzuspeichern. Aber dann kam ein weiteres Problem.

    Wenn der Sound lange gespielt wurde und der Bot schnell genug nachdachte (wie zum Beispiel bei Lockvögeln ), dann wurde der Sound seiner Bewegung einfach „verschluckt“, was äußerst unangenehm aussah. Hier musste ich lange schamanieren und es endete mit Krücken. Wenn das Flag "klonbar" gesetzt ist, erstelle ich immer noch mehrere Instanzen von Sound, eine für jeden Player (auch wenn sie den gleichen Sound verlieren). Natürlich half dies in keiner Weise bei IE, das sich (offensichtlich aus religiösen Gründen) weigerte, sowohl mit "wav" - als auch mit "ogg" -Dateien umzugehen. Dieser Browser arbeitet für mich lautlos!

    Ansonsten verlief die Freilassung ohne Zwischenfälle. Company „ Halme “ und mankalam machten ein paar Spiele Schach , als auch eine großen viele Variationen von Shogi , subtrahieren mich auf die nächste Ausgabe von „ Il fogliaccio degli astratti “ und einem anderen einfachen kleinen Spiel der chinesischen Genossen. Oh ja, hier ist noch etwas:


    Nur ein kleiner Kurzzeitgedächtnissimulator. Es ist notwendig, die gleichen Paare (Dame mit Dame, König mit König usw.) der gleichen Farbe zu öffnen. Hierfür und für alles, was mit 200 Klicks zu tun hat, werden Punkte vergeben. Da Boni für Punkte vergeben werden (z. B. für abwechselnd rote und schwarze Anzüge), können Sie sich mit Freunden messen, um herauszufinden, wer das beste Gedächtnis hat. Mach es!

    Und ein frohes neues Jahr!

    Jetzt auch beliebt: