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

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

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



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


スポンサーサイト

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






Chapter.21 [ じゃんけんゲーム:6 役判定]

■じゃんけん

前回は、引数について解説しました。
異なるプロシージャ間での、データのやり取りを可能にする仕組みでしたね。
この仕組みをうまく使えば、プレイヤーの役を判定するプログラムにデータを渡すことができるわけです。

今回は、実際に役を判定する部分のコードを書きましょう。それには、条件分岐が必要不可欠です。よくわからないという人は、『Chapter.13 [ 条件分岐 ]』を見て、予習しておきましょう。

それではまず、前回までに書いてきた、じゃんけんのコードを見てみましょう。

Sub Janken(PLAYER As Integer)
    Dim CPU As Long
    Randomize
    CPU = Int(Rnd * 3) + 1
    MsgBox "コンピューターの役は" & CPU & "です"
    MsgBox "ちなみにプレイヤーの役は" & PLAYER & "です"
End Sub


このコードでは今のところ、コンピューターの役をランダムに決める機能。PLAYERという引数を受け取る機能。そして、それらを表示してメッセージを伝える機能、の3つを実装しています。

じゃんけんの役を判定するためには、コンピューターの役と、プレイヤーの役の2つが必要ですね。
このプログラムでは、CPUという変数がコンピューターの役を扱います。
プレイヤーの役はPLAYERという引数を、変数としてそのまま使うことで扱えます。
それぞれの中に入っているデータを元に役を判定すればいいですね。


■役判定の考え方

役を判定するには、いったいどうすればいいのでしょうか。

まずはどちらかを基点にして考えましょう。じゃんけんの場合は、同時に双方の役が決まっていますから、どちらか片方を基点にしないと、一向に先に進みません。今回はプレイヤーの役を基点にしてやってみることにします。

じゃんけんの役は、どうあっても3パターンしかありませんね。
グーのときの『1』。チョキのときの『2』。パーのときの『3』です。
そして、それぞれの組み合わせによる勝負の結果には、以下のようなパターンがあります。

プレイヤー役(PLAYER)コンピューター役(CPU)勝者
1(グー)1(グー)あいこ
2(チョキ)プレイヤー
3(パー)コンピューター
2(チョキ)1(グー)コンピューター
2(チョキ)あいこ
3(パー)プレイヤー
3(パー)1(グー)プレイヤー
2(チョキ)コンピューター
3(パー)あいこ


こうして見てみると、結構たくさんのパターンがありますね。自分が実際にじゃんけんするときには、無意識にこれだけのパターンの中から勝負を判定しているのです。実際にやるのとプログラムするのとでは随分難しさが違うように感じるのではないでしょうか。
しかしここでめげてはいけません。上の表をよくよく見てみると、あることに気がつきませんか?
勝負が『あいこ』となる場合には、実は一定のパターンがありますね。そうです。双方の役が全く同じの場合には、その数字がどんな数字であっても、必ず『あいこ』になります。このことから、まずは初めにあいこかどうかを判定することで、ある程度は処理を絞り込むことができます。

それをコードにするとこんな感じですね。
If PLAYER = CPU Then
    MsgBox "あいこです"
Else
    MsgBox "あいこではないです"
End If


PLAYERCPUが等しい(イコール)ならば、必ず結果はあいこです。全部で9つあるパターンのうち、3つがこれでカバーできますね。9つのパターン全てを条件分岐で判断するよりも、たったひとつの条件分岐で3つをカバーできるので効率的です。

では、残る6つのパターンを考えてみましょう。

まず第一に、基点としたプレイヤーの役には3つのパターンがありますね。
ですから、入れ子となる新たな条件分岐を使って、次のようにコードを記述します。

If yaku = yaku Then
    MsgBox "あいこです"
Else
    If PLAYER = 1 Then 'プレイヤーの役が1の場合
        その場合の処理
    ElseIf PLAYER = 2 Then 'プレイヤーの役が2の場合
        その場合の処理
    Else 'プレイヤーの役は1でも2でもない(つまり3)
        その場合の処理
    End If
End If


この時点で、条件分岐は2段組の入れ子になっていますが、わかるでしょうか。

最初の条件分岐は『あいこかどうか』という条件。
2段目の条件分岐は『プレイヤーの役は何か』という条件ですね。
コードを条件分岐のたびにインデントしておけば、条件分岐の入れ子がある場合に非常に効果的です。全て左寄せの場合に比べて、かなり見やすくなります。

さて、勝負を判定するためには、もう1段、『コンピューターの役は何か』という条件が必要です。この条件を判断できれば、勝負が判定できますね。そこで、さらに条件分岐を追加してみましょう。

If yaku = yaku Then
    MsgBox "あいこです"
Else
    If PLAYER = 1 Then
        If CPU = 2 Then 'コンピューターの役が2の場合
            MsgBox "プレイヤーの勝利!"
        Else
'コンピューターの役が2ではない場合(つまり3)
            MsgBox "コンピューターの勝利 残念"
        End If

    ElseIf PLAYER = 2 Then
        If CPU = 1 Then 'コンピューターの役が1の場合
            MsgBox "コンピューターの勝利 残念"
        Else
