• ベストアンサー

複数の、Falseの判定方法について

現在ゲームを作っているんですが、 どうしても、コーディングが、長くなってしまうので、 やりかたを教えて欲しいのですが、 複数の、オブジェクトの判定のやり方を、知りたいのです。 SHAPEを、コントロール配列にして、 0~4までが、全部Falseだったら、 チェックを入れる。 という風にしたいのです。 現在は If (Shape(0).Visible = False) And (Shape(1).Visible = False) And ~省略~ Then    hanntei = True 'Boolean形 end if という風に、全部書いてます。 まだまだ、SHAPEは増やす予定なので、 そうするとどうしても、長くなってしまうので、どうにかしたいのですが、思いつきません。 どなたか、教えてください。

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

  • ベストアンサー
  • hequil
  • ベストアンサー率65% (242/372)
回答No.1

Shapeコントロールの数をあらかじめ「SHAPE_NUMS」という変数に入れておいて j = 0 For i = 1 To SHAPE_NUMS   j = j + Shape(i).Visible Next i If j = 0 Then   hanntei = True Else   hanntei = False End If なんて方法もありますけど、美しくないですね(苦笑) これはFalseの値が0という点を利用した方法ですけど、これならShapeコントロールが増えても対応できます。 参考まで

mutuzi
質問者

お礼

早速の書き込みありがとうございます。 変数を三つ使用してますが、 一番まともに動いたので、つかわせて、もらいます。 どうもありがとうございました。

その他の回答 (3)

  • yoshioz
  • ベストアンサー率28% (10/35)
回答No.4

こんな感じでコードを書いたらShapeが増えても コードを変更しなくてもいいし、 コードもすっきりします。 Dim shp As Shape hanntei = True For Each shp In Shape If shp.Visible Then hanntei = False Exit For End If Next shp

mutuzi
質問者

お礼

書き込みありがとうございます。 短くていいのですが、 for eachステートメントを知らなかったため、 解読に苦労しました。(苦笑) 最初に書かなかった俺も悪いのですが、 タイマーを二つで制御してますので、 始めに、TRUEにしてしまうと、誤作動が・・・ でも、for eachステートメントは、他ので使えるので 使わせてもらいます。 どうもありがとうございました。

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

VBにおいては、FALSEは0と同値であるため、「行儀の悪い」手法を使えば、 For i=0 to 4   Hit=Hit + Shape(i).visible Next i IF Hit=0 THEN   hantei=True ELSE   hantei=False END IF であるとか、 IF Shape(0).Visible +Shape(1).Visible +… = 0 Then   hantei=True END IF ってな感じの記述ができます。 もしくは、「行儀のいい」方法でしたら hantei=True FOR i=0 to 4   IF Shape(i).Visible = True then     hantei=False     Exit For   END IF NEXT i みたいな書き方が出来るでしょう。

mutuzi
質問者

お礼

書き込みありがとうございます。 FALSEは0と同値は、知りませんでした。(苦笑) 行儀の悪い方法の、二つ目は、あまり俺のと変わりませんね。あと、いい方法でも、上の方と、変わらなく、 誤作動が起きてしまったので、 悪いと言われてますが、一番上の方法を取ろうと想います。 ありがとうございました。

noname#9414
noname#9414
回答No.2

C言語ならば、 if(Shape[0].Visible & Shape[1].Visible...) なんてこともできたはずですが、VBだとどうだろう? まぁ、hequil様のがいい手だと思いますよ。 #汎用性はないけど・・・ #どれかがTRUEだったらなんてことになったら、 #結構改良が面倒そうだから。 後から、どれかがTRUEだったらなんて判定を 追加しそうならば、サブルーチンを一つ作っておくと いいかもしれませんね。そちらに追加するだけで、 問題なく変更できますから。 ではでは☆

mutuzi
質問者

お礼

書き込みありがとうございます。 C言語ならば、と書いていただいた例は、 結論的には全部書く ということですよね・・・・?(苦笑) とりあえず、サブルーチンを~変更できますから というのは、ありえることなので、考えておこうと想います。 ありがとうございました。

関連するQ&A