今日から課題を一個ずつ片付けていくという形式にしよう。
大課題は『マップエディタを作る』
そういうわけで今日の小課題『チップの自動整形』。
前もやったけど上手く繋がらなかったんですよね。
ところで話は変わるんですけど
これまで自分はなるべくプログラムの中身について言及するのをさけていたのですが
それはひとえに自分のコードが非効率で頭の悪いコードだったとして
それを人に悟られるのが恥ずかしかったからです。
でも、やっぱりある程度は腹を割って説明した方がいいですね。
そうやって自分の軌跡を残すんだ。
さて、そんなわけで小課題ですが。
これを消化する前に
自分のクォータービューの描写方法をおさらい。

右が自分の描写法。
右の利点はなにかというと特になんにもないんですよね。
せいぜいマップデータと実際のマップが一致しやすいってくらいかな?
11110 11110
00000 00000
00000 00000
↑マップデータ(1がブロック)
さて、ここでマップ組みにあたり
地面にグリッドが付いてたり、または縁取り線がないチップなら
チップ1個で1マップをまかなえるかもしれませんが
どちらも嫌なのでチップ同士の整合性をつけるために複数チップを用意します。こちら。

こんなにあるチップをいちいち選んで置いてられっかよー!ってわけで
自動でチップ補正しなければやってられません。
これには周囲のチップの状態を判定して
正しいチップが置かれるようにすればいいんですよね。
色々方法はあるんだろうけど、自分が使ったのはエセ2進法演算。
上下左右にそれぞれにチップがあれば1なければ0の数値を取ります。
上に1000下に100右に10左に1をかけて。
上下左右全部にチップが存在していれば1111みたいな感じでこれで置くチップを判定。
なんだか面倒臭いけど一つの変数で上下左右のチップ状態を現せるというわけですね。
これでマップ組みが自動になったよ。おめでとう。
・・・とここまでが前まで出来てたところです。
でも、これだと特定の配置にした場合に穴が空くんですよね。

チップの仕様を変えればどうにかなるのかもしれないけど
考えるのが面倒臭いから、その特定配置を特定して
穴の開かない新しいチップで埋めてくれるようにしよう。
要するに上二つのチップに挟まれていると起こるんだから
1100 1111 1110 1101の4つを新しいチップに変えればいいんだ。
【次回に続く】