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

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

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



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


スポンサーサイト

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






Chapter.49 [ シューティングゲーム9:敵キャラクター登場 ]

■敵キャラクター登場のプロセス

前回は敵キャラクターの出現方法を管理するやり方について解説しました。
特殊な計算を簡単に行うことができるMod演算子についても、簡単に説明しましたね。

一見するとちょっとわかりづらい内容だったかもしれません。Mod演算子は使いこなせればかなり有用な演算子だと思います。特に、複雑な動作を要求されるゲームの設計においては、欠かすことのできない要素のひとつだと思います。
今すぐに絶対必要というものでもないのですが、覚えておいて損はないですので、皆さんがんばって習得してほしいと思います。

さて、前回の内容を踏まえて、今回は実際に敵キャラクターが登場するようにしてみましょう。
敵キャラクターの出現には、ショットを実装したときと同じような考え方で挑みます。具体的に言うと、『敵の初期配置』と『敵の移動などの処理』を分けて作成します。

前回作成した『敵の出現するタイミングを管理するプロシージャ』が、あらかじめ決められたタイミングで、敵キャラクターが登場する場面であるかどうかを判断します。
そして、敵が登場するべきタイミングだと判断された場合には、『敵を画面上に配置するプロシージャ』を呼び出すようにします。
これで『敵の初期配置』が完了した状態になるわけですね。

次回以降のループでは、『敵の移動を管理するプロシージャ』が、敵キャラクターを移動させたり、ショットとの当たり判定などを行うわけです。
このプロシージャは、敵キャラクターが一切登場していないときでも呼び出されます。ループが1回まわるごとに、必ず呼び出すようにしておくわけです。ただし、画面上に敵が1体も登場していないときには、何もしません。呼び出されても、何にも処理を行わずに終わってしまいます。敵が登場している間は、適宜、敵キャラクターの移動などを行うように設計するのですね。

ちょっとわかりにくいかもしれませんが、実際にコードを書きながら、見ていくことにしましょう。


■敵の初期配置

まずは、敵キャラクターの初期配置です。このプロシージャが、前回解説した『敵出現のタイミングを管理するプロシージャ』から呼び出されます。

実際にコードを見ながら考えていきます。

Sub Enemy_Begin(X As Single, Y As Single, Typ As Long)

    Dim L As Long
    
    For L = 0 To 9
        With Enemy_Data(L)
            If .Lif = 0 Then '①
                .X = X
                .Y = Y
                .W = Enemy_Size '②
                .H = Enemy_Size '②
                .Typ = Typ
                .Lif = 1
                .Par = 0
                With UserForm1.Controls("Enemy" & L + 1) '③
                    .Visible = True
                    Select Case Typ '④
                        Case 1
                            .Picture = UserForm1.Enemy_s1.Picture
                        Case 2, 3
                            .Picture = UserForm1.Enemy_s2.Picture
                    End Select
                End With
                Exit For '⑤
            End If
        End With
    Next
    
End Sub

さて、どうでしょう。少し長いですが、順番に説明していきますので、がんばってください。

このプロシージャは、『Enemy_Begin』という名前にしました。そして、プロシージャ名に続く括弧の中に、3つの引数が定義されていますね。
3つの引数はそれぞれ、『 X が横位置』、『 Y が縦位置』、『 Typ がタイプ』を表しています。呼び出されたときに、これらの引数からデータを受け取って、その情報を元に敵キャラクターを配置するわけです。

前回定義した敵キャラクター用の変数を覚えていますか? 『Enemy_Data(9)』という配列変数でしたね。この配列の要素の数は、出現する敵キャラクターの数です。要素数に9が指定されているということは、全部で10体分のデータをこの配列で管理できます。

プロシージャが開始されると、まずはこの配列全てを参照するためにFor文での繰り返し処理が始まります。そして、①の部分で、キャラクターが現在表示されているかどうかを判断しています。
敵キャラクターの生存を管理する『Lif要素』が0ということは、そのキャラクターはまだ画面上に表示されていません。敵キャラクターを新しく配置するわけですから、このライフが0のデータが見つかった場合だけ次に進みます。

続いて、敵キャラクターのデータに、引数から受け取った位置情報やタイプを設定していきます。ここで②を見てください。プレイヤーキャラクターのときと同様、『定数』を使って敵キャラクターの幅を設定しています。この定数はまだ宣言をしていませんでしたので、最後にまとめて載せるコードに、宣言を追加しておきます。忘れずにあとでチェックしておいてくださいね。

