Excelはオセロになりますか?
本日はプログラミングの勉強です
題して「Excelはオセロになりますか?」
前回はExcelでMP3プレイヤーを作成していきましたが、今回はオセロを作成していきます
ゲームスタートのボタンと同時に初期盤面の作成
列の幅や、行の高さについても自動で変更
先行が"○"、後行が"●"となります
石を置きたいセルをダブルクリックすることで石を置いていくことが可能ですが、まだ実装できている機能はさほどありません(; ・`д・´)
とりあえず実装できている機能としては
・ダブルクリックで石を配置
・白、黒の石を交互に配置
・盤面以外への石の配置不可
・既に石が置かれているところへの配置不可
つまりは、盤面上をダブルクリックすれば白と黒の石を交互に配置できるが、盤面上であれば好きなところに置けて、さらに挟んで反転する機能はまだありません
もちろんこれではオセロとして成り立っていないので、まだゲームで遊ぶことはできません
石を配置できる場所の限定や挟んだ後の反転機能をつけると、最低限オセロとしては遊べるようになりそうですね
近日実装させていただきます>_<
最低限の機能ができたら、次はコンピュータ対戦機能やコンピュータの強さを選択できるようにしていきたいですね
Excelマクロはほんと色んなことができると思います
※以下ソース
MicrosoftExcelObject(Sheet1)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim click_row As Integer
Dim click_column As Integer
click_row = Target.Row
click_column = Target.Column
'盤面上のみ石を置けるようにする
If click_row >= 2 And click_row <= 9 And click_column >= 2 And click_column <= 9 Then
Cancel = True 'セルをダブルクリックした際に、編集モードにならないようにする
'既に石が置いてあるマスには石を置けないようにする
If Cells(Target.Row, Target.Column).Value = "" Then
Dim Stn As String
If StnCnt Mod 2 = 1 Then
Stn = "○"
Else
Stn = "●"
End If
Cells(Target.Row, Target.Column).Value = Stn
StnCnt = StnCnt + 1
Else
MsgBox "既に石が置かれています"
End If
Else
MsgBox "そこには石を置けません"
End If
End Sub
標準モジュール
'盤面左上のマスを定義
Const LTOP_ROW As Integer = 2
Const LTOP_COLUMN As Integer = 2
Public StnCnt As Long
Sub GameStart()
'盤面の初期化
Range("B2:I9").Clear
StnCnt = 1
'セルの列/幅の設定
Range("B:I").ColumnWidth = 4
Range("2:9").RowHeight = 25.8
'罫線表示/フォントサイズ設定
With Range("B2:I9")
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Font.Size = 20
End With
Dim Center_Row As Long
Dim Center_Column As Long
Center_Row = LTOP_ROW + 3
Center_Column = LTOP_COLUMN + 3
'初期配置
Cells(5, 5).Value = "○"
Cells(6, 6).Value = "○"
Cells(5, 6).Value = "●"
Cells(6, 5).Value = "●"
Cells(2, 11).Value = "自分・・・○"
Cells(3, 11).Value = "相手・・・●"
End Sub