前々回で棒倒し法のソースを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"が残っていてエラーになることがあります。

 

取り敢えず、棒倒し法は完了です。なお、アルゴリズムの解説はオリジナルソースのサイトで確認してください。(ブラウザーで棒倒し法の実行状況が見れますので、これが一番わかりやすいでしょう。)