テトリスプリンターアルゴリズムをなんとかして手の内に実装したい
Opened this issue · 7 comments
テトリスプリンターアルゴリズムをなんとかして手の内に実装したい
https://meatfighter.com/tetrisprinteralgorithm/
The algorithm can also generate multiple squares with a single structure as shown below.
必要に応じて以下も合わせて検討
- 盤面を大きくする(10×22 ---> 65×65)
- ブロックの色を途中から変える(今は6色 --->N色を増やす)
masatoさんの実装(2dot printerアルゴリズム)
今のはこちら
def fill_most_isolated(rnd,testboard,adj_zero, adj):
・boardのうち一番奥まったマスを探す
・そのマスにブロックを置く
・ブロックが置かれたのでadj_zero(空白マスの状況)を更新する、adj(次手の候補手)を更新する
def fill_isolated_from_adj(rnd,testboard,adj_zero, adj):
・次手の候補手のうち一番奥まったマスを探す
・そのマスにブロックを置く
・ブロックが置かれたので(以下同文)
def fill_adj_and_adj_zero(isolated, adj_zero, adj):
・これが上記の「更新する」です
・ブロックが置かれたらその四方のマスにとっては隣接する空白マスが1つ減ります。また、四方のマスが次の候補手になります。ただし置かれたマスがboardの辺上にある場合は"四方"ではなく3つか2つを更新するので、ifで辺上にあるかをチェックしています
[22:11]
制約を求める
def find_constraint(board):
自分より先に落ちるべきミノ(=一部分でも自分より下にあるミノ)を列挙しています
求めた制約を元にorderを決める
def find_shapeorder(board,constraint):
自分より先に落ちるべきミノが無いものから順に選んでいきます。
選択されたミノは、他のミノにとっての「自分より先に落ちるべきミノ」から削除されます
コメント書いて頂いてありがとうございます!
それぞれやりたいことはこんな感じです
def fill_most_isolated(rnd,testboard,adj_zero, adj):
・boardのうち一番奥まったマスを探す
・そのマスにブロックを置く
・ブロックが置かれたのでadj_zero(空白マスの状況)を更新する、adj(次手の候補手)を更新する
def fill_isolated_from_adj(rnd,testboard,adj_zero, adj):
・次手の候補手のうち一番奥まったマスを探す
・そのマスにブロックを置く
・ブロックが置かれたので(以下同文)
def fill_adj_and_adj_zero(isolated, adj_zero, adj):
・これが上記の「更新する」です
・ブロックが置かれたらその四方のマスにとっては隣接する空白マスが1つ減ります。また、四方のマスが次の候補手になります。ただし置かれたマスがboardの辺上にある場合は"四方"ではなく3つか2つを更新するので、ifで辺上にあるかをチェックしています
奥まったマスから埋めていくのはその方が詰まなさそうだからです
以下の2つは、下に来るミノから順に落とさないといけないので積み重なり具合で順番を決めています。
def find_constraint(board):
自分より先に落ちるべきミノ(=一部分でも自分より下にあるミノ)を列挙しています
def find_shapeorder(board,constraint):
自分より先に落ちるべきミノが無いものから順に選んでいきます。
選択されたミノは、他のミノにとっての「自分より先に落ちるべきミノ」から削除されます
@seigot Pull request completed! Check it out here #182 🚀
Note: I automatically create a pull request for an unassigned and open issue in order from oldest to newest once a day at 00:00 UTC, as long as you have remaining automation usage. Should you have any questions or wish to change settings or limits, please feel free to contact info@gitauto.ai or invite us to Slack Connect.