ExcelVBAゲームプログラミング?

初心者でもきっとできる!
Excelさえ持っていれば特別なソフトは不要!
すぐにでも始められる簡単ゲームプログラミング!
今すぐ始めよう!

サンプルやゲームのダウンロードができる別館も好評運営中です。
ご意見やご質問、ゲームの感想等は掲示板までお気軽に。是非、皆さんの声を聞かせてください。運営、開発の励みになります。



各種ダウンロードはコチラ ↓ 意見・感想・質問はコチラ ↓
影倉庫 Shadow warehouse サポート掲示板
ブログの全体像はコチラ ↓ リンクのページはコチラ ↓
サイトマップ 自分本位なリンク


スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。






Chapter.99 [ クリックゲーム4:キャラクター準備 ]

■下準備する

前回は、透明ラベルを使って、クリックされた座標を検知する方法について解説しました。Z オーダーなど、初めて登場する概念もありましたね。
透明ラベルとマウスダウンイベントを併用すると、クリックされた瞬間の座標がわかります。今回のクリックゲームでは、こうして得られたクリック座標と、動き回るキャラクターの座標を見比べながら処理していくことになります。

ユーザーフォームの準備は、前回の内容でほとんど完成しました。今回は、キャラクターを管理する変数などの準備、そして、それらの初期化処理ルーチンを作成しましょう。

さて、まずは必要となる構造体や変数を定義します。
標準モジュールをひとつ挿入し、変数などを記述していきます。

Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMillsecounds As Long)

Type BUG '①ハエ用構造体
    X    As Single
    Y    As Single
    W    As Single
    H    As Single
    Type As Long
    Pict As Boolean
    Life As Boolean
End Type

Type HIT '②ヒットマーク用構造体
    X    As Single
    Y    As Single
    W    As Single
    H    As Single
    Var  As Long
    Vis  As Boolean
End Type

Public Fly(9) As BUG
Public Hits   As HIT
Public Score  As Long 'スコア
Public Level  As Long 'レベル
Public Away   As Long '逃がしたハエの数


今回使用する API は、Sleep 関数のみです。モジュールの先頭に、 Declare ステートメントを使って Sleep 関数を宣言しておきます。

次に構造体の定義です。
①は、ハエというキャラクターを定義する構造体です。この構造体に含まれる要素は、X, Y が縦横の座標情報、W, H がキャラクターの大きさ(縦幅・横幅)、キャラクターのタイプを表す Type 、キャラクターの画像をアニメーションさせるための Pict 、キャラクター生存しているのかどうかを表す Life 、合計 7 つの要素になります。

②は、ヒットマークを表示するための構造体です。
ハエの構造体と同じように、座標や大きさの情報がありますね。それ以外の部分では、ヒットマークが一定時間経過したら消えるようにするために使う Var 、そしてヒットマークが見えているかどうかを表す Vis があります。

構造体の宣言ができたら、次は変数を定義しましょう。

Fly(9) は、先ほど定義したハエ用の構造体を使って、合計10個の要素を持つ配列を宣言している部分です。これが、ユーザーフォーム上に配置した10匹のハエを管理します。

同様に、Hits はヒットマーク管理のために構造体を使って宣言されていますね。ヒットマークはひとつしかありませんので、配列にする必要はありません。

その他、スコア用変数、レベル管理用変数、逃げたハエの数を管理する変数などを宣言して、これで変数の準備は完了です。
ここで宣言した変数は、いずれも Public を使って宣言されています。つまり、どのプロシージャからでも呼び出せるグローバルな変数ということになります。


■初期化処理を作る

講座の中で以前から何度も言ってますが、初期化処理は非常に大事です。
開発段階では、毎回細かな調整を行うため、ユーザーフォームを起動しては消し、起動しては消し、となることが多いですよね。ですが、実際にゲームをプレイするユーザーは、大抵ゲーム画面を消さずに、続けて何度もスタートボタンを押したりします。
初期化処理をきちんと行っていないゲームの場合、2回目以降のプレイに支障がでる可能性が高くなります。なんどリスタートしても大丈夫なように、初期化処理をしっかり作っておくことが重要です。

