たくのろじぃのメモ部屋スマートフォン用の表示で見るたくのろじぃのメモ部屋プログラミング(C#)の基礎やそれを応用した技術情報をメモしておくブログです。自動化Tweetはじめにマイクラ自動化はもともとC#でどこまでできるかを検証するためにやってきましたが、どうやら本当に色々できるようです。座標移動(テレポート)と配置(ブロック配置)ができれば何でもできそうです。今回は迷路を作ります。これは建設自動化のための準備みたいなものです。外壁をつくる迷路を作るためには、まずは外壁を作る必要があります。外壁ロジックは、最初と最後の座標だけ囲みます。座標を二次元配列として扱ったほうが分かりやすいので、二次元配列を使ってみました。GetLengthメソッドを用いると、その配列の要素数を得ることができます。ロジックとしては、まずはX方向の座標から考えます。最初と最後のX方向は壁にするので、そのX座標が最初か最後かを判定させます。これをぶん回せば迷路の壁が生成されます。壁伸ばし法の実装これは自分のアルゴリズムに対する理解力が十分でないため、不完全なところがあります。壁伸ばし法は2通りあります。外壁から壁をランダムな方向に伸ばしていく方法と、ランダムな座標から外壁に向かって伸ばしていく方法です。私は後者を選択しました。手順というかロジックはこんな感じですかね...。ランダムに壁伸ばし開始座標を選ぶその座標からランダムな方向へ壁を伸ばす1マスずつ伸ばすと隣接した壁がくっつく可能性があるので、2マスずつ伸ばすこのとき、隣接した座標とその隣の座標が通路でないと伸ばせないただし、その座標の2つ先が外壁だったら1マス伸ばして開始座標を選びなおす座標が外壁に達したら、再びランダムな開始座標を選びなおす開始座標候補がすでに全て壁なら迷路完成ただ、これだと不完全で伸ばしている最中の壁の座標を保持しておき、新しく伸ばそうとしている壁の座標が、すでに存在すればその方向には伸ばさないという手法も必要らしいです。今現在理解できていないので組み込んでいません。スタックに保持する必要があるみたいですが...。一応ロジックの一部を載せますが、微妙です。//下、左、右の方向ロジックも書く。direction;}実行してみるとこんな感じですね。不完全ですが、このまま続けます。いつか必ずリベンジを...。送信メソッドに置き換えるなりすれば迷路が生成できます。Task.Delay(10);でした。非同期処理中に非同期でない遅延メソッドを使うとそこで止まってしまうようです。わかりませんが...。動かしてみるとこんな感じになります。www.youtube.comおわりに今回は迷路(?)を作りました。アルゴリズムが未熟な部分があるのでいつか修正したいと思います。次は建築やってみたいですね。エクセルシートの設計図をもとに自動建築を行いたいと考えています。今回作ったコード少し汚いコードですが、参考にどうぞ。壁伸ばし法で参考になりました。ありがとうございます。www5d.biglobe.ne.jpalgoful.comこちらは非同期遅延メソッドで参考にしました。ありがとうございます。迷路の生成Tweet関連記事2019-11-13【C#】JSONファイルを読み込むJSONファイル読み込みを行うことになったのでやり方をメモ。前回は湧き潰し自動化を改良しました。前回は湧き潰しのプログラムを書きました。技術系や数学系を多く扱います。Azure月別アーカイブはてなブログをはじめよう!takunologyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。