上級34回のコード

 #If  VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) #Else 
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) #End  If
Private Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long
Public flag As Boolean
Private xy(0 To 1)
Private tekis() As Integer
Sub StageRead()
   Dim gyo As Integer
   Dim retu As Integer
   Dim menID As Integer
   Dim i As Integer
   
   Dim masus() As String
   Dim tekis() As String
   Dim tekiData() As String
   Dim mys() As String
   
   Dim teki As Variant
   
   Dim r As Range
   
   Dim ws1 As Worksheet
   Dim ws2 As Worksheet
   Dim ws3 As Worksheet
   
   Set ws1 = ThisWorkbook.Worksheets("game")
   Set ws2 = ThisWorkbook.Worksheets("設定")
   Set ws3 = ThisWorkbook.Worksheets("面データ")
   
   ws2.Range("B8:K10") = ""
   
   menID = 1
   
   masus = Split(ws3.Cells(menID + 1, 4), ",")
   
   
   i = 0
   
   For gyo = 1 To 30
       For retu = 1 To 66
           Set r = ws1.Range(ws1.Cells(gyo, retu + 4), ws1.Cells(gyo, retu + 4))
           
           Select Case Val(masus(i))
               Case 1
                   r.Interior.Color = RGB(0, 0, 0)
               Case 2
                   r.Interior.Color = RGB(255, 0, 0)
               Case Else
                   r.Interior.ColorIndex = xlNone
           End Select
           i = i + 1
       Next retu
   Next gyo
   
   tekis = Split(ws3.Cells(menID + 1, 3), ":")
   
   i = 0
   
   For Each teki In tekis
   
       tekiData = Split(teki, ",")
       ws2.Cells(8, 2 + i) = tekiData(0)
       ws2.Cells(9, 2 + i) = tekiData(1)
       ws2.Cells(10, 2 + i) = tekiData(2)
       
       i = i + 1
   Next
   
   mys = Split(ws3.Cells(menID + 1, 2), ",")
   ws2.Cells(13, 2) = mys(0)
   ws2.Cells(14, 2) = mys(1)
   
End Sub
Sub StageCapture()
   Dim gyo As Integer
   Dim retu As Integer
   Dim masu As Integer
   
   Dim men As String
   Dim my As String
   Dim teki As String
   Dim tekis As String
   
   Dim r As Range
   
   Dim ws1 As Worksheet
   Dim ws2 As Worksheet
   Dim ws3 As Worksheet
   
   Set ws1 = ThisWorkbook.Worksheets("面作成用")
   Set ws2 = ThisWorkbook.Worksheets("設定")
   Set ws3 = ThisWorkbook.Worksheets("面データ")
   
   For gyo = 1 To 30
       For retu = 1 To 66
           Set r = ws1.Range(ws1.Cells(gyo, retu + 4), ws1.Cells(gyo, retu + 4))
           
           Select Case r.Interior.Color
               Case RGB(0, 0, 0)
                   masu = 1
               Case RGB(255, 0, 0)
                   masu = 2
               Case Else
                   masu = 0
           End Select
           
           men = men & masu & ","
           
           If r.Value = "◎" Then
               my = retu + 4 & "," & gyo
               
           ElseIf r.Value <> "" Then
           
               For i = 0 To 3
                   If r.Value = ws2.Cells(i + 2, 2).Value Then
                       teki = i & "," & retu + 4 & "," & gyo
                       tekis = tekis & teki & ":"
                   End If
               Next i
           End If
           
           
       Next retu
   Next gyo
   
   men = Left(men, Len(men) - 1)
   tekis = Left(tekis, Len(tekis) - 1)
   
   gyo = 2
   
   Do While ws3.Cells(gyo, 2) <> ""
       gyo = gyo + 1
   Loop
   
   ws3.Cells(gyo, 2) = my
   ws3.Cells(gyo, 3) = tekis
   ws3.Cells(gyo, 4) = men
   
End Sub
Sub keyInput()
   
   If GetAsyncKeyState(vbKeyLeft) Then
   
       Call my_move(-1, 0)
       
   ElseIf GetAsyncKeyState(vbKeyRight) Then
   
       Call my_move(1, 0)
       
   ElseIf GetAsyncKeyState(vbKeyUp) Then
   
       Call my_move(0, -1)
       
   ElseIf GetAsyncKeyState(vbKeyDown) Then
   
       Call my_move(0, 1)
       
   End If
End Sub

