Dagaz: Das Ende der Einsamkeit

Glück für alle, für nichts
und lass niemanden beleidigt gehen!

A. und B. Strugatsky "Picknick am Rande"


Bots, egal wie gut sie spielen, sind ein schlechter Ersatz für Live-Spieler. Wenn der Bot schlecht spielt, ist das nicht interessant. Wenn es stark ist, ist es beleidigend und wieder nicht interessant. Es ist verdammt schwierig, das Gleichgewicht zu halten (umso mehr, als es für jeden Spieler individuell ist). Lange Zeit wollte ich ein Netzwerkspiel implementieren, aber alles beruhte auf der Notwendigkeit, meinen eigenen Server zu warten. Glücklicherweise kam die Entscheidung aus einem unerwarteten Blickwinkel.

Ed van Zon ist eine Person, mit der ich seit einiger Zeit in Kontakt bin. So kam es, dass er das fallende Banner von Zillions auffing , als die Entwickler (Jeff Mallett und Mark Lefler) plötzlich das Interesse an der Entwicklung des Projekts verloren. Alle diese Spiele werden von seinen Streitkräften auf der Website veröffentlicht. Außerdem engagieren er und Christian Freeling sich für die Unterstützung und Entwicklung seiner eigenen Website (natürlich auch für Brettspiele):


Aber das alles war ein Sprichwort. Die Geschichte beginnt mit der Tatsache, dass es auf dieser Seite ein Loch gibt (oder besser gesagt ein Loch , aber das ist nicht der Punkt), in dem Live-Spieler per Korrespondenz spielen können. Sie konnten es vielmehr, bis die Technologie von Java-Applets als veraltet angesehen wurde. In letzter Zeit hat Ed über modernere Lösungen nachgedacht, da ihre Verwendung durch bloße Sterbliche schwierig geworden ist. Und dann bin ich zusammen mit meinem Projekt aufgetaucht .


Nach einer sehr kurzen Trainingstour für meinen Teil bekam Ed für ein paar Monate drei Dutzend neue Spiele auf der Dagaz-Engine und veröffentlichte sie auf der Website. Ich möchte Sie daran erinnern, dass die MIT-Lizenz (wie ich) solche Aktionen in jeder Hinsicht unterstützt.

Es gab jedoch ein Problem.
Es wurde verstanden, dass die Spieler alle diese Spiele untereinander spielen konnten, und zwar nicht nur mit Bots, sondern Dagaz bot in seiner anfänglichen Implementierung keine solche Gelegenheit. Ich musste mir schnell etwas einfallen lassen. Glücklicherweise hatte ich bereits einen Sitzungsmanager , der es mir ermöglichte, versehentlich gemachte Züge zurückzusetzen. Als Bonus speicherte er die Geschichte des Spiels im RAM und es wurde beschlossen, dies zu verwenden.

Sparen
SessionManager.prototype.save = function() { if (_.isUndefined(this.current) || _.isUndefined(this.current.board)) return null; var states = []; var board = this.current.board; while (board.parent !== null) { states.push(board); board = board.parent; } var r = "("; while (states.length > 0) { var board = states.pop(); r = r + ";" + Dagaz.Model.playerToString(board.parent.player); r = r + "[" + Dagaz.Model.moveToString(board.move) + "]"; } r = r + ")"; return r; } 

und Laden
 SessionManager.prototype.load = function(sgf) { var res = Dagaz.Model.parseSgf(sgf); this.states = []; delete this.current; var board = Dagaz.Model.getInitBoard(); this.addState(Dagaz.Model.createMove(), board); for (var i = 0; i < res.length; i++) { var p = res[i].name; if (p != Dagaz.Model.playerToString(board.player)) return false; if (res[i].arg.length != 1) return false; var move = this.locateMove(board, res[i].arg[0]); if (move === null) return false; board = board.apply(move); this.addState(move, board); } this.controller.setBoard(board); return true; } 

Sie haben es nur ein paar Dutzend Zeilen gemacht (ich glaube nicht, dass der Parser im SGF-Format selbst, jeder kann es hier sehen ). Übrigens unterstützen sowohl SGF als auch der Sitzungsmanager selbst die Arbeit mit dem Baum und nicht nur mit der Geschichte des Spiels, sondern für unsere derzeitigen Zwecke war dies nicht erforderlich.

