長崎の仙人-時間があれば釣りにいきたい-

佐世保市を中心に釣れない釣りブログをやってます。釣れないので時事ネタなんかも扱ってます。

Excelはオセロになりますか?

本日はプログラミングの勉強です

題して「Excelはオセロになりますか?」

 

前回はExcelでMP3プレイヤーを作成していきましたが、今回はオセロを作成していきます

 

f:id:nagasaki_hermit:20190225164334p:plain

ゲームスタートのボタンと同時に初期盤面の作成

列の幅や、行の高さについても自動で変更

先行が"○"、後行が"●"となります

 

石を置きたいセルをダブルクリックすることで石を置いていくことが可能ですが、まだ実装できている機能はさほどありません(; ・`д・´)

 

f:id:nagasaki_hermit:20190225165038p:plain

とりあえず実装できている機能としては

・ダブルクリックで石を配置

・白、黒の石を交互に配置

・盤面以外への石の配置不可

・既に石が置かれているところへの配置不可

 

つまりは、盤面上をダブルクリックすれば白と黒の石を交互に配置できるが、盤面上であれば好きなところに置けて、さらに挟んで反転する機能はまだありません

もちろんこれではオセロとして成り立っていないので、まだゲームで遊ぶことはできません

石を配置できる場所の限定や挟んだ後の反転機能をつけると、最低限オセロとしては遊べるようになりそうですね

近日実装させていただきます>_<

 

最低限の機能ができたら、次はコンピュータ対戦機能やコンピュータの強さを選択できるようにしていきたいですね

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