Thread Gamelogik in Perl
(7 answers)
Opened by TheDude at 2009-07-25 18:06
Als erstes würde ich das Feld als Array von Arrays (AoA) realisiert:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 @Feld = ( [ 3, 6, 4, 3, 7, 3, 3, 6 ], [ 6, 5, 8, 7, 6, 8, 2, 8 ], [ 5, 5, 7, 4, 5, 2, 7, 7 ], [ 6, 3, 4, 1, 6, 8, 8, 3 ], [ 1, 5, 7, 7, 5, 1, 7, 4 ], [ 7, 2, 8, 5, 2, 3, 3, 2 ], [ 2, 2, 4, 8, 1, 1, 8, 3 ], [ 2, 5, 3, 1, 7, 5, 7, 8 ] ); das macht den Zugriff und das Vertauschen einfacher Arbeite dich durch das Feld: Code (perl): (dl
)
1 2 3 4 5 6 7 for my $y (0..7) { for my $x (0..7) { push(@moves,find_move(\@Feld,$x,$y)); } } "find_move" sollte folgendes machen: Betrachte immer Paarweise alle Elemnte nach oben, unten, rechts, links (falls vorhanden). Schaue, ob das vertauschen einen Vorteil währe, mehr aus gleicher Gruppe zusammen für beide vertauschte Elemnte und bewerte die "Güte" des Zuges. Achte darauf, dass du in alle Richtungen suchst. Gib etwas in der Art zurück: Code (perl): (dl
)
1 2 3 4 5 6 return ( {posx=>$x, posy=>$y, dirx=>0, diry=>1, quality=>5}, {posx=>$x, posy=>$y, dirx=>0, diry=>-1, quality=>1}, {posx=>$x, posy=>$y, dirx=>1, diry=>0, quality=>3}, {posx=>$x, posy=>$y, dirx=>-1, diry=>0, quality=>1}, ); Wobei "dirx/y" die Position der zu vertauschenden Paare beschreibt. (Z.B.: $x+1,$y+0) und "quality" aufsummiert die Anzahl der zusammen hängenden Felder (für jedes der vertauschten Elemente) Sortiere "@moves" nach der qualität: Code (perl): (dl
)
@moves=sort{$b->{quality} <=> $a->{quality}}@moves; die ersten Züge in "@moves" sind die besten, die kannst du vorschlagen. |