投稿者 H_K  (社会人) 投稿日時 2009/9/13 04:38:24
長文です。ごめんなさい。(2008 Express Editionを使用しています。)

VB中学校初級講座 2章第14回の実技「ちんちろりん」をちょっとだけ改造して、画像を読み込むのではなく、1章で習った円や四角を描く方法でやってみました。PictureBox1を張り付けて、第2回で紹介されているAutoGraphicsを使っています。

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        '最初はピンゾロ表示
        For i As Integer = 1 To 3
            SaikoroDraw(1, i)           '引数:目,場所(=左から1,2,3)
        Next

End Sub

    Private Sub SaikoroDraw(ByVal deme As Integer, ByVal x As Integer)
        x -= 1                'Pictureboxの座標は0からなので-1
        Select Case deme
            Case 1
                SaikoroDraw1(x)
            Case 2
                SaikoroDraw2(x)
            Case 3
                SaikoroDraw3(x)
            Case 4
                SaikoroDraw4(x)
            Case 5
                SaikoroDraw5(x)
            Case 6
                SaikoroDraw6(x)
        End Select

    End Sub

    Private Sub SaikoroDraw1(ByVal x As Integer)
        Dim g As Graphics = AutoGraphics(PictureBox1)
        g.DrawRectangle(Pens.Black, 0 + x * 80, 0, 60, 60)
        g.FillRectangle(Brushes.White, 1 + x * 80, 1, 58, 58)
        g.DrawEllipse(Pens.Black, 25 + x * 80, 25, 10, 10)
        g.FillEllipse(Brushes.Red, 25 + x * 80, 25, 10, 10)
    End Sub

    Private Sub SaikoroDraw2(ByVal x As Integer)
        Dim g As Graphics = AutoGraphics(PictureBox1)
        g.FillRectangle(Brushes.White, 1 + x * 80, 1, 58, 58)
        g.FillEllipse(Brushes.Black, 12 + x * 80, 12, 10, 10)
        g.FillEllipse(Brushes.Black, 38 + x * 80, 38, 10, 10)

    End Sub

    Private Sub SaikoroDraw3(ByVal x As Integer)
        Dim g As Graphics = AutoGraphics(PictureBox1)
        SaikoroDraw2(x)
        g.FillEllipse(Brushes.Black, 25 + x * 80, 25, 10, 10)
    End Sub

    Private Sub SaikoroDraw4(ByVal x As Integer)
        Dim g As Graphics = AutoGraphics(PictureBox1)
        SaikoroDraw2(x)
        g.FillEllipse(Brushes.Black, 38 + x * 80, 12, 10, 10)
        g.FillEllipse(Brushes.Black, 12 + x * 80, 38, 10, 10)

    End Sub

    Private Sub SaikoroDraw5(ByVal x As Integer)
        Dim g As Graphics = AutoGraphics(PictureBox1)
        SaikoroDraw4(x)
        g.FillEllipse(Brushes.Red, 25 + x * 80, 25, 10, 10)
    End Sub

    Private Sub SaikoroDraw6(ByVal x As Integer)
        Dim g As Graphics = AutoGraphics(PictureBox1)
        SaikoroDraw4(x)
        g.FillEllipse(Brushes.Black, 12 + x * 80, 25, 10, 10)
        g.FillEllipse(Brushes.Black, 38 + x * 80, 25, 10, 10)

    End Sub
    '自動再描画
    Private Function AutoGraphics(ByVal picSource As PictureBox) As Graphics
        If picSource.Image Is Nothing Then
            picSource.Image = New Bitmap(picSource.ClientRectangle.Width, picSource.ClientRectangle.Height)
        End If

        Return Graphics.FromImage(picSource.Image)

    End Function

それでまぁ、考えていた事はできて満足していたのですが、第6章52回 実技4「オセロ」を見ると全然違う方法みたいです。
で、まねしてサイコロをクラスにして、
    Dim MyDice As New dice
    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint

        Mydice.Draw(e.Graphics)

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        '最初はピンゾロ表示
        For i As Integer = 1 To 3
            Mydice.SpotSet(1, i)     '目を1に設定する?
        Next
       PictureBox1.Invalidate()

End Sub

Public Class dice
    Public Sub Draw(ByVal g As Graphics)

    End Sub
End Class

ここまでやってはたと手が止まってしまいました。オセロをよく読み返したり、4章の内容を読み返したりしてみたのですが、頭がこんがらがるばかりでどうしていいかわかりません。
どのように書いたらいいかご教授いただければ幸いです。