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

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

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



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


スポンサーサイト

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






Chapter.131 [ APIによる描画処理3:ペン オブジェクト ]

■ペンオブジェクト

前回はデバイスコンテキストについて取り上げました。ウィンドウに何かを描き出すということの根底には必ずデバイスコンテキストが関係しています。そのハンドルを取得することで、プログラムから様々な描画処理が行なえるのですね。

さて、今回は、そのデバイスコンテキストに描画を行なうために必要なツールのひとつである「ペン」について解説したいと思います。ペンオブジェクトはその名の通り、いわゆる線を描き出すペンとして機能するオブジェクトです。ウィンドウ内に線を引く場合に、ペンオブジェクトが必要になります。

線を引くと言っても、なにも直線しか引けないというわけではありません。API の使い方ひとつで曲線を描画したりすることも可能ですし、ペンオブジェクトに設定した内容によっては点線で描画を行なったりすることもできます。

最初は少しイメージしにくいかもしれませんが、ペンオブジェクトはデバイスコンテキストに最初から含まれています。というよりも、デバイスコンテキストは、最初からペンを一本その手に携えているのです。デバイスコンテキストの解説をしたときにも書きましたが、デバイスコンテキストは描画に関する様々な要素を内包しています。ペンオブジェクトもそのなかに含まれているのですね。ですから、もしデバイスコンテキストが最初から持っているペンではなく、こちらで任意に用意したペンを使いたいとなった場合には、ペンを持ち変えるように命令を出さなくてはなりません。それらも全て API を呼び出して処理する形になりますので、最初は非常に複雑な処理に感じるかもしれません。ただ、そこは慣れが必要というだけで、けして理解できないほど難しいものではないはずです。根気よく、取り組んでいただけたらと思います。


■構造体を使った処理