'コンピューターの役が1ではない場合(つまり3)
            MsgBox "プレイヤーの勝利!"
        End If

    Else
        If CPU = 1 Then 'コンピューターの役が1の場合
            MsgBox "プレイヤーの勝利!"
        Else
'コンピューターの役が1ではない場合(つまり2)
            MsgBox "コンピューターの勝利 残念"
        End If

    End If
End If


条件分岐の3段組ですから、ちょっとわかりづらくなってきましたね。インデントされている部分で見分けると幾分わかりやすいはずです。

最初の1段目の条件で、まずは『あいこかどうか』を判定しています。これで、9つのパターンのうち、3つを判断できます。残りは6パターンになりましたね。
次に、2段目の条件で、『プレイヤーの役は何か』を判定します。この時点で、残っていた6つのパターンのうち、4つが消えます。あと残っているのは『コンピューターの役は、あいこではない役の、どちらか』という2択です。
そこで、最後の3段目。ここの条件分岐で『コンピューターの役は何か』がわかりますから、それに応じて勝負を判定すればいいのです。最後の条件はElseIfを使って書くこともできますが、2択なのでElseだけでも大丈夫なのですね。


■役判定完成版コード

ちょっと駆け足で見てきましたがついてこれましたか? たかがじゃんけんの勝負を判定するだけなのに、コードはすごいことになっちゃってますね……。
でも、これがプログラミングというものです。一見すると何が何やらわからないような英語の羅列ですが、順を追って、ゆっくり紐解いていけば、必ず仕組みがわかるはずです。焦らず、じっくりコードを見てください。わからないことは恥ずかしくないのです。わかるまで、がんばればいいのです。

ということで、じゃんけんの役を判定する、サブプロシージャJankenは以下のようなコードになりました。

Sub Janken(PLAYER As Integer)
    Dim CPU As Long
    Randomize
    CPU = Int(Rnd * 3) + 1
    If PLAYER = CPU Then
        MsgBox "あいこです"
    Else
        If PLAYER = 1 Then
            If CPU = 2 Then
                MsgBox "プレイヤーの勝利!"
            Else
                MsgBox "コンピューターの勝利 残念"
            End If
        ElseIf PLAYER = 2 Then
            If CPU = 1 Then
                MsgBox "コンピューターの勝利 残念"
            Else
                MsgBox "プレイヤーの勝利!"
            End If
        Else
            If CPU = 1 Then
                MsgBox "プレイヤーの勝利!"
            Else
                MsgBox "コンピューターの勝利 残念"
            End If
        End If
    End If
End Sub


今回大切なのは、条件分岐の入れ子(入れ子のことをネストと呼んだりもします)を、上手に扱うことでしょう。
全部で3段の条件を判断しましたが、1段目の条件をクリアしてきたということは……という具合に、順を追って考えていくことが大切です。

また、実際に自分がゲームを行うときよりも、同じように動くプログラムを書くという行為が、いかに難しいかもわかったと思います。
しかし、プログラミングというのは、実際の手順を、機械語に翻訳していく作業であり、それこそがプログラマーの腕の見せ所。思ったとおりの処理が書けたときの喜びは、筆舌に尽くしがたいものなのです。

今回は全ての手順を完成版として掲載していますから、極端な話コピーするだけで動作するプログラムができてしまいます。
しかしこれから先、これをご覧の皆さん自身が、自分なりのコードを書いていくとき、うまくいかなくても決して諦めないでください。うまくいかなかったら修正すればいいんです。やり方がわからなかったら調べればいいんです。私にできるのは『最初の一歩を踏み出すお手伝い』だけです。うまく動いたときの素晴らしい感動は、皆さん自身の手で掴み取ってください。

次回からは、ユーザーフォームからプレイヤーの役を受け取る部分を解説します。
この部分を実装したら、とりあえずじゃんけんゲームが完成ということになります。楽しみだな~。


■格言

条件の入れ子(ネスト)を理解する
インデントを活用してわかりやすく記述する
焦らずじっくり考える


条件の入れ子に限らず、何事も焦りは禁物です。ゆっくりじっくり。
スポンサーサイト






Chapter.22 [ じゃんけんゲーム:7 予測と制限]

■予測

さて、前回の講座でじゃんけんゲームの核となる『役の判定』が完成しました。あと少しで長かったじゃんけんゲームの講座も終了です。気を抜かずにあと少し頑張りましょう。

今回のテーマは『予測と制限』となっています。
これから解説することは、ゲームに限らず、あらゆるアプリケーションソフトに必要な概念ですから、しっかりと理解してください。

では具体的に予測と制限について解説していきます。
まず、予測と制限とはそもそも何を指しているのでしょう。これはズバリ『プレイヤーの行動に対する予測と制限』です。ちょっとイメージしづらいですね。これは一体どういうことなのでしょう。

プログラミングを行う人間から見て、ゲームの構造や手順がわかりやすいとしても、それを扱うプレイヤーから見ると、必ずしもわかりやすくはない、というのはよくあることです。例えば、今回のじゃんけんゲームは、数値を役として扱うのが前提です。しかし普通にじゃんけんをするときには、いちいち役を数値に変換したりはしませんよね。つまり今回のじゃんけんゲームだけの特殊なルールということです。
ゲームをする全ての人が、この特殊なルールを即座に理解できる可能性は、決して高くないことは容易に想像がつきます。それに、ルールを理解していたとしても、我々の望んだとおりの手順で進行してくれる保障なんて、どこにもありません。

