2020 ソフトウェア設計及び演習用の班Wiki
20::gr09::モジュール化
モジュール化
仕様
-
ネクスト
- フィールドの隣にネクストを5個表示する
- 7個のミノを一まとまりとして、その中でランダムに順番を変える
- 7個のミノをランダムな順番にしたプールを用意しておく
- push
- ネクストが空いた時、もしプールにミノがあったらプールからミノを一つ取り出す、プールにミノが無ければ、プールを作ってからプールから一つ取り出す
- pop
- ミノが置かれる、または、ホールドされた時、ネクストの一番上から取り出して、空いた分一個ずつ上にずらす
-
フィールド
-
お邪魔ブロックのせり上がり方
- (暫定的な仕様)今まで積んであったブロックをせり上がる分上にずらした後に、横1ラインの中で1箇所空くブロックを選んで、上にずらした分1ブロック空いたラインで下まで埋める
-
お邪魔ブロックのせり上がり方
AI
-
置ける場所全探索
- 関数: fullSearch(argMino) argMinoはMinoクラス、今の盤面などの状態を持っている
- ネクストから1個ミノを取り出す
- ミノを四方向回転させる(操作ミノ)
- それぞれの方向で、左端から右端まで1マスずつ移動させながらハードドロップして盤面を作る(操作ミノ)
- 盤面評価: evaluateBoard()
- 全探索で作った盤面全てで、穴が空いていないか、平らになっているか、ラインを消すことが出来るかを点数にして表す
- 操作の決定: decideOperation()
- 盤面評価した結果を元にして、一番最適な操作を決定する。
- 操作の順序を作る
- 関数: makeSequence(argMino, x, addRotationRight) xはミノを置きたい座標(整数)、addRotationRightはいくつだけ右へ回転させたいか
- 操作を一まとまりの順序にしてoperateが操作出来るようにする
- 実際に操作: operate()
- makeSequenceが作った操作の順序を元に実際に操作する
- run(argMino) argMinoはfullSearchと同じ
- 盤面や今のミノの状態を受け取って、どのようにミノを置けば良いか思考し、operateに操作を任せられる段階まで持っていく。
- test(argMino) argMinoはfullSearchと同じ
- 実際に操作した結果と探索した結果が一致しているかどうかテストする為の関数
-
AIのインターフェース?
- ミノを置く前にrunを実行する
- 操作をする時はoperateを実行する
モジュールのインターフェース
対戦形式になるという都合上、フィールドや操作ミノなどはクラス化をしていて、クラス内の変数を変化させれば良いので関数への引数が無い。
-
フィールド(field)
- field: フィールドの配列
- jamBetweenLine(): 相手のフィールドにお邪魔を送る
- 操作ミノ(Mino)
- Next(): ネクスト取り出し
- Hold(): ホールド処理
- moveRight(): 右へ移動
- moveLeft(): 左へ移動
- softDrop(): ソフトドロップ
- hardDrop(): ハードドロップ
- rotateRight(): 右回転
- rotateLeft(): 左回転
- AI
- run(argMino): AIの思考を始める
- operate(): 思考結果に基づいて操作する
最終更新日:2020/08/14 12:19:36