今回のクリックゲームでは、ハエ用の構造体変数などを初期化し、同時にユーザーフォーム上のイメージコントロールも非表示にします。もし、最初のゲームプレイ時に画面上にハエが残ってしまっていても、最初に非表示にするようになっていれば、次のプレイ時にも正しく処理が行われるようになりますよね。

Sub Init()

    Dim L As Long
    
    For L = 0 To 9
        With Fly(L)
            .X = 0
            .Y = 0
            .W = 18
            .H = 18
            .Type = 0
            .Pict = False
            .Life = False
        End With
        With UserForm1.Controls("Ima_fly" & L)
            .Visible = False
        End With
    Next
    
    With Hits
        .X = 0
        .Y = 0
        .W = 18
        .H = 18
        .Var = 0
        .Vis = False
        UserForm1.Ima_hit.Visible = False
    End With
    
    Score = 0
    Level = 0
    Away = 0
    
End Sub


上記のコードが、初期化を行っているプロシージャです。初期化用のプロシージャなので、名前は Init としました。
このプロシージャが呼び出されると、全てのグローバルな変数が初期化され、同時にユーザーフォーム上のハエとヒットマークが全て非表示になります。ゲームが始まる前にこのプロシージャを呼び出すことによって、毎回同じようにゲームがスタートできるようになるのですね。


■まとめ

さて、どうでしょうか。初期化処理を実装できたでしょうか。
大事なことは、初期化処理をしっかりと実装することで、毎回全く同じ環境でゲームがスタートされるようにすることです。特に、ユーザーフォーム上のコントロールを非表示にする部分など、うっかり忘れてしまうことが多いので注意が必要です。

自分がテストする段階でも、何度も繰り返しテストすることが重要になります。実際にゲームをプレイするユーザーの視点に立って、地道にテストすることが大切です。


■格言

構造体を使って効率的に変数を宣言
初期化はしっかりと綿密に



ユーザーの視点に立つというのは、簡単そうで難しいです。

関連記事






Comment

Name
E-mail
URL
Comment
Pass  *
Secret? (管理者にだけ表示)

メールフォーム

影斬に物申すという方はこちら

名前 :
メール:
件名 :
本文 :

可能な限り要望には応えますが、必ず返信や回答ができることを、保障するものではありません。
ご了承ください。

Chapters

コンテンツ一覧