今回のじゃんけんゲームを行うプレイヤーが、本来の手順(我々の定めた手順)通りにはせず、それと反する行為をしてしまう可能性は充分にあります。私の感覚ですぐに思いつくところでは、プレイヤーが次のようなことをしてしまう可能性があるでしょう。

1:何も入力せずに開始ボタンを押してしまう
2:1~3以外の数字を入力してしまう
3:文字などの不正なデータを入力してしまう

どうでしょう? やってしまう可能性はあると思いませんか。あるいは、意図的にそうするひねくれものがいるかもしれません。
これが今回のテーマのうちのひとつ『予測』です。プレイヤーが行う可能性のある手順を予測し、それを考慮してプログラミングをしなくてはなりません。


■制限

さて、ここで出てくるのがもうひとつのテーマ『制限』です。
プレイヤーが色々な手順でゲームの進行を行ってしまう可能性があり、それがゲーム進行の障害になるとするならば、われわれプログラマーはそれを制限して一定の手順に統一しなくてはなりません。完全に制限できない場合もあるでしょうが、それならそれで、意図しない行為をしようとしたらプレイヤーに注意を促すなどして、プログラムがエラーを起こさないようにしておくべきですね。これが『制限』の考え方です。

それではじゃんけんゲームに『予測と制限』を取り入れていきましょう。

まずは、プレイヤーの役を、プログラムから調べる方法から解説します。今回のじゃんけんゲームでは、コマンドボタンが押されたときに、テキストボックスに入力されていたデータを拾います。これが、プレイヤーの役となるデータでしたね。
テキストボックスに入力されているデータを取得するためには、テキストボックスのValueプロパティを使います。具体的には以下のようにします。

DATA = Tex_Yaku.Value

この場合には、DATAという変数にテキストボックスに入力されているデータが入ります。テキストボックスの名前に、ピリオド(コレ⇒ . )、Valueと続けて記述します。
Valueプロパティによって取得したデータの種類を調べれば、それが適切なデータかどうか判断できますね。条件によって判断するわけですから『If文』をうまく使えばできそうです。


■データの種類を調べて変換

先ほど挙げた、プレイヤーの行動予測をもう一度見てみます。

1:何も入力せずに開始ボタンを押してしまう
2:1~3以外の数字を入力してしまう
3:文字などの不正なデータを入力してしまう

テキストボックスのValueプロパティで取得できたデータが、上記のような可能性を含んでいるわけですから、If文で絞り込んで判断します。今回は先にコードを載せます。そのほうがわかりやすいと思いますのでね。

Private Sub Com_Kaisi_Click()
    If Tex_Yaku.Value > 0 And Tex_Yaku.Value < 4 Then
        Call Janken(Tex_Yaku.Value)
    Else
        MsgBox "1~3の数字を入力してください"
    End If
End Sub

上記のコードの1行目には『Private Sub Com_Kaisi_Click()』とありますね。そうです、これはコマンドボタンのクリックイベントプロシージャに記述されたコードです。
3行目のところで、Callで呼び出しているJankenというプロシージャが前回解説した役を判定するプロシージャです。If文を使って条件分岐しながら、適切なデータだった場合だけ、Jankenを呼び出すようにすれば、ゲームが正しく動くはずですね。

そして、その条件を判断している部分ですが、ここで見慣れないキーワードが出てきています。2行目に書かれている『And』です。これは読んで字のごとく、そのまんまの意味です。
要するに『If 条件A And 条件B Then』というコードなら、直訳すると『条件A と 条件B 全てにあてはまるとき』という意味です。複数の条件がある場合に、それらをAndで繋ぐことで、全てにあてはまる場合だけという条件にすることができるのです。

つまり上記のコードでは、『If Tex_Yaku.Value > 0 And Tex_Yaku.Value < 4 Then』となっていますので、テキストボックスに入力されているデータが、『0より大きくて、かつ4より小さい』という条件の両方にあてはまっている場合だけ、Jankenプロシージャが呼び出されます。これで1~3の範囲に、データの種類を限定できますね。


■ちなみに

もし仮に、テキストボックスに入力されているデータが文字だった場合にはどうなるのでしょうか? 数値として判断できない文字が入っているわけですから、条件分岐にひっかかってはじかれます。つまり『1~3の数字を入力してください』というメッセージが出て、処理が終わります。

同様に、何も入力されていない、空の状態でボタンを押してしまった場合にも、判断するべき数値がないので、条件分岐ではじかれます。
さらに『①②③』や、『一二三』などの漢数字などで入力した場合はどうでしょう。これらは見た目はともかく、実体としては数値ではなく文字です。ですから条件を通ることはできずメッセージがでます。

例外として、全角の数字と半角の数字の区別はされません。なので『123』でも『123』でも、どちらでもキチンとJankenが呼び出されます。しかし本来であれば、全てを半角の、キチンとした数値に変換するべきでしょう。なぜなら、全角の数字というのは世界共通の規格ではないからです。環境によってははじかれるかもしれませんし(テストしたわけじゃないですが……)、VBAでは問題なくても、他のプログラミング言語の種類によっては通用しない可能性が高いからです。全角から半角への変換については、長くなってしまうので今回は解説しません。いつかは解説することになると思いますけどね。

