Excel VBA 質問スレッド №900 (解決済)

ブロック崩しを作りたい

投稿者 : さびっち     投稿日時 : 2022/07/25(Mon) 20:12:12     OS : 未指定     EXCEL : 未指定
VBAでブロック崩しを作りたいです。バーに当たって反射する方法がわかりません。また、ブロックを消すプログラムを知りたいです。
わかる方よろしくお願いします。

Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vkey As Long) As Long
Option Explicit

Dim dt  '時間間隔
Dim x   'ボール位置:X座標
Dim y   'ボール位置:Y座標
Dim vx  'ボール速度:X方向
Dim vy  'ボール速度:Y方向
Dim b   'バー中央位置


Sub Ball()
  dt = Cells(9, 3)
  vx = Cells(5, 3)    '初期速度get
  vy = Cells(5, 4)
  x = Cells(2, 3)     '初期位置get
  y = Cells(2, 4)
  b = Cells(3, 6)
  
 
  Do

   x = x + vx * dt     '位置計算
   y = y + vy * dt
   Cells(3, 3) = x     '位置更新
   Cells(3, 4) = y
   
   Call bar
   Call ref
   Call Bref
   
  
   Cells(6, 3) = vx    '速度更新
   Cells(6, 4) = vy
  
   DoEvents            '操作権get&グラフ描写
   
   Loop
End Sub
Private Sub bar()
If GetAsyncKeyState(37) Then
b = b - 0.3
End If

If GetAsyncKeyState(39) Then
b = b + 0.3
End If
Cells(3, 6) = b
End Sub
 Private Sub ref()
 Dim i
If (x + dt * vx) >= 9.9 Or (x + dt * vx) <= 0.1 Then
vx = -vx
End If

If (y + dt * vy) >= 9.9 Or (y + dt * vy) <= 0.1 Then
vy = -vy
End If
For i = 12 To 15
If x + vx + dt >= Cells(3, 6) - 1 And x + vx * dt <= Cells(3, 6) + 1 Then
If y >= Cells(i, 4) - 0.6 And y <= Cells(i, 4) + 0.6 Then
vy = -vy
End If
End If

If y + vy + dt >= Cells(3, 6) - 1 And y + vy * dt <= Cells(3, 6) + 1 Then
If x >= Cells(i, 3) - 0.6 And x <= Cells(i, 3) + 0.6 Then
vy = -vy
End If
End If
Next
End Sub

Private Sub Bref()

Dim i
Dim j
j = Cells(Rows.Count, 3).End(xlUp).Row

For i = 12 To j
If (x + vx * dt) >= Cells(i, 3) - 0.6 And (x + vx * dt) <= Cells(i, 3) + 0.6 Then
 If y >= Cells(i, 4) - 0.6 And y <= Cells(i, 4) + 0.6 Then
 vx = -vx
 Cells(i, 3) = 20 + Cells(i, 3)
  End If
End If
 
If (y + vy * dt) >= Cells(i, 4) - 0.6 And (y + vy * dt) <= Cells(i, 4) + 0.6 Then
If y >= Cells(i, 3) - 0.6 And y <= Cells(i, 3) + 0.6 Then
 vy = -vy
 Cells(i, 3) = 20 + Cells(i, 3)
End If
End If
Next


End Sub

スポンサーリンク
[返信 1] Re : ブロック崩しを作りたい
投稿者 : anonymous     投稿日時 : 2022/07/25(Mon) 22:30:18
ネット上で"VBA ブロック崩し"などと検索したら参考記事があるようだ。例えば、
https://www.shinko-keirin.co.jp/keirinkan/kojoho/infomation/jissen/26.html

まったく同一の質問を繰り返すのはいかがなものか。
趣味のコード作成だろうから、他人に聞くような性質のものではないのではないか、
というのがコメントが付かなかった理由だろうと思う。自分で研究してください。

[返信 2] Re : ブロック崩しを作りたい
投稿者 : さびっち     投稿日時 : 2022/07/26(Tue) 09:12:43
自分で考えてわかるように努力します。
ありがとうございました。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2026-04-02 05:13:21 )
タイトルとURLをコピーしました