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

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

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



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


スポンサーサイト

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






Chapter.45 [ シューティングゲーム5:プレイヤーキャラクター ]

■いよいよキャラクターの処理へ

さて、いよいよプレイヤーキャラクターの処理です。ここまでくるのが結構大変でしたね。
しかし、ゲームに限らず、プログラムは根本部分が最も大切です。ここまでの内容を順に習得してきたことで、皆さんのスキルは確実にアップしているはずですから、そこは自信を持っていいでしょう。

それではプレイヤーキャラクターの処理について、具体的に見ていくことにしましょう。

その名の通り、プレイヤーキャラクターは、ユーザーである第三者が自由に操作できるキャラクターでなくてはいけません。これを実現するためには、以前の講座で解説した『キーの入力判定』が必要です(Chapter36を参照)。ここまでは容易に想像がつきますね。
あとは、判定したキーの状態に応じて、適宜キャラクターを移動処理していけば、それだけで基本的なキャラクター処理部分は完成します。

この『キー入力判定+移動処理』を実装させて、プレイヤーが自由に操作するキャラクターを用意していくわけですが、今回大切なのはキー入力や移動処理以外の部分です。キー入力判定の細かい解説は以前の講座を参照していただくとして、今回はその他の部分で、特に重要な概念を中心に解説します。


■画面からはみださせない

ユーザーフォーム上のコントロールは、画面からはみだしたところに存在することもできます。つまり見た目上は見えない場所に、隠れて存在することができるということですね。これは移動処理のときや、初期化処理のときにも少し触れました。

ユーザーフォームの左上のカドが、横位置も縦位置も0(ゼロ)の場所。位置情報にマイナスの数値を指定すれば、いずれ見えなくなってしまうのでしたね。
ユーザーフォームが横幅100ポイントしかないのに、それ以上の数値を指定した場合にも同様のことが起こります。

この仕組みは、見せたくないものを隠したりするときには便利です。ですが、キャラクターを表示するときとなると、また話が違います。

今回のシューティングゲームでは、画面上からプレイヤーキャラクターが消えてしまっては困ります。かの有名なマリオブラザーズじゃあるまいし、右から出て行くと左から出てくるなんてわけにはいきません。(そういう設計にする場合は別ですが)

そこで、プレイヤーキャラクターの処理の中で、画面からはみださせないための仕組みを実装しておく必要があります。
キャラクターが今どこにいるか、そして、画面の大きさとキャラクターの大きさはどれくらいか、この合計3つの情報があれば、はみだし防止処理を行うことができるはずです。

キャラクターをはみださせないために
①キャラクターの位置はどこか?
②キャラクターの大きさはどれくらいか?
③ゲーム画面の大きさはどれくらいか?


■移動処理とはみだし防止処理

プレイヤーキャラクターを管理するプロシージャは、現段階では、次のようになります。いきなり少し長めのコードが出てきてしまいますが、後からゆっくりじっくり解説しますので、とりあえず見てください。

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

    End With

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

End Sub

これが、プレイヤーキャラクターの処理を担当する『Player_Actionプロシージャ』です。
現段階では、移動処理と、はみだし防止処理が施されている状態ですね。

①の部分が、『移動処理』を行っている部分です。
見てわかるとおり、GetAsyncKeyState関数を使って、4方向全てのキー入力を判定しています。もしもカーソルの左キーが押されていた場合には、横位置を表す『要素 X 』の値をマイナスします。横位置の定義は左に行くほどマイナス、右に行くほどプラスでしたね。左キーが押されているなら、要素 X はマイナスされるわけです。
もしも、右方向が押されているなら、先ほどとは反対方向なので、要素 X をプラスすればいいのですね。

同様に、縦位置の情報も処理します。縦位置の定義では、上に行くほどマイナス。下に行くほどプラスです。考え方は横位置のときと全く同じです。