Als erstes Spiel von Dagaz mit der Möglichkeit, im Internet zu spielen, wollte ich etwas Originelles wählen (zumal Ed bereits Checkers , Chess and Go hatte ). Die Wahl fiel auf den Umsatz . Dieses Spiel, das in vielerlei Hinsicht dem Schach ähnelt, wurde kürzlich von Lúcio José Patrocínio Filho erfunden.


Die Figuren hier sind vorgefertigt. Der größte Ring bewegt sich wie ein Schachbauern , der mittlere wie ein Elefant und der Kern ist ein Turm . Die Kombination aus einem Turm und einem Elefanten ergibt die Königin (was ziemlich logisch ist), und die beiden Ringe geben dem Schachritter . Alle drei Teile bilden zusammen eine Burg - die Hauptfigur, die geschützt werden muss. Es ist hier erwähnenswert, dass sich immer nur einer, der äußerste Teil, bewegt. Somit kann sich der äußere Ring der Burg jederzeit mit dem Bauern bewegen (einschließlich eines Sprunges durch das Feld), aber die Burg wird zerstört.

Es gibt ein weiteres Problem, das noch nicht behoben wurde.
Nachdem der Spieler die letzte Burg verloren hat, verliert er. Tatsächlich kann der Spieler nicht alle Schlösser verlieren, da das Spiel die Regeln für Scheck und Schachmatt hat . Burgen dürfen nicht angegriffen werden, sondern nur unter der Bedingung, dass sie alle angegriffen werden. Hinzu kommt die Intrige im Spiel durch die Tatsache, dass neue Figuren (und auch Burgen) aus Komponenten auf dem Weg (einschließlich des Materials des Gegners) erstellt werden können. All dies macht das Überprüfen auf Scheck und Schachmatt zu einer sehr schwierigen Aufgabe und hier ist ein Beispiel, mit dem sie immer noch nicht fertig werden kann:


In der Tat gibt es keine Matte, aber es ist ziemlich schwierig. Feld D1 wird auf E2 von einem Elefanten angegriffen und dies ist die letzte Burg. Die Goldenen können eine zweite Burg bauen, indem sie den Turm von C3 auf C4 setzen, aber dieses Feld wird auch angegriffen! Der Trick ist, dass beide Felder von derselben Figur angegriffen werden und sie nicht beide Schlösser auf einmal essen kann! Lúcio hat diesen Fehler kürzlich entdeckt und daran werde ich in naher Zukunft arbeiten.

Es gibt keine Rochade und keine Übernahme des Ganges im Spiel, und in der Tat ist der Umsatz dem Schach nicht sehr ähnlich. Es gibt viele Könige im Spiel, aber sie können sich nicht bewegen (auf jeden Fall ohne Zerstörung), und die Pferde und Königinnen sind „wegwerfbar“, da der äußere Ring beim Bewegen die Figur zerstört. Meiner Meinung nach sieht das Spiel ziemlich interessant aus, obwohl es völlig unerforscht ist. Sie können hier spielen:


Um im Netzwerk zu spielen, müssen Sie sich natürlich registrieren (das Spiel erfolgt auf dem Schriftweg) und jemandem eine „Herausforderung“ senden. Wenn Sie mit dem Bot spielen möchten (oder nur Teile auf dem Brett bewegen möchten), ist keine Registrierung erforderlich. In diesem Modus unterscheidet sich das Spiel jedoch nicht wesentlich von dem auf GitHub veröffentlichten . Außerdem ist keine Registrierung erforderlich, um aktuelle oder zuvor gespielte Spiele zu überwachen.

Als Bonus
Dagaz unterstützt einen anderen Spielmodus:


Wer also möchte, kann versuchen, blind zu spielen (diesmal nur gegen den Bot).

Umsatzgewinne / -verluste werden noch nicht gehalten, aber alles liegt in Ihren Händen. Wenn das Spiel beliebt ist, versprach Ed, eine Bewertung daran zu binden. Und schließlich eine kleine Umfrage zum Thema Weiterentwicklung des Projekts:

Source: https://habr.com/ru/post/de470065/


All Articles