▶ 実 行
▶ 実行
クリア
迷路ゲーム改 - 迷路自動生成版
by クジラ飛行机
## 迷路ゲーム改 # プレイヤーの初期座標を指定 PX = 1 PY = 1 壁URL="https://nadesi.com/v3/storage/image.php?f=9.png" 床URL="https://nadesi.com/v3/storage/image.php?f=10.png" # その他の定数 MW = 40 MW2 = MW÷2 COLORS = ["white", "brown", "blue"] HELP = 「[←][↑][↓][→]/[h][k][j][l]/マウス可」 迷路サイズ=7 # どんどん大きくなる 迷路 = 迷路サイズの迷路作成。 迷路[迷路サイズ-2][迷路サイズ-2]=2 # ゴール生成 HELPのラベル作成して、情報ラベルに代入。 画像一覧=[] 逐次実行 床URLを画像逐次読む。 画像一覧[0] = 対象 壁URLを画像逐次読む。 画像一覧[1] = 対象 「/v3/storage/images/4.png」を画像逐次読む。 画像一覧[2] = 対象 「/v3/storage/images/3.png」を画像逐次読む。 画像一覧[3] = 対象 マップ表示。 ここまで。 # キー操作に応じてゲームを進める DOCUMENTをキー押した時には K=押されたキー。 もし、K=「ArrowUp」ならば、[0,-1]で移動確認。 違えば、もし、K=「ArrowDown」ならば、[0,1]で移動確認。 違えば、もし、K=「ArrowLeft」ならば、[-1,0]で移動確認。 違えば、もし、K=「ArrowRight」ならば、[1, 0]で移動確認。 違えば、もし、K=「k」ならば、[0,-1]で移動確認。 違えば、もし、K=「j」ならば、[0,1]で移動確認。 違えば、もし、K=「h」ならば、[-1,0]で移動確認。 違えば、もし、K=「l」ならば、[1, 0]で移動確認。 ここまで。 描画中キャンバスをマウス押した時には もし、マウスX=0ならば戻る。 W=描画中キャンバスの「width」をDOM属性取得。 H=描画中キャンバスの「height」をDOM属性取得。 XX=W/2-マウスX YY=H/2-マウスY もし、ABS(XX) > ABS(YY)ならば もしXX<0ならば [1, 0]で移動確認。 違えば [-1,0]で移動確認。 ここまで 違えば もしYY<0ならば [0,1]で移動確認。 違えば [0,-1]で移動確認。 ここまで。 ここまで。 ここまで。 # 移動先の座標に移動できるか確認する ●(CURで)で移動確認とは NX=CUR[0]+PX NY=CUR[1]+PY もし、NX<0または、NY<0ならば 情報ラベルに「不正な座標」をテキスト設定。 戻る。 ここまで NO=INT(迷路[NY][NX]) もし、NO=2ならば 迷路サイズ=迷路サイズ×2+1 「ゲームクリア!{改行}そして新しい迷路{迷路サイズ}へようこそ!」と言う。 迷路 = 迷路サイズの迷路作成。 迷路[迷路サイズ-2][迷路サイズ-2]=2 # ゴール生成 PX=1。PY=1。マップ表示。 ここまで。 もし、NO=0ならば PX = NX。PY=NY。 情報ラベルに「{HELP} = ({NX},{NY})」をテキスト設定。 マップ表示。 違えば 情報ラベルに「{HELP} = そこは壁!{NO}」をテキスト設定。 ここまで。 ここまで # 画面にマップを表示する処理 ●マップ表示 「black」に線色設定。1に線太さ設定。 列数=迷路の要素数。 #マップを描画 Yを0から10まで繰り返す Xを0から10まで繰り返す XX = PX - 5 + X YY = PY - 5 + Y もし(XX < 0)または(YY < 0)ならば NO = 1 違えば、もし(XX >= 列数)または(YY >= 列数)ならば NO = 1 違えば NO = INT(迷路[YY][XX]) ここまで C = COLORS[NO] Cに塗色設定。 画像一覧[NO]を[X*MW, Y*MW, MW, MW]に画像描画。 もし、X=5かつY=5ならば # プレイヤーの描画 「orange」に塗色設定。 画像一覧[3]を[X*MW, Y*MW, MW, MW]に画像描画。 ここまで ここまで ここまで。 ここまで ●(列数の)迷路作成とは 迷路は[] Yを0から(列数-1)まで繰り返す 迷路[Y] = [] Xを0から(列数-1)まで繰り返す 迷路[Y][X] = 1 ここまで。 ここまで。 # 左上を起点として穴掘りをはじめる 迷路で1と1の迷路掘削処理。 ここまで ●(迷路でXとYの)迷路掘削処理とは UDLR=[[0,-1],[0,1],[-1,0],[1,0]] 列数=迷路の要素数 UDLRの配列シャッフル。 UDLRを反復 RX=対象[0]。RY=対象[1] # 2マス先を調べる X2 = RX * 2 + X Y2 = RY * 2 + Y # 迷路の外なら中止 もし、(X2<=0)または(X2>=列数-1)ならば続ける。 もし、(Y2<=0)または(Y2>=列数-1)ならば続ける。 もし、迷路[Y2][X2]=0ならば続ける。 # 穴を掘る 迷路[Y+RY][X+RX] = 0 迷路[Y2][X2] = 0 # 再帰的に掘削する 迷路でX2とY2の迷路掘削処理を迷路に代入。 ここまで。 それは迷路。 ここまで ●(迷路を)迷路表示とは 列数=迷路の要素数。 Yを0から(列数-1)まで繰り返す Xを0から(列数-1)まで繰り返す V = 迷路[Y][X] XX=X×MW YY=Y×MW 灰色に線色設定。 もしV=0ならば、白色に塗り色設定。 違えば、茶色に塗り色設定。 [XX, YY, MW, MW]に四角描画。 ここまで。 ここまで。 ここまで。