ちなみに今回のコードや、いままで解説してきたコードは、別の書き方をしても同様の処理を行うことはいくらでもできます。必ずしも、今回までに紹介してきたコードが最善ではありません。しかし、講座という性質上、私なりにわかりやすさを重視して書いてきました。最適なコードや、最適な記述法はたくさんありますが、今まで解説してきた内容だけで動くように、できるだけわかりやすく説明してきたつもりです。こんな書き方もあるよ! と思った人は、あえてツッコミ入れないで許してやってくださいね。


■総括

さて、今回のコードを実装させたら、晴れてじゃんけんゲームの完成です! やったね!
出来上がったら自分で色々なデータを入力して、どのような結果になるかテストしてみましょう。

完成したといっても、いわゆる一般的なゲームとしての完成度はほとんど満たしてませんね……。ボタンを押したらただ結果が出るだけですから、のめりこむほど面白いゲームとはお世辞にも言えません。しかし、これを面白いゲームに発展させていけるかどうかは、プログラミング技術もさることながら、皆さんのセンスがとても重要になってきます。
たかがじゃんけんといっても、画像を表示させてやるだけでぐっと印象がよくなりますし、効果音を用いるとさらにグレードをアップさせられます。さらには、スロットゲームのように結果の表示をじらすというのも面白いですね。
要するに、『面白くしたいという欲求』を満たすためには、それなりの技術が必要になってくるのは事実です。しかし、面白くしたいという気持ちを持つことこそ、最も重要なのです。こんな演出があったら……とか、こういう見せ方もあるなぁ……とか、それを考えているだけでも、プログラミングって楽しいな~と思ってしまいます。そして、それをプログラムして実現することこそ、最高の喜びです。今回のじゃんけんゲームは足がかりでしかありません。皆さんの素晴らしいセンスが、素晴らしい作品を生み出していくのです。

効果音や画像については、これから先、きっと解説することになるでしょう。まずは、焦らずひとつのゲームを完成させてみてください。そして、自分の手によって完成した作品を、自分なりに楽しみ、家族や友人などと一緒に楽しみ、さらなる挑戦への意欲を蓄えておいてください。

実感はないかもしれませんが、最初からここまで、順に読み進んできた皆さんは、もう立派なゲームプログラマーになっているのです。おめでとうございます。そして、これらも一緒にがんばっていきましょう。


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

■格言

プレイヤーの行動を予測する
それを考慮して行動を制限する
Valueプロパティを上手に使う


長かったじゃんけんゲームの道を踏破しました。おめでとう!






Chapter.23 [ Withステートメント]

Withステートメントって?

みなさんはWithステートメントをご存知でしょうか。
Withステートメントは、非常に便利な機能を持っているのですが、その有用性の割には意外と使われていないような気がします。

Withステートメントをあえて使わなくてもコードは書けます。というよりむしろ、使わなければ絶対に実現できないこと、というのがありません。プロならともかく、素人がコードを書く際に使われないというのも、この辺りが原因のような気がします。
しかし、Withステートメントを使うことによるメリットは非常に大きく、使いこなせれば格段にレベルアップすること間違いなしです。
普段からWithステートメントを使っている方や、それなりの知識をお持ちの方にとっては、今更感があるかもしれませんが、今回はWithステートメントについて解説したいと思います。

では具体的に、Withステートメントがどのような機能を持っているのか理解するために、ラベルを使って例を挙げてみましょう。

以前、コントロールのプロパティについて解説しました。プロパティがよくわからないという人は、『Chapter.11 [ プロパティウィンドウ ]』を見てくださいね。

プロパティとは『属性』を表すもので、コントロールの外観や挙動を定義します。
例えば、コントロールの色を表す『BackColorプロパティ』や、表示される文字を表す『Captionプロパティ』などがあります。
プログラマーはこれらを始めから指定しておいたり、実行中に変更したりすることができ、これによってコントロールは多彩な表現や動作を実現できます。

今回取り上げるラベルというコントロールは、主に文章を表示したりするのに使われるコントロールで、以前解説したじゃんけんゲームにも使われています。ただ文章を表示するだけではつまらないので、ちょっとプロパティをいじってみることにしましょう。


■プロパティを変更する

まずは、次のようなユーザーフォームを用意してみましょう。じゃんけんゲームを作成する際に使ったノウハウがあれば、これは簡単なはずです。
新しいユーザーフォームを挿入して、ラベルとコマンドボタンを配置するだけですよ。今回は特に名前の変更などはしません。

110.gif


さて、2つのコントロール(ラベルとコマンドボタン)が配置できたら、コマンドボタンの上にマウスカーソルを持っていきダブルクリックしてみましょう。すると、自動的にコマンドボタンのクリックイベントプロシージャが挿入されるはずです。

111.gif


このプロシージャは、『コマンドボタンがクリックされた』というイベントを検知して発動するプロシージャでしたね。ここに書いたコードが、コマンドボタンのクリックと同時に動作します。

それではこのクリックイベントプロシージャに、以下のようにコードを記述しましょう。

