Excelでドラクエのバトル画面を真似してみました。
VBAを少し勉強したときに、練習用に作ったもの。
フォントの色とかサイズとかはあらかじめセルに設定しておくと、モジュールが簡潔になるかもしれません。
シート間の移動、範囲のコピーペースト、関数の活用、フラグによる処理の変更、Sleep関数のなどなど、やりたいことは一通りできたと思います。
基本設定
VBA
ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Close savechanges:=False
End Sub
Private Sub Workbook_Open()
Worksheets("ゲームスタート").Visible = True
Worksheets("ゲームスタート").Select
End Sub
- Bookが閉じるときにsaveせずに閉じる
- Bookが開いたら、ゲームスタートシートを表示する。
基本設定(標準モジュール)
Public Gname As String
Public Time As Integer
Public Runtime As Integer
Public ATtime As Integer
Public Const Mypass As String = ""
変数を設定
- Gname: 主人公の名前
- Time: システム全体のフラグ
- Runtime: 逃げるコマンド (スライム)、じゅもんコマンド (はぐれメタル)を押した回数
- ATtime: たたかうコマンドを押した回数 (はぐれメタルのみ)
- Mypass: シート保護用のpassを設定
基本設定(標準モジュール)
Sub 結合(範囲 As Range, 値 As String, フォントサイズ As Integer, 字色 As Integer, 範囲色 As Integer)
範囲.Merge
With 範囲
.Value = 値
.Font.Name = "メイリオ"
.Font.Size = フォントサイズ
.Font.ColorIndex = 字色
.Interior.ColorIndex = 範囲色
End With
End Sub
セルの結合を設定
- 結合する範囲、結合後の値、フォントサイズ、フォントの色、背景色を引数に指定。
- 引数から範囲を結合して、値を表示する。
基本設定(標準モジュール)
Sub 結合解除(範囲 As Range, 値 As String, フォントサイズ As Integer, 字色 As Integer, 範囲色 As Integer)
範囲.UnMerge
With 範囲
.Value = 値
.Font.Name = "メイリオ"
.Font.Size = フォントサイズ
.Font.ColorIndex = 字色
.Interior.ColorIndex = 範囲色
End With
End Sub
セルの結合解除を設定
基本設定(標準モジュール)
Sub コメント(範囲 As Range, コメント As String, サイズ As Integer)
With 範囲
.Value = コメント
.Font.Name = "メイリオ"
.Font.ColorIndex = 2
.Font.Size = サイズ
End With
End Sub
コメント出力を設定
- コメントを設定する範囲、コメント内容、フォントサイズを引数に指定。
- 引数から、コメントを出力。
基本設定(標準モジュール)
Sub フィールドコピー(元 As Range, 先 As Range)
元.Copy
先.PasteSpecial Paste:=xlPasteAll
Range("A1").Select
Application.CutCopyMode = False
End Sub
画像の貼り換え(アニメーション)を設定
- コピー元の範囲、貼り付け先の範囲を指定。
- 画像をコピーして、貼り付け
ゲームスタート
Excelシート設定
ゲームスタートシート
B4:ゲームをはじめます
B5:ボタンをクリックしてください
B6:E9:ゲーム開始ボタン
G6:I9:アニメーションボタン
VBA
基本設定(標準モジュール)
Sub 開始()
Worksheets("名前").Visible = True
Worksheets("名前").Select
End Sub
Sub アニメーション()
Worksheets("動作確認").Visible = True
Worksheets("動作確認").Select
ActiveSheet.Unprotect Mypass
フィールドコピー Range("はぐれ2"), Range("確認")
Range("A1").Select
End Sub
Sheet(ゲームスタート)
Private Sub Worksheet_Deactivate()
Worksheets("ゲームスタート").Visible = False
End Sub
- 開始ボタンがクリックされると、名前シートを表示する。
- アニメーションボタンがクリックされると、動作確認シートを表示する。
- ゲームスタートシートから離れると、ゲームスタートシートを隠す。
勇者の名前を選択
VBA
Sheet(名前)
Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
ActiveSheet.Unprotect Mypass
Cells.Interior.Color = vbBlack
名前
Time = 1
End Sub
- 名前シートが表示されたら、画面の保護を解除
- Mypassでシートのロックを解除。
- シート全体の背景色を黒に。
- 名前モジュールを呼び出す。
基本設定(標準モジュール)
Sub 名前()
コメント Range("B7"), "あなたのなまえをおしえてください", 20
Range("B8:E8").Merge
With Range("B8")
.Select
.Value = ""
.Interior.Color = vbWhite
.Font.Name = "メイリオ"
.Font.Size = 16
.Font.Color = vbBlack
.Validation.Delete
.Validation.Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator:=xlBetween
.Validation.IMEMode = xlIMEModeKatakana
End With
SendKeys "{F2}"
End Sub
- コメントを表示
- 名前入力欄を設定(B8:E8)
- SendKeys "{F2}"で名前入力欄を入力受付状態にする。
Sheet(名前)
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("B8").Address Then
If Time <> 1 Then Exit Sub
If Target.Value = "" Then
With Range("B6")
.Value = "もういちどききます"
.Font.Name = "メイリオ"
.Font.Color = vbWhite
.Font.Size = 16
End With
Range("B8").Select
Else
Gname = Range("B8").Value
Range("B6").Value = ""
With Range("B7")
.Value = "あなたのなまえは「" & Gname & "」でよろしいですか?"
.Font.Name = "メイリオ"
.Font.Color = vbWhite
.Font.Size = 20
End With
Range("B8:E9").Interior.Color = vbBlack
Range("B8").Validation.Delete
Range("B8:E9").UnMerge
結合 Range("B10:C11"), "は い", 20, 6, 46
Range("B10:C11").Font.Bold = True
Range("B10").HorizontalAlignment = xlCenter
結合 Range("E10:F11"), "いいえ", 20, 6, 46
Range("E10:F11").Font.Bold = True
Range("E10").HorizontalAlignment = xlCenter
Range("A1").Select
End If
End If
End Sub
- 名前が空欄なら、名前の入力を受け付ける。
- 名前が入力されていれば、入力を名前変数Gnameに格納し、表示。
- 名前入力欄を削除し、はい、いいえを表示させる。
Sheet(名前)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Range("B10:C11").Address Then
If Time = 1 Then
結合 Range("B10:C11"), "スライム", 20, 6, 46
結合 Range("E10:F11"), "はぐれメタル", 16, 6, 46
コメント Range("B7"), "どちらとたたかいますか?", 20
Range("A1").Select
Time = Time + 1
Else
Worksheets("スライム").Visible = True
Worksheets("スライム").Select
End If
ElseIf Target.Address = Range("E10:F11").Address Then
If Time = 1 Then
With Range("B6")
.Value = "もういちどききます"
.Font.Name = "メイリオ"
.Font.Color = vbWhite
.Font.Size = 16
End With
名前
結合解除 Range("B10:C11"), "", 20, 1, 1
結合解除 Range("E10:F11"), "", 20, 1, 1
Else
Worksheets("はぐれメタル").Visible = True
Worksheets("はぐれメタル").Select
End If
End If
End Sub
- はいが選択されたとき、スライムとはぐれメタルの選択を表示。
- いいえが選択されたとき、名前の受付に戻る
- スライムが選択されたらスライムシートに、はぐれメタルがせんたくされたらはぐれメタルシートに移動。
Sheet(名前)
Private Sub Worksheet_Deactivate()
Cells.Clear
ActiveSheet.Protect Mypass
Worksheets("名前").Visible = False
End Sub
- 名前シートから移動したら名前シートを非表示にし、Mypassでロックする。
対スライム
VBA
Sheet(スライム)
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
- sleep関数が使えるようにする
スライム(標準モジュール)
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
- 標準モジュールでもsleep関数が使えるようにする
スライム(標準モジュール)
Sub スラコメ(コメ範囲 As Range, コメ As String, コメ色 As Integer, 範囲色 As Integer)
コメ範囲.Value = コメ
With コメ範囲
.Value = コメ
.Font.ColorIndex = コメ色
.Interior.ColorIndex = 範囲色
End With
End Sub
- スライムのコメント表示用
スライム(標準モジュール)
Sub スラ基準()
フィールドコピー Range("スライム1"), Range("スライム基準")
End Sub
- スライムの基準画像を表示
スライム(標準モジュール)
Sub コマンドコピー()
Range("コマンド").Copy
Range("スラ_コマンド").PasteSpecial Paste:=xlPasteAll
CutCopyMode = False
Range("スライム2").Copy
Range("スライム基準").PasteSpecial Paste:=xlPasteAll
Range("スライムコメント3").Font.ColorIndex = 2
Range("スライムコメント3").Interior.ColorIndex = 1
Range("DG10").Font.ColorIndex = 6
Range("DG10").Interior.ColorIndex = 46
Range("DG19").Font.ColorIndex = 6
Range("DG19").Interior.ColorIndex = 46
Range("DG28").Font.ColorIndex = 6
Range("DG28").Interior.ColorIndex = 46
Range("DG37").Font.ColorIndex = 6
Range("DG37").Interior.ColorIndex = 46
Application.CutCopyMode = False
Range("A1").Select
End Sub
- たたかう、じゅもん、とくぎ、にげるのコマンドを表示
Sheet(スライム)
Private Sub Worksheet_Activate()
ActiveSheet.Unprotect Mypass
Application.EnableEvents = False
Runtime = 1
Time = 1
Cells.ClearContents
Range("CZ1:HA66").ClearFormats
Range("CZ1:HA66").Interior.ColorIndex = 1
Range("スライムコメント3").Interior.ColorIndex = 1
スラ基準
スラコメ Range("スライムコメント1"), "スライムがあらわれた!!", 2, 1
Sleep 700
スラコメ Range("スライムコメント2"), "「ぼくはわるいスライムじゃないよ」", 2, 1
Sleep 700
スラコメ Range("スライムコメント3"), Gname & "はどうする?", 2, 1
Sleep 700
コマンドコピー
Range("A1").Select
Application.EnableEvents = True
End Sub
- スライムシートが表示されたら、初期画面を表示
- ↓セル範囲名と初期画面はこんな感じ
Sheet(スライム)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Time = 1 Then
If Target.Address = Range("DG10:EG17").Address Then
スラたたかう
Time = 2
ElseIf Target.Address = Range("DG19:EG26").Address Then
スラじゅもん
Time = 2
ElseIf Target.Address = Range("DG28:EG35").Address Then
スラとくぎ
Time = 2
ElseIf Target.Address = Range("DG37:EG44").Address Then
If Runtime = 1 Then
スラにげる1
ElseIf Runtime = 2 Then
スラにげる2
ElseIf Runtime = 3 Then
スラにげる3
Time = 2
End If
End If
ElseIf Time = 2 Then
If Target.Address = Range("L72:CN76").Address Then
Worksheets("ゲームスタート").Visible = True
Worksheets("ゲームスタート").Select
End If
End If
End Sub
- 各コマンドを押したときの処理。
- Time = 2 の時は最終的に「GAME OVER」か「GAME CLEAR」の状態になるので、スライムコメント3をクリックするとゲーム開始に戻る。
- にげるは3回クリック可能、クリックした回数に応じて処理が変わる。
スライム(標準モジュール)
Sub スラたたかう()
スラコメ Range("DG19:EG26"), "", 2, 1
スラコメ Range("DG28:EG35"), "", 2, 1
スラコメ Range("DG37:EG44"), "", 2, 1
スラコメ Range("スライムコメント1"), Gname & "のこうげき", 2, 1
スラコメ Range("スライムコメント2"), "", 2, 1
スラコメ Range("スライムコメント3"), "", 2, 1
Sleep 1000
スラコメ Range("スライムコメント2"), "「なぐるなんて、ひどいじゃないか」", 2, 1
Sleep 1000
スラコメ Range("スライムコメント3"), "「しゃくねつ!!」", 2, 1
フィールドコピー Range("スライム3"), Range("スライム基準")
Sleep 600
フィールドコピー Range("スライム9"), Range("スライム基準")
Sleep 600
フィールドコピー Range("スライム10"), Range("スライム基準")
Sleep 600
フィールドコピー Range("スライム8"), Range("スライム基準")
Sleep 1000
スラコメ Range("スライムコメント1"), "「なぐるなんて、ひどいじゃないか」", 2, 1
スラコメ Range("スライムコメント2"), "「しゃくねつ!!」", 2, 1
スラコメ Range("スライムコメント3"), "はげしいほのおが" & Gname & " を焼き尽くす", 2, 1
Sleep 1000
スラコメ Range("スライムコメント1"), "「しゃくねつ!!」", 2, 1
スラコメ Range("スライムコメント2"), "はげしいほのおが" & Gname & " を焼き尽くす", 2, 1
スラコメ Range("スライムコメント3"), Gname & "は死んでしまった", 2, 1
Sleep 1000
スラコメ Range("スライムコメント1"), "はげしいほのおが" & Gname & " を焼き尽くす", 2, 1
スラコメ Range("スライムコメント2"), Gname & "は死んでしまった", 2, 1
スラコメ Range("スライムコメント3"), "Game Over", 3, 2
End Sub
- たたかうと選択したときの処理。
- フィールドコピーで画像を変更してアニメにしつつ、スラコメでコメントを切り替える。
- しゃくねつで反撃されて「GAME OVER」。
スライム(標準モジュール)
Sub スラじゅもん()
スラコメ Range("DG10:EG17"), "", 2, 1
スラコメ Range("DG28:EG35"), "", 2, 1
スラコメ Range("DG37:EG44"), "", 2, 1
スラコメ Range("スライムコメント1"), Gname & "はギガデインをとなえた!", 2, 1
スラコメ Range("スライムコメント2"), "", 2, 1
スラコメ Range("スライムコメント3"), "", 2, 1
Sleep 1000
スラコメ Range("スライムコメント2"), "はげしいらいげきがスライムをおそう", 2, 1
フィールドコピー Range("スライム11"), Range("スライム基準")
Sleep 600
フィールドコピー Range("スライム12"), Range("スライム基準")
Sleep 600
フィールドコピー Range("スライム13"), Range("スライム基準")
Sleep 600
フィールドコピー Range("スライム14"), Range("スライム基準")
Sleep 1000
スラコメ Range("スライムコメント3"), "スライムをたおした!", 2, 1
フィールドコピー Range("はぐれ2"), Range("スライム基準")
Sleep 1000
スラコメ Range("スライムコメント1"), "はげしいらいげきがスライムをおそう", 2, 1
スラコメ Range("スライムコメント2"), "スライムをたおした!", 2, 1
スラコメ Range("スライムコメント3"), "「ふはは、よくぞわたしがまおうだとみやぶった」", 2, 1
Sleep 600
フィールドコピー Range("まおう2"), Range("スライム基準")
Sleep 600
フィールドコピー Range("まおう3"), Range("スライム基準")
Sleep 600
フィールドコピー Range("まおう1"), Range("スライム基準")
スラコメ Range("スライムコメント1"), "スライムをたおした!", 2, 1
スラコメ Range("スライムコメント2"), "「ふはは、よくぞわたしがまおうだとみやぶった」", 2, 1
スラコメ Range("スライムコメント3"), "なんと、まおうがあらわれた!", 2, 1
Sleep 750
スラコメ Range("スライムコメント1"), "「ふはは、よくぞわたしがまおうだとみやぶった」", 2, 1
スラコメ Range("スライムコメント2"), "なんと、まおうがあらわれた!", 2, 1
スラコメ Range("スライムコメント3"), Gname & "のれんぞくこうげき!!", 2, 1
Sleep 750
スラコメ Range("スライムコメント1"), "ふはは、よくぞわたしがまおうだとみやぶっ", 2, 1
スラコメ Range("スライムコメント2"), Gname & "のれんぞくこうげき!!", 2, 1
スラコメ Range("スライムコメント3"), Gname & "はメラガイアーをとなえた", 2, 1
フィールドコピー Range("まおう4"), Range("スライム基準 ")
Sleep 600
フィールドコピー Range("まおう5"), Range("スライム基準")
Sleep 600
スラコメ Range("スライムコメント1"), Gname & "のれんぞくこうげき!!", 2, 1
スラコメ Range("スライムコメント2"), Gname & "はメラガイアーをとなえた", 2, 1
スラコメ Range("スライムコメント3"), "えっ、えっ?", 2, 1
フィールドコピー Range("まおう6"), Range("スライム基準")
Sleep 600
フィールドコピー Range("まおう7"), Range("スライム基準")
Sleep 750
スラコメ Range("スライムコメント1"), Gname & "はメラガイアーをとなえた", 2, 1
スラコメ Range("スライムコメント2"), "えっ、えっ?", 2, 1
スラコメ Range("スライムコメント3"), Gname & "はメドローアをとなえた", 2, 1
フィールドコピー Range("まおう8"), Range("スライム基準")
Sleep 600
フィールドコピー Range("まおう9"), Range("スライム基準")
Sleep 600
フィールドコピー Range("まおう10"), Range("スライム基準")
Sleep 600
スラコメ Range("スライムコメント1"), "えっ、えっ?", 2, 1
スラコメ Range("スライムコメント2"), Gname & "はメドローアをとなえた", 2, 1
スラコメ Range("スライムコメント3"), "ちょ、ちょ、待っ、", 2, 1
フィールドコピー Range("まおう11"), Range("スライム基準")
Sleep 600
フィールドコピー Range("まおう12"), Range("スライム基準")
Sleep 600
フィールドコピー Range("まおう13"), Range("スライム基準")
Sleep 750
スラコメ Range("スライムコメント1"), Gname & "はメドローアをとなえた", 2, 1
スラコメ Range("スライムコメント2"), "ちょ、ちょ、待っ、", 2, 1
スラコメ Range("スライムコメント3"), Gname & "はマダンテをとなえた", 2, 1
Sleep 600
フィールドコピー Range("まおう14"), Range("スライム基準")
Sleep 600
フィールドコピー Range("まおう15"), Range("スライム基準")
Sleep 750
スラコメ Range("スライムコメント1"), "ちょ、ちょ、待っ、", 2, 1
スラコメ Range("スライムコメント2"), Gname & "はマダンテをとなえた", 2, 1
スラコメ Range("スライムコメント3"), "ぎゃーっっっ", 2, 1
フィールドコピー Range("まおう16"), Range("スライム基準")
Sleep 1000
スラコメ Range("スライムコメント1"), Gname & "はマダンテをとなえた", 2, 1
スラコメ Range("スライムコメント2"), "ぎゃーっっっ", 2, 1
スラコメ Range("スライムコメント3"), Gname & "はまおう!?をたおした", 2, 1
フィールドコピー Range("はぐれ2"), Range("スライム基準")
Sleep 600
スラコメ Range("スライムコメント1"), "ぎゃーっっっ", 2, 1
スラコメ Range("スライムコメント2"), Gname & "はまおう!?をたおした", 2, 1
スラコメ Range("スライムコメント3"), "Game Clear!", 3, 2
End Sub
- じゅもんを唱えた時の処理。
- スライムに化けた魔王が出てくるが、 無視して呪文を続けて魔王を倒す「GAME CLEAR」。
スライム(標準モジュール)
Sub スラとくぎ()
スラコメ Range("DG10:EG17"), "", 2, 1
スラコメ Range("DG19:EG26"), "", 2, 1
スラコメ Range("DG37:EG44"), "", 2, 1
スラコメ Range("スライムコメント1"), Gname & "はまじんぎりをはなった!", 2, 1
スラコメ Range("スライムコメント2"), "", 2, 1
スラコメ Range("スライムコメント3"), "", 2, 1
Sleep 1000
スラコメ Range("スライムコメント2"), "かいしんのいちげき", 2, 1
Sleep 1000
スラコメ Range("スライムコメント3"), "スライムにちめいしょうをあたえた", 2, 1
Sleep 1000
スラコメ Range("スライムコメント1"), "かいしんのいちげき", 2, 1
スラコメ Range("スライムコメント2"), "スライムにちめいしょうをあたえた", 2, 1
スラコメ Range("スライムコメント3"), "「ぼく、わるくないのに...」", 2, 1
フィールドコピー Range("スライム4"), Range("スライム基準")
Sleep 1000
スラコメ Range("スライムコメント1"), "スライムにちめいしょうをあたえた", 2, 1
スラコメ Range("スライムコメント2"), "「ぼく、わるくないのに...」", 2, 1
スラコメ Range("スライムコメント3"), Gname & "はスライムをたおした", 2, 1
フィールドコピー Range("はぐれ2"), Range("スライム基準")
Sleep 1000
フィールドコピー Range("スライム15"), Range("スライム基準")
スラコメ Range("スライムコメント1"), "「ぼく、わるくないのに...」", 2, 1
スラコメ Range("スライムコメント2"), Gname & "はスライムをたおした", 2, 1
スラコメ Range("スライムコメント3"), Gname & "はざいあくかんをてにいれた", 2, 1
Sleep 1000
スラコメ Range("スライムコメント1"), Gname & "はスライムをたおした", 2, 1
スラコメ Range("スライムコメント2"), Gname & "はざいあくかんをてにいれた", 2, 1
スラコメ Range("スライムコメント3"), "Game Over", 3, 2
End Sub
- 特技を選択したときの処理。
- 悪いスライムじゃないスライムをまじんぎりで倒したため、罪悪感をGet「GAME OVER」。
スライム(標準モジュール)
Sub スラにげる1()
スラコメ Range("DG10:EG17"), "", 2, 1
スラコメ Range("DG19:EG26"), "", 2, 1
スラコメ Range("DG28:EG35"), "", 2, 1
スラコメ Range("スライムコメント1"), Gname & "はにげようとした", 2, 1
スラコメ Range("スライムコメント2"), "", 2, 1
スラコメ Range("スライムコメント3"), "", 2, 1
Sleep 1000
スラコメ Range("スライムコメント2"), "てんのこえがきこえる", 2, 1
Sleep 1000
スラコメ Range("スライムコメント3"), Gname & "よ、あなたはゆうしゃです。にげてはいけません", 2, 1
コマンドコピー
フィールドコピー Range("スライム6"), Range("スライム基準")
Sleep 1000
Runtime = 2
End Sub
Sub スラにげる2()
スラコメ Range("DG10:EG17"), "", 2, 1
スラコメ Range("DG19:EG26"), "", 2, 1
スラコメ Range("DG28:EG35"), "", 2, 1
スラコメ Range("スライムコメント1"), Gname & "はふたたびにげようとした", 2, 1
スラコメ Range("スライムコメント2"), "", 2, 1
スラコメ Range("スライムコメント3"), "", 2, 1
Sleep 1000
スラコメ Range("スライムコメント2"), "てんのこえがきこえる", 2, 1
Sleep 1000
スラコメ Range("スライムコメント3"), Gname & "よ、たちむかいなさい!", 2, 1
Range("A1").Select
Sleep 1000
コマンドコピー
フィールドコピー Range("スライム7"), Range("スライム基準")
Runtime = 3
End Sub
Sub スラにげる3()
スラコメ Range("DG10:EG17"), "", 2, 1
スラコメ Range("DG19:EG26"), "", 2, 1
スラコメ Range("DG28:EG35"), "", 2, 1
スラコメ Range("スライムコメント1"), Gname & "はさらににげようとした", 2, 1
スラコメ Range("スライムコメント2"), "", 2, 1
スラコメ Range("スライムコメント3"), "", 2, 1
Sleep 1000
スラコメ Range("スライムコメント2"), "てんのこえがきこえる", 2, 1
Sleep 1000
スラコメ Range("スライムコメント3"), "..." & Gname & "、あなたはゆうしゃしっかくです", 2, 1
Sleep 1000
スラコメ Range("スライムコメント1"), "てんのこえがきこえる", 2, 1
スラコメ Range("スライムコメント2"), "..." & Gname & "、あなたはゆうしゃしっかくです", 2, 1
スラコメ Range("スライムコメント3"), "てんのこえはザラキーマをとなえた", 2, 1
フィールドコピー Range("スライム5"), Range("スライム基準")
Sleep 1000
スラコメ Range("スライムコメント1"), "..." & Gname & "、あなたはゆうしゃしっかくです", 2, 1
スラコメ Range("スライムコメント2"), "てんのこえはザラキーマをとなえた", 2, 1
スラコメ Range("スライムコメント3"), Gname & "は死んでしまった", 2, 1
Sleep 1000
スラコメ Range("スライムコメント1"), "てんのこえはザラキーマをとなえた", 2, 1
スラコメ Range("スライムコメント2"), Gname & "は死んでしまった", 2, 1
スラコメ Range("スライムコメント3"), "Game Over", 3, 2
End Sub
- にげたときの処理。
- スライムを前に逃げようとする主人公をてんのこえが引き留める。
- 3回にげると、てんのこえに勇者失格といわれて、ザラキーマを受ける「GAME OVER」。
Sheet(スライム)
Private Sub Worksheet_Deactivate()
ActiveSheet.Protect Mypass
Worksheets("スライム").Visible = False
End Sub
- スライムシートから移動したら、スライムシートを非表示にする
対はぐれメタル
基本はスライムと一緒
VBA
はぐれメタル(標準モジュール)
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
Sub はぐ基準()
フィールドコピー Range("はぐれ1"), Range("はぐれ基準")
End Sub
- 初期画面を表示
はぐれメタル(標準モジュール)
Sub はぐコメ(コメ範囲 As Range, コメ As String, コメ色 As Integer, 範囲色 As Integer)
コメ範囲.Value = コメ
With コメ範囲
.Value = コメ
.Font.ColorIndex = コメ色
.Interior.ColorIndex = 範囲色
End With
End Sub
- 初期コメントを表示
はぐれメタル(標準モジュール)
Sub はぐコマコピー()
Range("コマンド").Copy
Range("はぐれ_コマンド").PasteSpecial Paste:=xlPasteAll
CutCopyMode = False
Range("はぐれコメント3").Font.ColorIndex = 2
Range("はぐれコメント3").Interior.ColorIndex = 1
Range("DG10").Font.ColorIndex = 6
Range("DG10").Interior.ColorIndex = 46
Range("DG19").Font.ColorIndex = 6
Range("DG19").Interior.ColorIndex = 46
Range("DG28").Font.ColorIndex = 6
Range("DG28").Interior.ColorIndex = 46
Range("DG37").Font.ColorIndex = 6
Range("DG37").Interior.ColorIndex = 46
Application.CutCopyMode = False
Range("A1").Select
End Sub
- たたかう、じゅもん、とくぎ、にげるのコマンドを表示
Sheet(はぐれメタル)
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
Private Sub Worksheet_Activate()
ActiveSheet.Unprotect Mypass
Application.EnableEvents = False
ATtime = 1
Runtime = 1
Time = 1
Cells.ClearContents
Range("CZ1:HA66").ClearFormats
Range("CZ1:HA66").Interior.ColorIndex = 1
Range("はぐれコメント3").Interior.ColorIndex = 1
はぐ基準
はぐコメ Range("はぐれコメント1"), "はぐれメタルがあらわれた!!", 2, 1
Sleep 700
はぐコメ Range("はぐれコメント2"), "はぐれメタルはおどろいている", 2, 1
Sleep 700
はぐコメ Range("はぐれコメント3"), Gname & "はどうする?", 2, 1
Sleep 700
はぐコマコピー
Range("A1").Select
Application.EnableEvents = True
End Sub
Sheet(はぐれメタル)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Time = 1 Then
If Target.Address = Range("DG10:EG17").Address Then
If Runtime = 1 Then
If ATtime = 1 Then
はぐれたたかう
ElseIf ATtime = 2 Then
はぐれたたかう2
ElseIf ATtime = 3 Then
はぐれたたかう3
Time = 2
End If
ElseIf Runtime = 2 Then
はぐれたたかう4
Time = 2
End If
ElseIf Target.Address = Range("DG19:EG26").Address Then
If Runtime = 1 Then
はぐれじゅもん1
ElseIf Runtime = 2 Then
はぐれじゅもん2
Time = 2
End If
ElseIf Target.Address = Range("DG28:EG35").Address Then
はぐれとくぎ
Time = 2
ElseIf Target.Address = Range("DG37:EG44").Address Then
はぐれにげる
End If
ElseIf Time = 2 Then
If Target.Address = Range("L72:CN76").Address Then
Worksheets("ゲームスタート").Visible = True
Worksheets("ゲームスタート").Select
End If
End If
End Sub
- たたかうは3回選択可能。
- にげるは何回押しても逃げられない。
- マダンテを受けると、すべての処理が変更するように設定。
はぐれメタル(標準モジュール)
Sub はぐれたたかう()
はぐコメ Range("DG19:EG26"), "", 2, 1
はぐコメ Range("DG28:EG35"), "", 2, 1
はぐコメ Range("DG37:EG44"), "", 2, 1
はぐコメ Range("はぐれコメント1"), Gname & "のこうげき", 2, 1
はぐコメ Range("はぐれコメント2"), "", 2, 1
はぐコメ Range("はぐれコメント3"), "", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント2"), "ミス、ダメージをあたえられない", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント3"), "はぐれメタルはほくそえんでいる", 2, 1
フィールドコピー Range("はぐれ11"), Range("はぐれ基準")
はぐコマコピー
ATtime = 2
End Sub
Sub はぐれたたかう2()
はぐコメ Range("DG19:EG26"), "", 2, 1
はぐコメ Range("DG28:EG35"), "", 2, 1
はぐコメ Range("DG37:EG44"), "", 2, 1
はぐコメ Range("はぐれコメント1"), Gname & "のこうげき", 2, 1
はぐコメ Range("はぐれコメント2"), "", 2, 1
はぐコメ Range("はぐれコメント3"), "", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント2"), "ミス、ダメージをあたえられない", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント3"), "はぐれメタルは" & Gname & "をみくだしている", 2, 1
フィールドコピー Range("はぐれ10"), Range("はぐれ基準")
はぐコマコピー
ATtime = 3
End Sub
Sub はぐれたたかう3()
はぐコメ Range("DG19:EG26"), "", 2, 1
はぐコメ Range("DG28:EG35"), "", 2, 1
はぐコメ Range("DG37:EG44"), "", 2, 1
はぐコメ Range("はぐれコメント1"), Gname & "のこうげき", 2, 1
はぐコメ Range("はぐれコメント2"), "", 2, 1
はぐコメ Range("はぐれコメント3"), "", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント2"), "かいしんのいちげき", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント3"), "はぐれメタルをたおした!", 2, 1
Sleep 1000
フィールドコピー Range("はぐれ2"), Range("はぐれ基準")
はぐコメ Range("はぐれコメント1"), "かいしんのいちげき!", 2, 1
はぐコメ Range("はぐれコメント2"), "はぐれメタルをたおした", 2, 1
はぐコメ Range("はぐれコメント3"), "Game Clear!", 3, 2
End Sub
Sub はぐれたたかう4()
はぐコメ Range("DG19:EG26"), "", 2, 1
はぐコメ Range("DG28:EG35"), "", 2, 1
はぐコメ Range("DG37:EG44"), "", 2, 1
はぐコメ Range("はぐれコメント1"), Gname & "のこうげき", 2, 1
はぐコメ Range("はぐれコメント2"), "", 2, 1
はぐコメ Range("はぐれコメント3"), "", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント2"), "しかし、ひんしの" & Gname & "は", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント3"), "からだにちからがはいらない", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント1"), "しかし、ひんしの" & Gname & "は", 2, 1
はぐコメ Range("はぐれコメント2"), "からだにちからがはいらない", 2, 1
はぐコメ Range("はぐれコメント3"), Gname & "はそのばにたおれこみ", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント1"), "からだにちからがはいらない", 2, 1
はぐコメ Range("はぐれコメント2"), Gname & "はそのばにたおれこみ", 2, 1
はぐコメ Range("はぐれコメント3"), "そのままちからつきてしまった", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント1"), Gname & "はそのばにたおれこみ", 2, 1
はぐコメ Range("はぐれコメント2"), "そのままちからつきてしまった", 2, 1
はぐコメ Range("はぐれコメント3"), "Game Over", 3, 2
End Sub
- たたかうを選択したときの処理。
- ダメージを与えられない主人公を見下すはぐれメタルに、いらついて3回目に会心の一撃「GAME CLEAR」。
- マダンテで瀕死のダメージを受けると、行動するために倒れてしまう「GAME OVER」
はぐれメタル(標準モジュール)
Sub はぐれじゅもん1()
はぐコメ Range("DG10:EG17"), "", 2, 1
はぐコメ Range("DG28:EG35"), "", 2, 1
はぐコメ Range("DG37:EG44"), "", 2, 1
はぐコメ Range("はぐれコメント1"), Gname & "はギガデインをとなえた", 2, 1
はぐコメ Range("はぐれコメント2"), "", 2, 1
はぐコメ Range("はぐれコメント3"), "", 2, 1
フィールドコピー Range("はぐれ4"), Range("はぐれ基準")
Sleep 1000
フィールドコピー Range("はぐれ5"), Range("はぐれ基準")
Sleep 1000
フィールドコピー Range("はぐれ6"), Range("はぐれ基準")
Sleep 1000
フィールドコピー Range("はぐれ7"), Range("はぐれ基準")
Sleep 1000
はぐコメ Range("はぐれコメント2"), "はぐれメタルにはこうかがない", 2, 1
フィールドコピー Range("はぐれ1"), Range("はぐれ基準")
Sleep 1000
はぐコメ Range("はぐれコメント3"), "はぐれメタルはおびえている", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント1"), "はぐれメタルにはこうかがない", 2, 1
はぐコメ Range("はぐれコメント2"), "はぐれメタルはおびえている", 2, 1
はぐコメ Range("はぐれコメント3"), "はぐれメタルはマダンテをとなえた", 2, 1
フィールドコピー Range("はぐれ3"), Range("はぐれ基準")
Sleep 1000
フィールドコピー Range("はぐれ8"), Range("はぐれ基準")
Sleep 1000
フィールドコピー Range("はぐれ9"), Range("はぐれ基準")
Sleep 1000
はぐコメ Range("はぐれコメント1"), "はぐれメタルはおびえている", 2, 1
はぐコメ Range("はぐれコメント2"), "はぐれメタルはマダンテをとなえた", 2, 1
はぐコメ Range("はぐれコメント3"), Gname & "はひんしのダメージをうけた", 2, 1
Sleep 1000
フィールドコピー Range("はぐれ1"), Range("はぐれ基準")
はぐコマコピー
Runtime = 2
End Sub
Sub はぐれじゅもん2()
はぐコメ Range("DG10:EG17"), "", 2, 1
はぐコメ Range("DG28:EG35"), "", 2, 1
はぐコメ Range("DG37:EG44"), "", 2, 1
はぐコメ Range("はぐれコメント1"), Gname & "はかくごをきめた", 2, 1
はぐコメ Range("はぐれコメント2"), "", 2, 1
はぐコメ Range("はぐれコメント3"), "", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント2"), Gname & "はメガンテをとなえた", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント3"), "はぐれメタルはくだけちった", 2, 1
フィールドコピー Range("はぐれ2"), Range("はぐれ基準")
Sleep 1000
はぐコメ Range("はぐれコメント1"), Gname & "はメガンテをとなえた", 2, 1
はぐコメ Range("はぐれコメント2"), "はぐれメタルはくだけちった", 2, 1
はぐコメ Range("はぐれコメント3"), Gname & "は、くだけちった", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント1"), "はぐれメタルはくだけちった", 2, 1
はぐコメ Range("はぐれコメント2"), Gname & "は、くだけちった", 2, 1
はぐコメ Range("はぐれコメント3"), "Game Over", 3, 2
End Sub
- はぐれメタルにじゅもんで攻撃。
- びっくりしたはぐれメタルはマダンテで反撃。
- 瀕死のダメージを負った主人公がメガンテで自爆「GAME OVER」。
はぐれメタル(標準モジュール)
Sub はぐれとくぎ()
はぐコメ Range("DG10:EG17"), "", 2, 1
はぐコメ Range("DG19:EG26"), "", 2, 1
はぐコメ Range("DG37:EG44"), "", 2, 1
はぐコメ Range("はぐれコメント1"), Gname & "はまじんぎりをはなった!", 2, 1
はぐコメ Range("はぐれコメント2"), "", 2, 1
はぐコメ Range("はぐれコメント3"), "", 2, 1
Sleep 1000
If Runtime = 1 Then
はぐコメ Range("はぐれコメント2"), "ミス! ダメージをあたえられない", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント3"), "はぐれメタルはおびえている", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント1"), "ミス! ダメージをあたえられない", 2, 1
はぐコメ Range("はぐれコメント2"), "はぐれメタルはおびえている", 2, 1
はぐコメ Range("はぐれコメント3"), "はぐれメタルはにげだした!", 2, 1
フィールドコピー Range("はぐれ2"), Range("はぐれ基準")
Sleep 1000
はぐコメ Range("はぐれコメント1"), "はぐれメタルはおびえている", 2, 1
はぐコメ Range("はぐれコメント2"), "はぐれメタルはにげだした!", 2, 1
はぐコメ Range("はぐれコメント3"), "Game Over", 3, 2
ElseIf Runtime = 2 Then
はぐコメ Range("はぐれコメント2"), "しかし、ひんしの" & Gname & "は", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント3"), "からだにちからがはいらない", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント1"), "しかし、ひんしの" & Gname & "は", 2, 1
はぐコメ Range("はぐれコメント2"), "からだにちからがはいらない", 2, 1
はぐコメ Range("はぐれコメント3"), Gname & "はそのばにたおれこみ", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント1"), "からだにちからがはいらない", 2, 1
はぐコメ Range("はぐれコメント2"), Gname & "はそのばにたおれこみ", 2, 1
はぐコメ Range("はぐれコメント3"), "そのままちからつきてしまった", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント1"), Gname & "はそのばにたおれこみ", 2, 1
はぐコメ Range("はぐれコメント2"), "そのままちからつきてしまった", 2, 1
はぐコメ Range("はぐれコメント3"), "Game Over", 3, 2
End If
End Sub
- はぐれメタルにまじんぎりで攻撃。
- 躱されて逃げられる「GAME OVER」。
- 先にマダンテで瀕死のダメージを受けていたら、倒れて力尽きる「GAME OVER」。
はぐれメタル(標準モジュール)
Sub はぐれにげる()
はぐコメ Range("DG10:EG17"), "", 2, 1
はぐコメ Range("DG19:EG26"), "", 2, 1
はぐコメ Range("DG28:EG35"), "", 2, 1
If Runtime = 1 Then
はぐコメ Range("はぐれコメント1"), "はぐれメタルからにげるなんて", 2, 1
はぐコメ Range("はぐれコメント2"), "とんでもない!!", 2, 1
はぐコメ Range("はぐれコメント3"), "", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント1"), Gname & "はどうする?", 2, 1
はぐコメ Range("はぐれコメント2"), "", 2, 1
はぐコマコピー
ElseIf Runtime = 2 Then
はぐコメ Range("はぐれコメント1"), Gname & "は、にげようとした", 2, 1
はぐコメ Range("はぐれコメント2"), "", 2, 1
はぐコメ Range("はぐれコメント3"), "", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント2"), "しかし、ひんしの" & Gname & "は", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント3"), "からだにちからがはいらない", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント1"), "しかし、ひんしの" & Gname & "は", 2, 1
はぐコメ Range("はぐれコメント2"), "からだにちからがはいらない", 2, 1
はぐコメ Range("はぐれコメント3"), Gname & "はそのばにたおれこみ", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント1"), "からだにちからがはいらない", 2, 1
はぐコメ Range("はぐれコメント2"), Gname & "はそのばにたおれこみ", 2, 1
はぐコメ Range("はぐれコメント3"), "そのままちからつきてしまった", 2, 1
Sleep 1000
はぐコメ Range("はぐれコメント1"), Gname & "はそのばにたおれこみ", 2, 1
はぐコメ Range("はぐれコメント2"), "そのままちからつきてしまった", 2, 1
はぐコメ Range("はぐれコメント3"), "Game Over", 3, 2
Time = 2
End If
End Sub
- はぐれメタルからは逃げられない
- 先にマダンテで瀕死のダメージを受けていると、にげようとして力尽きる「GAME OVER」。
Sheet(はぐれメタル)
Private Sub Worksheet_Deactivate()
ActiveSheet.Protect Mypass
Worksheets("はぐれメタル").Visible = False
End Sub
- はぐれメタルシートを離れるとき、ロックして非表示にする。
ドット絵
- スライム1、はぐれ2、まおう3などは、そのドット絵のセル範囲のこと。
- このセル範囲名を使って画像をコピペしている。
- まおうのモデルはデスタムーア第三形態 (両手なし)。
動作確認
VBA
各動作の確認用。
動作確認(標準モジュール)
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
Sub スラ_ギガデイン()
フィールドコピー Range("スライム11"), Range("確認")
Sleep 1000
フィールドコピー Range("スライム12"), Range("確認 ")
Sleep 1000
フィールドコピー Range("スライム13"), Range("確認")
Sleep 1000
フィールドコピー Range("スライム14"), Range("確認")
End Sub
Sub スラ_しゃくねつ()
フィールドコピー Range("スライム3"), Range("確認")
Sleep 1000
フィールドコピー Range("スライム9"), Range("確認")
Sleep 1000
フィールドコピー Range("スライム10"), Range("確認")
Sleep 1000
フィールドコピー Range("スライム8"), Range("確認")
End Sub
Sub スラ_悪くないのに()
フィールドコピー Range("スライム1"), Range("確認")
Sleep 1000
フィールドコピー Range("スライム2"), Range("確認")
Sleep 1000
フィールドコピー Range("スライム4"), Range("確認")
Sleep 1000
フィールドコピー Range("スライム15"), Range("確認")
End Sub
Sub はぐ_ギガデイン()
フィールドコピー Range("はぐれ4"), Range("確認")
Sleep 1000
フィールドコピー Range("はぐれ5"), Range("確認")
Sleep 1000
フィールドコピー Range("はぐれ6"), Range("確認")
Sleep 1000
フィールドコピー Range("はぐれ7"), Range("確認")
End Sub
Sub はぐ_マダンテ()
フィールドコピー Range("はぐれ3"), Range("確認")
Sleep 1000
フィールドコピー Range("はぐれ8"), Range("確認")
Sleep 1000
フィールドコピー Range("はぐれ9"), Range("確認")
End Sub
Sub はぐ_表情()
フィールドコピー Range("はぐれ1"), Range("確認")
Sleep 1000
フィールドコピー Range("はぐれ11"), Range("確認")
Sleep 1000
フィールドコピー Range("はぐれ10"), Range("確認")
End Sub
Sub まおう登場()
フィールドコピー Range("はぐれ2"), Range("確認")
Sleep 1000
フィールドコピー Range("まおう2"), Range("確認 ")
Sleep 1000
フィールドコピー Range("まおう3"), Range("確認")
Sleep 1000
フィールドコピー Range("まおう1"), Range("確認")
End Sub
Sub まおう_メラガイアー()
フィールドコピー Range("まおう1"), Range("確認")
Sleep 1000
フィールドコピー Range("まおう4"), Range("確認 ")
Sleep 1000
フィールドコピー Range("まおう5"), Range("確認")
Sleep 1000
フィールドコピー Range("まおう6"), Range("確認")
Sleep 1000
フィールドコピー Range("まおう7"), Range("確認")
End Sub
Sub まおう_メドローア()
フィールドコピー Range("まおう1"), Range("確認")
Sleep 1000
フィールドコピー Range("まおう8"), Range("確認")
Sleep 1000
フィールドコピー Range("まおう9"), Range("確認")
Sleep 1000
フィールドコピー Range("まおう10"), Range("確認 ")
Sleep 1000
フィールドコピー Range("まおう11"), Range("確認")
Sleep 1000
フィールドコピー Range("まおう12"), Range("確認")
Sleep 1000
フィールドコピー Range("まおう13"), Range("確認")
End Sub
Sub まおう_マダンテ()
フィールドコピー Range("まおう1"), Range("確認")
Sleep 1000
フィールドコピー Range("まおう14"), Range("確認")
Sleep 1000
フィールドコピー Range("まおう15"), Range("確認")
Sleep 1000
フィールドコピー Range("まおう16"), Range("確認")
End Sub
Sub にげてはいけません()
フィールドコピー Range("スライム1"), Range("確認")
Sleep 1000
フィールドコピー Range("スライム2"), Range("確認 ")
Sleep 1000
フィールドコピー Range("スライム6"), Range("確認")
Sleep 1000
フィールドコピー Range("スライム7"), Range("確認")
Sleep 1000
フィールドコピー Range("スライム5"), Range("確認")
End Sub
- 処理を個別で確認できる。
基本設定(標準モジュール)
Sub 戻る()
Worksheets("ゲームスタート").Visible = True
Worksheets("ゲームスタート").Select
ActiveSheet.Unprotect Mypass
End Sub
- ゲームスタート画面に戻る。