見出し画像

Dig The Shape!の作り方目次メモ

これから書くnoteのためのメモ。
自分用のメモのつもりだったけど一部の人にとっては面白そうなので公開してみる。

ちなみにこのゲームの作り方についての記事群になる予定。

見出しごとに1記事くらいのボリュームを想定。

前提

プログラマ向け。
汎用的なノウハウではないが、教科書に載ってる練習問題的なトピックがありそうなので共有する。
コードの引用・コピペはなるべくしない。
説明のためにコード的なものを新たに書くことはやる。
ライセンスを明記(PD?)

セルをグリッド状に並べる

- Cellの位置とサイズはFieldが管理する
    - Fieldの位置とサイズ、分割数が変わった時に対応しやすい
- 画面上の位置と、グリッドのどの位置なのかは分けて管理する
    - 表示用の座標とロジック用の座標
    - アニメーションしやすい

クリックしたセルを知る

- クリック判定はCellで
    - プレイヤーは表示されている位置を見るので、ロジック位置より表示位置を使うのが適切
- クリックされたCellをFieldで素早く(楽に)検索
    - Cellに、FieldでO(1)検索するためのインデックスを持たせておく(冗長だが許容範囲)
    - 今回はロジック位置がインデックスとして機能する

クリックしたセルを消す

- 「消える」->「既存のものが落ちてくる」「新たに上から補填される」をどう捉えるか
    - インスタンスを削除して、上に新たに追加するパターン
    - 消したやつを上に移動させるパターン
    - 色と位置を変えることで、「消える」->「落ちてくる」ように見せるパターン
        - 今回の戦略はこれ
        - ルービックキューブの話する?

同色のセルをグループ化する

- グループ化判定は2種
    - 同色判定(Cell側の機能)
    - 隣接判定(Field側の機能)
- Cellの参照で持つか?インデックスで持つか?
    - 作ってみたらインデックスがよかった
    - グループを結合するときの処理の話
    - 起きたバグの話
- クリックされたときの検索しやすさのことも考えて

形の判別

- 消した形とお題の形とがマッチしているかの判定
    -  AABBを考えてオフセットと相対位置のリストを持つ
    - 回転を許す場合のことも考える?
- 他のパターンも考える?
    - マインスイーパ型
    - ナンプレ型
    - 格子点マインスイーパ型
    - 他にもある?

ランダムなパターンを固定化する仕組み

- スコアアタックをするには、何度実行してもパターンが変わらないランダム(的な)仕組みが必要 -> ハッシュ
- デイリーチャレンジとランダムチャレンジ
- チャレンジIDのシェア

サポートしていただけたら、書く勢いになります!