Wie man "Minesweeper" löst (und es besser macht)


Minesweeper ist ein einfaches Spiel mit einfachen Regeln, jedoch verursachen einige seiner Konfigurationen interessante Schwierigkeiten. In diesem Artikel werden wir einen Minesweeper-Löser mit zunehmender KomplexitĂ€t erstellen und darĂŒber nachdenken, wie sich die Dynamik des Spiels mit einer allmĂ€hlichen Erhöhung des Hilfsniveaus Ă€ndert. Am Ende werden wir eine neue Version des Spiels mit viel interessanterem Gameplay entwickeln.

Lokale Argumentation: Null benachbarte Minen


Im ursprĂŒnglichen Spiel wird ein automatischer Mechanismus verwendet: Wenn ein Spieler eine Zelle öffnet, neben der sich keine Minen befinden, öffnet die Spiel-Engine alle benachbarten Zellen. Dies gefĂ€hrdet das Spiel nicht, sodass Sie den Computer sicher ausfĂŒhren lassen können. Die Situation selbst ist dem Spieler sofort klar und beeintrĂ€chtigt das Gameplay nicht.

Diese Argumentation ist vollstĂ€ndig lokal: Nur eine Zelleninformation wird berĂŒcksichtigt, um ĂŒber die nĂ€chste Aktion zu entscheiden.

Es ist schwierig, eine Situation zu finden, in der sich das Spiel ohne diese automatische Hilfe verschlechtern wĂŒrde. Versuchen Sie, ein solches Spiel zu spielen, um eine Vorstellung davon zu bekommen, wie es funktioniert, ohne Zellen automatisch zu öffnen [im Originalartikel sind alle Beispiele interaktiv] ::


Lokale Überlegungen basierend auf der Umgebung


FĂŒr einen neuen Spieler ist es leicht zu verstehen, dass alle diese Zellen Minen sein mĂŒssen, wenn die Anzahl der benachbarten Minen, dh die in der Zelle angezeigte Anzahl, der Anzahl der unentdeckten benachbarten Zellen entspricht. Sie mĂŒssen also Flaggen darauf setzen. In Ă€hnlicher Weise mĂŒssen die verbleibenden unentdeckten Nachbarzellen leer sein, wenn die Anzahl benachbarter Minen gleich der Anzahl benachbarter Flaggen ist.

In diesen Regeln werden eine Zelle sowie der Zustand benachbarter Zellen (offen / geprĂŒft) berĂŒcksichtigt.

Das manuelle Implementieren dieser Regeln kann Spaß machen. Wenn Sie einen Timer hinzufĂŒgen, lernt der Spieler, wie man ihn schnell und genau anwendet. Dies macht den Minesweeper zu einem Reaktionsspiel . Was passiert, wenn wir diese Regeln automatisieren?


Eine solche Automatisierung hat einen interessanten Nebeneffekt - das Aktivieren des KontrollkÀstchens kann sofort fatale Folgen haben.

Andernfalls können Situationen auftreten, die in drei Kategorien unterteilt werden können:

  1. Spiele, die durch Anwendung automatischer Regeln vollstÀndig gelöst wurden
  2. Komplizierte Situationen, die mehr Zellen zum Denken erfordern
  3. ZustĂ€nde des Spiels, in denen es keinen logischen Weg vorwĂ€rts gibt - der Spieler kann nur zufĂ€llig wĂ€hlen, möglicherweise unter BerĂŒcksichtigung der Wahrscheinlichkeiten.

Situation 1 scheint schön, aber nicht besonders interessant, wenn sie zu oft auftritt. WĂ€ren solche Spiele ohne eine automatische Lösung besser? Vielleicht nicht; Solche Spiele sind sehr einfach, selbst wenn sie manuell gelöst werden, und der Spieler ist nicht besonders daran interessiert, Spiele zu spielen, bei denen es keine Schwierigkeiten gibt. Obwohl es im Reaktionsspiel natĂŒrlich immer Schwierigkeiten gibt: Sie mĂŒssen so schnell wie möglich handeln.

Situation 2 scheint mir sehr attraktiv zu sein. Wir konzentrieren uns mehr auf das Lösen logischer Bedingungen, verbringen weniger Zeit mit prĂ€zisem Zielen und DrĂŒcken der richtigen Tasten. Dies macht Sapper eher zu einem aktiven Puzzle .

Situation 3 zerstört den ganzen Spaß. Ich habe jedoch gehört, dass einige Leute gerne zufĂ€llige Spiele spielen.

Ist es möglich, Situation 3 loszuwerden?

Komplettlösung: Globales Denken