Enemy_Data()にデータを全て代入できたら、続いてユーザーフォーム上のイメージコントロールの設定をします。これが③ですね。
ショットのときと同様、『UserForm1.Controls(コントロールの名前)』という指定の仕方を使って、イメージコントロールに設定を施していきます。

今回ポイントとなるのが、④の部分です。
敵キャラクターは2種類の画像から、タイプによって適切な画像を選択するようにします。そのために、Select_Case文で、引数Typの値を調べて処理を分岐させます。
タイプが1のときは、青いタイプの敵キャラクターの画像を、タイプが2と3のときは黄色いタイプの敵キャラクターの画像を使うようにしています。画像が2種類なのに、敵キャラクターのタイプが3種類になっていますね。この理由は最後まで読んでいただければわかります。

そして、全ての設定が完了したら、⑤で示すように、繰り返し処理を抜けています。こうしておかないと、非表示の敵キャラクターが全て表示されてしまうので注意しましょう。

これで、『敵の初期配置プロシージャ』はOKです。構造としてはショットの配置プロシージャと非常に似ています。引数を受け取り、それらの情報を元にキャラクターを配置しているだけですからね。ひとつひとつ見ていけば、それほど難しくないはずです。焦らずよく見て考えてくださいね。


■敵キャラクター移動管理

さて、続いては敵キャラクターの移動を管理するプロシージャを作成していきましょう。
このプロシージャは、敵が出現しているかどうかに関わらず、毎回ループの中で呼び出されます。
もし敵キャラクターが表示されていた場合には、処理を行いますが、それ以外のときは何もしません。そのあたりを念頭に置いて見ていきましょう。

Sub Enemy_Action()

    Dim L As Long
    Dim TCMOD
    
    TCMOD = Total_Count Mod 30 '①
    
    For L = 0 To 9
        With Enemy_Data(L)
            If .Lif > 0 Then '②
                Select Case .Typ
                    Case 1
                        .Y = .Y + 1.5
                    Case 2
                        .X = .X + 0.5
                        .Y = .Y + 1
                    Case 3
                        .X = .X - 0.5
                        .Y = .Y + 1
                End Select
                If .X > 220 Then .Lif = 0 '③
                If .Y > 220 Then .Lif = 0 '③
                If .X < -20 Then .Lif = 0 '③
                If .Y < -20 Then .Lif = 0 '③
                If TCMOD = 0 Then '④
                    Select Case .Typ
                        Case 2
                            .Typ = 3
                        Case 3
                            .Typ = 2
                    End Select
                End If
            End If
        End With
        With UserForm1.Controls("Enemy" & L + 1) '⑤
            If Enemy_Data(L).Lif > 0 Then
                .Left = Enemy_Data(L).X - Enemy_Size
                .Top = Enemy_Data(L).Y - Enemy_Size
            Else
                .Visible = False
            End If
        End With
    Next
    
End Sub

少し長いですが、最初から順番に見ていきましょう。

このプロシージャでは冒頭に『TCMOD』というLong型の変数を宣言しています。この変数は、『Total_CountMod計算した結果』を扱うために使います。
これは何のためかといいますと、敵キャラクターの挙動を管理するためです。前回、Mod演算子を有効に活用することで、敵キャラクターを同様のパターンで繰り返し出現するようにしましたね。あれと同様の仕組みを使って、敵キャラクターの挙動を管理するために、この変数を使います。

①の部分で、この変数TCMODに、『Total_Count Mod 30』の計算結果を代入します。Mod演算子で、除算した余りを代入するのですね。ですから、変数TCMODの値は、常に『0~29』の範囲に収まり続けます。
30回ループするたびに、変数の値が0に戻るわけですね。

変数TCMODの値が0になるのは、30ループに1回です。それを判断材料として処理すれば、30ループごとに処理を切り替えることができるのです。これは後で出てきますので、とりあえず仕組みだけ覚えておきましょう。
 
続いては②です。敵キャラクターが画面上に存在しているということは、要素Lifが1以上に設定されているはずです。ここでそれを判断しています。
もし要素Lifが0だった場合には、敵キャラクターは存在していないわけですから、何も処理を行うことなく素通りするようにしています。

