- ベストアンサー
VBを使ってのタイピングについて
今、卒業研究でVBを使ってのタイピングゲームソフトを作成してます。 5行の文字列をひとまとめにして連続してタイピングさせたい。 (1行目が終わったら2行目。2行目が終わったら3行目・・・5行目まで) そこでみなさんにお聞きしたいのですが、 配列を使ってのタイピングは可能なのでしょうか?? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
では簡単な例を説明してみます。 フォームのkeypressのイベントでどのキーが押されたかは分かります。 押された回数をカウントすれば基本的にタイプ数は分かります。 "例えば"は(tatoeba)で問題ないのですが"ふ"の場合(hu/fu)でもいいですし"だった"は(datta/daltuta/daxtuta)でもいいのですよね。これがローマ字入力の判定の難しさだと思います。 "例えば"のチェックルーチン(めっちゃいい加減版)エンターキーは不要と判断しました。 なお、bが文字を打った回数。cが文字数という事で参考にして下さい。 Dim wk(5) As String Dim a As Integer Dim b As Integer Dim c As Integer Private Sub Form_KeyPress(KeyAscii As Integer) Dim chk As String chk = LCase(Chr(KeyAscii)) If Mid(wk(0), a, 1) = chk Then a = a + 1 End If b = b + 1 If a > c Then MsgBox "ok" End If End Sub Private Sub Form_Load() wk(0) = "tatoeba" a = 1 b = 0 c = Len(wk(0)) End Sub
その他の回答 (2)
- TAGOSAKU7
- ベストアンサー率65% (276/422)
質問の意味をいまいち理解してませんが・・・ 判定を行うタイミングが、このソフトの鍵となると思います。 複数行あろうとなかろうと一緒です。 複数行ある文章もようは改行コード(定数:vbCrlf)を含んだ一行と置き換えることができます。 簡単な比較ロジックは 1.テキストボックスのChangeイベントを認識 2.入力文字と入力文字数を得る 3.正解例の頭からその文字数文を得る 4.それらを比較 です。 しかし、文章の入力を終えてからの判定は並大抵ではありません。 一度判定ロジックを組んだ経験があるのですが、結局かなりの駄作になってしまいました。 例えば、余計な文字が1文字入ったら、どうするのかというだけで様々なパターンが想像つきます。 それ以外に2行目と3行目が入れ違いになっていた場合にも、複数の処理に分かれます。 これらを全て兼ね備えたプログラムは、人工知能開発ぐらいのレベルになると思います。。。 ですので、あまり入力し終えてからの判定はお奨めできません。 一度、市販されてるタイピングソフトではなく、フリーでダウンロードできるタイピングのソフトを見て研究してみては? はずしてたなら、ごめんなさい。
お礼
回答ありがとうございます。 私たちが作成しようとしているソフトは下記のyanmaaさんのお礼に記した通りです。 判定のタイミングとしてはローマ字、1文字ずつ判定させるつもりでいます。 表示は1行をローマ字で表示させて、先頭から順にタイピングです。 一致していればその文字が消え、次の文字のタイプという感じです。 その際、1行終わるまでにタイプした数と誤った入力をカウントさせたいのです。 とりあえず、教えていただいたURLでDLしてみて研究してみます。 また、よろしくお願いします。
- yanmaa
- ベストアンサー率45% (207/457)
プログラムを作るのが卒業研究なら基本的なプログラミング技能を有していると判断します。 例えば そこで みなさんに お聞き したいのですが というタイピングを出題するとして どのようにキータイプさせ、どのような判定を下すのでしょうか? OKなら次の行、違うなら元の行ですね。 後は自分で考えて何処までやって何処が分からないのか説明してからにしてね。
お礼
回答をありがとうございます。 yanmaaさんの言われるプログラム技能は有しています。 私たちが作っているタイピングプログラムは 例えば そこで みなさんに お聞き したいのですが の5行で例えると 1.『例えば』を日本語表示とローマ字表示する。 例 例えば tatoeba 2.「t」からタイプ開始 → Enterキーを押すと1行終了 その際、先頭の文字とキーボードからタイピングした文字が同じなら同時にローマ字を一文字ずつ消していく。 なおかつ、Enterキーを押すまでに「タイプした数」と「誤った数」をカウントする。 3.これを5回繰り返す。 というのを考えています。 こういうプログラムをVBで作成するのは可能でしょうか?
お礼
さっそくありがとうございます。 しかもプログラム付で・・・。 プログラムはある程度は理解しているものの 初めてみる関数ばかりで、苦戦中です。 しばらくこの参考プログラムを先生に聞いて理解してみます。 また、新たに質問させてもらうと思いますが その時はよろしくお願いします。