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

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

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



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


スポンサーサイト

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






Chapter.47 [ シューティングゲーム7:ショットを撃つ② ]

■ショットはキャラクター

さて、前回の続きです。今回の内容をしっかり習得できれば、プレイヤーキャラクターがショットを撃てるようになります。これでかなりゲームらしくなります。楽しみですね。

ショットを撃つの2回目となる今回は、ショットの『生成と移動』について考えてみます。

プレイヤーキャラクターを作成する際には、ユーザーのキー入力を受け取って、キャラクターが移動するようにしましたね。ゲームが行われている最中、プレイヤーのキー入力によって移動する方向が決まるわけですから、どのような移動を行うかは常に一定していないわけです。

これに対してショットの場合は、一度発射されたらそのあとプレイヤーのキー操作などに影響される必要はありませんね。単純に決められた動きを延々と続ければいいだけです。
ですから、考え方としては『動きが一定の規則によって定義されたキャラクター』と同じです。プレイヤーキャラクターを移動処理したときと同じように、ショットを一種のキャラクターとして考えれば、別段難しいこともありませんね。

ショットは上で書いたように、一種のキャラクターとして考えます。
そこで、プレイヤーキャラクターを作成したときと同じように、まずはショット専用の構造体を用意しましょう。

Type Shot
    X As Single 'ショットの横位置
    Y As Single 'ショットの縦位置
    Vis As Boolean 'ショットが見えているかどうか
    Typ As Long 'ショットのタイプ
End Type

この構造体は、敵キャラクターの撃つショットにも使えるようにしています。まぁ、細かいことは使いながら説明していきます。

次に、この構造体を使って、ショット用の配列変数を用意します。

Public P_Shot_Data(4) As Shot

変数の型が『~As Shot』となっていますね。先ほど定義した構造体を使っていますので、間違えないように注意しましょう。
前回も書いたように、今回はショットを5発撃てるようにしますので、配列のインデックスの指定が『P_Shot_Data(4)』という感じに4を指定しています。0から始まり4までの合計5つ分です。

これらをモジュールの先頭部分に追加すれば、下準備はOKです。


■追加したものは初期化する

さて、上記のように、何か扱うものが増えると(今回で言えばショット)、変数や構造体、定数などが新しく増えていきますね。
ここで忘れがちなのが、『追加した変数などの初期化処理』です。私はこれ結構やってしまうんです。
そこで、今回のショット関連で増えた変数などは、初期化処理でしっかりリセットするようにしておきましょう。プレイヤーキャラクターの構造体を初期化している『Init』という名前のプロシージャがありましたね。
あのプロシージャの中に、今回増えた配列や変数を初期化する処理を追加します。

今回追加するべきなのは、『P_Shot_Data()』と、前回登場したPublic宣言の変数『Shot_Interval』の2つです。

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
    Shot_Interval = 0

End Sub

緑の文字で表示されている部分が、今回新しく追加された部分です。
まず、緑文字の1行目、『Erase P_Shot_Data』と記述されています。
ここで登場する『Erase』は、全ての配列の要素を初期化する命令を出します。数値を扱う変数型なら初期値は『 0 』。文字列を扱う変数型なら初期値は『 "" (長さ0の文字列)』。TrueFalseを扱うブール型なら初期値は『 False 』です。
これらの法則にしたがって、配列の全ての要素が初期化されます。P_Shot_Dataは配列変数です。ですからEraseを使って初期化することが可能です。

Eraseは配列しか初期化できません。ですので、配列ではなく通常の変数である『Shot_Interval』には直接0を代入しておきます。

これで初期化はOKです。Eraseの使い方がポイントですね。


■ショットの生成

ショットに関しては、『生成』と『移動』を分けて管理するようにします。これはショットの誕生から消滅までを見てみるとわかりやすいと思います。

プレイヤーキャラクター処理の中でキー入力を受け取り、今ショットを撃とうとしていると判断された場合
    ▼
ショット生成プロシージャを呼び出す
    ▼
ショットが生成される
    ▼
ショットが生成されたので、以降、移動を管理するプロシージャが毎回ループごとにショットを処理する
    ▼
ショット移動プロシージャが、ショットが画面上から消えていないかなどを判断し、もし消えていたり敵に当たっていたりした場合にはショットを消す