②では『はみだし防止処理』をしています。
ゲーム画面の役割を果たしている、フレームコントロールの大きさは、縦横いずれも200ポイントだったはずです。ということは、プレイヤーキャラクターが、これよりも外の範囲に出て行ってしまわないように、逐一監視しなくてはいけません。

変数Player_Dataの、要素 X と、要素 Y は、キャラクターの中心から見た位置座標を表しています。
次の画像で言えば、黄色くマークされている部分です。

240.gif

しかし、ユーザーフォーム上での位置を表すプロパティ『Top・Left』は、中心ではなく『左上の座標』で位置情報を表します。

241.gif

このように、変数Player_Dataでの座標と、ユーザーフォーム上の座標では、座標位置の考え方が違っています。表示する位置を正しく計算するためには、ここで出ている座標上の差を考慮して、適切な処理を行わなくてはいけません。

ここで、前回解説した、『定数』が役に立ちます。

前回、初期化処理のコードの中で『定数Player_Size』を宣言しました。この定数Player_Sizeは、イメージコントロールの実際の幅をあらかじめ設定していましたね。覚えているでしょうか。

Public Const Player_Size As Single = 9

前回のコード内のコメントで『あとで使いやすいように2分の1にしておく。実際は18ポイントなので9を設定』と書いてありました。実は、2分の1にする理由は、この後の座標変換の考え方をよく見てみると、おのずとわかります。

242.gif

イメージコントロール自体の大きさは『18ポイント』でしたね。そして、定数Player_Sizeには、その半分の『 9 』をあらかじめ格納してあります。
なぜ2分の1の数値を格納したのかは、上の画像で考えてみるとわかると思います。

この仕組みが理解できていると、キャラクターの上下左右の辺が、どの座標になるか求めることができます。

キャラクターの上下左右の座標は……

左辺: X - 9
上辺: Y - 9
右辺: X + 9
下辺: Y + 9

で求めることができる

この考え方を元に、キャラクターが左の端に来ているときは、それ以上めり込めないように……上の端に来ているときは、それ以上めり込めないように……と、4つの方向全てをチェックします。これが、先ほど載せたコードの②の部分です。

もし、フレームの端よりも外側に出ていたとき(つまり各辺が0より小さいか、あるいは200より大きいとき)は、強制的に座標を端の部分に合わせてしまうわけです。これで、はみだし防止処理が実装できます。


さて、ちょっと長くてきついですが次です。次は③の部分ですね。
ここでは、実際のイメージコントロールの座標を設定しています。先ほどのはみだし防止処理の仕組みが理解できていれば、考え方は同じなので、なんとなくわかると思います。

イメージコントロールのLeft・Topが( 0 , 0 )だと仮定すると、その中心の座標となる X ・ Y は、( 9 , 9 )となります。もしLeft・Topが( 10 , 10 )だとすれば、 X ・ Y は、( 19 , 19 )ですね。

変数Player_Dataの要素 X と、要素 Y から、9を引き算した結果を求めて、それをコントロールのLeftと、Topに設定すればいいわけです。Withステートメントを使って、ユーザーフォーム上にあるPlayerという名前のイメージコントロールに対して、計算した結果を設定します。

この③の部分を設定した時点で、初めてユーザーフォーム上のイメージコントロールの位置が決定します。今まで、X や Y を使って計算してきた結果が、ここで初めて実を結ぶのです。

座標だのなんだのと、少し難しい考え方が出てきましたが、コードをよく見て、じっくり考えてみてください。どうしてもわかりづらい場合は、紙に四角形を書いて考えてみると、理解しやすいと思います。実際私は頭の中で、四角形をイメージしながらコードを書いていることが多いです。


補足コラム:If文の記述法

先ほどのコード内で、初めて特殊なIf文の記述が出てきました。
普通、If文は次のように記述します。

If 条件 Then
    条件が真の場合の処理~
End If

『If』から始まり『条件』そして『Then』と記述し、条件が真だった場合には中に記述された処理が行われます。それから最後は『End If』で終わるのがルールでしたね。
しかし、今回登場したIf文は次のように記述されています。