敵キャラクターが存在していた場合には、敵キャラクターのタイプに応じて位置を移動します。
タイプ1の場合には、まっすぐ下方向へ移動するだけです。
タイプ2と3は、斜めに移動しながら下の方向へ動きます。タイプ2は右斜め下方向へ、タイプ3は左斜め下方向へむかって移動します。

③の部分は、敵キャラクターの現在位置をチェックして、画面上から完全に消えてしまっていないかどうかを判断しています。上下左右全ての方向をチェックして、画面からはみだして消えてしまった敵キャラクターを、存在していないことにしているのですね。

そして④の部分で、先ほど登場した変数TCMODが出てきます。
ここでは、先ほど説明したように、30ループごとに処理が変化するようにしています。実は、敵キャラクター用の画像が2種類しかないのに、敵キャラクターのタイプが3種類あったのは、ここでその理由がハッキリします。

先ほども説明したように、タイプ2の敵キャラクターとタイプ3の敵キャラクターは斜めに移動します。30ループごとにタイプを2と3で交換するようにすれば、左右にジグザグ走行する敵キャラクターを表現できます。
あくまでもタイプ1の敵キャラクターは『直進型』。タイプ2と3は、30ループごとに切り替えながら処理することで『ジグザグ走行型』となるわけです。
敵キャラクターの出現時には、タイプ2とタイプ3を同じ画像に設定しましたね。これも、ここでの処理を実現するためだったのです。

さてここまでできたら、あとは⑤で示すように、ユーザーフォーム上のコントロールを実際に動かします。
上で散々計算してきた結果を、ここでイメージコントロールに設定するのです。
これで、画面上に表示されている敵キャラクターが実際に移動します。


■その他のやっておくべきことは

さて、これで敵キャラクターを扱うための、プロシージャの準備はできました。あとやるべきことはなんでしょうか。

結構忘れてしまいがちですが、『定数の宣言』や『初期化』は忘れずにやっておきましょう。今回は『Enemy_Size』という新しい定数が増えています。これは敵キャラクターの実際の大きさを表す定数です。これをモジュールの先頭で宣言しておきます。

そして、敵キャラクターのデータを扱うための配列変数『Enemy_Data』の初期化処理も忘れずに。これは配列変数なので、ただ単に初期化するだけなら、ショットのときと同様『Erase』が使えますね。

その他にも、『変数Total_Countの初期化』と、ユーザーフォームの『Initializeイベント』の追加があります。やることが少し多いですが、全体像を把握しながら、適宜追加しておきましょう。

焦りは禁物です。下に全コードを載せます。それを参考に、地道にコードや設定を追加していきましょう。


■ここまでの全コード

さて、それではここまでの全コードを掲載しておきます。色が変化している部分は、ショットの処理を行った時点から、あらたに追加されている部分です。

'標準モジュール先頭部分

'◆API 宣言

Declare Function GetTickCount Lib "kernel32" () As Long
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMillsecounds As Long)

'■キャラクター 構造体宣言
Type Chara
    X As Single
    Y As Single
    W As Single
    H As Single
    Lif As Long
    Typ As Long
    Par As Long
End Type

'■ショット 構造体宣言
Type Shot
    X As Single
    Y As Single
    Vis As Boolean
    Typ As Long
End Type

'●キャラクター 変数宣言
Public Player_Data As Chara
Public Enemy_Data(9) As Chara

'●ショット 変数宣言
Public P_Shot_Data(4) As Shot

'◎その他 変数宣言
Public Shot_Interval As Long
Public Total_Count As Long 'ゲーム中のカウンタ

'▲定数宣言
Public Const Left_Key As Long = 37 'カーソル左
Public Const Up_Key As Long = 38 'カーソル上
Public Const Right_Key As Long = 39 'カーソル右
Public Const Down_Key As Long = 40 'カーソル下
Public Const Esc_Key As Long = 27 'Escキー
Public Const Shot_Key As Long = 90 'Zキー
Public Const Player_Size As Single = 9
'プレイヤーキャラクターの実際の大きさ
Public Const Shot_Size As Single = 3
'弾各種の実際の大きさ
Public Const Enemy_Size As Single = 9
'敵キャラクターの実際の大きさ



'初期化を担当するプロシージャ

Sub Init()
    With Player_Data
        .X = 100
        .Y = 180
        .W = 0
        .H = 0
        .Lif = 1
        .Typ = 0
        .Par = 0
    End With
    Erase P_Shot_Data
    Erase Enemy_Data
    Shot_Interval = 0
    Total_Count = 0