FĂŒr die algorithmische Erkennung aller logischen Bedingungen, die fĂŒr den Status des Spiels erforderlich sind, mĂŒssen wir eine umfassende Suche nach allen Status des Spiels durchfĂŒhren. Minesweeper ist nachweislich eine NP-vollstĂ€ndige Aufgabe . Im Folgenden finden Sie ein kleines, aber interessantes und anschauliches Beispiel fĂŒr den Status des Spiels mit nur einer logischen Lösung. Um diese zu finden, mĂŒssen Sie jedoch den Status des Spiels als Ganzes berĂŒcksichtigen:


Ist es möglich, den gesamten Zustandsraum des Spiels zu durchsuchen? Wie viele Variationen des Zustands gibt es?

Gegeben:

w = Feldbreite

h = Feldhöhe

k = Anzahl der Minuten

n = w

Dann ist die Anzahl der möglichen ZustÀnde s

s= beginpmatrixnk endpmatrix


FĂŒr die Standardstufen "AnfĂ€nger", "Amateur" und "Profi" ergibt sich Folgendes:

sb= beginpmatrix8∗810 endpmatrix=151473214816


si= beginpmatrix16∗1640 endpmatrix=1.050∗1047


se= beginpmatrix30∗1699 endpmatrix=5.602∗10104


Wir verstehen, dass ein naiver Ansatz hier völlig unangemessen ist. Lassen Sie uns sehen, wie ein naiver Algorithmus aussehen könnte, und herausfinden, ob er fĂŒr etwas optimiert werden kann, das funktioniert.

Naiver Algorithmus


Die Aufgabe des Algorithmus besteht darin, alle logischen Bedingungen zu finden, die fĂŒr den gegebenen Zustand des Feldes erforderlich sind. Es wĂ€re schwierig, dies durch sorgfĂ€ltige AbwĂ€gung der Lösungen umzusetzen. Der Computer macht es viel besser, schnell eine Reihe dummer Aktionen auszufĂŒhren.

Was können wir "dumm" machen: Generieren Sie alle möglichen Permutationen von Minenpositionen fĂŒr alle verbleibenden Minen. Wenn eine solche Permutation allen offenen Zahlen entspricht, ist dies die richtige Lösung fĂŒr das Spiel. Dann untersuchen wir alle möglichen Permutationen, finden alle möglichen Lösungen, wissen aber immer noch nicht, welche richtig ist.

Wenn in allen möglichen Lösungen etwas gemeinsam ist, entweder zwischen offenen Zellen oder zwischen als Minen gekennzeichneten Zellen, dann verstehen wir, dass diese Gemeinsamkeit Teil der richtigen Entscheidung fĂŒr das aktuelle Feld sein sollte. Und tatsĂ€chlich: Es ist unmöglich, die richtige Lösung zu finden, die solche passenden Elemente nicht enthĂ€lt, sonst hĂ€tten wir sie entdeckt.

Somit können wir alle logischen Bedingungen finden, die fĂŒr den aktuellen Zustand des Feldes notwendig sind.

Zellen mit und ohne EinschrÀnkungen


Der obige Algorithmus hat ein offensichtliches Problem: die Anzahl der ZustĂ€nde, die untersucht werden mĂŒssen. Aber nicht alle Zellen sind gleich. Ungeöffnete Zellen neben einer Nummer sind offensichtlich auf diese Nummer beschrĂ€nkt. Wir werden diese Zellen als begrenzt bezeichnen. Die restlichen Zellen werden wir unbegrenzt nennen.

Wenn wir den obigen Algorithmus implementieren, aber nur im Bereich der ZustĂ€nde eingeschrĂ€nkter Zellen suchen und zurĂŒckgehen, sobald wir die EinschrĂ€nkung aufheben, können wir in vielen Spielen alle logischen Bedingungen in angemessener Zeit lösen:


Bei unbegrenzten Zellen können wir nicht herausfinden, wo sich die Minen befinden, und logischerweise wissen wir sofort davon. Dies bedeutet, dass Sie sie von der Berechnung ausschließen und nur den Standort von Minen neben offenen Zahlen berĂŒcksichtigen können.

Wir wissen jedoch, dass eine bestimmte Anzahl von Minen in viele unbegrenzte Zellen eindringen kann. Wenn es 6 Minuten und 4 eingeschrĂ€nkte Zellen gibt, können in begrenzten Zellen maximal 4 Minen vorhanden sein, dh mindestens 2 Minuten mĂŒssen in unbegrenzten Zellen sein. Nach der gleichen Logik können wir manchmal feststellen, dass alle unbegrenzten Zellen leer sein mĂŒssen oder alle Minen enthalten.

In dem unten gezeigten Fall kennen wir die Positionen aller Minen, sodass die KI verstehen sollte, dass die verbleibenden Zellen nicht besetzt sind:


Im folgenden Fall kennen wir nicht die Positionen aller Minen, aber wir können verstehen, dass die verbleibende Mine in einer der beiden Zellen oben links platziert werden muss. Dies bedeutet, dass die in der unteren rechten Ecke verbleibende Zelle frei ist:


ZufÀllige Version