上の簡易フローを見るとわかりますが、プレイヤーキャラクター処理の中で呼び出されるのは、『ショット生成プロシージャ』です。そして、一度ショットが生成されたら、あとは『ショット移動プロシージャ』がショットの状態を管理します。

前回載せた、プレイヤーキャラクターのショットに関する処理の中で、『ショットを発射する』の部分だけが保留になっていましたね。これに相当するのが『ショット生成プロシージャの呼び出し』です。

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

これが『ショット生成プロシージャ』になります。その仕組みを詳しく見てみましょう。

まず、始めに理解しておくべきは、このプロシージャが3つの引数を取る、ということです。一番最初、プロシージャの名前に続けて『X As Single, Y As Single, Typ As Long』という記述がありますね。この部分が引数を定義している部分です。これを見ると、このP_Shot_Beginというプロシージャが『X・Y・Typ』という3つの引数を取ることがわかります。

引数を取るプロシージャということは、このプロシージャを呼び出すときに値をセットにして呼び出さなくてはいけません。この引数の仕組みは、じゃんけんゲームを作成したときにも解説しましたね(Chapter20を参照)。
これが理解できていないと、多分この後の解説についてこれません。よくわからない人はよく復習しておきましょう。

さて、続いてはプロシージャの中身です。
このプロシージャでは、For文を使っています。先ほど構造体を使って宣言した、ショット用の配列変数がありましたね。『P_Shot_Data()』がそれですね。
この構造体の要素の中に『Vis:ショットが見えているかどうか』という要素がありましたね。まずはFor文を使って、画面上に見えていないショットを探します。それが①の部分です。
Shot構造体の要素であるVisは、Boolean型のデータに定義されていました。つまり、TrueFalseかどちらかのデータが入っているはずですね。もし、『Vis = True』ならショットは見えている。『Vis = False』なら、ショットは見えていない、となるわけです。

For文を使って0から4までを順番に見ていき、見えていないショットを探します。『If Not .Vis Then』の部分がそれを判断しているところですね。

補足コラム:Notの使い方

『Not』はIf文などの条件判断を行う処理において、真と偽の評価を反転させます。例えば、If文の場合には、次のように考えることが出来ます。

    If Bool Then …… 変数BoolがTrueなら
    If Not Bool Then ……変数BoolがFalseなら
    If L = 0 Then …… 変数Lが0なら
    If Not L = 0 Then …… 変数Lが0以外なら

これは条件判断を行うところなら基本的に使えます。たとえば『Do Until』など、繰り返し処理の終了条件にも使えます。

    Do Until Flg …… 変数FlgがTrueなら終了
    Do Until Not Flg …… 変数FlgがFalseなら終了

他にも、Boolaen型変数の値を反転させるなどの利用法もあります。

    Bool = Not Bool …… 変数BoolがTrueならFalseに、FalseならTrueに

最初はとっつきにくいかもしれませんが、有効に利用すればかなり役に立ちますので、覚えておいて損はないでしょう。

さて、①の部分で、見えていないショットが見つかったらショットを生成します。
ショットの生成では、構造体の各要素に、順番に値をセットしていきます。
.X = X 』という式は一見するとわかりにくいですが、『左辺のピリオドつき .X 』は構造体の要素 X です。それに対し『右辺のピリオド無し X 』は、引数から受け取ったデータ X です。
プロシージャの呼び出しと同時に引数として受け取ったデータを、構造体の要素に代入しているのですね。

同様に、要素 Y や要素 Typ を順に設定して、要素VisTrueにします。これでデータ上は、ショットが見えていると判断される状態になりました。ここまでが②の部分です。

そして、③のところでは、実際にユーザーフォーム上のイメージコントロールを見えるようにしています。
UserForm1.Controls("P_Shot" & L + 1).Visible = True』がその処理を行っている部分です。

ユーザーフォームに配置した、ショット用のイメージコントロールは、その名前が『P_Shot1P_Shot5』までの連番になっていましたが覚えているでしょうか。
ここでは、『UserForm1.Controls(コントロールの名前)』という指定の仕方を使って、イメージコントロールのVisibleプロパティをTrueにしています。こうすることで、画面上のイメージコントロールが実際に見えるようになります。

そして最後、1つショットを撃てれば充分なので、それ以降の繰り返し処理を行わないように『Exit For』しておきます。これをやっておかないと、見えていないショットが全て発射されてしまうので、おかしなことになります。

