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

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

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



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


スポンサーサイト

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






Chapter.133 [ APIによる描画処理5:図形描画準備編 ]

■おさらい

前回まではペンオブジェクトとブラシオブジェクトの生成について解説してきました。多少複雑な手順を踏む必要はありましたが、生成するだけならそれほど難しくはなかったのではないかと思います。

生成されたオブジェクトは、それだけでは役に立ちません。デバイスコンテキストにオブジェクトを関連付ける(選択させる)ことで、初めてそれを利用することが可能になります。今回は、デバイスコンテキストにオブジェクトを選択させる部分を中心に、注意点などを交えながら解説していきたいと思います。

今回は、まず解説するコードを掲載したいと思います。かなり長めのコードになりますのでその文章量に若干気が引けるかもしれませんが、ひとつひとつを注意深く見て行けば、それほど難しいことをやっているわけではありません。ゆっくりで構いませんから、手順をよく理解して、どうしてそういう結果が得られるのかを正しく把握できるようにしていきましょう。

まず事前の予備知識として、今回作成するプログラムの概要を説明します。

ユーザーフォームの起動
    ▼
ユーザーフォームのウィンドウハンドル取得( Activate イベントを利用)
    ▼
ユーザーフォーム上をクリック
    ▼
図形を描画( Click イベントをトリガーに実行)
    ▼
ユーザーフォームを閉じる
    ▼
諸所の終了処理( Terminate イベントを利用)

ざっくりと書くとこんな感じになりますね。


■標準モジュールのコード

さて、それでは早速コードを見ていきます。かなり長いコードになりますが、これでも標準モジュールに記述する分だけです。含まれている内容としては、以下のような感じです。

・API の宣言文
・構造体の宣言
・定数の宣言
Public な変数の宣言
・各種プロシージャの記述

プロシージャ自体は大した行数ではないのですが、いかんせん宣言関連が非常に多くなっています。ですから処理自体はそれほど複雑なことはやっていません。
焦る必要はありませんので、じっくり見ていきましょう。

'■各種APIの宣言

'ウィンドウハンドルを取得する
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'デバイスコンテキストを取得する
Declare Function GetDC Lib "user32.dll" _
(ByVal hwnd As Long) As Long
'デバイスコンテキストを解放する
Declare Function ReleaseDC Lib "user32.dll" _
(ByVal hwnd As Long, ByVal hdc As Long) As Long
'オブジェクトをデバイスコンテキストに選択させる
Declare Function SelectObject Lib "gdi32.dll" _
(ByVal hdc As Long, ByVal hgdiobj As Long) As Long
'オブジェクトを削除する
Declare Function DeleteObject Lib "gdi32.dll" _
(ByVal hObject As Long) As Long
'ペンオブジェクトを生成する
Declare Function CreatePenIndirect Lib "gdi32.dll" _
(lplgpl As LOGPEN) As Long
'ブラシオブジェクトを生成する
Declare Function CreateBrushIndirect Lib "gdi32.dll" _
(lplb As LOGBRUSH) As Long
'直線を描画する
Declare Function LineTo Lib "gdi32.dll" _
(ByVal hdc As Long, ByVal nXEnd As Long, ByVal nYEnd As Long) As Long
'原点を変更する
Declare Function MoveToEx Lib "gdi32.dll" _
(ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, _
lpPoint As POINTAPI) As Long
'四角形を描画する
Declare Function Rectangle Lib "gdi32" _
(ByVal hdc As Long, _
ByVal Left As Long, _
ByVal Top As Long, _
ByVal Right As Long, _
ByVal Bottom As Long) As Long
'円・楕円を描画する
Declare Function Ellipse Lib "gdi32" _
(ByVal hdc As Long, _
ByVal nLeftRect As Long, _
ByVal nTopRect As Long, _
ByVal nRightRect As Long, _
ByVal nBottomRect As Long) 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

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

'■定数の宣言

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

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

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

