文字をスクロールさせたタイピング

☆文字列操作を覚える
■フォームにラベルを1つ貼り付ける。↓


■フォーム上でマウスをダブルクリックしコードを表示する。

■コードを書き換える。↓
Dim moji As String
Private Sub Form_Load()
   
'Label1.Captionに"ABCDE"を代入する
   Label1.Caption = "ABCDE"
End Sub


(解説)緑字はコメントで実行プログラムでは無視される。よって書いても書かなくても良い。これから各行の説明はその行の上にコメントとして書く。

■開始ボタンを押してプログラムを実行する。↓


(解説)Label1.CaptionにABCDEが代入された。

■コードを書き換える。↓
'変数mojiを宣言する。As の後のStringとは文字専用ということを意味している
Dim moji As String
Private Sub Form_Load()
   
'変数mojiに"ABCDE"を代入
   moji = "ABCDE"
   
'変数mojiの左から1番目の文字を1文字抜き出し、Label1.Captionに代入
   Label1.Caption = Mid(moji, 1, 1)
End Sub


(解説)3行目と5行目の変数mojiは自分で決めた名前なので他の名前でも結果は同じ。名前を変えて確かめよう
(解説)下から2番目のコードに注目。Midとは文字列操作の関数。

■開始ボタンを押しプログラムを実行する。↓


(解説)変数mojiの”ABCDE”の左から1番目の文字を1文字取り出した

■復習してみる。↓
下から2行目を
Label1.Caption=Mid(moji, 2, 3)に変えてみると、結果はBCDと表示される。

(解説)変数mojiの右から2番目から3文字抜き出しLabel1.Captionに代入された。

■コードを書き換える。↓
'プログラムの外で宣言することによってどこからでも参照できる。
Dim qmoji As String
Private Sub Form_Load()
   '変数qmojiに"ABCDE"を代入
   qmoji = "ABCDE"
   Label1.Caption = qmoji
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   '押したキーを表示
   Label2.Caption = Chr(KeyCode)
   '次に打つべき文字を変数nexttypeに代入(ここではAが代入)
   nexttype = Mid(qmoji, 1, 1)
   'もし打った文字と打つべき文字が同じとき
   If Chr(KeyCode) = nexttype Then
      '正解を表示
      Label2.Caption = "正解"
   End If
End Sub


■開始ボタンを押しプログラムを実行する。↓


(解説)Aを押すと正解と表示される。その他を押すとそのキーが表示される。図はAを押したところ。

■コードを書き換える。↓
'プログラムの外で宣言することによってどこからでも参照できる
Dim qmoji As String
Dim amoji As String
'Integerとは整数系ということを示す
Dim bangou As Integer
Private Sub Form_Load()
   qmoji = "ABCDE"
   Label1.Caption = qmoji
   
'次に打つ文字が変数qmojiの右から何番目かを変数bangouに代入。最初は1番目なので1を代入
   bangou = 1
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   
'変数qmojiのbangou番目を1文字抜き出し代入
   nexttype = Mid(qmoji, bangou, 1)
   
'もし打った文字と打つべき文字が同じとき
   If Chr(KeyCode) = nexttype Then
      
'変数amojiに打ったキーを付け足してく
      amoji = amoji + Chr(KeyCode)
      
'変数amojiを表示
      Label2.Caption = amoji
      
'変数bangouに1を足す
      bangou = bangou + 1
   End If
End Sub


(解説)qmojiとは今から打つ文字列でamojiとは打った文字を入れます。ここで使われている変数はqmoji,amoji,bangou,nexttype,です。これらは全て名前を変えても良い。

■開始ボタンを押しプログラムを実行する。↓


(解説)打った文字が正解なら下に表示される。図ではABCと打ったところ。

∵ダウンロード file1.zip

☆打ち終ったらランダムに単語を入れ替える
■コードを書き換える。↓
'どこからでも参照できるように必要な変数を宣言させる
Dim qmoji As String
Dim amoji As String
Dim bangou As Integer
Dim qmoji1 As String
Dim qmoji2 As String
Dim nexttype As String
Private Sub Form_Load()
   '乱数初期化
   Randomize
   qmoji1 = "ABCDE"
   qmoji2 = "FGHIJ"
   '初期化を呼び出す
   Call prinew
   'ワードをランダムに選ぶ
   Call prirnd
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   '変数qmojiのbangou番目を1文字抜き出し代入
   nexttype = Mid(qmoji, bangou, 1)
   'もし打った文字と打つべき文字が同じとき
   If Chr(KeyCode) = nexttype Then
      '正解サブルーチンを呼び出す(自分定義のサブルーチン、名前はなんでもOK)
      Call priseikai
   End If
End Sub
'初期化
Private Sub prinew()
   bangou = 1
   Label2.Caption = ""
   amoji = ""
End Sub
'ワードをランダムに代入
Private Sub prirnd()
   '乱数1と2を発生させ1なら変数qmojiに変数qmoji1を代入し、2なら変数qmoji2を代入
   If (Int(Rnd(1) * 2) + 1) = 1 Then qmoji = qmoji1 Else qmoji = qmoji2
      Label1.Caption = qmoji
   End Sub
   '正解サブルーチン(正解の時はここを呼び出す)
   Private Sub priseikai()
   