ここまで出来れば、ショットの生成についてはOKです。
あとは、プレイヤーキャラクターの処理の中で、ショットを撃つべきだと判断された場合にこのプロシージャを呼び出すようにすればいいわけです。これは最後にまとめて全体のコードを載せますので、そこで詳しく解説しますね。


■ショットの移動

さて、ちょっと長いですが、がんばってショット関連の処理を作ってしまいましょう。
次は、ショットの移動処理についてです。

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

①から順番に見ていきましょう。
まずは、ショット自体が今現在見えているのかどうか、If文を使って判断します。それが①ですね。

そして、ここで見えていると判断された場合には、②で示すように、データ上での座標を上方向に移動しています。縦位置を表す要素 Y をマイナスすることで、座標が上の方向にずれるわけです。

座標移動ができたら、次に画面上から消えてしまっていないか判断しています。それが③の部分。フレームの一番上の端が0に相当するわけですから、縦位置がマイナスの数値になってしまっていたらショットは完全に画面上から消えていることになります。
そんなときは、見えているかどうかを定義している要素VisFalseを代入しておき、見えていないことにしておくのです。

その後、実際のユーザーフォーム上のコントロールを、今計算した座標上に移動させます。これはプレイヤーキャラクターのときと同じですね。
構造体で定義した変数のデータで全ての計算を行ってしまい、それらの結果を使ってコントロールの位置やVisibleプロパティを設定します。これが④の部分ですね。

やっていることはプレイヤーキャラクターのときとほとんど同じです。

構造体で定義した要素『 X・Y 』は、ショットの中心の座標を表します。ですから、前回の講座で定義してある『定数Shot_Size』を使って、適切な『Top・Left』に変換しているわけです。


■ここまでの全コード

それでは、前回と今回で解説した、ショットに関するコードを全て取り入れてみましょう。
プレイヤーキャラクターの時に載せたコードより、追加された部分は緑の文字で表示するようにしていますので、適宜追加してみてください。

ここまでの全コード
'標準モジュール先頭部分

'◆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 P_Shot_Data(4) As Shot

'◎その他 変数宣言
Public Shot_Interval 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
'弾各種の実際の大きさ



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

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
    Shot_Interval = 0

End Sub

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

Sub Main()

    Dim Flg As Boolean
    Dim Stm As Long
    
    Call Init
    
    Flg = False
    
    Do Until Flg
        Stm = GetTickCount
        Call Player_Action
        Call P_Shot_Action
        DoEvents
        Do
            Call Sleep(1)
        Loop Until GetTickCount - Stm > 30
        If GetAsyncKeyState(Esc_Key) < 0 Then Flg = True
    Loop
    
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



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


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

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


う~ん……長い。

緑の文字で表示されている部分が、今回追加されたコードです。そこに要点を絞って考えると、だいたいわかるのではないでしょうか。

特に難しいと思われるのが、水色の文字で表示されている部分、ショット生成プロシージャの呼び出しです。
ショットの生成を担当する『P_Shot_Beginプロシージャ』は、引数を3つ取ります。この引数で与えられた座標に、生成されるショットの初期位置をセットするのです。

ですから、プレイヤーキャラクターの現在の座標を引数として渡して、その場所にショットが生成されるようにするのですね。
プレイヤーキャラクターが、『 X = 100 , Y = 100 』の座標にいるとすれば、引数として(100,100,0)がP_Shot_Beginプロシージャに渡されます。
そうするとP_Shot_Beginプロシージャが、その座標に新しくショットを生成するというわけです。
ちなみに、今回は引数として渡す『Typ』は、特に使用しないので0に設定しています。

どのプロシージャから、どのプロシージャが呼び出されているのか、そこをしっかり理解していれば、おのずとわかるはずです。焦らず、時系列を正しく把握してみてくださいね。

かなり長かったですが、これでプレイヤーキャラクターがショットを発射できるようになったはずです。ユーザーフォームを実行してみてください。キーボードのZキーを押すと、プレイヤーキャラクターがショットを発射するようになったはずです。
うまくいかないという人は、ゆっくりでもいいですから、ひとつひとつエラーをつぶしていきましょう。エラーが起きないのにうまくいかない場合は、どこかしらで設定を間違えているはずです。最初からひとつひとつこなしていけば、きっとうまくいくはずですからがんばってみてください。


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


■格言

初期化を忘れずに
ショットの生成と移動は分けて考える


だいぶ複雑になってきましたね。焦りは禁物です。
関連記事






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