• 締切済み

フラッシュ暗算

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文を途中に追加し空ループで時間を稼ごうとしてもできません。 なにか待ち時間を上手くする方法ありませんか? まだまだ初心者なのでいまいちよくわかりません。

みんなの回答

回答No.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

taka_orz
質問者

お礼

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

関連するQ&A

  • それぞれの暗算にかかった時間

    このプログラムは3つの数字の和を暗算させるプログラムです。 プログラムでは、10回の暗算にかかった合計時間を表示させて います。 質問としては「それぞれの回数にかかった時間をそれぞれ 表示させるにはどうすればいいのかか?」です。 #include<stdio.h> #include<time.h> #include<stdlib.h> int main(void) { int a,b,c,i,n; int num; clock_t start,end; srand(time(NULL)); printf("暗算トレーニング開始!!\n"); start=clock(); for(i=0;i<10;i++) { a=10+rand()%90; b=10+rand()%90; c=10+rand()%90; n=rand()%17; printf("%d%*s+%*s%d%*s+%*s%d:",a,n,"",n,"",b,n,"",n,"",c); do{ scanf("%d",&num); if(num==a+b+c) { break; } printf("\a違います。再入力してください。\n"); }while(1); } end=clock(); printf("%.1f秒かかりました。\n",(double)(end-start)/CLOCKS_PER_SEC); return 0; }

  • 重複しない乱数発生

    初めて投稿させて頂きます。 サイコロを振って、一度出た目はもう出ないような ゲームをプログラミングしています。 Dim i As Integer Dim j As Integer Dim t As Integer Dim r(6) As Integer 'コンピュータ Dim b As Integer 'プレイヤー Private Sub Command1_Click() b = Val(Text2.Text) Randomize r(6) = Int(Rnd * 6 + 1) '1~6までの乱数発生 Text1.Text = r(6) For i = 1 To n r(i) = i 'r(i)~r(n)に1~nの値を格納 Next i For i = n To 2 Step -1 j = Int((i - 1) * Rnd() + 1) '1~i-1の範囲の乱数 t = r(i): r(i) = r(j): r(j) = t 'r(i)とr(j)の交換 Next i For i = 1 To n Text1.Text = r(i) Next i If r(i) < j Then Label2.Caption = "あなたの勝ちです" Else Label2.Caption = "あなたの負けです" End If 幾つか考えてこれで落ち着いたのですが、これでは まだ重複してしまいます。 どこが問題なのかご指摘頂けるようお願いします。 一度出た目は出ないようにするので、全部で6回試行 することになります。またその6回分の結果を表示したいのですが、 Text3.Text = r(1) Text4.Text = r(2) Text5.Text = r(3) Text6.Text = r(4) Text7.Text = r(5) Text8.Text = r(6) としてしまうと全てに0が表示され、結果が表示されません。 これについても回答をお願いします。 まだ初心者ですが、よろしくお願いします。

  • VB2008 同じ文字型変数を列挙するには

    VB2008 同じ文字型変数を列挙するには よろしくお願いします。 例えば dim i as integer として、 その後も式を作るのに i+i としようが i*5 でも i*iやi^1でも 自由に書けますよね。 でも dim s as stringer(例えば="○"と続けて、) とした場合、 s+s→○○ はできますが、 s*2→○○はできませんよね? でも、○○○○○○ とか同じ文字を羅列することってありますよね。 それが複数行続き、かつ、文字数が各行違う場合、 各行ごとにfor文を書くんでしょうか(←そもそもこれが合っているかも分かりませんが) 正直申し上げて、わたしが欲しいのは label1.text=s*5 に相当するような公式なのですが… よろしくお願いします。

  • FlashとJSPの連携

     FlashをJSPに埋め込んで、お互いにやり取りするページを作成しています。 HTMLのタグであるEMBEDで、とりあえずFlashに送ることはできたのですが、EMBEDは送信と同時にFlashを表示してしまいます。 そのため2回以上使用するとFlashが重複して表示されてしまいます。これだと配列が送れません。(可能なら For文でループさせて送れるようにしたい)またFlashからJSPにデータを送る方法もわからないのです。 どなたか教えていただけないでしょうか。

  • Visual Basic6.0を使用しています。

    Visual Basic6.0を使用しています。 質問なのですが、テキストラベル100個で、10*10の表を作りました。 その100個のラベルの一つ一つに3ケタ乱数を入れたいと思って、For文を使用したのですが、 エラーが出てしまいます。 For k = 5 To 104 Label(k).Caption = Int((999 - 100 + 1) * Rnd + 100) Next k ⇒このように作ったのですが、Label(k)のところをどのようにしたらいいかわからなくて困ってます。 文がわかりにくくて申し訳ないのですが、どなたかわかる方いらっしゃいましたらよろしくお願いします! LabelをFor文で回すこと自体できないのでしょうか? ちなみにFor文で回さずに一つ一つの表に乱数を入れるのは成功します。

  • FLASHのループ

    こんにちわFLASH超初心者です すごい基本的なことだと思うのですが書籍、ネットで答えが見つからずご質問させていただきます 作り終えたFLASHを表示側でループさせないようにするにはどうすればよいのですか? パブリッシュ設定でループ再生のチェックをはずしてもブラウザでみるとループしています 作成時点でなにか「終了フレーム」みたいなものがあるのでしょうか??まったく検討がつきません またブラウザでループ再生のメニューが表示されなくする方法はあるのでしょうか? よろしくお願いいたします

  • C言語に詳しい方お願いします。break文によってループをどのように脱出できるのか等。

    質問1.自分で簡単なプログラムを作ってみて簡単な実験をしてみたのですが,break;を使うとループをすべて抜けるのではなくいくつかループがある場合『一番内側のループを抜ける』ということでいいのでしょうか? 例えば do { }while() while(){ } for(i=0;i<N;i++) のループにはすべてbreak;は通じるのでしょうか?この他にbreak;が使えるループはありますか? 2.これも自分で試しに実験してみたのですが, #define R (double)rand()/32767.0 としておいて 例えば, a=sin(R); b=a; のように使用した場合, a=sin(R)の部分では乱数が新たな値に更新されるが, b=aの部分では乱数が新たな値に更新されない感じがします。 結論:Rが見える形で含まれていれば乱数の値は更新され,Rが見えない形で含まれていると乱数の値は更新されない。 ってことでしょうか? これは#defineの部分に何か秘密があるような気がします。詳しい方回答よろしくお願いします。

  • Flashのfor文で変数名を・・・

    Flashでfor文を使い、変数に値をいれたいと考えています。 kotae1,kotae2,kotae3・・・kotae10という名前の変数に 数字の順に答えを格納していきたいのですが、 iを使って表現するにはどのようにすればいいのでしょうか。 for(var i = 0; i < 10; i++){ 「   」= i * 10; } 「 」のところです。 よろしくお願いします!

    • ベストアンサー
    • Flash
  • 2つの乱数列の生成について

    C言語でプログラミングをしています. 質問ですが,以下のような2つのプログラムがあったとします. /*プログラム1*/ for(i=0;i<=100;i++){ r = rand(); /* 乱数rを用いた操作を実行 */ } /*プログラム2*/ for(i=0;i<=100;i++){ r = rand(); /* 乱数rを用いた操作を実行 */ for(j=0;j<=10;i++){ s = rand(); /* 乱数sを用いた操作を実行 */ } } 上記の2つのプログラムにおいてiの値が同じ時にrの値を同じにしたいのです. 2つの種から同時に別の乱数列を発生できるなら容易に実現できるとは思うんですが,そのような方法はあるのでしょうか. また,別の方法で実現することはできるのでしょうか. 分かる方がいらっしゃいましたら,ぜひ回答をお願いします.

  • ループの後にTrueになる不思議

    下記のコードを実行してみます。 Private Sub Command1_Click() ProgressBar1.Visible = True Label1.Visible = True ProgressBar1.Max = Val(Text1.Text) For i = 1 To Val(Text1.Text) Text1.Text = i ProgressBar1.Value = i Next i MsgBox "終了しました。" ProgressBar1.Visible = False Label1.Visible = False End Sub 「ProgressBar1」はループに入る前に「Visible = True」になります。 「Label1」はループ終了後に「Visible = True」になります。 「Text1.Text = i」はループ終了後に表示されます。 本来は、「Label1」はループに入る前に「Visible = True」にして、「Text1.Text = i」をループ中に表示させたいのですが、できません。 どこかコードが間違っているのでしょうか。

専門家に質問してみよう