swiftで迷路の脱出¶
swift playgrouds での8番目のプログラミング。今回は迷路の脱出。

こんな迷路を作るアプリケーションを作った。gifアニメの後半で迷路からの脱出経路を描画している。
青が壁、黒は通路、赤はスタートからゴールまでの順路、黄色は行き止まり。
ゴールまで達すれば、探索は終了するので、見探索の通路が残ります。
使い方¶
GUIからの使い方は、以下の通り。
アプリの起動
コマンド+N を押すか file -> New を選ぶと、迷路作成の開始
迷路が完成すると、すぐに迷路からの脱出経路の探索を開始する
スタートは左下、ゴールは右上
スライダーを左右に動かすと、迷路の作成の途中結果を確認できる。
Playgroundからも実行できる。今回も本当はこちらがメイン。
import Cocoa
let maze = MazeBoard(width:20, height:20) // 20 * 20の大きさの迷路を作る
maze.doDig(MazePos(1,1)) // (1,1)の地点から迷路を彫り始める
let resolver = MazeResolver(maze) // 迷路の脱出機を作る
resolver.resolve(MazePos(1,1)) // (1,1)の地点(左上)から開始
resolver.DebugPrint() // 結果の出力
このように書くと、以下のような出力が得られる。
# # # # # # # # # # # # # # # # # # # #
# S . * * x x x x x x x x x * . . . * #
# * . * x x * * * * * * * x . . * . * #
# * . * * * * . . . . . . * . * * . . #
# * . . * . . . * * * * . * . . . * . #
# * * . * . * * * * * . . * * . * . #
# x * . * . . * * . * . . * . #
# . . . * * . * * * * . . . * * . #
# . * * * . . * * * * * * * * * . #
# . * * . . * * * * * . . . . #
# . * * . * * * * * * . * * * #
# . . * . * * * * * * . . . . #
# * . * . * . . . . * * * * * * * * . #
# * . * . . . * * . . . . . . * * * . #
# * . . * x * * * * * x * * . * . . . #
# * * . * * * . . . * x * * . * . * * #
# x * . * * * . * . * x * * . * . * * #
# x x . . . * . * . * * * * . * . . #
# * x * * . . . * . . . . . . * * . . #
# # # # # # # # # # # # # # # # # # # #
Sがスタート地点で、G(左下)がゴール地点です。(バグでゴールを.で塗りつぶしてしまってるけど) Xは行き止まりの通路、.が順路です。何も書かれていない場所は、探索していない通路です。
resolver.resolve(MazePos(1,1)) // (1,1)の地点から迷路を彫り始める
この部分を
resolver.resolve(MazePos(1,1), { $0.DebugPrint() } )
このように変えると、作成途中の迷路が見れる。
ソースコードの解説¶
面倒なので、
「関東swift勉強会2017-7」 https://cocoa-kanto.connpass.com/event/61475/
で、解説します。
参考文献とソースコード¶
- Swift Macアプリ開発入門
https://www.amazon.co.jp/Swift-Macアプリ開発入門―次世代iOS、macOSプログラマーのための-中山-茂/dp/487783396X これを読んで、macOSのアプリをサクサク作れるようになるとは思わないが、サンプルコードの選定が私の好みに合ってる。業務用のアプリケーションの雛型でなくて、学習用アプリケーションの雛型なのが良い感じ。
Comments
comments powered by Disqus