C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.88049 の関連記事表示

<< 0 >>
■88049  ※編集しました IFの中をimage同士でつなぐ
□投稿者/ y3 -(2018/07/31(Tue) 04:52:45)

    分類:[.NET 全般] 

    2018/07/31(Tue) 11:14:45 編集(投稿者)
    2018/07/31(Tue) 11:13:19 編集(投稿者)

    > タイトルと内容にどのような関係が?
    > コードで説明するのではなく、言葉で説明してください。
    > プログラムとは、コンピュータに対する指示です。
    > あなた自身が、コンピュータにさせたいことを理解していますか?
    > 理解できていないなら、プログラム=コンピュータに対する指示が書けるわけありません。
    >

    tagは間違いでした。すいません。
    すいません。説明不足でした。
    スロットのようなものを作りたくて
    絵柄は5種類で
    それ用のpictureboxを9個作り、それに7、jac、ベル、スイカ、チェリー、jac,ベル、スイカ、チェリーの順番で入れました
    それとは別で本体を9個のPictureboxで3分割にして一つずつタイマーを設置しました。
    Startボタンを押すとそれぞれが起動して画像が流れるというようにしました。
    その後それぞれのリールの下にあるボタンを押すことでそれぞれのタイマーが止まり回転も止まるようにしました


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click


    If Timer1.Enabled = False And Timer2.Enabled = False And Timer3.Enabled = False Then
    Label2.Text = CDec(Label2.Text) - 10
    End If

    Timer1.Interval = 1000
    Timer1.Enabled = True
    Timer2.Interval = 1000
    Timer2.Enabled = True
    Timer3.Interval = 1000
    Timer3.Enabled = True

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    PictureBox1.Image = egara(idx Mod egara.Length).image
    PictureBox2.Image = egara((idx + 1) Mod egara.Length).image
    PictureBox3.Image = egara((idx + 2) Mod egara.Length).image
    idx = idx + 1
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Timer1.Enabled = False
    End Sub
    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
    PictureBox4.Image = egara(idx2 Mod egara.Length).image
    PictureBox5.Image = egara((idx2 + 1) Mod egara.Length).image
    PictureBox6.Image = egara((idx2 + 2) Mod egara.Length).image
    idx2 = idx2 + 1
    End Sub


    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Timer2.Enabled = False
    End Sub

    Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick
    PictureBox7.Image = egara(idx3 Mod egara.Length).image
    PictureBox8.Image = egara((idx3 + 1) Mod egara.Length).image
    PictureBox9.Image = egara((idx3 + 2) Mod egara.Length).image
    idx3 = idx3 + 1
    End Sub

    本題はここからです。
    If hontai(0).image = hontai(3).image And hontai(3).image = hontai(6).image Then
    Label2.Text = CDec(Label2.Text) + 150
    ElseIf hontai(1).image Is hontai(4).image And hontai(4) Is hontai(7).image Then
    Label2.Text = CDec(Label2.Text) + 150
    ElseIf hontai(2).image Is hontai(5).image And hontai(5) Is hontai(8).image Then
    Label2.Text = CDec(Label2.Text) + 150
    ElseIf hontai(2).image Is hontai(4).image And hontai(4) Is hontai(6).image Then
    Label2.Text = CDec(Label2.Text) + 150
    End If

    リールの縦、横、斜めが合ってた時にラベルの数字に150を足すというようにしたいのですが、
    '演算子 '=' は 型 'Bitmap' と 型 'Bitmap' に対して定義されていません。'
    というようにエラーが出てしまいます。どうすればよいでしょうか?
親記事 /過去ログ151より / 関連記事表示
削除チェック/

