プロが教える店舗&オフィスのセキュリティ対策術

visual basic.netでフラッシュ暗算のプログラムを作成しようと思っていますが、上手くいきません。
まずランダム関数によって101~999の3桁で試そうとしてます。
これを10個表示して結果を出したいのですが、
本来はlabelbox2に答えを入力し答えを確認しようと思いましたが、表示される数が1津市かでなかったため、
たとえばrが乱数だとした場合試しで乱数をlabel1に結果をlabel2に表示してみたく以下のようなループ文にしました。
for i=1 to 10 step 1
labelbox1.text=r
s=s+r
labelbox2.text=s
next i
のようにしています。
しかしlabelbox2には10個たせれた数が表示し、labelbox1には最後の乱数しかでません。
ですのでこのままではフラッシュ暗算にはならないので空き時間を入れたいのですが、for~next文を途中に追加し空ループで時間を稼ごうとしてもできません。
なにか待ち時間を上手くする方法ありませんか?
まだまだ初心者なのでいまいちよくわかりません。

A 回答 (1件)

Option Explicit On


Option Strict On
Option Compare Binary
' Option Infer Off
Class Q4090807A
Inherits System.Windows.Forms.Form
Private QuestionLabel As System.Windows.Forms.Label
Private AnswerTextBox As System.Windows.Forms.TextBox
Private CheckButton As System.Windows.Forms.Button
Private RetryButton As System.Windows.Forms.Button

Private Timer As System.Windows.Forms.Timer
Private Dice As System.Random
Private Const Count As Integer = 10
Private Const Min As Integer = 101
Private Const Max As Integer = 999
Private Current As Integer = 0


Private Numbers As Integer()

Sub New()

Dice = New System.Random()


Me.Size = New System.Drawing.Size(800,600)

QuestionLabel = New System.Windows.Forms.Label
QuestionLabel.Left = 350
QuestionLabel.Top = 100
QuestionLabel.Size = New System.Drawing.Size(100,50)
QuestionLabel.Text = "問題"

AnswerTextBox = New System.Windows.Forms.TextBox
AnswerTextBox.Left = 350
AnswerTextBox.Top = 200
AnswerTextBox.Size = New System.Drawing.Size(100,50)
AnswerTextBox.Enabled = false

CheckButton = New System.Windows.Forms.Button
CheckButton.Left = 350
CheckButton.Top = 300
CheckButton.Size = New System.Drawing.Size(100,50)
CheckButton.Enabled = False
CheckButton.Text = "チェック"

RetryButton = New System.Windows.Forms.Button
RetryButton.Left = 200
RetryButton.Top = 300
RetryButton.Size = New System.Drawing.Size(100,50)
RetryButton.Enabled = True
RetryButton.Text = "再挑戦"

Me.Controls.AddRange(New System.Windows.Forms.Control(){QuestionLabel,AnswerTextBox,CheckButton,RetryButton})

Timer = New System.Windows.Forms.Timer()
Timer.Interval = 1000
AddHandler Timer.Tick,AddressOf Timer_Tick
AddHandler CheckButton.Click,AddressOf CheckButton_Click
AddHandler RetryButton.Click,AddressOf RetryButton_Click
Prepare()
Timer.Enabled = true

End Sub

Private Sub Timer_Tick(Sender As Object,e As System.EventArgs)

If Current < Count Then
QuestionLabel.Text = Numbers(Current).ToString()
Current = Current + 1
Else
Timer.Enabled = False
QuestionLabel.Text = ""
AnswerTextBox.Enabled = True
CheckButton.Enabled = True
End If

End Sub
Private Sub CheckButton_Click(Sender As Object,e As System.EventArgs)
CheckButton.Enabled = False
Dim Answer As Integer = 0
For i As Integer = 0 To Numbers.Length - 1
Answer = Answer + Numbers(i)
Next
Try
If Answer = Integer.Parse(AnswerTextBox.Text) Then
Me.BackColor = System.Drawing.Color.Blue
Else
Me.BackColor = System.Drawing.Color.Red
End If
Catch err As System.FormatException
System.Console.WriteLine(err.ToString()) 'コンソールアプリとして作成したのでこの辺でエラー出るかも
System.Console.ReadKey(true) 'コンソールアプリとして作成したのでこの辺でエラー出るかも

Finally

End Try
End Sub

Sub RetryButton_Click(Sender As Object,e As System.EventArgs)
Timer.Enabled = False
Prepare()
Timer.Enabled = True
End Sub

Sub Prepare()

AnswerTextBox.Enabled = False
AnswerTextBox.Text = ""
CheckButton.Enabled = False
Me.BackColor = System.Drawing.SystemColors.Control
For i As Integer = 0 To Count - 1
ReDim Preserve Numbers(i)
Numbers(i) = (Dice.Next Mod (Max + 1 - Min)) + Min
Next
Current = 0

End Sub

Shared Sub Main()
Dim Form1 As Q4090807A = New Q4090807A
Form1.ShowDialog()
End Sub



End Class
    • good
    • 0
この回答へのお礼

わざわざ回答ありがとうございました。
1行1行理解しながら試してみたいと思います。

お礼日時:2008/06/11 07:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!