Visual C# 2019 入門
23.算数ドリルを作ろう その8
今回は [ 算数ドリルを作ろう その7 ] の続きです。
これから沢山のゲームを作りたいと思っているなら、ネタ帳を作るといいです。
面白い(楽しそう)と思ったことをネタ帳に書きましょう。
そして時々・・・
昔に書いたネタを読み返してみるのです。「あれ?面白くないぞ」と思ったなら、何を面白いと思って書いたものなのか考えてみましょう。
これは「面白さ」を客観的に考察する訓練になります。
ラジオボタンの名前を変更しよう
ラジオボタン(コントロール)の名前を変更します。
配置したラジオボタンは radioButton1 から radioButton5 までの名前が自動で付いています。
このままではプログラムするとき、どれだか分かりません。
区別しやすいように名前を変更しましょう。
足し算 RBtasu 、引き算 RBhiku
10 問 RB10、20 問 RB20、30 問 RB30
手順は目的のコントロールをクリックしてプロパティを開き、(name) の項目を変更していきます。
足し算から順番に作業しましょう。
ラジオボタンで出題数を変えてみよう
ラジオボタンの Checked プロパティを調べて、出題数を変更します。
出題数は、変数 mondaiMax の値を変更します。
次のようにメソッド StartBtn_Click を変更してください。
これで Checked プロパティが True のものに対し、if 文の中の処理が行われます。
出題数だけでグループ化されたラジオボタンは、かならず1つだけ True となるので3つの if 文のうち1つだけ実行されます。
それでは正常に動くかテストします。
しかし、このままテストすると最低でも 60 回の入力が必要です。
これでは大変なので、出題数を一桁ずつ減らしてテストします。
計6回の入力でテストできました。
正常に動いているのを確認したら、出題数を元に戻しておきましょう。
しかし、表示が崩れてますね。
正解数のあと改行コードが入っていないためバグってます。
メソッド Seiseki の中の表示に改行コードを追加します。
計算タイプを増やそう
足し算の他に、引き算の問題も作れるようにします。
変数 type は足し算か、引き算かを判別するために用意します。
変数 typeStr は、演算記号+と-の表示切り替えに使います。
開始ボタンが押されたときに呼ばれる StartBtn_Click の中で、
計算タイプを格納しています。
あとは問題の作成時に、足し算と引き算の切り替えをするだけです。
実行して、引き算を選択したとき正常に動くか確認しましょう。
マイナスが入力できない
引き算ができるようになりました。
ちゃんとテストしてみましたか?
バグ(不具合)がありましたね。
そうです。答えにマイナス記号(-)が入力できないのです。
数値およびバックスペースのみ受け付けていた処理に、マイナスも入力できるように変更します。
「マイナス記号ではないとき」という判断文を追加します。
(ややこしいですね)
実行して確認してみましょう。
これでマイナスも入力できます。
しかし、ここでまたも問題が発生しました。
マイナスを2つ以上入力するとエラーになります。
複数のマイナスを入力できないように変更します。
実行してみましょう。
マイナスは1つしか入力できないようになりました。
少し複雑になったので、マイナスを1つまでとする処理はこのまま覚えてもいいでしょう。
知りたい人のために説明すると
InBox.TextLength で入力された文字数を調べ、1回目のマイナスだけは入力を無効にしないようにしています。
if ( ! (e.KeyChar == ‘-’ && InBox.TextLength == 0) )
(入力された文字がマイナス、かつ、1回目の入力のとき)
このカッコに!をつけて否定してます。!を忘れないようにしてください。
注意が必要なのは、TextLength の値です。
1回目の入力では0、2回目の入力で1となります。
この動作は前に説明しました。気になる人は
次のページの KeyPress イベントのところを読み返してみましょう。
[ 17.算数ドリルを作ろう その2 ]
これで完成です。
と言いたい所ですが、実行してマイナスのみ入力して Enter キーを押してみて下さい。
エラーがでました。
空打ち問題( 何も入力しない )と似たエラーです。
マイナスだけ入力して確定すると、マイナスが文字列として判断されてエラーに
なるのです。
ここは空打ちのときと同じように
入力されたものがマイナスだけの時は除外するように変更します。
これで完成です。
40 行目が長くなってしまったので2行にしました。カッコの位置に注意してください。
入力処理は難しいですね。
もっと簡単にできる方法を知っている方は教えてください。
改造してプログラミングスキルを身に付けよう
お疲れさまでした。
簡単なサンプルのつもりだったのですが、説明に8ページも使ってしまいました。
次からは少しシンプルな説明にします。
さて、プログラミングは自分で考えることをしないと身に付きません。
ということで改造してみましょう。
本当は改造する内容も自分で考えたほうがいいのですが
とりあえず用意してみました・・・
・正解数だけでなく、正解率も表示する
・現在、何問目の問題なのか表示する
・開始から終了までのタイムを表示する
・プレイ中、開始ボタンをリセットボタンに変更する
・計算タイプに掛け算を追加する
などなど、挑戦してみましょう。