'■Public変数の宣言
Public hwnd As Long
Public hdc As Long
Public cPenObj As New Collection
Public cBrushObj As New Collection
Public dPen As Long
Public dBrush As Long

'■各種プロシージャ

Sub get_handle(w_caption As String)
'ウィンドウハンドルを取得する
    hwnd = FindWindow(vbNullString, w_caption)
    hdc = GetDC(hwnd)
    
End Sub

Sub release_obj()
'終了処理を行なう
    Dim v As Variant
    
    SelectObject hdc, dPen
    For Each v In cPenObj
        DeleteObject v
    Next
    SelectObject hdc, dBrush
    For Each v In cBrushObj
        DeleteObject v
    Next
    ReleaseDC hwnd, hdc
    
End Sub

Function p_create(p_pixel As Long, p_style As Long, p_color As Long)
'ペンオブジェクトを生成する
    Dim p As POINTAPI
    Dim lp As LOGPEN
    Dim np As Long
    
    p.X = p_pixel
    
    With lp
        .lopnStyle = p_style
        .lopnWidth = p
        .lopnColor = p_color
    End With
    
    np = CreatePenIndirect(lp)
    cPenObj.Add np
    
    p_create = np
    
End Function

Function b_create(b_style As Long, b_color As Long, b_hatch As Long)
'ブラシオブジェクトを生成する
    Dim lb As LOGBRUSH
    Dim nb As Long
    
    With lb
        .lbStyle = b_style
        .lbColor = b_color
        .lbHatch = b_hatch
    End With
    
    nb = CreateBrushIndirect(lb)
    cBrushObj.Add nb
    
    b_create = nb
    
End Function


■API の宣言とその解説

いやー、しかし長い。
それでは、上から順番に見ていきます。

まず、API の宣言から。ここでは、合計で 11 の API を宣言しています。前回までに既に登場している API もありますが新顔も混じっていますので、そちらに関しては詳しく解説しておきます。

SelectObject
デバイスコンテキストにペンやブラシを選択させるために使う API です。引数には、対象となるデバイスコンテキストのハンドルと、選択させるオブジェクトのハンドルが必要です。
この API は戻り値を持ち、実行された際に、もともとデバイスコンテキストに選択されていたオブジェクトのハンドルを戻り値として返してきます。実はこれが非常に重要なのですが、これについては後述することにします。

DeleteObject
その名の通り、オブジェクトを削除(解放)する API です。
プログラムの中で生成したペンやブラシは、必要なくなった時点で必ず解放しなければなりません。もし、ペンやブラシなどのオブジェクトを解放しないまま放っておくと、メモリ領域が圧迫され、最悪の場合には Windows 自体に深刻なエラーが発生する可能性もあります。生成したオブジェクトは、プログラムの終了までに必ず解放する、これは約束事として癖付けしておきましょう。

LineTo
この API は直線を描画することができる API です。引数は三つあり、描画の対象となるデバイスコンテキストのハンドル、そして直線の終点の X 座標と Y 座標です。
ここまで読んで、おや? となった方、なかなか鋭い。
そう、この API では描画する直線の終点の座標しか、引数には指定できません。始点の座標はどこに行ってしまったのか。それは次の API によって調整することができます。

MoveToEx
現在の原点(始点)を設定する API です。
先ほど登場した LineTo 関数は、現在の原点を始点として、指定された終点までの直線を描画します。意図的に原点を調整したい場合には、この MoveToEx 関数を使う必要があるのです。
まぁ、正直面倒ですね……。こればかりは諦めるしかないわけですが。
ちなみに、LineTo 関数は、実行されるとそのとき終点に指定された座標を自動的に現在の原点として設定します。

Rectangle
四角形を描画する API です。引数は全部で五つ。
描画の対象となるデバイスコンテキストのハンドル、描画する四角形の左上角の X 座標と Y 座標、四角形の右下角の X 座標と Y 座標です。
780.png