End Sub

'メインプロセスを担当するプロシージャ

Sub Main()

    Dim Flg As Boolean
    Dim Stm As Long
    
    Call Init
    
    Flg = False
    
    Do Until Flg
        Stm = GetTickCount
        Total_Count = Total_Count + 1
        Call Stage_Count
        Call Player_Action
        Call P_Shot_Action
        Call Enemy_Action
        DoEvents
        Do
            Call Sleep(1)
        Loop Until GetTickCount - Stm > 30
        If GetAsyncKeyState(Esc_Key) < 0 Then Flg = True
    Loop
    
End Sub


'敵キャラクターの出現管理プロシージャ

Sub Stage_Count()
    Randomize
    Select Case Total_Count Mod 200
        Case 0
            Call Enemy_Begin(Int(Rnd * 120) + 40, -10, 1)
        Case 50
            Call Enemy_Begin(Int(Rnd * 120) + 40, -10, 2)
        Case 100
            Call Enemy_Begin(Int(Rnd * 120) + 40, -10, 3)
    End Select
End Sub



'プレイヤーキャラクターを担当するプロシージャ

Sub Player_Action()

    With Player_Data

        'キー入力判定と移動処理 
        If GetAsyncKeyState(Left_Key) < 0 Then .X = .X - 3
        If GetAsyncKeyState(Up_Key) < 0 Then .Y = .Y - 3
        If GetAsyncKeyState(Right_Key) < 0 Then .X = .X + 3
        If GetAsyncKeyState(Down_Key) < 0 Then .Y = .Y + 3

        'はみだし防止処理 
        If .X - Player_Size < 0 Then .X = Player_Size
        If .X + Player_Size > 200 Then .X = 200 - Player_Size
        If .Y - Player_Size < 0 Then .Y = Player_Size
        If .Y + Player_Size > 200 Then .Y = 200 - Player_Size

        'ショット生成
        If Shot_Interval = 0 Then
            If GetAsyncKeyState(Shot_Key) < 0 Then
                Call P_Shot_Begin(.X, .Y, 0)
                Shot_Interval = 1
            End If
        Else
            Shot_Interval = Shot_Interval + 1
            If Shot_Interval > 7 Then Shot_Interval = 0
        End If

    End With

    'フォーム上の『Player』を実際に移動する処理 
    With UserForm1.Player
        .Left = Player_Data.X - Player_Size
        .Top = Player_Data.Y - Player_Size
    End With

End Sub


'ショット生成プロシージャ

Sub P_Shot_Begin(X As Single, Y As Single, Typ As Long)

    Dim L As Long

    For L = 0 To 4
        With P_Shot_Data(L)
            If Not .Vis Then
                .X = X
                .Y = Y
                .Typ = Typ
                .Vis = True
                UserForm1.Controls("P_Shot" & L + 1).Visible = True
                Exit For
            End If
        End With
    Next

End Sub


'ショット移動管理プロシージャ

Sub P_Shot_Action()

    Dim L As Long

    For L = 0 To 4
        With P_Shot_Data(L)
            If .Vis Then
                .Y = .Y - 6
                If .Y < -5 Then .Vis = False
                With UserForm1.Controls("P_Shot" & L + 1)
                    If P_Shot_Data(L).Vis Then
                        .Left = P_Shot_Data(L).X - Shot_Size
                        .Top = P_Shot_Data(L).Y - Shot_Size
                    Else
                        .Visible = False
                    End If
                End With
            End If
        End With
    Next

End Sub


'敵キャラクター生成プロシージャ

Sub Enemy_Begin(X As Single, Y As Single, Typ As Long)

    Dim L As Long
    
    For L = 0 To 9
        With Enemy_Data(L)
            If .Lif = 0 Then
                .X = X
                .Y = Y
                .W = Enemy_Size
                .H = Enemy_Size
                .Typ = Typ
                .Lif = 1
                .Par = 0
                With UserForm1.Controls("Enemy" & L + 1)
                    .Visible = True
                    Select Case Typ
                        Case 1
                            .Picture = UserForm1.Enemy_s1.Picture
                        Case 2, 3
                            .Picture = UserForm1.Enemy_s2.Picture
                    End Select
                End With
                Exit For
            End If
        End With
    Next
    
End Sub



