配列を使って への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 モウヘイ  (高校生) 投稿日時 2009/3/31 01:33:12
neptuneさん、説明ありがとうございます。一通り目を通したつもりだったのですが、甘かったです。もう一度入門講座を見直したいと思います!ありがとうございました。
投稿者 neptune  (社会人) 投稿日時 2009/3/30 07:45:39
>このコードの意味を教えてください。よろしくお願いします!
聞く前にこのサイトには講座を用意して下さっているんですから利用させていただきましょう。
入門講座を一通りやれば、基本的な事はほとんど網羅しているんじゃないでしょうか?
「第11回 メソッドを作る」

ちなみにpT1 とpT2ってのは私が適当に付けた引数名です。
自分の中の規則で、
pは関数の引数に使うようにしてます。ポインタのpのつもり。
Tはもっと適当、Timerと書くのが面倒なだけ。
1,2は2つあるから区別をつけただけ。
です。

クラス外に非公開のJudge(これも処理内容を表す言葉を付けた)という名前を持ち、
Windows.Forms.Timer型の値渡しの引数 pT1
Windows.Forms.Timer型の値渡しの引数 pT2
を持つプロシージャ。
(関数とも呼ばれる。Functionとは値を返すプロシージャ。これも関数と呼ばれる。
メソッドとも呼ばれる。こう見ると呼び名はかなり広範ですね。)

一応説明はしましたが、入門講座はやるべきです。そうした方が間違いなく進歩が早いです。
投稿者 モウヘイ  (高校生) 投稿日時 2009/3/30 05:21:12
皆様、さまざまなご意見ありがとうございます。少しわからないことがあるので質問します。Private Sub Judge(ByVal pT1 As Windows.Forms.Timer, ByVal pT2 As Windows.Forms.Timer)の「pT1」と「pT2」というのが何かわからないのです。このコードの意味を教えてください。よろしくお願いします!
投稿者 るしぇ  (社会人) 投稿日時 2009/3/29 16:08:16
少し無駄な処理を増やすと Judge 関数の引数要らなくなるね。
全部のタイマーが止まってたら結果表示すればいいのだから。

その際、Timer を配列に入れておいてループでまわし、動いてる
タイマーを探すという風にしておけば、タイマーが増えたときに
楽かもね。

ただ、もともと配列をわざわざ使うべき場所は無いといってもいいかも。
必要なければ使わなければいい。無理に使うほうが不細工。

スロットの数を10くらいに増やしてみるとか、
ボタンを自動で止めるようなモードを用意したり、
いろいろ改造してみたら?そこまでなってくると
配列を使いたい場所が出てくるかも、出てこないかも。
投稿者 るしぇ  (社会人) 投稿日時 2009/3/29 15:55:37
>実際に動くように全部コードを書いてみて下さい。

どっちも書いてあるんじゃないかな?
これ以上のコードは要らないと思います。

その中で同じ処理をどうまとめるかっていう
話だと思いますよ。
投稿者 ハンニャセヨ  (中学生) 投稿日時 2009/3/29 12:20:22
実際に動くように全部コードを書いてみて下さい。
文字上限値オーバーするならしょうがないですが。
投稿者 モウヘイ  (高校生) 投稿日時 2009/3/26 23:56:24
neptuneさん、ありがとうございます。参考にさせていただきます!
投稿者 neptune  (社会人) 投稿日時 2009/3/25 06:29:21
配列ってのが良くわからんですが、普通こんな書き方もしますって事で。
同じ処理があったのでまとめました。動作確認はしてません。


    '1つのプロシージャで複数のコントロールのイベントをハンドルする 
    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) _
                                                        Handles Button1.Click, Button2.Click, Button3.Click
        Select Case sender.name
            Case "Button1"
                Timer1.Enabled = False
                Call Judge(Timer2, Timer3)
            Case "Button2"
                Timer2.Enabled = False
                Call Judge(Timer1, Timer3)
            Case "Button3"
                Timer3.Enabled = False
                Call Judge(Timer1, Timer2)
        End Select

    End Sub

    Private Sub Judge(ByVal pT1 As Windows.Forms.Timer, ByVal pT2 As Windows.Forms.Timer)
        If pT1.Enabled = False And pT2.Enabled = False Then
            Button4.Enabled = True
            If x = y And y = z Then
                TextBox1.Text = "的中!"
                m = m + 50
                TextBox2.Text = m
            Else
                TextBox1.Text = "残念"
            End If
        End If
    End Sub


'私はこの程度なら此方が好みです。 
    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
        Timer1.Enabled = False
        Call Judge(Timer2, Timer3)

    End Sub

    Private Sub Button2_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button2.Click

        Timer2.Enabled = False
        Call Judge(Timer1, Timer3)

    End Sub

    Private Sub Button3_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button3.Click

        Timer3.Enabled = False
        Call Judge(Timer1, Timer2)

    End Sub

    'この関数は上のと同じもんです。 
    Private Sub Judge(ByVal pT1 As Windows.Forms.Timer, ByVal pT2 As Windows.Forms.Timer)
        If pT1.Enabled = False And pT2.Enabled = False Then
            Button4.Enabled = True
            If x = y And y = z Then
                TextBox1.Text = "的中!"
                m = m + 50
                TextBox2.Text = m
            Else
                TextBox1.Text = "残念"
            End If
        End If
    End Sub

投稿者 モウヘイ  (高校生) 投稿日時 2009/3/25 03:44:49
はじめまして。高校で簡単なゲームを作成する課題があり、スロットゲームを作成しています。プログラムがシンプルになる「配列」を使ってプログラムを作成したいのですが、どういう風にすれば良いのかよくわかりません。同じような処理内容の部分に使えると聞いてのですが・・・
アドバイスよろしくお願いします(vb2008 express edition)

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Timer1.Enabled = False
        
        If Timer2.Enabled = False And Timer3.Enabled = False Then
            Button4.Enabled = True
            If x = y And y = z Then
                TextBox1.Text = "的中!"
                m = m + 50
                TextBox2.Text = m
            Else
                TextBox1.Text = "残念"
            End If
        End If

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        
        Timer2.Enabled = False
        
        If Timer1.Enabled = False And Timer3.Enabled = False Then
            Button4.Enabled = True
            If x = y And y = z Then
                TextBox1.Text = "的中!"
                m = m + 50
                TextBox2.Text = m
            Else
                TextBox1.Text = "残念"
            End If
        End If

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        
        Timer3.Enabled = False
        
        If Timer1.Enabled = False And Timer2.Enabled = False Then
            Button4.Enabled = True
            If x = y And y = z Then
                TextBox1.Text = "的中!"
                m = m + 50
                TextBox2.Text = m
            Else
                TextBox1.Text = "残念"
            End If
        End If

    End Sub