hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
小ワザ/タイピング/問題文と照合する - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

onkeyを利用したタイピング2

押したキーを調べる方法は押されたキーを調べるで紹介しました。
ここでは入力したキーが正しいか、問題文と照合する方法を紹介します。

サンプル

問題文は文字列型配列変数Questionに格納されています。
押すべきキーはQuestion(QNumber)の(Index+1)番目の文字、すなわちstrmid(Question(QNumber), Index, 1)となります。
押されたキーがこれと等しいかどうかを確認し、等しい場合は次の文字を次の押すべきキーとします。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
-
|
!
 
 
 
-
|
|
-
|
|
!
-
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#const Q_MAX 12                 // 出題する問題数
    onkey goto *Pressed
    title "Start!"
    font msgothic, 36
 
    Pushed = ""                 // 押されたキー(大文字)
    QNumber = 0                 // 出題されている問題の番号
    Index = 0                   // 今タイプすべき文字のインデックス
    sdim Question, 32, Q_MAX    // 出題する問題
    Question(0) = "RED", "GREEN", "BLUE", "YELLOW"
    Question(4) = "DOG", "CAT", "BIRD", "GIRAFFE"
    Question(8) = "HOTSOUP", "COMPUTER", "BYTE", "PROGRAM"
 
*Main
    if Pushed != "" : gosub *Check
    gosub *Draw
    stop
 
*Pressed
    if (('A'<=iparam)&(iparam<='Z'))|(('0'<=iparam)&(iparam<='9'))|(iparam=='-') {
        Pushed = strf("%c", iparam)
    } else {
        Pushed = ""
    }
    goto *Main
 
*Check
    if Pushed == strmid(question(QNumber), Index, 1) {
        title "Good!"
        Index++
        if Index == strlen(question(QNumber)) {
            QNumber = (QNumber + 1) \ Q_MAX
            Index = 0
        }
    } else {
        title "Miss!"
    }
    return
 
*Draw
    redraw 0
    color 255, 255, 255 : boxf
 
    pos 2, 2 : color 192, 192, 192
    mes Question(QNumber)
 
    pos 0, 0 : color 255
    mes strmid(Question(QNumber), 0, Index)
 
    pos ginfo_mesx*(Index > 0), 0  : color
    mes strmid(Question(QNumber), Index, strlen(question(QNumber)) - Index)
    redraw 1
 
    return
  • strmid()やstrf()で直接文字列を比較するのではなく、peek命令で文字コードを記憶する方法もあります。

コメント


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2009-02-20 (金) 00:15:04 (1752d)