3つの数字を合わせてポイント加算させるには


おあん  2008-01-19 04:00:39  No: 138667

visual basic2003のソフトです。
label内の数字が3つ合えば、100ポイント、
どれか2でも数字が合えば10ポイント加算するというゲームを作っています。

プログラム
If label1.text=label2.text=label3.text then
   textbox1.text=textbox+100
             (省略)

If label1.text=label2.text or label3.text then
   textbox1.text=textbox+10

二つのIf文を設定しましたが、上記だけでは不十分でした。
andや orを加えたりしましたが、2つ合うだけで100ポイント加算されたりと意味不明です。

どうすれば正しい動作をしてくれるでしょうか。


特攻隊長まるるう  2008-01-19 04:18:30  No: 138668

まず、現実世界で、ノートに3つの数字を書いて、
点数が計算できますか?
その際、自分がどうやって計算しているかを
確認してください。

次に、点数が変わる3つの組合せをすべて挙げて
みてください。
その条件を書き出してください。
例)1つ目と2つ目の数字が一致。2つ目と3つ目が一致。1つ目と3つ目が不一致。点数20

その際、自分がどうやって計算しているかを
確認してください。

そのままプログラムすればできます。


おあん  2008-01-19 04:35:10  No: 138669

ありがとうございます。

追記です。
上記のプログラムは、スロットゲームの形を取っており、
ボタンを押すと数字がランダムに流れ、またボタンを押すと数字が表示されるという形です。

その数字が3つとも合えば100ポイント加算、
2つでも合えば10ポイント加算です。


おあん  2008-01-19 04:35:14  No: 138670

ありがとうございます。

追記です。
上記のプログラムは、スロットゲームの形を取っており、
ボタンを押すと数字がランダムに流れ、またボタンを押すと数字が表示されるという形です。

その数字が3つとも合えば100ポイント加算、
2つでも合えば10ポイント加算です。


あほー  2008-01-19 07:18:54  No: 138671

> label1.text=label2.text or label3.text
?????

label1.text=label2.text or label1.text=label3.text or label2.text=label3.text
かなぁ?
わっかんね!

> 追記です。
> 上記のプログラムは、スロットゲームの形を取っており、
> ボタンを押すと数字がランダムに流れ、またボタンを押すと数字が表示されるという形です。
>
> その数字が3つとも合えば100ポイント加算、
> 2つでも合えば10ポイント加算です。

????????
最初と計算の条件は何が変わったの?


こんなんでましたけど〜  2008-01-19 07:32:58  No: 138672

例1

If (一つ目と二つ目が同じ)
And (一つ目と三つ目が同じ)
Then
  100点加算処理
Else If (一つ目と二つ目が同じ)
Or (二つ目と三つ目が同じ)
Or (一つ目と三つ目が同じ)
Then
  10点加算処理
Else
  それ以外の処理
End If

例2

If (一つ目と二つ目が同じ)
And (一つ目と三つ目が同じ)
Then
  100点加算処理
Else
  If (一つ目と二つ目が同じ)
  Or (二つ目と三つ目が同じ)
  Or (一つ目と三つ目が同じ)
  Then
    10点加算処理
  Else
    それ以外の処理
  End If
End If

俺はバカだからこういう風に考えてみた。


特攻隊長まるるう  2008-01-19 08:03:48  No: 138673

> 俺はバカだからこういう風に考えてみた。
おいら、もっとバカだったw
>例)1つ目と2つ目の数字が一致。2つ目と3つ目が一致。1つ目と3つ目が不一致。点数20
三段論法で考えて、1つ目と3つ目って一致してるじゃんww

。。。いや、罠じゃなくてマジでwww
今日は沢山お仕事して疲れてたのだよ(><


おあん  2008-01-19 23:34:25  No: 138674

こんなんでましたけど〜さん

分かりづらい文章でごめんなさい
このプログラムは、大学の課題でして、うまくいかず悩んでました。
条件文としては、それで行けそうです。

早速、動かしてみます


ガッツいちもつ  2008-01-20 01:47:42  No: 138675

工夫次第では以下の通り簡単になります。
計算部分をfunctionにすればもっとシンプルになります。
dim R1 as integer = abs(sign(text1.text - text2.text)) * -1 + 1
dim R2 as integer = abs(sign(text1.text - text3.text)) * -1 + 1
dim R3 as integer = abs(sign(text2.text - text3.text)) * -1 + 1

dim R as integer = R1 + R2 + R3 'R は 0,1,3

dim Point as integer = 0
select case R
  case 0
    point = 0
  case 1
    point = 10
  case 3
    point = 100
end select

このコードのポイントとして以下の通りあげておきますので大学生ならよく考えてみて下さい。
1:absとsign関数を使用した目的
2:R1,R2,R3の算出の際最後に*-1+1としている目的
3:Rは2をとらない理由
大学の教授ならそのへんをつっこんでくると思いますよ


こんなんでましたけど〜  2008-01-20 02:07:15  No: 138676

> 分かりづらい文章でごめんなさい
わかりづらくはないですが、最初の条件と後から書いたのとは条件同じでしょ?
判定する部分とは違うところの動作の部分の説明は追加されたようだけど。
スロットのような場合と、自分で三つの数字を入力するのと、判定するという部分ではどっちでも同じロジックにならない?
わざわざ書き直した意味がわからなかったので、何か特別なことがあるのかと思った・・・

それはそれとして、大学の課題で今1月という事は、最終学年で卒業に向けての課題かと勝手に思ってるんだけど、大変ですねー。

条件分岐は、ほとんどの言語で、
If (判定が真) Then
 (真の場合の処理)
Else
 (真でない場合の処理)
End If

If (判定が真1) Then
 (真1の場合の処理)
Else If (判定が真2) Then
 (真2の場合の処理)
Else
 (真でない場合の処理)
End If
が実装されています。
それぞれの動作を理解した方がいいでしょう。

あと、自分がVBに詳しくないので勘違いしているのかも知れませんが、
label1.text=label2.text=label3.text
のように、一気に三つのモノを比較するようなことは出来ないと思います。
大抵は二つのもの(変数二つ、変数一つと定数一つ、定数二つ)を比較するだけになりますので、三つの場合は、A=B And B=Cのように面倒でもやらないとならない場合がほとんどです。
大変かも知れませんが頑張ってやってみましょうね。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加