ラベルを配列化させたタイピング
☆正解、不正解を表示
■フォームにラベルを2個貼り付ける。↓
■Label1をクリックしオブジェクトプロパティでオブジェクト名をlblmondaiと変更させる。↓
■同じようにLabel2のオブジェクト名をlblhanteiと変更させる。
■コードを書き込む。↓
'フォームを表示するとき
Private Sub Form_Load()
'乱数初期化
Randomize
lblmondai.Caption = "A"
End Sub
'フォーム上でキーが押された時
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'もしlblmondai.Captionと押したキーが同じとき
If lblmondai.Caption = Chr(KeyCode) Then
'lblmondai.CaptionにA~Zまでの乱数を代入する
lblmondai.Caption = Chr(Int(Rnd(1) * 26) + 65)
'正解を代入する
lblhantei.Caption = "正解"
'lblmondai.Captionと押したキーが違うとき
Else
'不正解を代入する
lblhantei.Caption = "不正解"
End If
End Sub
(解説)緑で書き込まれたコードはコメントで実行プログラムからは無視される。各コード説明はコメントに記入している。
■プログラムを実行する。↓
(解説)Pと表示されているにもかかわらず違うキーを押したので不正解と表示された。もちろんPと押すと正解と表示される。
☆正解数を表示させる。
■フォームに点数ラベルを貼り付けオブジェクト名をlbltensuu、Captionを0と変更する。↓
■コードを書き換える。↓
Private Sub Form_Load()
Randomize
lblmondai.Caption = "A"
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If lblmondai.Caption = Chr(KeyCode) Then
lblmondai.Caption = Chr(Int(Rnd(1) * 26) + 65)
lblhantei.Caption = "正解"
'lbltensuu(点数)に1プラスする。
lbltensuu.Caption = lbltensuu.Caption + 1
Else
lblhantei.Caption = "不正解"
End If
End Sub
■開始ボタンを押し実行させる。↓
(解説)正解数が22で表示されている。
∵ダウンロード file1.zip
☆問題ラベル(lblmondai)を配列化させる
■lblmondaiをクリックし一文字サイズに小さくする。↓
■lblmondaiを右クリックしてコピー、貼り付けする。すると、既に同じ名前のコントロール’lblmondai’があります。コントロール配列にしますか?と表示されるので「はい」をクリックする。↓
■コピーしたラベルを最初のラベルの右に移動させる。↓
■繰り返してコピー貼り付けしていき10個並べる。↓
(解説)これでラベルの配列化が行われた。
■それぞれのlblmondaiをクリックしオブジェクトプロパティのオブジェクト名とindexを確認する。↓
(解説)オブジェクト名は同じlblmondaiだがIndexが0~9までの数字となっているはず。それぞれのラベルはindexで区別する
(解説)オブジェクトプロパティの配置が違うのは項目別で見ているため。
■lblmondaiラベルのIndexを右から0~9の順番に配置する。
0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ←Index
■コードを書き換える。↓
Private Sub Form_Load()
Randomize
'For~Nextの間をi=0から+1づつしていき9になるまで繰り返す(計10回繰り返す)
For i = 0 To 9
'lblmondai(i).CaptionにA~Zまでの乱数を代入する
lblmondai(i).Caption = Chr(Int(Rnd(1) * 26) + 65)
Next i
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'もしlblmondai.Captionと押したキーが同じとき
If lblmondai(lbltensuu.Caption).Caption = Chr(KeyCode) Then
'lblmondai(番目)を非表示にする。Visibleは表示、非表示を設定するもの(表示はTrue)
lblmondai(lbltensuu.Caption).Visible = False
lblhantei.Caption = "正解"
lbltensuu.Caption = lbltensuu.Caption + 1
'lblmondai.Captionと押したキーが違うとき
Else
lblhantei.Caption = "不正解"
End If
End Sub
(解説)For~Nextでの決まった変数を必要としない繰り返しでは「i」や「j」などが一般的に使われる。
(解説)lblmondaiの配列化に伴いlblmondai(Index)のようにして各ラベルを指定する。例えばlblmondai(1)はlblmondaiのIndex=1のラベルを示している。
■開始ボタンを押し実行する。↓
(解説)正解した文字は消えていく。
∵ダウンロード file2.zip
☆打ち切り終えたら問題を再表示する。サブルーチンを使い行う。
■コードを書き換える。↓
Private Sub Form_Load()
Randomize
'prirndサブルーチンを呼び出す。呼び出すときはCall関数を使う。
Call prirnd
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'もしlblmondai.Captionと押したキーが同じとき
If lblmondai(lbltensuu.Caption).Caption = Chr(KeyCode) Then
'lblmondai(番目)を非表示にする。
lblmondai(lbltensuu.Caption).Visible = False
lblhantei.Caption = "正解"
lbltensuu.Caption = lbltensuu.Caption + 1
'点数が10になったときprirndサブルーチンを呼び出す
If lbltensuu.Caption = 10 Then Call prirnd
'lblmondai.Captionと押したキーが違うとき
Else
lblhantei.Caption = "不正解"
End If
End Sub
'サブルーチン名前がprirnd←自由な名前でOK
Private Sub prirnd()
'For~Nextの間をi=0から+1づつしていき9になるまで繰り返す(計10回繰り返す)
For i = 0 To 9
'lblmondai.CaptionにA~Zまでの乱数を代入する
lblmondai(i).Caption = Chr(Int(Rnd(1) * 26) + 65)
'lblmondai(i)を表示する
lblmondai(i).Visible = True
'点数を0にする
lbltensuu = 0
Next i
End Sub
(解説)prirndサブルーチンは自分で作ったサブルーチンなので名前は何でもOK。4行目、14行目、21行目のprirndの名前を変えても実行できる。
■開始ボタンを押し実行する。
(解説)10個押し終わると、再表示される。
∵ダウンロード file3.zip
☆配列を200まで増やす
■フォーム上のラベルのサイズを小さくしlblmondaiを200個ほどコピー貼り付けで作成する。左上のIndexを1、右上を19、次の段の左を20として、最後は199。↓
(解説)オブジェクトプロパティでIndexがきちんと順になっているか確かめられる。
■コードを書き換える。↓
Private Sub Form_Load()
Randomize
'prirndサブルーチンを呼び出す。呼び出すときはCall関数を使う。
Call prirnd
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'もしlblmondai.Captionと押したキーが同じとき
If lblmondai(lbltensuu.Caption).Caption = Chr(KeyCode) Then
'lblmondai(番目)を非表示にする。
lblmondai(lbltensuu.Caption).Visible = False
lblhantei.Caption = "正解"
lbltensuu.Caption = lbltensuu.Caption + 1
'lblmondai.Captionと押したキーが違うとき
Else
lblhantei.Caption = "不正解"
End If
End Sub
'サブルーチン名前がprirnd←自由な名前でOK
Private Sub prirnd()
'For~Nextの間をi=0から+1づつしていき199になるまで繰り返す(計200回繰り返す)
For i = 0 To 199
'lblmondai.CaptionにA~Zまでの乱数を代入する
lblmondai(i).Caption = Chr(Int(Rnd(1) * 26) + 65)
'lblmondai(i)を表示する
lblmondai(i).Visible = True
'点数を0にする
lbltensuu = 0
Next i
End Sub
(解説)prirndサブルーチンはForm_Loadでしか呼び出されていないが英単語をラベルに割り当てるコードとしてサブルーチンで区切ったほうが分かりやすい。
■開始ボタンを押し実行する。↓
∵ダウンロード file4.zip
☆固定英単語をタイピングする
■コードを書き換える。↓
'配列化した変数を(0~9)まで10個宣言する。As Stringとは変数wordに入れる物が文字限定であることを示す。
Dim word(9) As String
Private Sub Form_Load()
Randomize
Call prirnd
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'もしラベルに"_"が表示されているとき、スペースを押したとき正解となるようにする。スペースのKeyCodeは32
If lblmondai(lbltensuu.Caption).Caption = "_" And KeyCode
= 32 Then
'priseikaiサブルーチンを呼び出す。
Call priseikai
Else
'prifuseikaiサブルーチンを呼び出す。
Call prifuseikai
End If
'正解のとき
If lblmondai(lbltensuu.Caption).Caption = Chr(KeyCode) Then
'priseikaiサブルーチンを呼び出す。
Call priseikai
'不正解のとき
Else
'prifuseikaiサブルーチンを呼び出す。
Call prifuseikai
End If
End Sub
'ワードをラベルに配置する
Private Sub prirnd()
'配列化した変数にワードを入れる
word(0) = "EVERY"
word(1) = "HELLO"
word(2) = "CHOOCE"
word(3) = "BASIC"
word(4) = "BANK"
word(5) = "TRY"
word(6) = "STUDY"
word(7) = "BLACK"
word(8) = "LIVE"
word(9) = "PLAY"
'wordsにランダムに選んだwordを繋げながら入れる。単語の最後に"_"を入れる
For i = 0 To 70
words = words + word(Int(Rnd(1) * 10)) + "_"
Next i
'For~Nextの間をi=0から+1づつしていき199になるまで繰り返す(計200回繰り返す)
For i = 0 To 199
'lblmondai.Captionにwordsの先頭から(i+1番目)の文字を1文字入れる。
lblmondai(i).Caption = Mid(words, i + 1, 1)
'lblmondai(i)を表示する
lblmondai(i).Visible = True
'点数を0にする
lbltensuu = 0
Next i
End Sub
■開始ボタンを押し実行する。↓
(解説) 画面上の"_"はスペースキーで入力できる。コードの9行目で処理している。
∵ダウンロード file5.zip