Ellipse
こちらは円・楕円を描画できる API です。四角形のときと同様に引数は五つです。
描画の対象となるデバイスコンテキストのハンドルと、描画される円を内包する矩形の四隅の座標を与えます。これは以下の画像を見てもらえるとわかりやすいと思いますが、要は、Rectangle のときと同様に座標を指定すると、指定された矩形の中にぴったりと収まる円が描画されるわけですね。
781.png


■構造体・定数・変数の宣言

構造体や定数については、前回までの講座で既に登場しているものばかりです。もし、これについてわからないという人は、まずそちらの記事から読むことをオススメします。
今回新しい要素として登場してくるのは、いくつかの Public 宣言された変数です。いずれも重要な役割を担うものですので、しっかり解説します。

hwnd hdc
この h から始まるふたつの変数は、前者がウィンドウハンドル、後者がデバイスコンテキストのハンドルです。これらのハンドルは、様々なプロシージャで頻繁に利用する場面があるため、パブリックな変数として宣言しています。

cPenObj cBrushObj
この c から始まるふたつの変数は、ペンやブラシなどのオブジェクトを効率よく処理するために利用します。
以下にこのふたつの変数が宣言されている部分だけを抜き取って掲載しますので、よーく観察してみてください。
Public cPenObj As New Collection
Public cBrushObj As New Collection

