※本解説ではMicrosoft 365のバージョンにて解説しており、別バージョンをお使いの場合
アイコンの配置が本解説と相違があることがあります。
エクセル VBAでブロック崩しゲームをつくりました
※本ソースコードは、教科学習情報ページの宮崎県立宮崎西高等学校 溝上 俊彦教諭が作成
されたブロック崩しゲームを参考としてバージョンアップしています。
情報授業実践記録
https://www.shinko-keirin.co.jp/keirinkan/kojoho/infomation/jissen/26.html
ブロック崩しゲームを創る
エクセルシート内

サンプルソース

上のコピーボタンでコピーできます☟
Option Explicit
Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Dim bContinue As Boolean
Dim vx As Single
Dim vy As Single
Dim dt As Single
Dim x As Single
Dim y As Single
Dim Rk As Single
Dim n As Integer
Dim b_px(100) As Single
Dim b_py(100) As Single
Dim b_vx(100) As Single
Dim b_vy(100) As Single
Sub Ball()
dt = Cells(9, 3)
vx = Cells(6, 3)
vy = Cells(6, 4)
x = Cells(3, 7)
y = Cells(3, 8)
Rk = Cells(3, 11)
bContinue = True
CommandButton1.Caption = "STOP"
Do
Calculate
x = x + vx * dt
y = y + vy * dt
Cells(3, 3) = x
Cells(3, 4) = y
Call ボールの壁反射
Call ブロック崩し
Call ラケット
DoEvents
Loop While bContinue = True
End Sub
Private Sub ボールの壁反射()
Select Case Cells(3, 3).Value
Case Is >= 9.65
vx = -1 * vx
Case Is <= 0.35
vx = -1 * vx
End Select
Select Case Cells(3, 4).Value
Case Is >= 9.65
vy = -1 * vy
Case Is <= 0.35
vy = 0
End Select
End Sub
Private Sub ブロック崩し()
For n = 0 To 17
b_px(n) = Cells(6 + n, 7)
b_py(n) = Cells(6 + n, 8)
If y > b_py(n) - 0.75 And y < b_py(n) + 0.75 Then
If x < b_px(n) + 0.45 And x > b_px(n) - 0.45 Then
vy = -1 * vy
Cells(6 + n, 8) = 12
Else
End If
Else
End If
If x > b_px(n) - 0.75 And x < b_px(n) + 0.75 Then
If y < b_py(n) + 0.45 And y > b_py(n) - 0.45 Then
vx = -1 * vx
Cells(6 + n, 8) = 12
Else
End If
Else
End If
Next n
End Sub
Private Sub ラケット()
If GetAsyncKeyState(70) < 0 Then
Rk = Rk - 0.3
End If
If GetAsyncKeyState(74) < 0 Then
Rk = Rk + 0.3
End If
Cells(3, 11) = Rk
If Cells(3, 4) > 1.5 Then
ElseIf Cells(3, 3) > Rk + 1 Then
ElseIf Cells(3, 3) < Rk - 1 Then
Else
vy = -1 * vy
End If
End Sub
Private Sub CommandButton1_Click()
If bContinue = True Then
bContinue = False
CommandButton1.Caption = "START"
Else
Call Ball
End If
End Sub
Private Sub CommandButton2_Click()
CommandButton2.Caption = "RESET"
Cells(3, 3) = Cells(3, 7)
Cells(3, 4) = Cells(3, 8)
For n = 0 To 8
Cells(6 + n, 8) = 9
Next n
For n = 0 To 8
Cells(15 + n, 8) = 8
Next n
End Sub
Private Sub ScrollBar1_Change()
Cells(6, 3) = ScrollBar1.Value
Cells(6, 4) = ScrollBar1.Value
End Sub
エクセルシート内 作成
情報の授業として、以後説明しやすいようにエクセル内の設定を変更していきます。
VBAのコード編集のため開発タグを表示、エクセルマクロ有効にし保存
以前の記事内にて設定方法を説明させていただいているので、そちらを参照ください
マクロ有効エクセルの設定
『開発』メニュー設定
列行を数値に変更

『ファイル』を選択

メニュー最下段の『オプション』を
選択

このようにアルファベットの列が数字に置き換わりました。こちらは、セルの位置を説明しやすいよう設定するものですので不要と思われる方は設定しなくても結構です。
エクセルシート内に設定数値を入力しておく

ブロック、ボール、跳ね返しバーを作る
ゲームの画面ですが、グラフで作ってあります。
必要なブロック、ボール、ラケットの描画

ブロック、ボール、ラケットと
エクセル上で、XとYの位置を
【系列X】、【系列Y】へと範囲選択で
グラフを作っていきます。
・ブロック
系列名『ブロックの位置』が結合縦書きセルの
ため 系列名は『ブロックの位置』と自分でタイピングしましょう
【系列Xの値(X)】
右画面のように、青で囲まれたエクセルシート内を選択しましょう
【系列Yの値(Y)】
右画面のように、緑で囲まれたエクセルシート内を選択しましょう
※見えにくい場合クリックすることで拡大できます。
・ボール
次にボールを設定します。ボールやラケットを作る場合、再度 グラフ外枠を『右クリック』
『データの選択』を選びます。
右、画面のように、追加を選択して、データの範囲を選択しましょう。
【系列名】は『ブロックの位置』
右画面のように、赤で囲まれたエクセルシート内を選択しましょうを選択しましょう
【系列Xの値(X)】
右画面のように、青で囲まれたエクセルシート内を選択しましょう
【系列Yの値(Y)】
右画面のように、緑で囲まれたエクセルシート内を選択しましょう
※見えにくい場合クリックすることで拡大できます。
・ラケット
次にボールを設定します。ボールと同じように、再度 グラフ外枠を『右クリック』
『データの選択』を選びます。
【系列名】は『ラケットの位置』
右画面のように、赤で囲まれたエクセルシート内を選択しましょうを選択しましょう
【系列Xの値(X)】
右画面のように、青で囲まれたエクセルシート内を選択しましょう
【系列Yの値(Y)】
右画面のように、緑で囲まれたエクセルシート内を選択しましょう
※見えにくい場合クリックすることで拡大できます。
点のグラフを整えてブロック崩し画面を作る


左図が現時点の散布図のグラフです。右図が完成図 ブロック崩しらしく点の形を整えていきます。
(別方法)
クリック操作が苦手に思われる方は、エクセルメニューでも同じ操作ができます。
①グラフ内、ブロックの点を『右クリック』で
選択し
②メニュー『書式』を選択
※グラフを選択できていないとメニューは
出ません
③『↘』を『右クリック』することにより
データ系列の書式設定】メニュー
が右にでてきます
ブロックの設定

【マーカー】を選択すると
【>マーカーのオプション】
のメニューがあります。
【>マーカーのオプション】の
【>】マークが出た場合、メニューが折りたたんで表示されているので
『左クリック』で
展開しましょう
【マーカーのオプション】から
【組み込み】を選択し
【種類】を『■』四角に変更し
【サイズ】から作成した図表に合うよう
数字を調整しましょう
例として「30」に設定しています。

【塗りつぶし】メニューから
【塗りつぶし(単色)】選択
【色】から
色を自分の好きな色へ変更しましょう
ボールの設定
ラケットの設定
次回 プログラミング内 と ボタン制御について解説
ここまでで、エクセルで設定するパーツを説明してきました。
ここまででは、プログラムを実行してもエラーとなります
プログラムを制御するために必要な『ボタン制御』と『プログラム』内を次回説明してまいります
コメント