If 条件 Then 条件が真の場合の処理~

今までのIf文とは違い、全てのコードが1行で記述されている上、どこにも『End If』が見当たりませんね。
実は、これは文法上認められている『If文のもうひとつの書き方』なんですね。簡単な条件判断や、真の場合に行うべき処理が単純な場合などは、このような記述の仕方をすることで、コーディングにかかる手間を軽減できます。状況に応じて、使ってみるのもいいでしょう。ただし、私の試した感覚では、これによる処理の高速化などは特にないような気がします。わかりやすさを第一に据えて、自分が理解しやすいコードを書きましょう。



■ここまでを総まとめ

さて、座標系の計算は少し難しい処理でしたが、どうでしょう、ついてこれているでしょうか。ここで基本的な座標計算の考え方が理解できてしまえば、これから先、どのようなキャラクターなどでも同じ仕組みで処理していくことができます。
焦る必要はないので、しっかり習得してくださいね。

さて、ここまで出来たら最後の仕上げをしましょう。

あとやらなくてはいけないことは、『ゲームの終了処理』と、『コマンドボタンからのコードの呼び出し』の2つです。もう少しなのでがんばりましょう。

以前、メインプロセスを解説した講座で、『Main』という名前のプロシージャの雛形を載せました。今回はすでにゲームの作成に入っていますので、このMainというプロシージャも作成しましょう。それが次のコードです。

Sub Main() 'メインループとなるプロシージャ

    Dim Flg As Boolean
    Dim Stm As Long
    
    Call Init '①
    
    Flg = False
    
    Do Until Flg
        Stm = GetTickCount
        Call Player_Action '②
        DoEvents
        Do
            Call Sleep(1)
        Loop Until GetTickCount - Stm > 30
        If GetAsyncKeyState(Esc_Key) < 0 Then Flg = True '③
    Loop
    
End Sub

現段階では、まだプレイヤーキャラクターの処理しか作成していません(Player_Action)。ですのでメインループの中で呼び出しているサブプロシージャはひとつだけですね。

ここでのポイントは3つ。

①の部分では、まず初期化処理担当の『Init』を呼び出しています。これはメインループが始まる前に行っておかないと意味がありません。ループの中で呼び出してしまうと、ループするたびに毎回初期化処理が行われてしまいますので注意しましょう。

②でプレイヤーキャラクターの処理を呼び出しています。先ほど移動処理などを記述したあれですね。

③では、GetAsyncKeyState関数を使っていますね。前回の講座で宣言した定数Esc_Keyは、エスケープキーのキーコードを表しています。
つまり、もしエスケープキーが押されたときには、変数FlgTrueを代入して、ループが終了するようにしているのですね。
この仕組みがいわゆる『終了処理』です。ゲームのメインループから、キーの入力を受け取って抜ける仕組みですね。
これで、とりあえず現段階のメインプロセスは大丈夫です。


そして次に『コマンドボタンからのコードの呼び出し』です。これはじゃんけんゲームや、アニメーション処理などで、さんざん予行練習してきたので大丈夫でしょう。
ユーザーフォーム上にあるコマンドボタンの、クリックイベントから『Main』を呼び出せばいいのです。

Private Sub Com_Start_Click()
    Com_Start.Enabled = False '①
    Call Main '②
    Unload UserForm1 '③
End Sub

これがそのコードです。
まず①の部分で、コマンドボタンを『使用不可』の状態に設定しています。Enabledプロパティは、コントロールが使用できるかできないかを定義するプロパティです。ここに『False』を設定すると、そのコントロールは文字(Captionで設定した文字)が灰色に変わってしまい、使用できなくなります。
何度もクリックイベントが発生して、Mainが複数回呼び出されてしまわないようにするため、1回押された時点でコマンドボタン自体を使用できない状態にしてしまうわけです。

次に②。これは簡単ですね。CallでメインプロセスであるMainを呼び出しています。

③は、初めて目にするコードかもしれません。
Unload』というのはユーザーフォームを閉じなさい、という命令を出します。半角スペースを空けて、対象となるオブジェクトを指定すればいいので、今回は『UserForm1』としておきます。

え? フォームを閉じちゃっていいの? と思うかもしれませんが、これが実は大丈夫なんです。
②の部分で『Main』が呼び出されていますよね。プロシージャの中で別のプロシージャを呼び出した場合は、その処理が終わるまで、③の部分に処理が進むことはありません。
Mainの中で終了処理が行われて、完全にMainが終了した時点で③の部分にやっと処理が回ってきます。こうしておけば、先ほどのエスケープキーでの終了処理が行われると、そのままユーザーフォームが閉じるところまで、同時に行われるようになるのですね。

あとは、移動処理のところで行ったのと同様に、ユーザーフォームのクエリクロースイベントで、念のため全てのコードが止まるようにします。こうしておけば、ユーザーフォームが閉じられると同時に、確実に全てのプロシージャの処理が止まります。安全ですね。

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



■ここまでの全コード

かなり長い道のりでした。プライヤーキャラクターを作成したいだけなのに、なんでこんなにやることがてんこ盛りなんでしょうか……。しかし、これで基盤がほぼ完成したと言っていいでしょう。つまり、ここから先はプラモデルのパーツを継ぎ足すがごとく、プロシージャを追加していくだけで良いのです。

長く険しい道のりではありましたが、それだけ、価値のあることができたということでもあります。途中、何度か難しい部分があったはずです。
全てを一度に理解できなくても、ひとつひとつこなしていけば、必ずうまくいくはずです。焦ってはいけません。

とりあえず現段階のコードを全て以下に載せておきます。
全体像と、各プロシージャの役割や構造を、しっかり理解してください。必要に応じて、過去のChapterに戻って復習しながら、基盤をしっかり固めてください。

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

'◆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

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

'▲定数宣言
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 Player_Size As Single = 9
'プレイヤーキャラクターを表す、イメージコントロールの実際の幅(大きさ)
'ただし、あとで使いやすいように2分の1にしておく



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

Sub Init()
    With Player_Data
        .X = 100 '横位置を画面の中央
        .Y = 180 '縦位置を画面の下あたり
        .W = 0 'まだ使用しないので0
        .H = 0 'まだ使用しないので0
        .Lif = 1 '存在しているのでライフは0より大きい
        .Typ = 0 'プレイヤーはタイプ0
        .Par = 0 'まだ使用しないので0
    End With
End Sub


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

Sub Main()

    Dim Flg As Boolean
    Dim Stm As Long
    
    Call Init
    
    Flg = False
    
    Do Until Flg
        Stm = GetTickCount
        Call Player_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

    End With

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

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


きっとブラウザ上でこのコードを見ると、非常に長く感じると思います。
ですが、VBEに貼り付け(もしくは自力で書く)した後に眺めると、実際はそうでもないです。多分。

プロシージャがそれぞれ切り離されているので、視覚的にはかなり見やすいはずです。『コードの部品化』ということが、どれほど効果的なのかということが、おのずとわかるのではないでしょうか。

ユーザーフォームのほうがしっかり出来ていれば、このコードを適宜貼り付けるだけで、プレイヤーキャラクターが画面上を自由に動くプログラムが完成します。
プログラムを終了したいときは、フォーム上の×ボタンをクリックするか、エスケープキー(Escキー)を押せばいいのですね。いずれの場合も、ユーザーフォームのクエリクロースイベントでコードが止まるので問題ありません。

自由気ままに、プレイヤーキャラクターを動かして遊んでみてください。

すると、勘のいい人なら気がつくはずです。ちょっとおかしい部分があることに……。
その謎は次回解説! 今回は長すぎましたね。お疲れ様でした。


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


■格言