Wenn wir den globalen Löser automatisch ausfĂŒhren, erhalten wir eine zufĂ€llig optimierte Version von Minesweeper:


Sie können die Spiele in dieser Version in drei Kategorien einteilen:

  1. Spiele, bei denen der Spieler willkĂŒrliche Entscheidungen trifft und gewinnt.
  2. Spiele, bei denen der Spieler willkĂŒrliche Entscheidungen trifft und verliert.
  3. Spiele, bei denen KI viel Zeit benötigt und der Spieler tatsÀchlich argumentieren kann.

Offensichtlich ist dies ein GlĂŒcksspiel. Was ist der Reiz solcher Spiele? In logischer Hinsicht Ă€hnelt das oben gezeigte Spiel dem folgenden:


Aber welches Zufallsspiel ist besser? Es scheint, dass die Bedeutung anderer Spiele mit ZufÀlligkeit in der Existenz einer komplexen Beziehung zwischen den Aktionen des Spielers und dem Gewinnen / Verlieren liegt. Um Lotterienummern zu ziehen, werden komplexe Maschinen verwendet, die es nicht eilig haben, eine Nummer auszuwÀhlen und aus der Anzeige dieser Nummer eine ganze Show zu machen.

Vielleicht ist ein großes Feld, das automatisch entschieden wird, ein ziemlich gutes Spiel
mit ZufĂ€lligkeit, vorausgesetzt, der Spieler beobachtet das allmĂ€hliche Öffnen aller Zellen.

Können wir uns eine andere Art von Spiel einfallen lassen?

Deterministische Version


Jetzt haben wir eine KI, die in der Lage ist, alle logischen Schritte aus einem bestimmten Spielzustand zu bestimmen. Manchmal kann er keine logischen Schritte finden. In solchen Situationen muss der Spieler raten und er kann verlieren, wenn er kein GlĂŒck hat.

Was ist, wenn wir eine andere Regel hinzufĂŒgen? Wenn das Spiel keinen logischen Weg vorwĂ€rts hat, können wir um Hilfe bitten. Wenn die KI zustimmt, dass der Spieler nichts tun kann, kommt er ihm zu Hilfe. Andernfalls verliert der Spieler sofort. Das kann interessant sein. Was fĂŒr eine Hilfe kann das sein? Möglicherweise mĂŒssen Sie eine Zelle öffnen, unabhĂ€ngig davon, ob Minen vorhanden sind:


So haben wir Situationen, in denen man zufÀllig verlieren könnte, vollstÀndig beseitigt.

Es gibt jedoch eine Ausnahme: Es besteht immer noch die Möglichkeit entarteter Situationen, in denen der globale Löser die Berechnungen nicht in angemessener Zeit abschließen kann. Leider ist dies das unvermeidliche Ergebnis, dass die Minesweeper-Aufgabe NP-abgeschlossen ist.

Wie wirkt sich die SchaltflĂ€che "Um Hilfe bitten" auf das Gameplay aus? Es fĂŒhrt dazu, dass sich das Spiel mehr auf Logik konzentriert; Dies ist die "rĂ€tselhafteste" Version von "Minesweeper". Jemand könnte denken, dass das Spiel einfacher wird, aber tatsĂ€chlich wird es komplizierter. Jetzt gibt es keine Entschuldigung fĂŒr die Fehler des Spielers und der Knopf wird ihn bestrafen, wenn er etwas verpasst hat. Ohne einen Knopf ist es leicht zu schließen, dass Sie alle logischen Möglichkeiten ausgeschöpft haben und die einzige Möglichkeit fĂŒr die Entwicklung von Ereignissen besteht darin, zu versuchen, zufĂ€llig zu raten. Aufgrund des Vorhandenseins des Buttons muss der Spieler in dieser EinschĂ€tzung Recht haben.

Abschließend


Nachdem wir den vollstĂ€ndigen Solver „Minesweeper“ -Löser implementiert haben, konnten wir eine Variation des Spiels erstellen, die frei von seinem Fluch ist: Jetzt ist es unmöglich zu verlieren, da Sie zufĂ€llig wĂ€hlen mĂŒssen, wenn Sie fast das gesamte Feld entschieden haben. Diese Version unterscheidet sich vom Originalspiel nur in den Momenten, in denen Sie zufĂ€llig raten mĂŒssen, sodass ich davon ausgehen kann, dass es viel mehr Spaß macht als das Originalspiel.

ZusĂ€tzlich haben wir eine Version des Spiels entwickelt, die einfache lokale Regeln automatisch löst. Ob Sie diese Hilfe nutzen, liegt bei Ihnen. Es verschiebt den Fokus des Spiels vom mechanischen Klicken zu einem rĂ€tselhafteren Gameplay. Gleichzeitig ist es nicht erforderlich, die Gameplay-Verbesserung zu verwenden, die ĂŒber die SchaltflĂ€che "Um Hilfe bitten" bereitgestellt wird.

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


All Articles