前回は白の駒の動きをつくりました。
今回は、黒の駒の動きをつくっていきます!
が!新規追加は黒のポーンだけです。
なぜなら、ポーン以外は前回つくった関数を流用できるからです。
とりあえずポーンは以下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
Function 黒のポーン(ByVal target As Range, Piece_Color_B As Long, Piece_Color_W As Long) As Long() Dim i, j As Long Dim result() As Long Dim arr As Variant i = 0 m = target.Column arr = Array(1, 2) For j = 0 To 1 n = target.Row + arr(j) If n > 0 And m > 0 Then If Cells(n, m).Value = "" Then If j = 1 And Cells(n + 1, m).Value "" Then Else ReDim Preserve result(1, i) result(0, i) = n result(1, i) = m i = i + 1 End If End If End If Next n = target.Row + 1 arr = Array(-1, 1) For j = 0 To 1 m = target.Column + arr(j) If n > 0 And m > 0 Then If Cells(n, m).Value "" And Cells(n, m).Font.Color = Piece_Color_W Then ReDim Preserve result(1, i) result(0, i) = n result(1, i) = m i = i + 1 End If End If Next If i = 0 Then ReDim Preserve result(0, 0) Else End If 黒のポーン = result() End Function |
前回と今回つくった関数には、引数が3つありました。
現在選択しているセルの位置と、ピースの色(白)とピースの色(黒)です。
しかし実際は、ピースの色は片方しか使っていなかったかと思います。
もっというと、「敵の色」しか必要ありませんでした。
なので、引数をひとつ減らしましょう。
ついでに関数名の「白の」も消しちゃいましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Function ナイト(ByVal target As Range, piece_enemy As Long) As Long() Dim i, j As Long Dim result() As Long Dim arr_row() As Variant Dim arr_col() As Variant arr_row() = Array(1, 2, 2, 1, -1, -2, -2, -1) arr_col() = Array(2, 1, -1, -2, -2, -1, 1, 2) i = 0 For j = 0 To 7 n = target.Row + arr_row(j) m = target.Column + arr_col(j) If n > 0 And m > 0 Then If Cells(n, m).Value = "" Or Cells(n, m).Font.Color = piece_enemy Then ReDim Preserve result(1, i) result(0, i) = n result(1, i) = m i = i + 1 End If End If Next If i = 0 Then ReDim Preserve result(0, 0) Else End If ナイト = result() End Function |
こんなかんじになりました。
呼び出し元も良い感じに改変してあげてください(GitHubにあります)
さて、最後にターン切り替えを追加してあげて、ひとまず完成です。
(↓駒が動いたあとにターン切り替えする箇所)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Else '駒ではない場合' If Not Piece.Value = "" Then If target.Interior.Color = SelectInterior_Color Then target.Value = Range(Piece.Value) target.Font.Color = Range(Piece.Value).Font.Color Range(Piece.Value).Value = "" Piece.Value = "" If Turn_W Then Turn.Value = "黒" Else Turn.Value = "白" End If End If Call 背景色初期化 Piece_Select = True Piece.Value = "" End If End If |
ここまで実装して、アナログでやるのと同じくらいには遊べます。
一応、次回もある予定です!
ではまた次回