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

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

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



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


スポンサーサイト

上記の広告は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プロパティを上手に使う


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






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