投稿者 mitchin  (社会人) 投稿日時 2009/9/13 08:07:03
その前に SaikoroDraw1~SaikoroDraw6 メソッド内部の g は 引数で受けるようにしたほうがいいですね。(多重生成される場合があるので)

サイコロをクラスにするなら
 1. 出目の値
 2. 描画処理
があればいいかなぁ。

例えば、自分なら拡張性を考慮してこんな感じで実装します。
''' <summary>サイコロを表すクラスです。</summary> 
''' <remarks></remarks> 
Public Class Dice
#Region " プライベートフィールド "
  Dim _Deme, _MaxDeme As Integer    '現在の出目, 出目の最大値 
#End Region

#Region " パブリックコンストラクタ "
  ''' <summary>Dice クラスの新しいインスタンスを初期化します。</summary> 
  ''' <remarks></remarks> 
  Public Sub New()
    MyClass.New(6)
  End Sub
#End Region

#Region " プロテクトコンストラクタ "
  ''' <summary>出目の最大値を指定して Dice クラスの新しいインスタンスを初期化します。</summary> 
  ''' <param name="MaxDeme">出目の最大値。</param> 
  ''' <remarks></remarks> 
  Protected Sub New(ByVal MaxDeme As Integer)
    _MaxDeme = MaxDeme
  End Sub
#End Region

#Region " パブリックプロパティ "
  ''' <summary>現在の出目を取得します。</summary> 
  ''' <value></value> 
  ''' <returns>現在の出目。</returns> 
  ''' <remarks></remarks> 
  Public ReadOnly Property Deme() As Integer
    Get
      Return _Deme
    End Get
  End Property
#End Region

#Region " プロテクトプロパティ "
  ''' <summary>出目の最大値を取得します。既定値は 6 です。</summary> 
  ''' <value></value> 
  ''' <returns>出目の最大値。</returns> 
  ''' <remarks></remarks> 
  Protected ReadOnly Property MaxDeme() As Integer
    Get
      Return _MaxDeme
    End Get
  End Property
#End Region

#Region " パブリックメソッド "
  ''' <summary>指定した Graphics オブジェクトで指定した出目を描画します。</summary> 
  ''' <param name="g">描画対象の Graphics オブジェクト。</param> 
  ''' <param name="deme">出目。</param> 
  ''' <remarks></remarks> 
  Public Sub Draw(ByVal g As Graphics, ByVal deme As Integer)
    If g Is Nothing Then
      Throw New ArgumentNullException("g")
    End If
    If (deme < 1) OrElse (deme > _MaxDeme) Then
      Throw New ArgumentOutOfRangeException("deme")
    End If

    If deme = _Deme Then    '現在の出目を指定した場合は処理しない 
      Return
    End If
    _Deme = deme    '出目をセット 
    Call DrawDeme(g)    '現在の出目を描画 
  End Sub
#End Region

#Region " プロテクトメソッド "
  ''' <summary>指定した Graphics オブジェクトで現在の出目を描画します。 
  ''' 派生クラスで使用する場合は必ず基本クラスのメソッドを呼び出してください。</summary> 
  ''' <param name="g">描画対象の Graphics オブジェクト。</param> 
  ''' <remarks></remarks> 
  Protected Sub DrawDeme(ByVal g As Graphics)
    'ToDo _Deme が 1 から 6 までの場合の出目を描画する 
  End Sub
#End Region
End Class


Form 側はこんな感じ(AutoGraphics メソッドは省略しています)
  ReadOnly LeftDice, CenterDice, RightDice, Dices() As Dice

  Public Sub New()
    ' この呼び出しは、Windows フォーム デザイナで必要です。 
    InitializeComponent()
    ' InitializeComponent() 呼び出しの後で初期化を追加します。 

    LeftDice = New Dice()
    CenterDice = New Dice()
    RightDice = New Dice()
    Dices = New Dice() {LeftDice, CenterDice, RightDice}
  End Sub

  Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
    Using g As Graphics = AutoGraphics(Me.PictureBox1)
      For Each MyDice As Dice In Dices
        MyDice.Draw(g, 1)
      Next
    End Using
  End Sub