Ich versuche, einen AI-Algorithmus für Bomberman zu implementieren. Derzeit habe ich eine funktionierende, aber nicht sehr clevere rudimentäre Implementierung (die derzeitige KI ist beim Platzieren von Bomben übereifrig).
Dies ist die erste KI, die ich jemals versucht habe, umzusetzen, und ich stecke ein bisschen fest. Die ausgefeilteren Algorithmen, die ich im Auge habe (die ich für bessere Entscheidungen erwarte), sind zu kompliziert, um gute Lösungen zu sein.
Welche allgemeinen Tipps haben Sie für die Implementierung einer Bomberman-KI? Gibt es radikal unterschiedliche Ansätze, um den Bot entweder defensiver oder offensiver zu machen?
Bearbeiten: Aktueller Algorithmus
Mein aktueller Algorithmus sieht ungefähr so aus (Pseudocode):
1) Versuche eine Bombe zu platzieren und finde dann eine Zelle, die vor allen Bomben sicher ist, einschließlich der, die du gerade platziert hast. Um diese Zelle zu finden, durchlaufen Sie die vier Richtungen. Wenn Sie eine sichere divergierende Zelle finden und rechtzeitig erreichen können (z. B. wenn die Richtung nach oben oder unten zeigt, suchen Sie nach einer Zelle, die sich links oder rechts von diesem Pfad befindet), können Sie sicher eine Bombe platzieren und sich bewegen in diese Richtung.
2) Wenn Sie divergierende Zellen nicht finden und retten können, versuchen Sie, KEINE Bombe zu platzieren und suchen Sie erneut. Dieses Mal müssen Sie nur in einer Richtung nach einer sicheren Zelle suchen (Sie müssen nicht davon abweichen).
3) Wenn Sie immer noch keine sichere Zelle finden, tun Sie nichts.
for $(direction) in (up, down, left, right):
place bomb at current location
if (can find and reach divergent safe cell in current $(direction)):
bomb = true
move = $(direction)
return
for $(direction) in (up, down, left, right):
do not place bomb at current location
if (any safe cell in the current $(direction)):
bomb = false
move = $(direction)
return
else:
bomb = false
move = stay_put
Dieser Algorithmus macht den Bot sehr triggerglücklich (er wird sehr häufig Bomben platzieren). Es tötet sich nicht selbst, aber es hat die Angewohnheit, sich verwundbar zu machen, indem es in Sackgassen gerät, in denen es von den anderen Spielern geblockt und getötet werden kann.
Haben Sie Vorschläge, wie ich diesen Algorithmus verbessern könnte? Oder sollte ich mal was ganz anderes probieren?
Eines der Probleme mit diesem Algorithmus besteht darin, dass es dazu neigt, dem Bot sehr wenige (häufig nur eine) sichere Zellen zu hinterlassen, auf denen er stehen kann. Dies liegt daran, dass der Bot eine Spur von Bomben hinterlässt, solange er sich nicht selbst tötet.
Wenn Sie jedoch eine Spur von Bomben zurücklassen, bleiben nur wenige Orte übrig, an denen Sie sich verstecken können. Wenn einer der anderen Spieler oder Bots beschließt, irgendwo in Ihrer Nähe eine Bombe zu platzieren, kann es vorkommen, dass Sie keinen Platz zum Verstecken haben und sterben.
Ich brauche eine bessere Möglichkeit, um zu entscheiden, wann ich Bomben platzieren soll.