■88050  Re[1]: IFの中をimage同士でつなぐ
□投稿者/ shu -(2018/07/31(Tue) 07:09:27)
    No88049 (y3 さん) に返信
    >
    > 本当に初心者ですが優しい方教えてくれたら幸いです。。
    >
    > If hontai(0).tag = hontai(3).tag And hontai(3) = hontai(6).tag Then
    >    Label2.Text = CDec(Label2.Text) + 150
    > end if
    >
    > とやりたいのですが、
    > '演算子 '=' は 型 'Bitmap' と 'Nothing' に対して定義されていません。'
    > と出てしまいます。どうすればいいでしょうか?

    比べているものが同じものであるのなら = を is にすればよいです。
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88051  Re[2]: IFの中をimage同士でつなぐ
□投稿者/ Jitta -(2018/07/31(Tue) 07:58:30)
    タイトルと内容にどのような関係が?
    コードで説明するのではなく、言葉で説明してください。
    プログラムとは、コンピュータに対する指示です。
    あなた自身が、コンピュータにさせたいことを理解していますか?
    理解できていないなら、プログラム=コンピュータに対する指示が書けるわけありません。
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88052  Re[1]: IFの中をimage同士でつなぐ
□投稿者/ WebSurfer -(2018/07/31(Tue) 10:59:56)
    No88049 (y3 さん) に返信

    エラーの原因は、単純に Bitmap.Tag プロパティの書き忘れでは?

    誤: If hontai(0).tag = hontai(3).tag And hontai(3) = hontai(6).tag Then

     ↓↓↓

    正: If hontai(0).tag = hontai(3).tag And hontai(3).tag = hontai(6).tag Then

    ただし、それでエラーが解決できたとしても質問者さんが期待する結果が得られるか
    どうかは分かりませんが。object 同士の比較になるようですし。
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88054  Re[2]: IFの中をimage同士でつなぐ
□投稿者/ はまぐり -(2018/07/31(Tue) 11:24:54)
    No88052 (WebSurfer さん) に返信

    VB.NETではObject型に=演算子は存在しないです
    Object型の比較にはIs演算子を使用します

    MSDNで言語仕様探したんですけど見つけられませんでした
    どっかにあると思うんですけどね
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88057  Re[3]: IFの中をimage同士でつなぐ
□投稿者/ WebSurfer -(2018/07/31(Tue) 11:46:23)
    No88054 (はまぐり さん) に返信
    > ■No88052 (WebSurfer さん) に返信
    >
    > VB.NETではObject型に=演算子は存在しないです
    > Object型の比較にはIs演算子を使用します

    そのようですね。フォローをありがとうございます。ということは、最初の質問の話では
    以下のようにすべだったということのようですね。

    誤: If hontai(0).tag = hontai(3).tag And hontai(3) = hontai(6).tag Then

     ↓↓↓

    誤: If hontai(0).tag = hontai(3).tag And hontai(3).tag = hontai(6).tag Then

     ↓↓↓

    正: If hontai(0).tag Is hontai(3).tag And hontai(3).tag Is hontai(6).tag Then

    ただし、Is を使っても質問者さんの期待する結果が得られるかどうかは不明と言うところは
    変わらないようですが。
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88056  Re[3]: IFの中をimage同士でつなぐ
□投稿者/ y3 -(2018/07/31(Tue) 11:41:29)
    No88054 (はまぐり さん) に返信
    > ■No88052 (WebSurfer さん) に返信
    >
    > VB.NETではObject型に=演算子は存在しないです
    > Object型の比較にはIs演算子を使用します
    >
    > MSDNで言語仕様探したんですけど見つけられませんでした
    > どっかにあると思うんですけどね
    >


    ありがとうございます。言われたとおりにこのようにしてみたのですがうまく動きません。あってるのでしょうか?

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    If hontai(0).image Is hontai(3).image And hontai(3).image Is hontai(6).image Then
    Label2.Text = CDec(Label2.Text) + 150
    ElseIf hontai(1).image Is hontai(4).image And hontai(4) Is hontai(7).image Then
    Label2.Text = CDec(Label2.Text) + 150
    ElseIf hontai(2).image Is hontai(5).image And hontai(5) Is hontai(8).image Then
    Label2.Text = CDec(Label2.Text) + 150
    ElseIf hontai(2).image Is hontai(4).image And hontai(4) Is hontai(6).image Then
    Label2.Text = CDec(Label2.Text) + 150
    End If

