# 海鮮丼のHackMDページ
<h2>Nクイーン問題</h2>
・一次元配列を使って、置ける場所を判定
あとで書きます
<h2>
迷路(Proccesing)
</h2>
--------ステップ1-----------

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
オセロゲーム自体の処理