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 のバージョンが上がるにつれ、古いバージョンで作ったプログラムはどこかしらで不具合が出て切替えが必要になると思う。その頃には業務内容とかも変わっていて、その辺含めたアップデートとかにできればいいんだろうけど。