• ベストアンサー

クイズゲームのフォームについて

こんばんは。VB初心者です。 VB6.0を用いてのクイズゲームを作成することになりました。 フォームの内容は以下のようなものです。 ・問題文(ラベルorテキストボックス) ・ヒントの動画(MCIコントロール) ・四択選択肢(オプションボタン) ・正解不正解(ピクチャボックス) ・解説(ラベルorテキストボックス) これを20問作るのですが、フォームを20個作らずに各コントロールの中身だけを変化させていきたいのですが、どのようなプログラムになるのか検討がつきません。 そこで、大まかなプログラムの流れだけでもいいので教えて欲しいです。 また、クイズ作成において参考になるHPがあれば教えて下さい。宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • gungnir7
  • ベストアンサー率43% (1124/2579)
回答No.2

20個フォームをつくるなんてやめて~(笑) クイズは問題数分の配列を用意すればいいです。問題文と答えは DIM Aestion(20) As String DIM Kotae(20) as integer ついでに回答者の結果を格納する配列も用意しましょう。 DIM Kekka(20) As Integer とりあえず処理の中心は上記3つの配列です。 コードの先頭において、どこでも参照できるようにした方が楽です。 問題文はファイルから読み込む方が汎用性があっていいですが、 初心者だと大変なので、とりあえずはForm_Loadに書いてしまいましょう。 20問は毎回固定になります。 慣れたらQuestionとKotaeの配列を100に増やすとかしてもいいです。 問題文は最初100題書いておいて、20題だけ出題することもできます。 選択肢はオプションボタンとありますが、これは要らない。 最初から4つのボタンを用意して、 それを押下させた方が操作性もいいしコードも楽になります。 何問目の問題かを制御するカウンターもコードの先頭に宣言しましょう。 Dim nanmonme As Integer これら変数をコードの先頭におくと便利なのは、 VBがイベント駆動型で処理がイベントにまたがってしまうからです。 どこのSub にもFunctionにも属さないコードの先頭におけば フォームを閉じるまで変数の値はずっと保持されています。 MCIコントロールは最後の最後。 とりあえず20問最後まで動くインタフェースを作ってからの話ですね。

sisuado
質問者

お礼

回答ありがとうございます! まずは配列ですね♪ 操作性や変数のおく位置についてもありがとうございました。 また質問するかもしれません。その時は宜しくお願いします。

その他の回答 (1)

回答No.1

A) 問題の情報をテキストファイルや Jet 方式のデータベースファイル (*.mdb) にでも書いておく。 B) 起動時に問題情報ファイルから 20問を一気に配列に読み込む。 C) 配列から「次の問題」を引っ張ってきてフォーム内の変数やコントロールに読み込む。 D) ユーザーがフォーム上の [次の問題] を押すと、先と同様に配列から「次の問題」を引っ張ってきてフォーム内の変数やコントロールに読み込む。 E) 問題の移動は以下同様に最終問題まで続く。 問題情報ファイルが持つ要素は ・問題の文章 ・ヒント動画のファイルへのパス ・選択肢の番号と文字 ・正解番号 ・開設 といった感じ。 (B) の部分、つまり全ての問題を管理し、要求があれば「次の問題」(というかカレントの問題)を差し出す機能はクラスにしちゃってもいいんじゃないでしょうかね。 その場合クラスの機能としては(技術的に簡単に済ますなら) ・全ての問題情報を保持する配列(メンバ変数) ・全部で何問目なのかを提供するプロパティ ・現在の問題の問題文、ヒント動画パス、選択肢、などを提供するプロパティ ・次の問題に移動するメソッド といったところでしょうか。

sisuado
質問者

お礼

回答ありがとうございます! まず、配列とクラスについて勉強したいと思います。 また質問するかもしれません。その時は宜しくお願いします。