Private Sub CommandButton1_Click()
    Label1.Caption = "表示文字列を変更"
End Sub

たった1行のコードを加えただけですね。とにもかくにも、とりあえずユーザーフォームを実行して表示し、コマンドボタンをクリックしてみましょう。
するとどうですか? ラベルの文字が、コマンドボタンを押した瞬間に変化しましたか?
正しくできていれば、以下のようになったはずです。

112.gif

↓コマンドボタンをクリックすると……

113.gif


このように、『コントロールの名前.プロパティの名前 = 設定する内容』という手順で、コントロールのプロパティを自由に変更できます。先述のとおり、Captionプロパティはコントロールに表示される文字列を定義するプロパティです。ですからCaptionプロパティに新しい内容を指定することで、表示される文字列が変化したわけです。

同様に、次のようなコードを記述して実行してみましょう。

Private Sub CommandButton1_Click()
    Label1.Caption = "表示文字列、色、線を変更"
    Label1.BackColor = vbRed
    Label1.BorderStyle = fmBorderStyleSingle
End Sub

すると、今度は次のようになったのではないでしょうか。

114.gif

いやぁ、今度はあからさまに変わりましたね。
同時に3つのプロパティを変更したのですが、コードを見てわかるでしょうか。

BackColorプロパティは、バックカラー、つまり背景色を定義するプロパティです。これに『vbRed』と指定していますね。これはVBA内部での色を表すもので、Redですから赤を表します。これにより、ラベルの色が赤に変化したのですね。

BorderStyleプロパティは、ボーダースタイル、つまり線のスタイルを表します。これにfmBorderStyleSingleを指定することで、一本線の枠線を表示できます。英語を見た感じから、シングル(一本)のボーダースタイル、というのがなんとなく読み取れますね。まぁ、だからといって2重線とかは無いんですけどね……。このプロパティに指定できるのは、枠線表示なしのfmBorderStyleNoneか、枠線表示ありのfmBorderStyleSingleです。

このように、コントロール名に、ピリオド、プロパティ名と続け、指定したい内容を記述することで、コントロールのプロパティを自由に変更できるのです。上記のようにコードから変更することもできますし、プロパティウィンドウであらかじめ指定しておくこともできます。プロパティウィンドウからあらかじめ指定しておく方法は、以前解説しましたのでわからない方はそちらをご覧ください。→『Chapter.11 [ プロパティウィンドウ ]


■それでWithは?

さて、今回はWithステートメントの解説のはずなのに、一向に登場しませんね……。
でも心配無用、ここからがWithステートメントの活躍どころです。

上記の例で示したように、コントロールのプロパティなどを変更する際には、コントロール名に、ピリオド、プロパティ名と続け、さらに指定したい内容を記述します。しかし、毎回毎回Label1.~Label1.~Label1.~、と続けていくのは、なんとなく面倒です。指定したいプロパティが2つや3つなら特にどうということはありませんが、場合によっては十数個ものプロパティを同時に変更したいケースもあるかもしれません。こんなとき、毎回同じコントロール名をいちいち書いていくのは労力の無駄です。
そこで、上記のコードは、Withステートメントをつかって次のように書き換えることができます。

Private Sub CommandButton1_Click()
    With Label1
        .Caption = "表示文字列、色、線を変更"
        .BackColor = vbRed
        .BorderStyle = fmBorderStyleSingle
    End With
End Sub

かなりコードがスッキリしましたね。トータルの行数こそ増えていますが、プロパティの設定はかなり簡略化されています。
このように、Withステートメントを使うと、同じコントロールに対する設定を、一括で行うことができるようになります。

具体的には、Withに半角スペースを空けて、指定したいコントロールの名前を記述します。
その後、何も無いところからピリオドを打ち、プロパティ名を記述し設定します。設定をしたいプロパティがたくさんあっても、ピリオドを打つだけなら苦になりませんね。こうして一通りの設定ができたら、最後にEnd Withで閉じるのを忘れないようにしましょう。これはIf文のときと同じですね。


Withステートメントを上手に使う

Withステートメントの最中には、設定だけしかできないわけではありません。例えば、次のようなことも可能です。

Private Sub CommandButton1_Click()
    With Label1
        .Caption = "表示文字列、色、線を変更"
        .BackColor = vbRed
        .BorderStyle = fmBorderStyleSingle
        MsgBox "ラベルの表示文字列を『" & .Caption & "』に設定しました"
    End With
End Sub

このコードを実行すると、ラベルの外観が変更したあとに、メッセージが表示されます(実際には一瞬過ぎてわかりませんが)。つまり、かならずしも設定する場合にしか使用できないということではないのです。上記のように、内容を取得することもできるのですね。

こうして見てみると、Withステートメントを使うことは、住所の書き方と似ています。
たとえば、1丁目3番地、と唐突に言われても、そこが何県のどんな市町村の1丁目3番地かは特定できません。しかし、前もって県名や市町村名がわかっていれば、1丁目3番地という情報だけで、その場所が日本のどこなのかを特定することができるでしょう。
同様に、Withステートメントであらかじめどんなコントロールに対して処理を行うかを定義しておけば、プロパティ名を記述するだけで、直接コントロールにアクセスすることができるのです。

