前々回で棒倒し法のソースをC# 5用にどう改造するか、前回の「無駄話」でエントリーポイントであるMain()の役割、使い方等について書きましたので、今回は棒倒し法迷路プログラムをC# 5用に動かすことが出来るようにします。
オリジナルのソースにはMain関数(おっと、「メソッド」だった!)がありません。これはC# 9以降用に省略しているのか、Visual Studioがコンソールプログラム用に自動作成しているのか分かりませんが、いずれにしてもC# 5には必要で、
(1)メインとなるMazeGenerator_Barクラスに入れるか、
(2)他のクラス(または構造体)に入れる
必要があります。
私はオリジナルを尊重し、クラス内のメソッドを増やさず、同じ名前空間の中に他の実行用クラスを追加しました。
【オリジナルのソース】
using System;
namespace ConsoleApplication1
{
//(解説:→ここに入れることとした。↓の【追加するMainメソッド用クラス】参照。)
public static class MazeGenerator_Bar
{
// 通路・壁情報
const int Path = 0;
const int Wall = 1;
// 棒倒し法による迷路生成
public static int[,] GenerateMaze(int width, int height)
{
(以下略)
【追加するMainメソッド用クラス】-赤字が追加、変更分
///////////////////////////////////////////////////////
//迷路-棒倒し法
//参照URL:https://algoful.com/Archive/Algorithm/MazeBar
//静的クラス、関数等を止めています。
///////////////////////////////////////////////////////
using System;
namespace MazeSample //解説:手書きにしたときにVisualStudio風のネーミングを「人間風」に変えました。
{
public class Application //解説:クラス名は重複しなければ、なんでも結構です。
{
public static void Main() //解説:Mainメソッドは常にstaticにしてください。
{
//解説:私は棒倒し法も非staticクラスにしているので次の通りにしています。
//MazeGenerator_Bar mzBar = new MazeGenerator_Bar();
//mzBar.DebugPrint(mzBar.GenerateMaze(20, 20));
//解説:オリジナルでは、インスタンス名の代わりにstaticクラス名を使います。
MazeGenerator_Bar.DebugPrint(MazeGenerator_Bar.GenerateMaze(20, 20));
//解説:↑はGenerateMazeの戻り値をDebugPrintに渡している、ということです。
Console.ReadKey(); //解説:コンソールウィンドウ消去防止用のメソッドです。
}
}
(以下は前々回通り)
さてこれを入れてコンパイルしてみましょう。今度はエラーが出ないと思います。(注)
注:ウェブのテキストがUnicodeで、ソースコードがSJISだと、Unicode→SJIS変換を行わないと余計な"00"が残っていてエラーになることがあります。
取り敢えず、棒倒し法は完了です。なお、アルゴリズムの解説はオリジナルソースのサイトで確認してください。(ブラウザーで棒倒し法の実行状況が見れますので、これが一番わかりやすいでしょう。)