関連するQ&A

  • VBのフォームでD&Dを有効にする

    VB2013 expressです。 VBで作成したフォーム上にファイルをD&Dすることで フルパス名を取得するプログラムを書きたいのですが http://dobon.net/vb/dotnet/control/droppedfile.html このページにのように、テキストボックス上に D&Dすればうまくいくものは見つかったのですが、 フォーム全体で受け付けてくれるものが見つかりません。 どのように改良すれば良いか教えてください。

  • 「フォームを作成できませんでした」

    テーブルのデータをもとにフォームを作成しようとしたら 「フォームを作成できませんでした」となります。 原因がわかりません。 テーブルは主キーはちゃんとあります。 「フォームを作成できませんでした」のに、作りかけのフォームがデザインビューで表示されていて、 コントロールのラベルはフォームヘッダーの一番上にたまっていて テキストボックスは詳細の一番上に溜まっています。 ヴァージョンは2010です。

  • Accessのフォームについて

    ラベルのみの削除はできますが、フォームで作成されるテキストボックスのみを削除することはできるのでしょうか?テキストボックスを削除するとどうしても連結されているラベルも削除されてしまいます。 ご存知の方教えていただけますでしょうか<m(__)m>

  • VB.NET フォーム上のオブジェクトの印刷

    VB.NET初心者です。 フォーム上に表示されているラベルやピクチャーボックスなどのオブジェクトを そのまま印刷することは可能でしょうか? 詳しい方いましたら、よろしくお願いします。

  • VBA クイズを出題するフォームを作成する

    クイズを出題するフォームを作成しているのですが、恥ずかしながらVBAは不慣れなものでなかなか作業が進まず行き詰まってしまいました、、。大変恐縮ではございますがお力添えいただければ幸いです。 クイズ作成にあたり、クイズの問題や解答群、答え等の情報を記載したものがworksheets(1)にあります。(画像参照) フォームのイメージは画像添付してあります。 以下の二点をご教示していただけると助かります(T-T) (1)解答ボタンをクリックすると、正解か不正解かがメッセージボックスにて表示。 (2)問題1が解き終わったら後は、次へボタンをクリックし問題2へと移る。 拙い説明になってしまい申し訳ないです。足りない情報かございましたら随時補足してまいります。お手数ですがよろしくお願いいたします。

  • VB2005 コントロールの背景を透過

    フォームにバックグラウンドイメージを設定しているのですが その上にグループボックスやラベルを貼り付けたら、フォームのイメージが隠れてしまいます。 VB6はコントロールに背景を透過にするプロパティがあったので探してみたのですが、見当たりません。 おそらくVB2005でも簡単に透過設定できると思うのですが… グループボックスとラベルを透過に設定する簡単な方法はありますでしょうか? (コントロールの継承になってくる?) また、これはおそらく無理だと思うのですが ピクチャーボックスで表示されている画像の透過部分にも フォームの背景イメージを表示させる、ということは可能でしょうか? よろしくお願い致します。

  • アクセスでの計算フォーム

    VBの経験があるものですが、今回アクセス上で、VBのような計算フォームを作りたいと思ったのですが、エラーが出ます。 フォーム上のボタンを押すと、テキスト1~6を足して、答えのテキストに表示させるようにしたいのですが、デバッグをすると、VBの方でボタンクリックの部分で「コントロールがフォーカスを取得していないときにコントロール・・・」というエラーが出てきます。 手順として、テキストを作成し、ボタンを作成し、ボタンクリックのソース上で、テキスト1~6を足していく・・・ ということでは、まずいのでしょうか?

  • ACCESSのフォームで

    2つのことで悩んでいます ACCESSのフォームでテキストボックスに式ビルダで条件を入れたいのですできますか? やりたい事は テキストボックス1     テキストボックス2 1   なら   正解 2   なら   違い   なら    の用に1なら正解、2なら違い 空白なら空白とやりたいのですが()テキストボックス2に式ビルダをいれました) IIF関数だと空白なら空白が成立しないのです VBで言うSELECT CASE のようなものはないのですか? もうひとつはDLookup関数でキーが二つ(たとえばコード1とコード2)で名称を取得するのはかのうですか?途中ANDでつなげたのにうまくいきません よろしくお願いします

  • TextBoxの場合だけ処理したい

    VB2005でフォームの中のテキストボックスの中身をすべて""(空白文字列)にしたいと思っています。 VB6の時には、以下のコードでテキストボックスの中身を""にしていたのですが、VB2005になってから、captionプロパティがなくなって、この方法ではラベルやボタンまで""になってしまいます。 Dim TextBoxControl As Control On Error Resume Next For Each TextBoxControl In Me.Controls TextBoxControl.Text = "" Next 要するにこのコードの中にifでTextBoxの場合のみ処理するように書けばいいと思うのですが、その方法が見つかりません。if ~ thenの間に書く式を教えていただきたいと思います。

  • Access(フォームのプロパティボックスの設定)

     Win XP Office 2003 Accessを勉強中です。  フォームをデザインビューに作成するときに、ラベルとテキストボックスが作成されます。  これらのプロパティで「すべて」のタブで一番上から「名前」、「表題」または「コントロールソース」という項目がありますが、 これらは最初に、「テキスト○○」「ラベル○○」と表示されています。  「表題」または「コントロールソース」の欄の内容を変更すると、その内容がフォームから見えますが、  「名前」の欄を変更してやらなければならない場合とかはあるのでしょうか。  色々なテキストを見ると、「この場合には、必ず「表題」または「コントロールソース」の内容と同じ内容にすること」 と書かれていますが、これはフォームの入力欄の種類(コンボボックス、トグルボタン、チェックボックス、リストボッ クス)によって、変更するかしないかが決定されるのでしょうか。  どのような場合に「名前」の欄の内容を表題とかに合わせて変更するとか、この場合には変更しなくても良いという決まり はあるのでしょうか。