Visual basic でのオセロ作成(GUI)

■GUIでのオセロ。
Bluetoothを使ったスマホの接続で行き詰ったので、少し気分転換。
オセロのプログラムは何度かやっているけど、今回はGUI(Graphical User Interface)で作成。ちなみに、バッチファイルやPowershellのコマンドライン上に置く位置を入力するものはCUI。

Visual basic の新しいプロジェクトから Windows フォームアプリケーション(.NET Framework)で作成。


ツールボックスから TableLayoutPanel で8×8のテーブルを作成し、それぞれに Label を追加。TableLayoutPanel のクリック時に MouseEvent を取得し、カーソル位置から各セルのどこを指定したか判断。そこから置いた位置を取得する。オセロのロジックなどはCUIと同様。


以前、Python で作成した際のロジックを転用。

    Private Function checkReversible(board(,) As String, stoneposX As Integer, stoneposY As Integer)

        Dim reversibleList As List(Of List(Of Integer)) = New List(Of List(Of Integer))({})

        Dim numlist As List(Of Integer) = New List(Of Integer)({-1, 0, 1})
        For Each i In numlist
            For Each j In numlist
                If board(stoneposX + i, stoneposY + j) = stoneB_ Then
                    Dim tempList As List(Of List(Of Integer))
                    tempList = checkLine(i, j, New List(Of Integer)({i, j}), stoneposX, stoneposY, board)
                    reversibleList.AddRange(tempList)
                End If
            Next
        Next
        Return reversibleList
    End Function

    Private Function checkLine(i As Integer, j As Integer, inc As List(Of Integer), stoneposX As Integer, stoneposY As Integer, board(,) As String)

        Dim tempList As List(Of List(Of Integer)) = New List(Of List(Of Integer))({})

        If board(stoneposX + i, stoneposY + j) = "-" Then
            tempList.Clear()
        ElseIf board(stoneposX + i, stoneposY + j) = stoneA_ Then
            tempList.Add(New List(Of Integer)({stoneposX + i, stoneposY + j}))
        ElseIf board(stoneposX + i, stoneposY + j) = stoneB_ Then
            tempList.Add(New List(Of Integer)({stoneposX + i, stoneposY + j}))
            Dim Temp As List(Of List(Of Integer)) = checkLine(i + inc(0), j + inc(1), inc, stoneposX, stoneposY, board)
            If Temp.Count = 0 Then
                tempList.Clear()
            Else
                tempList.AddRange(Temp)
            End If
        End If

        Return tempList
    End Function

今まで .NET は、Visual basic と C# がサポートされていたけど、今後は C# のみになるらしい。Windows のバージョンが上がるにつれ、古いバージョンで作ったプログラムはどこかしらで不具合が出て切替えが必要になると思う。その頃には業務内容とかも変わっていて、その辺含めたアップデートとかにできればいいんだろうけど。