'変数amojiに打ったキーを付け足していく
   amoji = amoji + nexttype
   '変数amojiを表示
   Label2.Caption = amoji
   '変数bangouに1を足す
   bangou = bangou + 1
   'もし打ち終わったら
   If bangou = 6 Then
      '初期化を呼び出す
      Call prinew
      'ワードをランダムに選ぶ
      Call prirnd
   End If
End Sub


■開始ボタンを押しプログラムを実行する。

(解説)打ち終わったらランダムに「ABCDE」と「FGHIJ」が表示される。

∵ダウンロード file2.zip

☆変数を配列変数に変える
■コードを書き換える。
'配列変数を宣言。qmoji(0)からqmoji(3)までの4つの変数を使用可能になる
Dim qmoji(3) As String
Dim amoji As String
Dim bangou As Integer
Dim nexttype As String
'乱数を入れる変数を宣言
Dim ransuu As Integer
Private Sub Form_Load()
   '乱数初期化
   Randomize
   '配列変数に文字を代入
   qmoji(0) = "TIGERS"
   qmoji(1) = "HELL"
   qmoji(2) = "CUP"
   qmoji(3) = "NIGHT"
   '初期化を呼び出す
   Call prinew
   'ワードをランダムに選ぶ
   Call prirnd
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   '配列変数qmojiのbangou番目を1文字抜き出し代入。変数ransuuには0~3までの乱数が入っている。
   nexttype = Mid(qmoji(ransuu), bangou, 1)
   'もし打った文字と打つべき文字が同じとき
   If Chr(KeyCode) = nexttype Then
      '正解サブルーチンを呼び出す(自分定義のサブルーチン、名前はなんでもOK)
      Call priseikai
   End If
End Sub

'初期化サブルーチン
Private Sub prinew()
   bangou = 1
   Label2.Caption = ""
   amoji = ""
End Sub

'ワードをランダムに代入
Private Sub prirnd()
   ransuu = Int(Rnd(1) * 4)
   Label1.Caption = qmoji(ransuu)
End Sub

'正解サブルーチン(正解の時はここを呼び出す)
Private Sub priseikai()
   '変数amojiに打ったキーを付け足していく
   amoji = amoji + nexttype
   '変数amojiを表示
   Label2.Caption = amoji
   '変数bangouに1を足す
   bangou = bangou + 1
   
'もし打ち終わったら(配列変数qmojiの文字の長さを超えたとき。Lenは文字の長さを示す。Len("HELLO")なら5
   If bangou = Len(qmoji(ransuu)) + 1 Then
      '初期化を呼び出す
      Call prinew
      'ワードをランダムに選ぶ
      Call prirnd
   End If
End Sub


(解説)2、12、23行目の配列変数に注目。計算などはサブルーチンに移動させForm_LoadやForm_KeyDownなどには出来るだけCallで呼び出すようにする。
(解説)下から7行目の関数Lenにも注
目。

■開始ボタンを押しプログラムを実行する。
(解説)プログラム結果は前回と変わらない。英単語(HELLOなど)が表示され、打ち終わると次の文字列が表示される

∵ダウンロード file3.zip

☆スクロール式のタイピングを作成

'配列変数を宣言。qmoji(0)からqmoji(3)までの4つの変数を使用可能になる
Dim qmoji(3) As String
Dim amoji As String
Dim bangou As Integer
Dim nexttype As String
'乱数を入れる変数を宣言
Dim ransuu As Integer
Private Sub Form_Load()
   
'乱数初期化
   Randomize
 
  '配列変数に文字を代入
   qmoji(0) = "TIGERS"
   qmoji(1) = "HELL"
   qmoji(2) = "CUP"
   qmoji(3) = "NIGHT"
  
 '初期化を呼び出す
   Call prinew
  
 'ワードをランダムに選ぶ
   Call prirnd
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'配列変数qmojiのbangou番目を1文字抜き出し代入。変数ransuuには0~3までの乱数が入っている。
   nexttype = Mid(qmoji(ransuu), bangou, 1)
  
 'もし打った文字と打つべき文字が同じとき
   If Chr(KeyCode) = nexttype Then
     
 '正解サブルーチンを呼び出す(自分定義のサブルーチン、名前はなんでもOK)
      Call priseikai
   End If
End Sub

'初期化サブルーチン
Private Sub prinew()
   bangou = 1
   Label2.Caption = ""
   amoji = ""
End Sub

'ワードをランダムに代入
Private Sub prirnd()
   ransuu = Int(Rnd(1) * 4)
   Label1.Caption = qmoji(ransuu)
End Sub

'正解サブルーチン(正解の時はここを呼び出す)
Private Sub priseikai()
   bangou = bangou + 1
  
 '配列変数qmojiの右から(bangou)番目の文字から最後の文字数まで抜き取る
   amoji = Mid(qmoji(ransuu), bangou, Len(qmoji(ransuu)) - (bangou - 1))
   Label2.Caption = amoji
  
 'もし打ち終わったら(配列変数qmojiの文字の長さを超えたとき、Lenは文字の長さを示す。Len("HELLO")なら5
   If bangou = Len(qmoji(ransuu)) + 1 Then
      
'初期化を呼び出す
      Call prinew
      
'ワードをランダムに選ぶ
      Call prirnd
   End If
End Sub


■開始ボタンを押しプログラムを実行する。


(解説)上がこれから打つ文字列で下がスクロールしている文字列。図では次に打つ文字は「E」

∵ダウンロード file4.zip