# 海鮮丼のHackMDページ <h2>Nクイーン問題</h2> ・一次元配列を使って、置ける場所を判定 あとで書きます <h2> 迷路(Proccesing) </h2> --------ステップ1----------- ![](https://i.imgur.com/R5bdvFa.png) 0→通路、1→壁  資料内リスト4 // 分岐や曲がり角があったら曲がるかも // 垂直方向に進んでいる場合 if(vx == 0 && (meiro[y][x+1] != 1 || meiro[y][x-1] != 1)){  //←自分自身から見て右もしくは左が壁じゃないときに動作 vx = (int) vy = 0; --------ステップ1終(´・ω・)b----------- --------ステップ2----------- WALKED //定数として使う。0は地面,1は壁なので0,1以外の数字であれば良い atack_top //スタック用配列の位置 増減で進む、戻るを調整 <h2> 迷路(java) </h2> makeMaze()→迷路を作る関数 block[x][y] が1→壁 block[x][y] が0→通路 <h3> スタックの実装 </h3> スタック→後入れ先出しのデータ構造 行列に並ぶようなもの(最後に来た人は列の最後尾に並ぶ感じ) 配列 hai_x , hai_y 変数 q_first , q_last maru_x,maru_y → 現在の座標 ``` //キューに入れる void en_q(int x, int y) { hai_x[q_first] = x; hai_y[q_first] = y; q_first++; } //キューから取り出す void de_q() { marux = hai_x[q_last]; maruy = hai_y[q_last]; q_last++; } ``` <h2> テトリス </h2> FieldWithEvaluation.java←評価処理 TetrisAI.java←メイン処理 ・246行目付近のswitch文について 0→次のブロックを生成、次の場所に落ちる 1→落下処理 AIが落としているように見せかける。なくてもよい 2→フィールドの状態を更新、ブロックを落ちた状態にする 今回はケース0が大事 🐖=3 ・case0 ``` int k = TetrisAI.this.blkg[Math.abs(rnd.nextInt()) % 7]; ``` ↑7で割るのは7種類のブロックを判別するため ``` for (int bestEvaluationVal = 0; TetrisAI.this.blk[k][0] >= 0; k++) ``` ↑k = 種類。値が-になると判定おしまい ``` TetrisAI.this.fieldForEval.setField(TetrisAI.this.field); TetrisAI.this.fieldForEval.evaluateState(k, i); ``` ↑仮にブロックを置いてスコア付けをしたりする部分 <br> ・38行目あたりblkの2次配列について {-1}を挟むことにより別のブロックに移る 複数行あるミノは、向きを変えた時のパターンが複数あるもの {0, 8, 0, 0, 1, 0, 0, 1, 1, 1}→四角ブロック 最初の0,8は横方向に置ける場所の数(0~8で9個)、その後ろは描画 それぞれ(0,0) (0,1) (1,0) (1,1) と分けられ四角を意味する ・`private int[] blkg = new int[]{0, 2, 7, 12, 17, 20, 23};` それぞれのミノがblk[][]の何行目から始まるか示す 0:O, 2:T, 7:J, 12:L, 17:S, 20:Z, 23:I ・int[][] cell 10x24のマス。表示されているマスは10x20だが、Iミノを縦に入れるため内部では10x24となっている。0:ミノなし,1:ミノあり ・fieldForEval.evaluateState(int setting, int x)  評価値(this.value)を計算。this.value = 30000から減算していく。 1.ミノを置いた時の最大の高さ(max)*10を減算 2.穴あきの数(高い位置にあるものほど点数大きく)*20を減算 <h2> オセロ </h2> ・MainPanel.java オセロゲーム自体の処理