記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88059  Re[4]: IFの中をimage同士でつなぐ
□投稿者/ WebSurfer -(2018/07/31(Tue) 11:58:00)
    No88056 (y3 さん) に返信

    > あってるのでしょうか?

    MSDN ライブラリによると、

    "Is演算子は、2 つのオブジェクト参照が同じオブジェクトを参照しているかどうかを判定します。
    ただし、値の比較は行われません。object1 と object2 の両方がまったく同じオブジェクト イン
    スタンスを参照している場合、result は True になります。それ以外の場合は、result は False
    です"

    ということです。オブジェクトの意味は理解できますか? 値型と参照型の違いは分かりますか?

    Is 演算子の結果は合っているでしょうか、それが質問者さんの期待とは異なるということでしょう。
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88058  Re[4]: IFの中をimage同士でつなぐ
□投稿者/ はまぐり -(2018/07/31(Tue) 11:57:45)
    No88056 (y3 さん) に返信

    '演算子 '=' は 型 'Bitmap' と 型 'Bitmap' に対して定義されていません。'
    のエラーは出なくなったということですね。Is演算子の使い方はあってますよ。

    うまく動かないということなので、そういう意味ではどこかで何かが合ってないんでしょうけれども
    Is演算子は参照が同じことを確認するものなので、絵柄は同じだけれども参照は違うのさみたいな
    ことだとIs演算子で一致を確認する方法はマズイですね。

    hontai(?).imageにスロットを止めたときの絵柄がセットされてるんですよね?
    hontaiかなー、hontaiにセットするところが怪しい気がしていますが
    いまの情報だけだとわがんねっす
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88060  Re[4]: IFの中をimage同士でつなぐ
□投稿者/ shu -(2018/07/31(Tue) 12:16:48)
    No88056 (y3 さん) に返信

    > Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    > If hontai(0).image Is hontai(3).image And hontai(3).image Is hontai(6).image Then
    > Label2.Text = CDec(Label2.Text) + 150
    > ElseIf hontai(1).image Is hontai(4).image And hontai(4) Is hontai(7).image Then
    > Label2.Text = CDec(Label2.Text) + 150
    > ElseIf hontai(2).image Is hontai(5).image And hontai(5) Is hontai(8).image Then
    > Label2.Text = CDec(Label2.Text) + 150
    > ElseIf hontai(2).image Is hontai(4).image And hontai(4) Is hontai(6).image Then
    > Label2.Text = CDec(Label2.Text) + 150
    > End If
    >
    例えば hontai(0).imageとhontai(3).imageが同じというとき
    hontai(0).image、hontai(3).imageのそれぞれにどのように
    イメージを設定していますか?
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88106  Re[5]: IFの中をimage同士でつなぐ
□投稿者/ Jitta -(2018/08/02(Thu) 22:06:39)
    画像を比較するのではなく、
    7、jac、ベル、スイカ、チェリー、jac,ベル、スイカ、チェリーのデータを作る。
    この中から順に1つを選ぶ。
    選んだデータの画像を表示する。
    データを比較して、何が表示されているか調べる。

    の方が簡単では?

    If hontai(0).image Is hontai(3).image And hontai(3).image Is hontai(6).image Then
    Bitmapの「一致」というのを、どうイメージしていますか?
    人は、2つの絵を見て同じかどうか判断できますが、
    コンピュータは、どういう状態を「同じ」と判断するのでしょうか。
    人と同じように「各ピクセルの値(色)が同じ」であれば、
    いったいどれだけの計算量になるか、考えて見ましたか?
    参照先が同じなら、という判断も出来ますが、
    表示はegaraという配列で行なっている。hontaiには何がある?
    プログラムが意図通りに動くのは、「意図しているから」です。
    他人から意図通りの答えを得るためには、同じように、意図を伝えなければなりません。
    プログラムやプログラムに書かれている変数は、何を意図しているのでしょうか。
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88111  Re[6]: IFの中をimage同士でつなぐ
□投稿者/ はまぐり -(2018/08/03(Fri) 10:28:09)
    Jittaさんが何を言いたいのかわからないのは私だけでしょうか?
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88123  Re[7]: IFの中をimage同士でつなぐ
□投稿者/ Jitta -(2018/08/03(Fri) 12:22:12)
    No88111 (はまぐり さん) に返信
    > Jittaさんが何を言いたいのかわからないのは私だけでしょうか?
    >

    もしもしからなので色々省いてます。申し訳ない。

    画像を比較するのではなく、データで比較する方が簡単だよ、というのが前半。
    「画像」を比較するのは大変なんだよ。というのが後半の上。
    表示しているものと比較しているものが違うね。それぞれ何が入っているか、読んでいる人にはわからないから、アドバイスも中途半端になるよ、ってのが後半の後ろ5行。

    要旨はこんな感じ。でいいかな?
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88124  Re[8]: IFの中をimage同士でつなぐ
□投稿者/ はまぐり -(2018/08/03(Fri) 12:28:01)
    No88123 (Jitta さん) に返信

    hontaiに何が入ってるかは最初の質問文にありますよ
    参照の一致でみれば画像の比較は簡単ですよ
    現にそうしようとしてるのはコードみればわかりますよね

    意図が意図がという割りにJittaさんは意図をわかろうと努力してないんじゃないですか?

    データの比較は良い観点だと思います、説明不足ですけど
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88125  Re[9]: IFの中をimage同士でつなぐ
□投稿者/ はまぐり -(2018/08/03(Fri) 12:31:07)
    No88123 (Jitta さん) に返信

    Jittaさんがときどき言ってるオブジェクト指向は目的志向なんだ論もよくわからないんですよね
    それも教えてもらいたいな
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88129  Re[10]: IFの中をimage同士でつなぐ
□投稿者/ Jitta -(2018/08/03(Fri) 12:45:26)
    おお!hontaiを探していたら、本体か!
    一致させようよorz

    じゃぁ、hontaiとegaraは、PictureBoxの配列?
    で、本体と表示されているものの関係は?
    タイマーで表示しているのはegaraなんだけど。
    hontaiには何が入っているんだ?
    そもそも、PictureBox.Imageで比較すればいいのでは?
    (比較するものを間違っているのでは?)

    で、私が「意図を説明して」というのは、
    内容を整理しているうちに解決できることが多いからです。
    まず自分に説明しましょう。大体の問題は解決します。
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88130  Re[11]: IFの中をimage同士でつなぐ
□投稿者/ はまぐり -(2018/08/03(Fri) 13:06:55)
    No88129 (Jitta さん) に返信

    > で、私が「意図を説明して」というのは、
    > 内容を整理しているうちに解決できることが多いからです。
    > まず自分に説明しましょう。大体の問題は解決します。

    それは鏡を見て言ったがいんじゃないでしょうか
    この言葉はこう解釈できるし、こうも解釈できるよね
    でもこう解釈すると矛盾が生じるからこっちの解釈を選択すべきだよねと
    そうやって推論することで伝達者の意図はわかります

    Jittaさんが努力すべきなんです
    質問文を聖書だと思ってください、ここには真実のみが記載されているんだと思うんです
    本当に真実かどうかは問題ではありません、謙虚にそして論理的に読み解く姿勢が大事です