■Chapter 一覧■
    全てのChapterの一覧です。
    直接アクセスしたい方はこちらをご利用下さい。

    Chapter.1 [ 知っておくべき心得 ]
    Chapter.2 [ Excelってなんだろう ]
    Chapter.3 [ Excelの基本画面 ]
    Chapter.4 [ VBAとは? ]
    Chapter.5 [ モジュールについて ]
    Chapter.6 [ 変数 ]
    Chapter.7 [ 変数の型と宣言 ]
    Chapter.8 [ プロシージャとスコープ ]
    Chapter.9 [ ゲームつくる様々な手法 ]
    Chapter.10 [ ユーザーフォーム ]
    Chapter.11 [ プロパティウィンドウ ]
    Chapter.12 [ 乱数 ]
    Chapter.13 [ 条件分岐 ]
    Chapter.14 [ ゲーム画面のデザイン ]
    Chapter.15 [ コード記述の基本作法 ]
    Chapter.16 [ じゃんけんゲーム:1 名前をつける ]
    Chapter.17 [ じゃんけんゲーム:2 フォームの起動 ]
    Chapter.18 [ じゃんけんゲーム:3 乱数の種 ]
    Chapter.19 [ じゃんけんゲーム:4 イベント ]
    Chapter.20 [ じゃんけんゲーム:5 引数 ]
    Chapter.21 [ じゃんけんゲーム:6 役判定 ]
    Chapter.22 [ じゃんけんゲーム:7 予測と制限 ]
    Chapter.23 [ Withステートメント ]
    Chapter.24 [ 画像を表示させる ]
    Chapter.25 [ 画像表示の発展形 ]
    Chapter.26 [ 繰り返し処理 For文 ]
    Chapter.27 [ 繰り返し処理 Do~Loop文 ]
    Chapter.28 [ Exitステートメント ]
    Chapter.29 [ フォーム上の位置情報 ]
    Chapter.30 [ API基礎知識 ]
    Chapter.31 [ API補足知識 ]
    Chapter.32 [ メインループを考える ]
    Chapter.33 [ 同期処理の概念 ]
    Chapter.34 [ 移動処理その1:画面設定と考え方 ]
    Chapter.35 [ 移動処理その2:DoEvents ]
    Chapter.36 [ 移動処理その3:キー入力判定API ]
    Chapter.37 [ 条件分岐のさらなる探求 Select Case ]
    Chapter.38 [ アニメーション ]
    Chapter.39 [ 配列変数 ]
    Chapter.40 [ ゲームの初期化 ]
    Chapter.41 [ シューティングゲーム1:ゲーム設計 ]
    Chapter.42 [ シューティングゲーム2:メインプロセス ]
    Chapter.43 [ シューティングゲーム3:構造体 ]
    Chapter.44 [ シューティングゲーム4:定数 ]
    Chapter.45 [ シューティングゲーム5:プレイヤーキャラクター ]
    Chapter.46 [ シューティングゲーム6:ショットを撃つ① ]
    Chapter.47 [ シューティングゲーム7:ショットを撃つ② ]
    Chapter.48 [ シューティングゲーム8:Mod演算子の活用 ]
    Chapter.49 [ シューティングゲーム9:敵キャラクター登場 ]
    Chapter.50 [ シューティングゲーム10:衝突判定 ]
    Chapter.51 [ シューティングゲーム11:衝突の実体 ]
    Chapter.52 [ シューティングゲーム12:敵の攻撃 ]
    Chapter.53 [ シューティングゲーム13:爆発エフェクト ]
    Chapter.54 [ シューティングゲーム14:残機数表示① ]
    Chapter.55 [ シューティングゲーム15:残機数表示② ]
    Chapter.56 [ シューティングゲーム16:スコアの表示 ]
    Chapter.57 [ シューティングゲーム17:タイトル画面 ]
    Chapter.58 [ シューティングゲーム18:ボスキャラクター ]
    Chapter.59 [ シューティングゲーム19:最後の仕上げへ ]
    Chapter.60 [ シューティングゲーム20:いよいよ完成STG ]
    Chapter.61 [ カードゲームで使えるめくり効果 ]
    Chapter.62 [ ラジアンと角度 ]
    Chapter.63 [ ラジアンの活用:円運動 ]
    Chapter.64 [ ラジアンの活用:任意の角度へ移動する ]
    Chapter.65 [ APIによるサウンド再生:基礎 ]
    Chapter.66 [ APIによるサウンド再生:MIDIと多重再生 ]
    Chapter.67 [ APIによるサウンド再生:MCIコマンドとループ再生 ]
    Chapter.68 [ Function プロシージャ ]
    Chapter.69 [ 値渡しと参照渡し ]
    Chapter.70 [ デバッグ1:イミディエイトウィンドウ ]
    Chapter.71 [ デバッグ2:ローカルウィンドウ ]
    Chapter.72 [ デバッグ3:コード実行の中断 ]
    Chapter.73 [ オブジェクトってなんだ ]
    Chapter.74 [ プロパティ・メソッド・イベント ]
    Chapter.75 [ オブジェクト変数 ]
    Chapter.76 [ オブジェクトとコレクション ]
    Chapter.77 [ 特殊な繰り返し:For Each ]
    Chapter.78 [ エラー処理 ]
    Chapter.79 [ On Error と GoTo文 ]
    Chapter.80 [ Resumeステートメント ]
    Chapter.81 [ バイトとビット ]
    Chapter.82 [ ウィンドウメッセージとイベント ]
    Chapter.83 [ 文字列の基礎 ]
    Chapter.84 [ 文字列操作① ]
    Chapter.85 [ 文字列操作② ]
    Chapter.86 [ タイピングゲーム1:仕様を決める ]
    Chapter.87 [ タイピングゲーム2:キー入力検知 ]
    Chapter.88 [ タイピングゲーム3:文字列照合 ]
    Chapter.89 [ タイピングゲーム4:判定関数 ]
    Chapter.90 [ タイピングゲーム5:ゲーム画面設計 ]
    Chapter.91 [ タイピングゲーム6:問題文のソート ]
    Chapter.92 [ タイピングゲーム7:動的配列 ]
    Chapter.93 [ タイピングゲーム8:キーダウンイベント ]
    Chapter.94 [ タイピングゲーム9:正打数の表示 ]
    Chapter.95 [ タイピングゲーム10:タイムの表示 ]
    Chapter.96 [ クリックゲーム1:イベントの種類 ]
    Chapter.97 [ クリックゲーム2:画面設計 ]
    Chapter.98 [ クリックゲーム3:クリック座標検知 ]
    Chapter.99 [ クリックゲーム4:キャラクター準備 ]
    Chapter.100 [ クリックゲーム5:キャラクターの配置 ]
    Chapter.101 [ クリックゲーム6:キャラクター移動とNot演算子 ]
    Chapter.102 [ クリックゲーム7:クリックのヒット判定 ]
    Chapter.103 [ クリックゲーム8:ヒットマークエフェクト ]
    Chapter.104 [ クリックゲーム9:サウンド処理の実装 ]
    Chapter.105 [ クリックゲーム10:マウスカーソルの変更 ]
    Chapter.106 [ ブロック崩しゲーム1:仕様と概要を決める ]
    Chapter.107 [ ブロック崩しゲーム2:基本概念の確認 ]
    Chapter.108 [ ブロック崩しゲーム3:ベクトルとは ]
    Chapter.109 [ ブロック崩しゲーム4:変数や定数の宣言 ]
    Chapter.110 [ ブロック崩しゲーム5:初期化処理の実装 ]
    Chapter.111 [ ブロック崩しゲーム6:ブロックの配置 ]
    Chapter.112 [ ブロック崩しゲーム7:根幹処理とバーの処理 ]
    Chapter.113 [ ブロック崩しゲーム8:線分と線分の交差を判定 ]
    Chapter.114 [ ブロック崩しゲーム9:線分同士の交点 ]
    Chapter.115 [ ブロック崩しゲーム10:ボールの処理 ]
    Chapter.116 [ ブロック崩しゲーム11:最終調整して完成へ ]
    Chapter.117 [ テキストファイル操作基礎 ]
    Chapter.118 [ テキストファイル操作:読み込み編 ]
    Chapter.119 [ テキストファイル操作:CSV読み込み編 ]
    Chapter.120 [ テキストファイル操作:様々な読込編 ]
    Chapter.121 [ テキストファイル操作:バイナリ編 ]
    Chapter.122 [ テキストファイル操作:暗号化編 ]
    Chapter.123 [ テキストファイル操作:復号化編 ]
    Chapter.124 [ クラスモジュールとは ]
    Chapter.125 [ クラスモジュール:メソッド編 ]
    Chapter.126 [ クラスモジュール:プロパティ編 ]
    Chapter.127 [ クラスモジュール:イベント拡張編 ]
    Chapter.128 [ クラスモジュール:イベント自作編 ]
    Chapter.129 [ APIによる描画処理1:ハンドル ]
    Chapter.130 [ APIによる描画処理2:デバイスコンテキスト ]
    Chapter.131 [ APIによる描画処理3:ペン オブジェクト ]
    Chapter.132 [ APIによる描画処理4:ブラシ オブジェクト ]
    Chapter.133 [ APIによる描画処理5:図形描画準備編 ]
    Chapter.134 [ APIによる描画処理6:図形描画実践編 ]
    Chapter.135 [ APIによる描画処理7:画像描画の仕組み編 ]
    Chapter.136 [ APIによる描画処理8:ビットブロック転送編 ]
    Chapter.137 [ APIによる描画処理9:ラスタオペレーション ]
    Chapter.138 [ APIによる描画処理10:マスク描画 概念編 ]
    Chapter.139 [ APIによる描画処理11:マスク描画 実践編 ]


    コードやVBAに関する質問などはサポート掲示板(別館)までお気軽にどうぞ。




fc2 seotool Excel VBA ゲーム プログラミング 講座

Counter

twitter


Shadow BBS - 影掲示板

VBA 関連書籍



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。