※本解説ではMicrosoft 365のバージョンにて解説しており、別バージョンをお使いの場合
アイコンの配置が本解説と相違があることがあります。
エクセル VBAでブロック崩しゲーム
※本ソースコードは、教科学習情報ページの宮崎県立宮崎西高等学校 溝上 俊彦教諭が作成
されたブロック崩しゲームを参考としてバージョンアップしています。
情報授業実践記録
https://www.shinko-keirin.co.jp/keirinkan/kojoho/infomation/jissen/26.html
ブロック崩しゲームを創る
前回が表 とすれば 今回は裏側の設計
もし、『開発ボタン』、『マクロ有効』等の準備ができていなければ過去記事をご参考ください。
プログラムが動く合図をするボタンを作成する
ボタンの配置
CommandButton1設置
CommandButton2設置
上と同様に2つ目のボタンを設置しましょう
ScrollBar1 設置
プログラムの説明
プログラムは前回の記事を参考にされてください。コピーで使用可能です。
プログラムを見る前に
プログラミングでまず、なにを知るべきか プログラムを読めるようになるには
(プロシージャ)procedure を理解する必要があります。
(プロシージャ)procedure とは
Sub プロシージャの名前( )
End Sub までの ひとまとめ
パーツの事をプロシージャと呼びます。
車であれば、ドアやタイヤ、エンジン
とパーツが分かれているようにイメージすると理解しやすいです
区切りを判断できて、理解できるようにがまず一歩です
キーボードから入力取得
キー入力を判定するにはWindows APIの、GetAsyncKeyState を使用します。
ByVal は値を渡す宣言です。 【vkey】という値を入れる箱を Longという型で宣言し
Long型が扱える数字の範囲は、-2,147,483,648 ~ +2,147,483,647 です。
キーボードから入力されたキーの決められた番号を Integer型で宣言して 値を渡しています。
Integer型が扱える数字の範囲は、-32,768 ~ +32,767 です。
プログラム上で、扱える範囲を超える数値を渡してしまうと、オーバーフローエラーになってしまう
ので、文字なのか数字なのかの種類、何桁、少数はあるのかなど、正しいデータ型を選びましょう。
変数宣言
変数宣言は 【箱】作り
型を決めた、変数(値を入れる箱)を用意していきます。
関係性のある変数名を付けることが一般的です。
bContinue は boolean型 (正しいか違うか、真/偽をいれる型
vz ~ Rk はSingle型 単精度浮動小数点型
n は Integer型
b_px(100) ~ b_vy(100) は静的配列の
宣言で Dim 変数名(要素数) As 型名
要素数は 100ですので
b_pxa(100) の変数宣言は 左図のような
0から100までの横並びの箱部屋を作っていく
イメージをしましょう。
配列の考え方は、処理を早くしたり、複雑なプログラムをすっきりするために重要ですので理解しておきましょう。
Sub ball 部
dt など 変数(箱)にセルの数字を代入しています。左図のセルと比較しながら見ていきましょう
dtには Cell(9,3) 9行目(↓上から数えて9番目)、3列目(→左から数えて3番目)
0.1が dtの中に入ります。
それぞれ、どの位置のセルの値がどの変数に入るか、考えてみましょう。
bContinue には True(真)が入ります。
CommandButton1.Caption とは ボタンに表示させる文字の代入です。 ”STOP”が入ります。
繰り返し文 Do while
プログラムを考える際に重要な
繰り返しの処理です。
終わる条件 が満たされるまで 繰り返します。
Calculate はプログラム内の再計算をする処理です。
式
x = x +vx × dt
y = x +vy × dt 計算したx,yを
Cell(3,3) へ x を Cell(3,4)へ y を代入します。
Call文で 「ボールの壁反射」、「ブロック崩し」、「ラケット」のプロシージャを呼び出し
実行します。
DoEventsは、
実行中のマクロを一時的にExcelにキー操作やマウスクリックなどのオペレーションシステムの
メッセージ処理をする機会を与えるための命令です。
ループを抜ける条件は ”bContinue”にTrueになれば、終了します。
Sub ボールの壁反射
Select Case 条件処理
Select Case の条件処理です。
指定した変数の値が 条件にあう場合
処理をします。
今回は まず Cells(3,3)ボールX軸の位置の値が
Case Is 0.95以上の場合
-1 を vxにかけて vx に入れる
Case Is 0.35以下の場合
-1 を vxにかけて vx に入れる
vxはボールの進む速さ(ボールの進む向きでもある) ”-1”をかけることで 逆側へと進みだす。
Y軸も同様に考えることができる。
ソース解説 次回
ブロックが実際に消えるための処理
ラケットで跳ね返す処理
コマンドボタンの処理 を解説いたします。
コメント