MENU

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

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

・クラス宣言

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

Public Class DEF

・プログラム諸元

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

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

・変数:SolutionNo

パズルの解番号

Public Shared SolutionNo As Integer 

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

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

Public Shared CancelFlag As Boolean

・関数:部品棚作成

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

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

・経過時間

startTime から endTime までの時間を "HH:mm:ss" 形式の文字列にして返します

Public Shared Function 経過時間(startTime As Date, endTime As Date) As String
   Dim seconds = DateDiff(DateInterval.Second, startTime, endTime)
   Dim hours = Fix(seconds / 3600)
   seconds -= hours * 3600
   Dim minutes = Fix(seconds / 60)
   seconds -= minutes * 60
   Return Format(hours, "00") & ":" & Format(minutes, "00") & ":" & Format(seconds, "00")
End Function


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

Public Class DEF

   'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
   'Z
   'Z      ペントミノソルバー 2D(DEF)
   'Z
   'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

   Public Const myProgramID = "**********"
   public Const myVersion = "********"
   Public Const myDateWritten = "****/**/**"
   Public Const myAuthor = "**********"
   Public Const myName = "ペントミノソルバー2D"

   Public Shared SolutionNo As Integer
   Public Shared CancelFlag As Boolean

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

   '********************
   '*     経過時間
   '********************
   Public Shared Function 経過時間(startTime As Date, endTime As Date) As String
      Dim seconds = DateDiff(DateInterval.Second, startTime, endTime)
      Dim hours = Fix(seconds / 3600)
      seconds -= hours * 3600
      Dim minutes = Fix(seconds / 60)
      seconds -= minutes * 60
      Return Format(hours, "00") & ":" & Format(minutes, "00") & ":" & Format(seconds, "00")
   End Function

End Class

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