人間がコードを書いていくとき、Withステートメントで記述が簡略化できるのと同様に、コンピューター側から見たときにも、Withステートメントで処理が最適化されます。これは実行速度に影響します。
つまり、特定のコントロールに対する、プロパティの設定や取得が頻繁に発生する場合には、極力Withステートメントを使ったほうが、処理が高速になるということです。これは非常に大きな意味がありますね。

まとめます。

Withステートメントを使うメリット
コードの記述が楽になる
コードが見やすくなる(使い方にもよりますが)
実行速度が速くなりパフォーマンスが向上する


これは使わない手はないですね!


■格言

Withステートメントで設定やデータの取得が簡略化する
Withステートメントで実行速度が速くなる


ちなみに私は、超With多用派です。






Chapter.24 [ 画像を表示させる ]

■ゲームに画像は不可欠

前回作成したじゃんけんゲームには、一切『絵』のようなものが使われていませんでした。ただ文字と数字だけでゲームを行うため、かなりアッサリとした印象のゲームになっちゃってました。
しかし、大抵のゲームには、キャラクターやタイトルロゴ、背景やエフェクトなど、たくさんの絵が使われています。自分でゲームを作るときにも、どうせなら、たくさんの絵を上手に使って、カッコイイゲームを作りたいですよね。
そこで今回は、ユーザーフォーム上に様々な絵(画像)を表示させる方法を解説します。
この方法を習得すると、様々な視覚的効果を表現できるようになります。ゲームの作成には欠かせない要素ですから、ここでしっかり覚えましょうね。


■画像表示系プロパティ

前回の講座で、ラベルの表示文字列を変更したり、色を変えたりする方法を解説しました。これはラベルのプロパティを変更することで実現していたのでしたね。
ユーザーフォーム上に画像を表示させる場合も、やはり様々なプロパティを操作することで、それを実現させます。

とにもかくにも、表示させる画像がなければどうしようもありません。
画像はインターネット上で探して用意してもいいですし、自分で描いてもいいです。ただし、画像形式は、次のものしか使えません。注意してください。

拡張子形式名称オススメ度
bmpウィンドウズ標準ビットマップ☆☆☆
gifジフ形式(透過ジフ含む)☆☆☆☆☆
jpegジェイペッグ形式☆☆
ico・curアイコン形式・カーソル形式
※これ以外にもありますが、メジャーではないので省略します。

画像形式については、語りだすと非常に長くなりそうなので、あまり細かいことは言いません。ただ、星の数を見てもらえばわかりますが、gif形式が一番オススメです。アイコンやカーソルは使わないほうがいいでしょう。保存の内部形式が複雑なので、使えるものと使えないものがあります。
自前で用意する場合には、とりあえずウィンドウズに標準で付いているペイントで、適当に描いて構わないです。その際には保存形式を標準のビットマップにしましょう。理由は……いろいろです……。

さて、画像はなんとか用意できたでしょうか。
どうにもならない、あるいは面倒という方は、以下の画像を使ってください。画像を右クリックして『対象をファイルに保存』を選択すればダウンロードできます。解説にこの画像を使いますので、使いまわしてもらって一向に構いません。きっとそのほうがわかりやすいと思いますし。

今回使う画像FIGHTER_1.gif


続いては、Excelゲームで画像を使うための準備です。
画像を表示させるのに、最も適しているのは『イメージコントロール』です。
実はラベルなども画像を表示できるのですが、こちらは表示方法などが限定されており、柔軟な表現ができません。ですから、特別な理由がない限り、画像の表示にはイメージコントロールを使いましょう。

それでは、新しいユーザーフォームを用意して、イメージコントロールを配置してみましょう。とりあえずは適当に、で大丈夫です。

120.gif

こんな感じ。


■ファイルのロード

さて、イメージコントロールには、ラベル同様たくさんのプロパティがあります。それらをうまく活用することで、様々な表示方法で画像を表示できます。
とりあえず、まずは画像をロードしなくてはなりません。ですが、これは超簡単です。

イメージコントロールを選択した状態で、プロパティウィンドウを見てください。その中に、『Picture』というプロパティがあるはずです。設定されている値は『(なし)』となっていると思います。

121.gif


その部分をクリックすると、ファイルを開くダイアログが表示されるはずですので、目的のファイルを探して開きます。サンプルの画像をダウンロードしてくれた方は、それを保存した場所を探して、サンプル画像を開きましょう。
すると、たったこれだけの操作で画像が表示できたと思います。どうですか? 簡単ですね。

122.gif


ですが、このままではかなり違和感がありますね。
まず、イメージコントロールと、ロードした画像のサイズ、これが一致していません。調整ハンドルをうまく調節してマウスで大きさを合わせることも、一応できます。ですが、これについてはプロパティウィンドウから、数値を入力して調整するようにしましょう。

大きさを調節するには、『Widthプロパティ』と、『Heightプロパティ』を使います。

この2つのプロパティ、日本語に直訳すると『幅と高さ』です。
Widthプロパティは、コントロールの幅を定義するプロパティです。この数値を大きくすればするほど、イメージコントロールが右方向に長くなっていきます。つまり幅が長くなるのですね。
同様に、Heightプロパティはコントロールの高さを定義します。このプロパティに大きな数値を設定すればするほど、イメージコントロールが縦に長くなっていきます。
注意点として、この2つのプロパティには負の数値を指定してはいけない、ということを覚えておきましょう。幅や高さがマイナスなんてことはありえない、ということですね。もし負の数値を指定しようとすると、警告メッセージが表示されます。


