MENU

【C#】ペントミノ2Dパズルを解く(6)DEFクラスを作る

このクラスはプログラムの表紙(鑑)です。プログラムIDや作成日などのプログラム諸元や共有で使用する定数や関数などをまとめて記述しておくクラスです。クラス名の "DEF" は定義(define)から採っています。

・クラス宣言

クラスの名前は "DEF" です。

internal class DEF

・プログラム諸元

筆者は自作のプログラムにはこのような鑑を記述しています

public const string myProgramID = "**********";          //プログラムID
public const string myVersion = "********";              //バージョン
public const string myDateWritten = "****/**/**";        //作成日
public const string myAuthor = "**********";             //作者名
public const string myName = "ペントミノソルバー2D";    //プログラム名

・変数:SolutionNo

パズルの解番号

public static int solutionNo = 0;

・変数:キャンセルフラグ

プログラムの途中放棄に使用します

public static bool cancelFlag = false;

・関数:部品棚作成

引数の棚コレクションに12種類の部品棚を作ります

public static void 部品棚作成(List<Shelf> shelves)
{
    shelves.Add(new Shelf("F", Color.FromArgb(70, 153, 241), "RDRdL"));   //青
    shelves.Add(new Shelf("I", Color.FromArgb(70, 212, 255), "DDDD"));    //空色
    shelves.Add(new Shelf("L", Color.FromArgb(181, 252, 91), "DDDR"));    //黄緑
    shelves.Add(new Shelf("N", Color.FromArgb(255, 76, 138), "DLDD"));    //ピンク
    shelves.Add(new Shelf("P", Color.FromArgb(255, 176, 70), "RDLD"));    //オレンジ
    shelves.Add(new Shelf("T", Color.FromArgb(255, 162, 234), "RRdLD"));  //薄い紫
    shelves.Add(new Shelf("U", Color.FromArgb(60, 178, 174), "DRRU"));    //青緑
    shelves.Add(new Shelf("V", Color.FromArgb(184, 72, 185), "DDRR"));    //紫
    shelves.Add(new Shelf("W", Color.FromArgb(81, 89, 191), "DRDR"));     //濃い青
    shelves.Add(new Shelf("X", Color.FromArgb(229, 64, 72), "DLdRrU"));   //赤
    shelves.Add(new Shelf("Y", Color.FromArgb(70, 177, 110), "DLrDD"));   //緑
    shelves.Add(new Shelf("Z", Color.FromArgb(178, 178, 178), "RDDR"));   //灰色
}

・経過時間

startTime から endTime までの時間を文字列にして返します

public static string 経過時間(DateTime startTime, DateTime endTime)
{
    TimeSpan ts = endTime - startTime;
    return ts.ToString(@"hh\:mm\:ss");
}


以上が「DEFクラス」です。クラス全体のソースは以下のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ペントミノソルバー2D
{
    internal class DEF
    {
        // ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
        // Z
        // Z    ペントミノソルバー 2D(DEF)
        // Z
        // ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

        public const string myProgramID = "**********";          //プログラムID
        public const string myVersion = "********";              //バージョン
        public const string myDateWritten = "****/**/**";        //作成日
        public const string myAuthor = "**********";             //作者名
        public const string myName = "ペントミノソルバー2D";    //プログラム名

        public static int solutionNo = 0;
        public static bool cancelFlag = false;

        //********************
        //*   部品棚作成
        //********************
        public static void 部品棚作成(List<Shelf> shelves)
        {
            shelves.Add(new Shelf("F", Color.FromArgb(70, 153, 241), "RDRdL"));   //青
            shelves.Add(new Shelf("I", Color.FromArgb(70, 212, 255), "DDDD"));    //空色
            shelves.Add(new Shelf("L", Color.FromArgb(181, 252, 91), "DDDR"));    //黄緑
            shelves.Add(new Shelf("N", Color.FromArgb(255, 76, 138), "DLDD"));    //ピンク
            shelves.Add(new Shelf("P", Color.FromArgb(255, 176, 70), "RDLD"));    //オレンジ
            shelves.Add(new Shelf("T", Color.FromArgb(255, 162, 234), "RRdLD"));  //薄い紫
            shelves.Add(new Shelf("U", Color.FromArgb(60, 178, 174), "DRRU"));    //青緑
            shelves.Add(new Shelf("V", Color.FromArgb(184, 72, 185), "DDRR"));    //紫
            shelves.Add(new Shelf("W", Color.FromArgb(81, 89, 191), "DRDR"));     //濃い青
            shelves.Add(new Shelf("X", Color.FromArgb(229, 64, 72), "DLdRrU"));   //赤
            shelves.Add(new Shelf("Y", Color.FromArgb(70, 177, 110), "DLrDD"));   //緑
            shelves.Add(new Shelf("Z", Color.FromArgb(178, 178, 178), "RDDR"));   //灰色
        }

        //********************
        //*     経過時間
        //********************
        public static string 経過時間(DateTime startTime, DateTime endTime)
        {
            TimeSpan ts = endTime - startTime;
            return ts.ToString(@"hh\:mm\:ss");
        }

    }
}

次回はいよいよ最後「フォーム」です。デザイン部分とコード部分に分けて詳しく解説します。