Sub my_move(x, y)
   
   Dim r As Range
   
   Set r = Range(Cells(xy(1) + y, xy(0) + x), Cells(xy(1) + y, xy(0) + x))
   If r.Interior.Color = RGB(255, 0, 0) Then
       Cells(xy(1), xy(0)) = ""
       xy(0) = xy(0) + x
       xy(1) = xy(1) + y
       MsgBox "Goooooooooool"
       Worksheets("game").CommandButton1.caption = "スタート"
       flag = False
       
   ElseIf r.Interior.Color <> RGB(0, 0, 0) Then
       Cells(xy(1), xy(0)) = ""
       xy(0) = xy(0) + x
       xy(1) = xy(1) + y
       
   End If
End Sub
Sub tekiMove(c As Long, n As Integer)
   Dim s As Integer
   
   Dim r As Range
   Dim x As Integer
   Dim y As Integer
   Dim muki As Integer
   
   Select Case tekis(0, n)
       Case 0:
           s = 3
       Case 1:
           s = 4
   
   End Select
   
   If c Mod s = 0 Then
   
       Select Case tekis(0, n)
           Case 0:
               muki = Int(4 * Rnd + 1)
               
               Select Case muki
                   Case 1:
                       x = -1
                       y = 0
                   Case 2:
                       x = 1
                       y = 0
                   Case 3:
                       x = 0
                       y = -1
                   Case Else:
                       x = 0
                       y = 1
               End Select
           Case 1:
           
               If c Mod s * 2 = 0 Then
               
                   If xy(0) - tekis(1, n) < 0 Then
                       x = -1
                   Else
                       x = 1
                   End If
               Else
                   If xy(1) - tekis(2, n) < 0 Then
                       y = -1
                   Else
                       y = 1
                   End If
               End If
       
       End Select
       
       
       
       Set r = Range(Cells(tekis(2, n) + y, tekis(1, n) + x), Cells(tekis(2, n) + y, tekis(1, n) + x))
   
       If r.Interior.Color <> RGB(0, 0, 0) Then
           Cells(tekis(2, n), tekis(1, n)) = ""
           tekis(1, n) = tekis(1, n) + x
           tekis(2, n) = tekis(2, n) + y
       End If
   End If
End Sub
Sub game()
   Call StageRead
   Dim i As Integer
   Dim j As Integer
   
   Dim c As Long
   
   
   Dim tekiNum As Integer
   Dim tekiMoji(0 To 3) As String
   
   Dim ws1 As Worksheet
   Dim ws2 As Worksheet
   
   Set ws1 = ThisWorkbook.Worksheets("game")
   Set ws2 = ThisWorkbook.Worksheets("設定")
   
   Randomize
   
   For i = 0 To 3
       tekiMoji(i) = ws2.Cells(2 + i, 2)
   Next i
   
   teki_num = 0
   
   Do While ws2.Cells(8, tekiNum + 2) <> ""
       tekiNum = tekiNum + 1
   Loop
   
   ReDim tekis(2, tekiNum - 1)
   
   For j = 0 To tekiNum - 1
       For i = 0 To 2
           tekis(i, j) = ws2.Cells(8 + i, 2 + j)
       Next i
       
   Next j
   
   ws1.Range("L2").Select
   
   
   xy(0) = ws2.Cells(13, 2)
   xy(1) = ws2.Cells(14, 2)
   
   Do While flag
       
       Cells(xy(1), xy(0)) = "◎"
 
       For i = 0 To tekiNum - 1
           Cells(tekis(2, i), tekis(1, i)) = tekiMoji(tekis(0, i))
       Next i
       
       Sleep 50
       DoEvents
       
       Call keyInput
       
       For i = 0 To tekiNum - 1
           Call tekiMove(c, i)
       Next i
       
       i = 0
       Do While i < tekiNum And flag
           If xy(0) = tekis(1, i) And xy(1) = tekis(2, i) Then
               flag = False
               Worksheets("game").CommandButton1.caption = "スタート"
               MsgBox "Game Over"
               
           End If
           i = i + 1
       Loop
       
       Range("L2").Select
       
       c = c + 1
       
   Loop
   
   Range("A1:BA30") = ""
End Sub
Private Sub CommandButton1_Click()
   
   If flag Then 'ストップ処理
       flag = False
       CommandButton1.caption = "スタート"
       
   Else         'スタート処理
       flag = True
       CommandButton1.caption = "ストップ"
       Call game
       
   End If
End Sub

この記事が気に入ったらサポートをしてみませんか?