- 締切済み
フラッシュ暗算
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文を途中に追加し空ループで時間を稼ごうとしてもできません。 なにか待ち時間を上手くする方法ありませんか? まだまだ初心者なのでいまいちよくわかりません。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- himajin100000
- ベストアンサー率54% (1660/3060)
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
お礼
わざわざ回答ありがとうございました。 1行1行理解しながら試してみたいと思います。