座標計算を習得しよう
フォームの準備、各種宣言も忘れずに


焦らずひとつひとつこなす。これが今回もポイントになります。
関連記事






Comment

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

このメインループの部分なのですがこのEscが押された場合に
メッセージボックス(OKとキャンセル)
を表示させ,OKならば、そのまま終了
キャンセルなら、今までプレイしていた
状態に戻ることは可能なのでしょうか?
簡単にいいますと、ユーザーフォームのクエリクロースイベント
的なことはできるのでしょうか?

講座には関係なく、大変失礼な質問ですが、
返信お願いします。(お忙しいのに申し訳
ありません。)
  • 匿名希望#4B33lOYw
  • URL
  • 2008.03.11(Tue)
  • Edit
>匿名希望さん

はじめまして、なのかな。

結論から言うと、可能です。
しかも、よく考えればわかるはずです。むずかしくはありません。

まず、Escキーでゲームが止まる仕組み、これは、

If GetAsyncKeyState(Esc_Key) < 0 Then Flg = True

ここの部分で、変数FlgにTrueを代入することで、Do~Loop文の終了条件が満たされるから、結果としてゲームが止まるわけですが、ここまでは大丈夫ですね?

大切なことは、Flg = True の場合にループが止まるということを、キチンと理解しておくことです。
Trueを代入して止まるなら、メッセージの結果によって、Trueを入れたり入れなかったりすればいいわけです。
例えば、次のように記述すればいいですね。

If MsgBox("終了?", vbYesNo) = vbYes Then
    Flg = True
End If

ここで詳しくは解説しませんが、このようにすれば、『はい』を選択したときだけ、変数FlgにTrueが代入されますので、終了するかどうかをユーザーにゆだねることができますよ。
  • 影斬#m.2.LkcQ
  • URL
  • 2008.03.11(Tue)
  • Edit
返信ありがとうございます^^
おかげさまで、終了することができました。
最初、似たようなコードを

If GetAsyncKeyState(Esc_Key) < 0 Then Flg = True の後に、例のコード記述したのですがこの場合だと、いいえも押しても、同じく終了してしまいました。(おそらくFlg = Trueという式が残っていたのだと思います。)
もちろんこの所のDO LOOPの後に記述しても
だめでした。
そして、ESCキー入力判定の式の所に、メッセージ
のボックスの式を入れたら、無事終了。キャンセルすることができました。

お忙しいのに大変申し訳ありませんでした。
それとサポート掲示板の方に書き込んだ方が良かったでしょうか?
  • 匿名希望#4B33lOYw
  • URL
  • 2008.03.12(Wed)
  • Edit
>匿名希望さん

うまくいって、よかったですね。

>サポート掲示板の方に書き込んだ方が良かったでしょうか?
あっちは開設したばかりで、まだほとんど書き込みがないですから、そういった意味では向こうでもよかったかも。でも実際はどっちでもいいです。
やりやすいようにしていただければ大丈夫です。

また何かあったらお気軽にお尋ねください。
  • 影斬#m.2.LkcQ
  • URL
  • 2008.03.12(Wed)
  • Edit
エクセルVBAで検索窓を作るというHPを書いておりますkatoです。コメントをいただきまして本当にありがとうございました。早速訪問させていただきました。面白そうなコンテンツがたくさんあってどこから読んでいいのかわからないくらいです。(笑)ブックマークさせていただき、少しずつ勉強させてください。素晴らしいサイトです。
  • kato kazushi#tuhYp8FY
  • URL
  • 2008.05.18(Sun)
  • Edit
>kato kazushiさん

こちらこそご来訪ありがとうございます。
コメントまで頂いて、嬉しい限りです。

内容はこれからもがんばって充実させていきます。同じVBAを扱うものとして、末永くよろしくお願いしますね。
  • 影斬#m.2.LkcQ
  • URL
  • 2008.05.18(Sun)
  • Edit

メールフォーム

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

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

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

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