'敵キャラクターを担当するプロシージャ

Sub Enemy_Action()

    Dim L As Long
    Dim TCMOD
    
    TCMOD = Total_Count Mod 30
    
    For L = 0 To 9
        With Enemy_Data(L)
            If .Lif > 0 Then
                Select Case .Typ
                    Case 1
                        .Y = .Y + 1.5
                    Case 2
                        .X = .X + 0.5
                        .Y = .Y + 1
                    Case 3
                        .X = .X - 0.5
                        .Y = .Y + 1
                End Select
                If .X > 220 Then .Lif = 0
                If .Y > 220 Then .Lif = 0
                If .X < -20 Then .Lif = 0
                If .Y < -20 Then .Lif = 0
                If TCMOD = 0 Then
                    Select Case .Typ
                        Case 2
                            .Typ = 3
                        Case 3
                            .Typ = 2
                    End Select
                End If
            End If
        End With
        With UserForm1.Controls("Enemy" & L + 1)
            If Enemy_Data(L).Lif > 0 Then
                .Left = Enemy_Data(L).X - Enemy_Size
                .Top = Enemy_Data(L).Y - Enemy_Size
            Else
                .Visible = False
            End If
        End With
    Next
    
End Sub




'標準モジュールはここまで
'ここから下はフォームモジュールに記述


'コマンドボタンのクリックイベント

Private Sub Com_Start_Click()
    Com_Start.Enabled = False
    Call Main
    Unload UserForm1
End Sub


'ユーザーフォームのクエリクロースイベント

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    End
End Sub


'ユーザーフォームのイニシャライズイベント
Private Sub UserForm_Initialize()
    UserForm1.Width = 220
End Sub


コード全体だと非常に長いですが、やっていることは限られた範囲のことだけです。見た目に臆せず、じっくりやってくださいね。

ここまでが完成すると、敵キャラクターが順番に画面上に登場するようになります。

タイプ1の敵は、『青い見た目、直進型』です。タイプ2と3の複合タイプは『黄色い見た目、ジグザグ型』です。Mod演算子をうまく使って、敵キャラクターの出現タイミングを管理するようにしていましたよね。これにより、一定の順番で繰り返し敵キャラクターが出現します。

あえて詳しくは解説しませんが、敵キャラクターは乱数を用いて表示位置を決定するようにしています。
敵キャラクターの初期配置を担当する『プロシージャEnemy_Begin』は、3つの引数を取ります。順番に、『横位置』、『縦位置』、『敵のタイプ』の3つですね。今回は横位置の部分を乱数でランダムに変更しているので、毎回ランダムな場所から敵キャラクターが出現する仕組みです。
引数の順番に注意しながら、コードをよ~く見れば、おのずとわかると思います。

以前の講座の内容までで、プレイヤーキャラクターの移動処理や、放ったショットの移動処理は完成しているので、こちらも普通に動かせます。
今回までの内容では敵キャラクターに『あたり判定』がついていませんので、ショットが当たっても何も起こりませんが、とりあえず、完全にシューティングゲームっぽい感じになったと思います。

実際にキチンと動いたときの感動は、多分、今までで一番大きいんじゃないかなと思いますので、ぜひ試してみてください。

今回は多分、今までで一番文章量が多くなってしまいました……。
少しわかりにくいと思いますので、追加した部分を一覧にしておきます。皆さん、がんばってくださいね。

■変数宣言
    Enemy_Data(9) を宣言......敵キャラクターデータ用
    Total_Count を宣言......ゲーム中のカウンタ用

■定数宣言
    Enemy_Size を宣言し9を代入......敵キャラクターの実際の大きさ

■初期化処理プロシージャ『 Init 』に追加
    Enemy_Data をEraseで初期化
    Total_Count に0を代入し初期化

■メインプロセス『 Main 』に追加
    Total_Count を毎回プラスする処理
    プロシージャ『 Stage_Count 』の呼び出し
    プロシージャ『 Enemy_Action 』の呼び出し

■プロシージャの追加
    Stage_Count
    Enemy_Begin
    Enemy_Action
    ユーザーフォームの Initialize イベント



サンプルダウンロード ⇒ コチラよりダウンロードできます。(別館)


■格言

変数・定数の宣言を忘れずに
初期化処理を忘れずに
タイプごとに異なる挙動を実現する


目新しい技術はありません。要は応用力と持続力です。
関連記事






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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。