あと衝突のルールを決める必要があります。 上記のは、「後から動いたほうで上書き」というルール。 例えば「既に●がいるセルには移動できない」というルールなら、移動先の次世代の空間を調べて、●がいないセルにあたるまでループする必要があります。