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

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

C# と VB.NET の入門サイト

Re[1]: ※編集しました IFの中をimage同士でつなぐ


(過去ログ 151 を表示中)

[トピック内 19 記事 (1 - 19 表示)]  << 0 >>

■88049 / inTopicNo.1)  ※編集しました IFの中をimage同士でつなぐ
  
□投稿者/ y3 (1回)-(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' に対して定義されていません。'
というようにエラーが出てしまいます。どうすればよいでしょうか?
引用返信 編集キー/
■88050 / inTopicNo.2)  Re[1]: IFの中をimage同士でつなぐ
□投稿者/ shu (1134回)-(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 にすればよいです。

引用返信 編集キー/
■88051 / inTopicNo.3)  Re[2]: IFの中をimage同士でつなぐ
□投稿者/ Jitta (395回)-(2018/07/31(Tue) 07:58:30)
タイトルと内容にどのような関係が?
コードで説明するのではなく、言葉で説明してください。
プログラムとは、コンピュータに対する指示です。
あなた自身が、コンピュータにさせたいことを理解していますか?
理解できていないなら、プログラム=コンピュータに対する指示が書けるわけありません。

引用返信 編集キー/
■88052 / inTopicNo.4)  Re[1]: IFの中をimage同士でつなぐ
□投稿者/ WebSurfer (1567回)-(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 同士の比較になるようですし。
引用返信 編集キー/
■88054 / inTopicNo.5)  Re[2]: IFの中をimage同士でつなぐ
□投稿者/ はまぐり (10回)-(2018/07/31(Tue) 11:24:54)
No88052 (WebSurfer さん) に返信

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

MSDNで言語仕様探したんですけど見つけられませんでした
どっかにあると思うんですけどね

引用返信 編集キー/
■88056 / inTopicNo.6)  Re[3]: IFの中をimage同士でつなぐ
□投稿者/ y3 (2回)-(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


引用返信 編集キー/
■88057 / inTopicNo.7)  Re[3]: IFの中をimage同士でつなぐ
□投稿者/ WebSurfer (1568回)-(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 を使っても質問者さんの期待する結果が得られるかどうかは不明と言うところは
変わらないようですが。
引用返信 編集キー/
■88058 / inTopicNo.8)  Re[4]: IFの中をimage同士でつなぐ
□投稿者/ はまぐり (11回)-(2018/07/31(Tue) 11:57:45)
No88056 (y3 さん) に返信

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

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

hontai(?).imageにスロットを止めたときの絵柄がセットされてるんですよね?
hontaiかなー、hontaiにセットするところが怪しい気がしていますが
いまの情報だけだとわがんねっす
引用返信 編集キー/
■88059 / inTopicNo.9)  Re[4]: IFの中をimage同士でつなぐ
□投稿者/ WebSurfer (1569回)-(2018/07/31(Tue) 11:58:00)
No88056 (y3 さん) に返信

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

MSDN ライブラリによると、

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

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

Is 演算子の結果は合っているでしょうか、それが質問者さんの期待とは異なるということでしょう。
引用返信 編集キー/
■88060 / inTopicNo.10)  Re[4]: IFの中をimage同士でつなぐ
□投稿者/ shu (1135回)-(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のそれぞれにどのように
イメージを設定していますか?
引用返信 編集キー/
■88106 / inTopicNo.11)  Re[5]: IFの中をimage同士でつなぐ
□投稿者/ Jitta (396回)-(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には何がある?
プログラムが意図通りに動くのは、「意図しているから」です。
他人から意図通りの答えを得るためには、同じように、意図を伝えなければなりません。
プログラムやプログラムに書かれている変数は、何を意図しているのでしょうか。
引用返信 編集キー/
■88111 / inTopicNo.12)  Re[6]: IFの中をimage同士でつなぐ
□投稿者/ はまぐり (15回)-(2018/08/03(Fri) 10:28:09)
Jittaさんが何を言いたいのかわからないのは私だけでしょうか?

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

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

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

要旨はこんな感じ。でいいかな?
引用返信 編集キー/
■88124 / inTopicNo.14)  Re[8]: IFの中をimage同士でつなぐ
□投稿者/ はまぐり (19回)-(2018/08/03(Fri) 12:28:01)
No88123 (Jitta さん) に返信

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

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

データの比較は良い観点だと思います、説明不足ですけど

引用返信 編集キー/
■88125 / inTopicNo.15)  Re[9]: IFの中をimage同士でつなぐ
□投稿者/ はまぐり (20回)-(2018/08/03(Fri) 12:31:07)
No88123 (Jitta さん) に返信

Jittaさんがときどき言ってるオブジェクト指向は目的志向なんだ論もよくわからないんですよね
それも教えてもらいたいな
引用返信 編集キー/
■88129 / inTopicNo.16)  Re[10]: IFの中をimage同士でつなぐ
□投稿者/ Jitta (399回)-(2018/08/03(Fri) 12:45:26)
おお!hontaiを探していたら、本体か!
一致させようよorz

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

で、私が「意図を説明して」というのは、
内容を整理しているうちに解決できることが多いからです。
まず自分に説明しましょう。大体の問題は解決します。
引用返信 編集キー/
■88130 / inTopicNo.17)  Re[11]: IFの中をimage同士でつなぐ
□投稿者/ はまぐり (22回)-(2018/08/03(Fri) 13:06:55)
No88129 (Jitta さん) に返信

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

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

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


引用返信 編集キー/
■88131 / inTopicNo.18)  Re[12]: IFの中をimage同士でつなぐ
□投稿者/ はまぐり (23回)-(2018/08/03(Fri) 13:08:07)
Jittaさんのコミュ力を改善したい
引用返信 編集キー/
■88136 / inTopicNo.19)  Re[1]: ※編集しました IFの中をimage同士でつなぐ
□投稿者/ Jitta (400回)-(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 など、どこに表示されているのか、などがわかるようにします。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -