Eraseステートメントで配列を初期化させながらゲーム作成【ExcelVBA】

Eraseで配列を初期化する

固定配列・動的配列によって違う形で、固定配列の場合は要素が初期化され、サイズはそのまま

動的配列の場合は作ったサイズもなしになり記憶領域を解放する

固定配列 → 宣言時に要素数を指定し、変更できない固定サイズの配列

動的配列 → 格納できる要素数を変更しながら扱う、必要に応じて変えられる配列(動的に増減できる)

固定配列 文字列 → サイズは残したまま各要素が長さ0の文字列 ""

固定配列 整数 → サイズは残したまま各要素は0に

固定配列 Variant → サイズは残したまま各要素はEmpty値に(開始値が割り当てられていない)

GetTickCountで秒数をループを時間計測している理由はSleepであれば、その間の操作が受け入れられない

Application.Waitであれば、ゲームとして成り立たない(そもそも稼働停止する為)理由からGetTickCountで時間計測し

一定時間後抜ける形式をとってます

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

実際に使用したサンプルコード

’シートのイベントプロシージャ側

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'選択しているセルが1つ以外であれば終了
If Target.Count <> 1 Then Exit Sub

Dim x As Integer
Dim y As Integer

'小さい方を入れて選択
x = WorksheetFunction.Min(9, Target.Row)
y = WorksheetFunction.Min(9, Target.Column)
Cells(x, y).Select

'ロボ太をアクティブセルに合わせる
Sheet2.Shapes("ロボ太").Left = ActiveCell.Left
Sheet2.Shapes("ロボ太").Top = ActiveCell.Top

'値が油であれば
If ActiveCell.Value = "油" Then
Range("B11").Value = Range("B11").Value + 1
ElseIf ActiveCell.Value = "毒" Then
Range("B11").Value = Range("B11").Value - 5
Beep
End If

'通ったところをクリアする
ActiveCell.ClearContents

End Sub

’標準モジュール側コード

Option Explicit
'時間をミリ秒で取得
Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
'音楽ファイルを再生
Declare PtrSafe Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Public Sub sample()

'点数は0から
Range("B11").Value = 0

'音楽を流す
mciSendString "play " & "music2.mp3", "", 0, 0

'行・列の変数の宣言
Dim 行 As Integer
Dim 列 As Integer

'開始時間を入れる用の変数
Dim 開始時間 As Long

'配列を1-9で2次元で文字列
Dim 配列(1 To 9, 1 To 9) As String

'あぶらの数
Dim 油の数 As Integer: 油の数 = 1
Dim cnt As Integer

'ゲームの時間用の変数
Dim ゲーム開始 As Long
ゲーム開始 = GetTickCount

'無限ループ
Do While GetTickCount - ゲーム開始 < 30000

For cnt = 1 To 油の数

行 = WorksheetFunction.RandBetween(1, 9)
列 = WorksheetFunction.RandBetween(1, 9)

'3で割り切れた場合は毒、それ以外は油
If cnt Mod 3 = 0 Then
配列(行, 列) = "毒"
Else
配列(行, 列) = "油"
End If

Next

'指定したセルに配列を入れる
Range("A1", "I9").Value = 配列

'油をとる時間をつくる
開始時間 = GetTickCount

'経過時間が3000ミリ秒より小さい間
Do While GetTickCount - 開始時間 < Range("F11").Value * 2000

'OSに制御を渡す
DoEvents

Loop

'配列を初期化
Erase 配列

'1回ごとに油の数を増やす
油の数 = 油の数 + 1

Loop

'音楽を停止
mciSendString "stop " & "music2.mp3", "", 0, 0

'点数を表示する
MsgBox "あなたの点数は" & Range("B11").Value

End Sub

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です