■長さの単位に注意

さて、実際に幅と高さを指定するわけですが、ここでちょっとややこしい問題が出てきます。
普通、ビットマップなどの画像ファイルは、ピクセル単位で管理されています。サンプルの画像の場合、幅と高さが32ピクセルです。ですから縦と横にそれぞれ32個の点が並んでおり、その色の加減でキャラクターが表現されているわけです。
これはペイントなどのソフトで、画像ファイルを開いてみるとよくわかります。

123.gif


しかし、ユーザーフォーム上で扱われている単位は、ピクセルではなく『ポイント』という単位です。
ん? 何が違うの? という感じでしょうか。
1ポイントというのは1インチの72分の1です。要するに、ピクセルとポイントは全く異なる単位です。ですから、32ピクセルの画像を表示するときには、実際は何ポイントに相当するのかを、逆算して設定しなくてはいけません。
面倒ですね……。

しかし、逆算することはそう難しくはありません。具体的には、ピクセル単位での数値を、単純に4分の3にすればいいのです。言い方を変えると、0.75倍するということです。
今回のサンプル画像は、32ピクセルなので、それに4分の3(0.75)をかけると、24ポイントになりますね。
32 × 0.75 = 24

ポイント単位の大きさが、24ということがわかりましたので、それぞれのプロパティに、24を設定しましょう。
すると、画像とイメージコントロールの大きさがピッタリになったと思います。

勘の鋭い人ならわかるかもしれませんが、ゲームに使用する画像を用意するときには、そのサイズを4の倍数に揃えておくと便利です。あとでポイント単位に逆算するときに、4の倍数であれば計算が簡単ですし、余分な小数点以下の端数が出ることもありません。
余分な小数点以下の端数がある場合には、思ったとおりに正しく表示されない可能性が出てきますので、自前で用意するときはもちろん、ネットで探すときなども、画像サイズを注意して見ておくと良いでしょう。

ちなみに、一度ロードした画像のデータを削除したい場合は、ちょっと特殊です。プロパティウィンドウのPictureプロパティを選択して、DELETEキーを押します。バックスペースキーでは削除できませんので注意してください。


■まとめ

画像を表示するには、イメージコントロールを使い、サイズの調整にはWidthプロパティやHeightプロパティを使います。画像のピクセルサイズから、コントロール用にポイント換算することで、大きさをピッタリに合わせることができます。
こうして、ユーザーフォーム上に任意の画像を表示させることが可能になりました。

画像を表示する基本的な方法は、これでわかったと思います。
次回は、もう少し踏み込んで、様々な設定を施してみたいと思います。うまくやれば、背景を透かして見えるようにしたりもできますよ。乞うご期待。


■格言

イメージコントロールで画像を表示する
WidthプロパティやHeightプロパティをうまく使う
ピクセルからポイントに換算するには0.75倍する


表示するだけなら超簡単ですね。






Chapter.25 [ 画像表示の発展形 ]

■ゲームに於ける画像

さて、前回はゲーム画面となるユーザーフォーム上に、任意の画像を表示する方法を解説しました。
それには、イメージコントロールを使うのでしたね。
細かな設定方法は、前回を参照していただくのが手っ取り早いです。

さて、今回は、前回解説仕切れなかった、さらなる発展形のテクニックを解説したいと思います。これらをうまく活用することで、実際のゲームに使用するのに適したイメージコントロールが出来上がりますよ。

さて、それでは早速始めましょう。

今回は、次の画像を用意しましたので、使ってみてください。

FIGHTER_2.gif


この画像は、一見すると前回使った画像とほとんど同じに見えます。ですが、実は全然違います。それこそ天と地ほど違います。
その違いとは何でしょうか?

その違いとは、透過処理がしてあるかどうかです。
透過処理というのは、画像の一部あるいは全てに、透明な場所を設定することを言います。今回の画像は、キャラクターの部分以外の、余白となる部分が全て透明になるように処理されています。これにより、ゲーム画面上では、キャラクターの部分以外が透けて、背景が見えるように設定することも可能な状態になっています。
これについては、手順をおって、あとで詳しく説明します。

それでは、前回のときと同様に、イメージコントロールにサンプル画像ファイルをロードしてみましょう。
イメージコントロールのPictureプロパティを使って、画像ファイルをロードするんでしたね。
すると次のようになったと思います。

130_20071030121920.gif


これで準備は完了です。


■様々な視覚効果

さて、ここまでの画面で、前回の時との違いがわかるでしょうか。
まず第一に、ロードした画像のフチが表示されていませんね。前回は白いフチが表示されていましたが、今回はフチが表示されていないので、画像の境界がどこだかわかりません。
これは、画像に施した透過処理の影響です。
先にも述べたとおり、この画像は透過処理が施されていますので、キャラクターの部分以外は表示されません。そのため、イメージコントロールの地の色が透けて見えているのです。
ためしに、イメージコントロールのBackColorプロパティを変更してみましょう。BackColorプロパティは、コントロールの背景色を定義するプロパティでしたね。これは以前説明しました。これを変更すると、透過処理の意味がよくわかると思います。プロパティを変更するには、これまで同様プロパティウィンドウを使います。