ペンオブジェクトに限らず、API で処理を行なう場合には、構造体に関する理解が欠かせません。構造体は、VB 界隈ではユーザー定義型変数などと呼ばれることもあります(というかそちらが正式名称ですね)。構造体に関する予備知識がないという人は、以前の講座で解説していますので、そちらを事前に読んでおくことをオススメします。(参考:Chapter.43 [ シューティングゲーム3:構造体 ]

ペンを作成するには、専用の API を使います。ペンを作ることができる API はいくつかありますが、当講座では CreatePenIndirect 関数を使っていくことにします。宣言文は以下のようになっています。

Declare Function CreatePenIndirect Lib "gdi32.dll" _
(lplgpl As LOGPEN) As Long

さて、ここで注目すべきは、この関数が取る引数です。よーく見てください。引数の変数の型が見たこともない型になっていることに気がつきましたか? 実は、これと構造体が非常に深く関係しているのです。

ここで登場している LOGPEN という記述は、この引数が構造体を用いて受け渡されるということを表しています。そして、LOGPEN 構造体の中身についても、事前にどのような内容にしなければならないのか厳密に決められています。それが以下です。

Type LOGPEN
    lopnStyle As Long
    lopnWidth As POINTAPI
    lopnColor As Long
End Type

これを見ると、LOGPEN 構造体は、みっつの要素を持つ構造体であることがわかりますね。みっつの要素のうち、ふたつは Long 型ですから整数のデータですね。しかし、ひとつおかしなのが混じっていますね。POINTAPI 型ってそんな変数の型あったかなぁ…………と疑問が湧いた方もいるかもしれませんが、勘のいい人ならわかるはずです。
そう、この POINTAPI も構造体なのですね。こちらも、ウィンドウズによって内容はあらかじめ決められています。それが以下。

Type POINTAPI
    X As Long
    Y As Long
End Type

はい、非常に単純な構造体です。POINTAPI は座標を表す場合などによく使われる構造体で、X と Y という縦横の要素だけを持つ単純な構造になっています。

ちょっとわかりにくくなってきましたので、整理しましょう。

・ペンオブジェクトを作成するための API を宣言
・ペンオブジェクトを作るには LOGPEN 構造体が必要
LOGPEN 構造体を利用するには POINTAPI 構造体が必要


■ペンオブジェクトの生成

さて、ペンオブジェクトを生成するために必要な API と構造体については理解できたでしょうか。
ペンオブジェクトを生成する前に、先述のとおり、ふたつの構造体にデータをあらかじめセットしなければなりません。これは順番に見ていきましょう。

まず、ペンの太さを決めます。ペンの太さは POINTAPI 構造体の X 要素に整数で指定します。このとき Y 要素は使用しませんので、そのままで大丈夫です。

Dim p As POINTAPI

p.X = ペンの太さ

LOGPEN 構造体にセットするデータは、上記の POINTAPI 構造体のデータの他、もうふたつありましたね。それぞれにどんな意味があるのか、見ていきます。

lopnColor という要素には、見たまんま、色に関するデータをセットします。宣言されている変数の型を見ればわかりますが、この要素には Long 型のデータを渡す必要があります。つまり、整数値ですね。VBA には、RGB 関数がありますので、そちらを使うといいでしょう。

補足コラム:RGB 関数
RGB 関数はみっつの引数を取ります。第一引数から順に、赤・緑・青のそれぞれの強さを整数(0 ~ 255 の範囲内)で指定します。
例えば、RGB(0, 0, 0) なら黒の、RGB(255, 0, 0) なら赤の、それぞれに対応する整数が得られます。RGB 関数は 256×256×256 色を表現できますので、合計 16777216 色を表現できることになります。

さて、それでは lopnStyle は何に影響する要素なのでしょう。これは、ペンによって描かれる線のスタイルを指定する要素で、以下のような内容を指定できます。

・実線 (PS_SOLID = 0)
770.png

・破線 (PS_DASH = 1)
771.png

・点線 (PS_DOT = 2)
772.png

・一点鎖線 (PS_DASHDOT = 3)
773.png

・二点鎖線 (PS_DASHDOTDOT = 4)
774.png

・無効 (PS_NULL = 5)
775.png

・実線※特殊 (PS_INSIDEFRAME = 6)
776.png


これを見ると、実線が二度登場していますね。これはおいおい説明するとして、lopnStyle 要素には目的に応じて上記の定数をセットします。
ただ、注意しなければならないのは、これらの定数は VBA にあらかじめ組み込まれている定数ではないということです。もし、定数を使いたい場合には自分で定数を宣言しておく必要があります。もし、それが面倒だということであれば、数値で直接指定しても動作上の問題はありません。

補足コラム:組み込み定数
VBA には、あらかじめ組み込まれている「組み込み型の定数」と、プログラマが自分で宣言できる「ユーザー定義型の定数」の、二種類の定数があります。組み込み定数はその名の通り、あらかじめ VBA に組み込まれているため、定数名を記述するだけで簡単にその定数を利用できます。例えばキャリッジリターン文字を表す vbCr などは、組み込み定数ですね。
一方、ユーザー定義の定数は自分で宣言した定数を指し、Const ステートメントを用いて自由に宣言することができます。API プログラミングにおいては、各種定数が多数登場しますが、これらの定数は VBA にはあらかじめ組み込まれていません。ですから、例えば先ほどの lopnStyle を設定するときに、唐突に PS_SOLID や PD_DASH などの定数を使っても正しい結果が得られない場合があります。
これらは構文エラーにはなりませんが、VBA はあらかじめ宣言されていない不確定な文字列を勝手に Variant 型の変数だと認識します。エラーが起こらない分、余計にやっかいだとも言えますね。
定数とはそもそも、コードの可読性を上げるためのものです。あらかじめ定数を宣言しておくのは面倒だと感じるかもしれませんが、結果的にはコードが見やすく管理しやすい環境を構築できます。個人的には、定数を宣言しておき利用することをオススメします。

だいぶ長くなりましたが、これでペンを生成する準備ができました。一連の処理をコードにしてみましょう。

Declare Function CreatePenIndirect Lib "gdi32.dll" _
(lplgpl As LOGPEN) As Long
        
Type POINTAPI
    X As Long
    Y As Long
End Type

Type LOGPEN
    lopnStyle As Long
    lopnWidth As POINTAPI
    lopnColor As Long
End Type

Const PS_SOLID As Long = 0
Const PS_DASH As Long = 1
Const PS_DOT As Long = 2
Const PS_DASHDOT As Long = 3
Const PS_DASHDOTDOT As Long = 4
Const PS_NULL As Long = 5
Const PS_INSIDEFRAME As Long = 6

Sub pCreate(hdc As Long)

    Dim p As POINTAPI
    Dim lp As LOGPEN
    Dim np As Long
    
    p.X = 1 '①
    
    With lp
        .lopnStyle = PS_SOLID '②
        .lopnWidth = p '③
        .lopnColor = RGB(255, 0, 0) '④
    End With
    
    np = CreatePenIndirect(lp) '⑤
    
End Sub

ただペンオブジェクトを生成するだけなのに、随分長いコードになってしまっていますね。まぁ、これは API プログラミングの特性ですので、我慢するしかありません。

上から順番に見ていくと、まずは API と構造体、さらに定数の宣言が順に並んでいます。そして pCreate というサブプロシージャが、ペンオブジェクトを生成するプロシージャですね。
このプロシージャはデバイスコンテキストのハンドルを引数として受け取ります。そして、プロシージャ内部で各種パラメータを設定したあと、最後にペンオブジェクトを生成しています。

①では、ペンオブジェクトの線の太さを指定しています。ここでは 1px の線になるように指定されています。
②で、ペンのスタイルを決めています。この場合は実線ですね。③には、①で値をセットした POINTAPI 型の変数をセットしています。④は線の色です。ここでは RGB 関数を使って赤色の線になるように値をセットしています。
最後に、⑤で実際にペンオブジェクトを生成しています。最終的には Long 型の変数 np に、生成されたペンオブジェクトのハンドルが取得されます。


■まとめ

さて、ペンオブジェクトの生成、理解できたでしょうか。
API プログラミングは、先ほども書いたようにコード量が膨大になりがちです。API の Declare 宣言文や、必要となる構造体、定数の宣言など、事前に準備するべきこともたくさんあり、冗長な印象を受けやすいと思います。

しかし、このような処理は本来の Windows プログラミングでは当たり前のように行なわれていることです。C 言語などでプログラミングを行なう際には、ほぼ全ての処理がこのようにして行なわれています。VBA がいかにプログラミングをしやすい設計になっているのか、痛感させられますね。

API プログラミングは、ほとんどの場合にこのような多少面倒な手順を必要とします。これには慣れるより他ありません。面倒に感じるかもしれませんが、やっていることは意外と単純です。見た目が煩雑なだけで、処理自体は難しいことをやっているわけではありません。ここはひとつ腰を据えて、じっくり時間をかけて理解していただければと思います。

次回からは、ペンオブジェクトと対になって機能するブラシオブジェクトを取り上げます。やはり、こちらもいろいろ準備しなければならない部分があるのですが、ペンオブジェクトが理解できたのなら、それほど無理することなくすんなり理解できると思います。まずは、ペンオブジェクトを生成するまでの流れをしっかり理解しておきましょう。

ペンとブラシが準備できれば、いろいろな図形を描画することが可能になります。がんばって、取り組んでみてください。



■格言

構造体の使い方を理解する
ユーザー定義型の定数を活用する


ペンオブジェクトひとつ取っても結構煩雑ですが、ここは焦らずじっくりいきましょう。

スポンサーサイト






Chapter.132 [ APIによる描画処理4:ブラシ オブジェクト ]

■前回のおさらい

前回は、ペンオブジェクトの生成について取り上げました。たったひとつ、ペンオブジェクトを生成するだけなのに、随分と煩雑な処理を行なわなければなりませんでしたね。
しかし、前回も書いたように、これは API プログラミングの特性というか、どうしようもない部分でもあります。構造体を正しく宣言し、適宜定数を宣言し、そうやって下準備をした上で初めて API を走らせることが可能になります。逆説的に考えると、これこそが本来の Windows プログラミングなのだとも言えます。VB という言語、あるいはそこから派生した VBA という言語が、いかにプログラミングしやすくチューニングされた言語なのかということが、嫌というほどわかるような気さえします。

さて、今回はペンオブジェクトと対になるブラシオブジェクトについてやりたいと思います。ペンオブジェクトのときと同様に、いくつかの構造体などを利用する必要がありますが、ペンオブジェクトが生成できた人ならすんなり理解できるでしょう。
ペンとブラシが揃ってしまえば、思い通りの線や色を用いて図形などを描画することが可能になります。ここはさっくりと扱い方を覚えてしまいましょう。


■API の宣言と構造体の準備

さて、ペンオブジェクトのときと同様、ブラシオブジェクトも当然 API によって生成します。それが以下の API です。

Declare Function CreateBrushIndirect Lib "gdi32.dll" _
(lplb As LOGBRUSH) As Long

この API はペンオブジェクトのときに利用した CreatePenIndirect 関数と対極を成す API で、名前もペンのところがブラシに変わっただけですね。そしてさらに、この CreateBrushIndirect 関数が受け取る引数ですが、これもペンのときと同じように構造体になっています。

今回登場する構造体の名前は LOGBURSH 構造体です。詳細は以下のようになっています。

Type LOGBRUSH
    lbStyle As Long
    lbColor As Long
    lbHatch As Long
End Type

LOGPEN 構造体と同様、みっつの要素を持った構造体となっていますが、今回は POINTAPI 構造体は登場しません。
それぞれの要素の意味合いを説明する前に、そもそもブラシとは何ぞやという根本的な話からしたいと思います。

ペンは、線を引くためのツールです。一方、ブラシとは塗り潰すためのツールです。ペンはその線の太さや、直線なのか点線なのかなといった要素をカスタマイズできましたね。ブラシの場合は、あくまでも塗り潰すためのツールなのでカスタマイズできる要素もペンとはまったく異なります。

まず、ブラシは普通は単色です。矩形などで区切られた領域のなかを、ひとつの色で塗り潰します。ペンのときと同様、この色は自由に変更することができます。
しかしブラシとはこの単色ブラシだけを言うわけではなく、簡易で幾何学的な模様で塗り潰すことができるハッチブラシや、ビットマップを使って塗り潰すことができるパターンブラシなどがあります。

ブラシを生成する際に利用する LOGBRUSH 構造体では、生成するブラシの性質を細かく指定することができます。単色で塗り潰すだけのブラシなのか、あるいはハッチブラシなのか、はたまたビットマップブラシなのか。塗り潰す色は何色なのか、ハッチブラシならどんな模様にするのかなど、全てをこの構造体によって指定します。

lbStyle には、次の要素が指定できます。

BS_SOLID = 0
ソリッド(つまり単色の)ブラシ
BS_HOLLOW = 1
塗り潰しなし
BS_HATCHED = 2
ハッチブラシ
BS_PATTEREN = 3
ビットマップブラシ
BS_DIBPATTERN = 5
DIBパターンのブラシ

これで全てではありませんが、今のところはそれほど難しく考えないほうがいいでしょう。ビットマップの話になると、API は急に難易度が上がってしまいます。まずは、ソリッドブラシとハッチブラシくらいを覚えておけば問題ありません。

さて次に lbColor ですが、これはもうそのままの意味で、ブラシオブジェクトに指定する色です。これは簡単ですね。RGB 関数を用いて色を指定しましょう。

lbHatch ですが、この要素は前述の lbStyle と深く関係しています。具体的に言うと、lbStyle で何を指定したのかによって、同じ値でも意味合いが変わってきます。

たとえば、lbStyle でソリッドブラシを選択している場合には、lbHatch には 0 を指定します。というか、基本的にはどんな数値を指定しても無意味です。要するに、ソリッドブラシの生成には lbHatch はなんの影響も与えないのですね。
ハッチブラシを生成する場合には、lbHatch 要素は非常に大きな役割を果たします。次のような様々なハッチスタイルを指定することが可能です。

HS_HORIZONTAL = 0
横線
HS_VERTICAL = 1
縦線
HS_FDIAGONAL = 2
斜線(左下から右上向きの斜線)
HS_BDIAGONAL = 3
斜線(左上から右下向きの斜線)
HS_CROSS = 4
縦横のクロス模様
HS_DIAGCROSS = 5
斜めのクロス模様

ブラシの種類がビットマップブラシの場合には、lbHatch にビットマップのハンドルを渡します。

このように、LOGBRUSH 構造体にセットする値は、生成したいブラシの種類に応じて様々に変化します。lbStyle にどのような値をセットしたのかによって、その他の要素が様々な影響を受けますので注意しましょう。


■ブラシオブジェクト生成のコード

さて、それではコードを実際に見てみましょう。
Declare Function CreateBrushIndirect Lib "gdi32.dll" _
(lplb As LOGBRUSH) As Long

Type LOGBRUSH
    lbStyle As Long
    lbColor As Long
    lbHatch As Long
End Type

Const BS_SOLID As Long = 0
Const BS_HOLLOW As Long = 1
Const BS_HATCHED As Long = 2
Const BS_PATTEREN As Long = 3
Const BS_DIBPATTERN As Long = 5

Const HS_HORIZONTAL As Long = 0
Const HS_VERTICAL As Long = 1
Const HS_FDIAGONAL As Long = 2
Const HS_BDIAGONAL As Long = 3
Const HS_CROSS As Long = 4
Const HS_DIAGCROSS As Long = 5

Sub bCreate(hDC As Long)

    Dim lb As LOGBRUSH
    Dim nb As Long
    
    With lb
        .lbStyle = BS_SOLID
        .lbColor = RGB(255, 0, 0)
        .lbHatch = 0
    End With
    
    nb = CreateBrushIndirect(lb)
    
End Sub

掲載したコードの大半が宣言セクションという、ある意味衝撃的な内容になってますね。実際にブラシオブジェクトを生成しているのは bCreate というサブプロシージャです。上記の記述では、赤色で塗り潰されるソリッドブラシを生成しています。
CreateBrushIndirect 関数は、実行された結果としてブラシオブジェクトのハンドルを返します。変数 nb に、最終的に生成されたブラシオブジェクトのハンドルが取得されるようになっているのですね。

基本的に、ブラシオブジェクトの生成はこれだけです。ペンオブジェクトのときもそうでしたが、これらのオブジェクトは生成しただけではなんの意味もありません。デバイスコンテキストに対してオブジェクトを選択させることで、初めて利用することができます。そのあたりは、次回に詳しくやりたいと思います。


■まとめ

さて、ブラシオブジェクトの生成について理解できたでしょうか。
ペンやブラシを生成すると言っても、実際にコードの中で扱うのはそれらのオブジェクトのハンドルであるということを忘れないようにしましょう。

今回の例で言うと、最後に示したコードの中で、 nb という名前の Long 型の変数に、新しく生成されたブラシオブジェクトのハンドルが取得されています。これらのハンドルを用いてオブジェクトを操作したり削除したりするわけですね。

次回からは、生成したオブジェクトをデバイスコンテキストに選択させ、実際にそれらを用いた処理を行なう予定です。ただし、いくつかの守らなければならない約束事などもありますので、それらもしっかり解説します。

ブラシオブジェクトはペンオブジェクトと比べて生成できるオブジェクトの自由度が高いので、若干わかりにくい面もあるかと思います。今のうちにしっかり理解しておきましょう。



■格言

ブラシはスタイルが多様に存在する
スタイルに応じて構造体にセットした値の意味合いが変化する


ブラシオブジェクトはまぁ、基本はベタ塗りで使うことが多いと思います。極めればいろんなことができるのは確かですが。







メールフォーム

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

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

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

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