DOBON.NETプログラミング道掲示板
(現在 過去ログ4 を表示中)
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
[
最新記事及び返信フォームをトピックトップへ
]
[ トピック内全4記事(1-4 表示) ] <<
0
>>
■34454
/ inTopicNo.1)
C#コンソールアプリでタイピング練習ソフト作成
▼
■
□投稿者/ yulico mexicali
一般人(1回)-(2020/04/06(Mon) 14:58:50)
環境/言語:[windows7 sp1 32bit .NET Framework 4.5]
分類:[.NET]
C#のコンソールアプリでタイピング練習ソフトを作成しています。
概要としては、
---------------------------------------
english
↓
---------------------------------------
この様に、横座標ランダムで表示された文字列が、再下段に到着するまでにタイピングを完成させる、というようなものを作成中です。
問題点は、文字列は一定間隔で1行ずつ落ちていきますが、そのループ中にキー入力をどうすれば良いのかが解りません。
一応、自分なりに調べて試行錯誤しているソールを載せます。
環境:Windows7 sp1、Visual Studio 2019 Community
int s = Environment.TickCount;
Random rnd = new Random(s++);
int r = rnd.Next(60);
int c = rnd.Next(5);
string[] word = new string[] { "english", "franch", "spanish" };
for (int l = 2; l < 22; l++) {
if (Console.KeyAvailable) {
for (int i = 0; i < word[c].Length; i++) {
if (word[c].Substring(i, 1) != "*") {
if (Console.ReadKey(true).Key.ToString() == word[c].Substring(i, 1).ToUpper()) {
word[c] = word[c].Substring(0, i) + "*" + word[c].Substring(i + 1, word[c].Length - (i + 1));
}
}
}
}
if (l > 2) {
Console.SetCursorPosition(0, l - 1);
Console.Write(new string(' ', 80));
}
Console.SetCursorPosition(r, l);
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(word[c]);
Console.ForegroundColor = ConsoleColor.Gray;
System.Threading.Thread.Sleep(500);
}
文字を入力し始めると、一旦とまり、最後まで正しく文字列を入力すると、全ての文字が*になり、そのまま落ちていきます。
やりたい事は、止まらずに、文字列の左から、正解したらリアルタイムに*に変わっていく処理です。
よい方法はないでしょうか・・・
引用返信
削除キー/
編集
削除
■34455
/ inTopicNo.2)
Re[1]: C#コンソールアプリでタイピング練習ソフト作成
▲
▼
■
□投稿者/ Hongliang
大御所(577回)-(2020/04/06(Mon) 19:31:46)
Console.KeyAvailableを確認した後、word.Lengthのfor文内でConsole.ReadKeyしてますよね。
なのでここでキーがword.Length回入力されるまでReadKeyでブロックされます。
1. 次回1段進む目標時刻を算出しておく
2. KeyAvailableがtrueならReadKeyし、必要に応じ画面を更新する
2.1. すべての文字が入力されればゲームクリア
3. 現在時刻が目標時刻に達していなかったら2に戻る
4. 1段進めて、段数がオーバーしていなければ1に戻る
5. ゲームオーバー
こんな感じで考えてみてはどうでしょうか?
引用返信
削除キー/
編集
削除
■34456
/ inTopicNo.3)
Re[2]: C#コンソールアプリでタイピング練習ソフト作成
▲
▼
■
□投稿者/ yulico mexicali
一般人(2回)-(2020/04/07(Tue) 07:40:45)
ご回答ありがとうございます。
この方法でテストしてみます。
後ほど結果の報告しますので、まだこのスレは閉じません。
ありがとうございました。
引用返信
削除キー/
編集
削除
■34457
/ inTopicNo.4)
Re[2]: C#コンソールアプリでタイピング練習ソフト作成
▲
▼
■
□投稿者/ yulico mexicali
一般人(3回)-(2020/04/07(Tue) 08:22:50)
結果報告です。
> なのでここでキーがword.Length回入力されるまでReadKeyでブロックされます。
この文章をヒントに、とりあえずbreakしてみようと追加してみました。
一応、解決しました。
if (Console.ReadKey(true).Key.ToString() == word[c].Substring(i, 1).ToUpper()) {
word[c] = word[c].Substring(0, i) + "*" + word[c].Substring(i + 1, word[c].Length - (i + 1));
break; ←追加行
}
この度は、ご回答くださり、本当に助かりました。
ありがとうございました。
解決
済
み!
引用返信
削除キー/
編集
削除
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
過去ログには書き込み不可
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-