変数の型が、見慣れない記述になっていますね。実はこれは、コレクションを宣言しているのですね。コレクションについては、以前の講座でも詳しく解説しています。コレクションってなんだ? という人はそちらを先に読んでおくことをオススメします。(参考:Chapter.76 [ オブジェクトとコレクション ]
さて、このコレクションの使い道ですが、ズバリ言いますとペンオブジェクトとブラシオブジェクトの管理です。先ほど、API を解説した部分でも触れましたが、生成したオブジェクトは必要なくなった時点で必ず解放しなければなりません。オブジェクトを生成するたびにコレクションに追加していくようにしておけば、終了処理でまとめてコレクションごと解放処理してしまうことで確実にオブジェクトを解放させることができます。

dPen dBrush
この d から始まるふたつの変数は、デバイスコンテキストにあらかじめ設定されているデフォルトのペンとブラシを保持するための変数です。
先ほど解説した DeleteObject 関数では、生成したオブジェクトを削除することができますが、注意しなければならない点があります。
実は、デバイスコンテキストに選択されているオブジェクトを削除してしまうと、深刻なエラーが発生してしまう可能性があります。そのため、生成したオブジェクトを削除する際には、デバイスコンテキストに別のオブジェクトが選択状態になっている必要があるのです。
SelectObject 関数を用いてデバイスコンテキストにオブジェクトを選択させる際には、それまで選択されていたオブジェクトのハンドルが戻り値として返ってきます。これを上手に利用することで、エラーが発生するリスクを排除することができます。
手順としては、デバイスコンテキストにオブジェクトを選択させる際に、デフォルトのペンやブラシを変数に格納することで保持しておきます。一連の処理が完了し、生成したペンやブラシを削除する段階になった際には、このとき変数に格納したデフォルトのペンやブラシを選択して元に戻してから、生成したペンやブラシを削除するようにすればいいのですね。
このような一連の流れを実装させるために、デフォルトのペンやブラシを保持しておく変数が必要となるわけです。


■各種プロシージャ

続いて各種プロシージャの解説です。ここではちょっとわかりやすさ重視での解説をするため、コードを引用しながら説明していきます。

・ウィンドウハンドルを取得するためのプロシージャ
Sub get_handle(w_caption As String)

    hwnd = FindWindow(vbNullString, w_caption)
    hdc = GetDC(hwnd)
    
End Sub

このプロシージャではウィンドウハンドルと、デバイスコンテキストのハンドルを取得します。内容としては API を実行しているだけですので、非常に簡単ですね。
引数としてウィンドウキャプションの文字列を受け取り、それを元にウィンドウハンドルを取得する仕様になっています。

・各種終了処理を一手に担うプロシージャ
Sub release_obj()

    Dim v As Variant
    
    SelectObject hdc, dPen 'デフォルトのペンを選択
    For Each v In cPenObj 'ペンオブジェクトを全て削除
        DeleteObject v
    Next
    SelectObject hdc, dBrush 'デフォルトのブラシを選択
    For Each v In cBrushObj 'ブラシオブジェクトを全て削除
        DeleteObject v
    Next
    ReleaseDC hwnd, hdc 'デバイスコンテキストを解放
    
End Sub

先ほども解説したように、オブジェクトを削除する際には、デバイスコンテキストに別のオブジェクト(デフォルトのオブジェクト)を選択させておくようにしなければなりません。まずは SelectObject 関数を使ってオブジェクトを持ち替え、その上でコレクションに格納されているオブジェクトを For Each Next の繰り返し処理で一気に解放します。プログラムのなかでいくつのオブジェクトを生成していたとしても、このようなコレクションによる処理を実装している限り、確実にオブジェクトを解放できるので非常に便利です。

・ペンオブジェクトを生成するプロシージャ
Function p_create(p_pixel As Long, p_style As Long, p_color As Long)

    Dim p As POINTAPI
    Dim lp As LOGPEN
    Dim np As Long
    
    p.X = p_pixel
    
    With lp
        .lopnStyle = p_style
        .lopnWidth = p
        .lopnColor = p_color
    End With
    
    np = CreatePenIndirect(lp)
    cPenObj.Add np '①
    
    p_create = np '②
    
End Function

こちらはペンオブジェクトを生成するためのプロシージャですね。
このプロシージャは三つの引数を取ります。生成するペンの太さを表す p_pixel、ペンのスタイルを表す p_style、ペンの色を表す p_color ですね。
このプロシージャはペンを生成すると同時に、生成したオブジェクトをコレクションに追加します。それが①の部分ですね。その後②の部分で、このプロシージャの戻り値として生成したペンオブジェクトのハンドルを返しています。

・ブラシオブジェクトを生成するプロシージャ
Function b_create(b_style As Long, b_color As Long, b_hatch As Long)

    Dim lb As LOGBRUSH
    Dim nb As Long
    
    With lb
        .lbStyle = b_style
        .lbColor = b_color
        .lbHatch = b_hatch
    End With
    
    nb = CreateBrushIndirect(lb)
    cBrushObj.Add nb
    
    b_create = nb
    
End Function

ブラシオブジェクトを生成するプロシージャ。
LOGBRUSH 構造体にセットする値を、そのまま引数として受け取り機能します。ペンオブジェクトの生成プロシージャと同じように、生成したオブジェクトをコレクションに追加し、その後、戻り値として返します。


■まとめ

さて、随分と長いテキストになってしまいましたね。
今回の講座では、まだ標準モジュールに記述する部分しか解説していませんが、それでも結構なボリュームがありましたね。長くなってしまったので、フォームモジュールに記述するコードや実際の動作については、次回解説することにします。

今回の内容において重要なのは、オブジェクトの解放の必要性や、各種プロシージャの挙動の理解です。コレクションを用いた処理や、必要に応じてパブリックな変数を宣言する部分は、どうしてそのような実装になっているのか、その理由までしっかり理解していることが大切です。
また、API を用いた処理を行なう場合には、オブジェクトの解放なども重要な処理となります。最近の高スペックなマシンではそうそうメモリリークなど起こりませんが、だからといって解放処理を適当にしてしまうのは大きな間違いです。しっかり癖付けしておきましょう。

さて、次回はフォームモジュールに記述するコード、そして実行結果についての解説を行います。まずは今回の内容をしっかり理解しておきましょう。



■格言

デフォルトのオブジェクトを保持しておく
オブジェクトの削除前にデフォルトに戻す
必ず最終的にオブジェクトは解放する
コレクションを用いて効率的に処理する


覚えるべきことがたくさんありますので、焦らず理解していきましょう。

関連記事






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