131.gif

    ▼
132.gif

    ▼
133.gif

    ▼
134.gif


どうですか? イメージコントロールの背景色が、どんな色に変化しても、画像のフチは表示されません。つまり、キャラクター以外の部分は、透明な状態になっているのです。

しかし、画像自体は透過処理が施されていますが、これだけではまだゲームに使うのに最適な状態とは言えません。
なぜなら、ゲームに使うとなれば、ゲーム画面の背景が透けて見えていないと意味が無いからです。
そこで、イメージコントロール自体が、背景を透けて表示するように変更しなくてはいけません。その時に活躍するのが『BackStyleプロパティ』です。

BackStyleプロパティには、規定値で『FmBackStyleOpaque』が設定されています。これは、背景を不透明にする、つまり、背景が透けないように設定されているということです。このプロパティを、『fmBackStyleTransparent』に変更すると、イメージコントロール自体に透過処理が掛かり、背景が透けて見えるようになります。
BackStyleプロパティを変更して、背景が見えるようにすると、こんな感じになります。

135.gif


フォーム上のグリッドを表す点々が見えるようになりましたね。
これで、イメージコントロール自体が透明になりました。
ちなみに、これ以降の講座では、あえてプロパティウィンドウから設定できます、とか言いません。プロパティの変更は、基本的にプロパティウィンドウから変更できることを覚えておきましょう。


■実際に使える状態にする

ここまできたら、あとは仕上げの設定をします。

まず、前回と同様に、画像サイズとイメージコントロールのサイズをピッタリ同じに調節します。
これにはWidthプロパティやHeightプロパティを使うんでしたね。ただ単純にピクセルサイズを指定せず、ポイント単位に変換するのを忘れないように注意しましょうね。
今回の画像ファイルは、前回と同じ32ピクセルなので、ポイント単位に変換すると24ポイントになりますよ。

大きさの調整が済んだら、あとは余分な枠線を消してしまいましょう。
これにはBorderStyleプロパティを使います。
このプロパティの使い方は、前々回の講座でも解説しましたね。
BorderStyleプロパティに、fmBorderStyleNoneを設定すると、枠線が綺麗サッパリ消えてなくなります。

さて、ここまでくると、下の画像のようになったのではないでしょうか。

136.gif


この状態が、ゲームで使用する基本の状態と言えます。
ここでポイントとなるのは、以下の条件を満たしていることです。
・背景が透けている
・適切な大きさに調整されており余分な余白がない
・枠線などの無駄なものがない



■さらなる探求

ここから解説するのは、場合によっては役に立つことですが、実際には知らなくても問題のない部分です。興味のある方はご覧ください。まぁ、知っていれば色んなところで活用できますので無駄にはなりません。多分……。

①拡大縮小に対応させる
使用するプロパティPictureSizeModeプロパティ

規定値:fmPictureSizeModeClip
説明:表示しきれない部分は切り捨て。逆に余ってもほったらかし。

拡大縮小に対応する場合:FmPictureSizeModeStretch
説明:コントロールの大きさに応じて画像を伸縮させる。

使用例 ※使っている元画像は同じものですよ
137.gif


②並べて表示させる
使用するプロパティPictureTilingプロパティ

規定値:False
説明:コントロールが画像を上回るサイズでもひとつしか表示しない

並べて表示に対応する場合:True
説明:余ったところに画像を敷き詰めて、並べて表示する

使用例 ※使っている元画像は同じものです
138.gif


③画像を表示させる位置を変える
使用するプロパティPictureAlignmentプロパティ

規定値:FmPictureAlignmentCenter
説明:画像を中央に配置する

中央以外にする場合:上記の規定値以外に設定する
説明:左上、左下、右上、右下、に設定することが可能

使用例 ※使っている元画像は同じ(しつこい……)
139.gif


これらのプロパティをうまく活用することで、多彩な表現を行う事が可能になります。
例えば、①のPictureSizeModeプロパティをうまく使うと、死んだ敵キャラクターをだんだん小さくしてから消す、などのエフェクトをかけることができますよね。幅や高さが変わると、自動的に画像が伸縮するので、幅や高さを徐々に小さくしていくと、あたかも画像自体が縮んでいくように見えるというわけです。

他にも、②を活用すると、小さな画像を敷き詰めて、同じパターンの並んだ背景を表示させることもできます。ホームページの背景なんかではよく使われていますよね。あとデスクトップの壁紙とかでも、同じようなことができますし。

ただ、注意しておいてほしいのは、これらには優先順位があるということです。
①の拡大縮小をオンにしている状態では、②の並べて表示はできません。自動的に拡大してしまうわけですから、それを敷き詰めて並べることはできないのですね。
要するに、これらの組み合わせを様々に変えることによって、独自の表現を模索してほしい、ということです。こうしなければいけない、という決まりがあるわけではありません。自分の思い描いた表現になるように、試行錯誤してみてください。


■格言

透過処理した画像を上手に使う
プロパティを変更して様々な効果を生み出す


透過処理した画像をどうやって用意するかが問題ですね。






メールフォーム

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

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

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

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