In einem Prototyp, den ich gerade mache, gibt es ein Minispiel, das bejeweled ähnelt. int[,]
Wie kann ich mithilfe eines Rasters, das ein 2d-Array ( ) ist, feststellen, wann der Benutzer eine Übereinstimmung gebildet hat? Mir geht es nur um horizontal und vertikal.
Von oben dachte ich, ich würde einfach in jede Richtung schauen. Etwas wie:
int item = grid[x,y];
if(grid[x-1,y]==item)
{
int step=x;
int matches =2;
while(grid[step-1,y]==item)
{
step++;
matches++
}
if(matches>2)
//remove all matching items
}
else if(grid[x+1,y]==item
//....
else if(grid[x,y-1==item)
//...
else if(grid[x,y+1]==item)
//...
Es scheint, als gäbe es einen besseren Weg. Gibt es?
Antworten:
Durchlaufen Sie alle Elemente auf derselben Achse (x oder y), sofern sie mit denen des vorherigen Elements identisch sind. Wenn das nächste Element anders wird, prüfen Sie, ob Übereinstimmungen größer als 3 sind, rufen Sie eine Funktion auf, mit der übereinstimmende Elemente entfernt werden, und fahren Sie fort.
AS3-Code:
Dies ist nur für die x-Achse, für y würde grid [col] [i] zu grid [i] [row] usw. Ich bin sicher, dass Sie das herausfinden können :)
quelle
Ich dachte nur, ich würde mit unserer Erfahrung beim Aufbau eines Match-3-ähnlichen Spiels abwägen.
Wir haben einen Prototyp für ein Match-3-basiertes Wortspiel gebaut, ähnlich wie Scrabble und Bejeweled. Wir haben sehr früh erkannt, dass die Engine, die neue Edelsteine / Kacheln liefert, um leere Räume zu füllen, sehr introspektiv sein muss (wir führen hybride Heuristiken und MonteCarlo-Stichproben durch), um einem Spieler die Möglichkeit zu geben, Buchstaben zu reihen, um Wörter zu bilden 3-Gewinnt-Mechaniker. Es ist weitaus ausführlicher als die Beschreibung, aber ich fasse mich kurz, weil wir eine Arbeit schreiben müssten.
Zur Beantwortung des OP führen wir Musterprüfungen durch, um zu ermitteln, wie viele Übereinstimmungen zu einem bestimmten Gurt derzeit vorhanden sind, und zwar mit einer Methode, die dem Code-Snippet "gladoscc" sehr ähnlich ist. Obwohl es robust arbeitet, wird der Rechenaufwand für die Ausführung dieses rekursiven Vorgangs während des Abspielens der Baumsuche zu einer erheblichen Belastung. Wir sind also dabei, diesen Teil der Logik und die Datendarstellung mit der Bitboard-Methodik neu zu schreiben ( Wird häufig in Spielen mit anderen Rastern wie Schach, Dame, Othello usw. implementiert. In Tests haben wir gezeigt, dass es in ActionScript über 20-mal schneller laufen kann. und befreit wesentliche Zyklen für Reaktionsfähigkeit, Klang, Animation usw.
quelle
Rekursion, yo. Es ist für den Fall, dass Sie Ihre Grenzen nicht kennen.
quelle
Sie können den Flood-Fill- Algorithmus verwenden. Es ist wirklich brauchbar für diese Art von Problem.
quelle