記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88131  Re[12]: IFの中をimage同士でつなぐ
□投稿者/ はまぐり -(2018/08/03(Fri) 13:08:07)
    Jittaさんのコミュ力を改善したい
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/

■88136  Re[1]: ※編集しました IFの中をimage同士でつなぐ
□投稿者/ Jitta -(2018/08/03(Fri) 21:05:15)
    No88049 (y3 さん) に返信
    > 絵柄は5種類で
    > それ用のpictureboxを9個作り、それに7、jac、ベル、スイカ、チェリー、jac,ベル、スイカ、チェリーの順番で入れました

    絵柄は5種類なのに、それ用の PictureBox が9個有るのはなぜですか。
    この「9個」は、次の「9個の PictureBox でB分割にして」の9個と関係があるのでしょうか。


    というか、あれですかね。コードで画像を読む方法がわからなかったから PictureBox をおいて、Image プロパティに設定した、って所ですかね?

    それで、No88056 の「うまく動かない」は、ベルが3つ並んだが150加算されない、ってことですかね?

    絵柄用の PictureBox は5つで良いです。絵柄を示すためのオブジェクトなので、絵柄を示すことだけに集中します。
    表示の順番を示すのは別のオブジェクトに任せます。

    Dim junjo = ( 0, 1, 2, 3, 4, 1, 2, 3, 4 )

    これで、junjo は9個あり、0からそれぞれ 7、jac、ベル、スイカ、チェリー、jac,ベル、スイカ、チェリー の画像へのインデックスになります。


    > Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    > PictureBox1.Image = egara(idx Mod egara.Length).image
    > PictureBox2.Image = egara((idx + 1) Mod egara.Length).image
    > PictureBox3.Image = egara((idx + 2) Mod egara.Length).image
    > idx = idx + 1
    > End Sub


    この辺は、

    PictureBox1.Image = egara(junjo(idx Mod junjo.Length).Image

    などになります。

    idx のスコープが不明ですが、おそらくインスタンスなのでしょう。
    では、判定の所でも使います。

    > If hontai(0).image = hontai(3).image And hontai(3).image = hontai(6).image Then
    > Label2.Text = CDec(Label2.Text) + 150
    > ElseIf hontai(1).image Is hontai(4).image And hontai(4) Is hontai(7).image Then
    > Label2.Text = CDec(Label2.Text) + 150
    > ElseIf hontai(2).image Is hontai(5).image And hontai(5) Is hontai(8).image Then
    > Label2.Text = CDec(Label2.Text) + 150
    > ElseIf hontai(2).image Is hontai(4).image And hontai(4) Is hontai(6).image Then
    > Label2.Text = CDec(Label2.Text) + 150
    > End If

    ElseIf でつないでいますが、本当に良いのですか?
    まぁ、「のようなもの」だからいいのか。
    まず、インデックスを取り出します。

    Dim LeftUp = junjo(idx Mod junjo.Length)
    Dim CenterUp = junjo(idx2 Mod junjo.Length)
    Dim RightUp = junjo(idx3 Mod junjo.Length)

    これらは「egara へのインデックス」なので、同じ数字なら同じ絵柄を指していることになります。
    Integer 型なので、素直に比較できます。

    If LeftUp = CenterUp AndAlso CenterUp = RightUp Then
      tensu += 150
    Endif
    Label2.Text = tensu.ToString


    1つのオブジェクトに複数の目的を持たせるような設計は避けます。
    「Object」の意味は「目的」です。複数の目的を同時に達成するのは難しいでしょ?
    オブジェクトの方向を向いているだけではなく、オブジェクトの目的を考え、その目的を達成する方法を考えます。
    この、「目的を達成する方法を考える」が「志向(ある目的に向けて気持ちを向けること)」です。
    Object Oriented は「オブジェクト指向(ある方向を向いていること)」と訳されていますが、誤訳です。
    オブジェクトに目的を持たせるために、名前を正しくつけます。
    PictureBox1 ではなく、pctLeftUp など、どこに表示されているのか、などがわかるようにします。
記事No.88049 のレス /過去ログ151より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -