エラー処理を作る つづき |
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
でも、どうして
表示されて無い
アイテムが
使えちゃったの? |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
どうしてー? |
|
何でも
受け入れ
ちゃうの。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
アイテムが表示されて
いないから、見た目では
選択できないように見える。
でも、
入力チェックをしてない
からね。番号は何番でも
入力できちゃうんだよ。
結果処理モードは
番号が入ってきたら
何でも処理をしちゃうよ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
キー入力値のチェックと入力値の制限 |
|
1、対象画面 |
 |
実行結果(出力ウィンドウ) |
|
「鍵」を持っていない場合は選択肢に表示されないため、
「鍵」は使えないように見える。しかし、実際には任意の番号の入力が可能。
例:
表示されていない「鍵」(TAR_USE_ITEM_KEY = 4 )を入力する。 |
|
|
処理のコード(対象処理モード 使う表示処理) |
・・・ |
|
|
|
509 |
|
/** |
|
510 |
|
* 対象処理モード 使う表示処理 |
|
511 |
|
*/ |
|
512 |
|
private static void
selectUse() { |
|
513 |
|
//全部の部屋共通の表示 |
|
514 |
|
System.out.println("何を使う?"); |
|
515 |
|
|
|
516 |
|
//暗証番号表示 |
|
517 |
|
System.out.println(TAR_USE_ITEM_CODE_5963 +
":金庫の暗証番号:5963"); |
|
518 |
|
System.out.println(TAR_USE_ITEM_CODE_3156 +
":金庫の暗証番号:3156"); |
|
519 |
|
System.out.println(TAR_USE_ITEM_CODE_3150 +
":金庫の暗証番号:3150"); |
|
520 |
|
|
|
521 |
|
//アイテムの取得有無 |
|
522 |
|
//金庫の鍵 |
|
523 |
|
if (itemKeyFlg) { |
trueの
アイテムしか
表示させない |
524 |
|
System.out.println(TAR_USE_ITEM_KEY +
":金庫の鍵"); |
|
525 |
|
} |
|
526 |
|
//爆弾 |
|
527 |
|
if (itemBomFlg) { |
|
528 |
|
System.out.println(TAR_USE_ITEM_BOM +
":爆弾"); |
|
529 |
|
} |
|
530 |
|
|
|
531 |
|
} |
|
・・・ |
|
|
|
|
持っていない場合(フラグがfalse)、対象コマンドを表示しないように処理している。 |
|
|
|
 |
|
2、結果画面(4が入力された場合の画面) |
 |
実行結果(出力ウィンドウ) |
|
結果処理モードには、不正な入力値に対するチェック処理が無い。
そのため、持っていないアイテム番号が入力されても使えてしまう。
不正な値をはじく必要がある。
例:
対象画面で、「鍵」(TAR_USE_ITEM_KEY = 4
)を表示していないので、
入力されないと思っていた。しかし入力された。
この場合、結果処理モードには不正チェックが無いので、「鍵」を持っていなくても処理が実行されてしまう。
4が入ってきた場合は無効にする処理が必要。 |
|
|
処理のコード(結果処理モード関数の一部) |
・・・ |
|
|
|
395 |
|
//*************** |
|
396 |
|
//もし寝室なら |
|
397 |
|
}
else if (nowRoomNum ==
TAR_ROOM_BED) { |
|
398 |
|
//行動コマンド選択別処理:保存しておいた値を使用 |
|
399 |
|
//もし移動なら |
|
400 |
|
if (keepActNum ==
ACT_MOVE) { |
|
~ |
|
|
|
403 |
|
//もし見るなら |
|
404 |
|
}
else if (keepActNum ==
ACT_LOOK) { |
|
~ |
|
|
|
437 |
|
//もし使うなら |
|
438 |
|
}
else if (keepActNum ==
ACT_USE) { |
|
439 |
|
//アイテム処理 |
|
~ |
|
|
|
472 |
|
//鍵 |
|
473 |
|
}
else if (inputNum ==
TAR_USE_ITEM_KEY) { |
チェックが無い |
474 |
|
System.out.println("U-10:金庫の鍵はこれでOKです。"); |
4が来れば
必ず実行される |
475 |
|
|
|
476 |
|
//爆弾 |
|
477 |
|
}
else if (inputNum ==
TAR_USE_ITEM_BOM) { |
|
478 |
|
System.out.println("U-11:ベッドを壊さないで下さい。"); |
|
479 |
|
} |
|
480 |
|
} |
|
481 |
|
} |
|
・・・ |
|
|
|
|
番号を入力すれば持っていないアイテムでも使えてしまう。
不正な値をチェックして無効にする処理が無い。 |
|
|
|
|
※ |
キー入力処理で、数値の0~5以外の値は入力できないように制限されている。
ただし、どのモードでも0~5の入力は常に可能。 |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
そこで必要なのが
エラー処理だ。
不正な値や想定外の値が
入ってきた場合でも
ちゃんとプログラムが
動くように、値をチェックして
対応する処理を作っておく
必要があるんだよ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
なるほど。
エラー処理で、
プログラムがおかしな
動作をするのを防ぐんだ。
自分で作らないとだめ
なんだね。
クイズゲームの時は
なぽちゃんがやって
くれてたんだっけ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
そうそう
クイズの時も
ちょっとやったね。 |
 |
|
 |
うーん
いろいろ
考えないと。 |
|
|
|
しょぼーん |
うーん・・・
ちゃんとできて
なかったのかな・・・
ごめんね・・・
|
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
でも、
バグがあったなんて・・・。
あたし、なぽちゃんに
教えてもらった通りに、
しっかりテストしたつもり
だったのに・・・。
うーん。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
いや、
おまえはちゃんと
やってるよ。
俺が言った事を
できてるってば。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
落ち込まないで。 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
ことが今までテストしてきたのは
プログラムの通常の動作のテスト。
つまり、
「正常系」のテストなんだ。
それ以外にも想定外の動作の
「異常系」のテストとか、
いろいろなテストをしないと
バグはなかなか見つけられない
んだよ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
部屋をいろいろ
移動したりとか
アイテムを使ったりとか・・・
あたしは、
正常系のテストしか
してなかったんだ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
「正常系」
「異常系」には、
いろいろな
定義がある
みたいだけど。
参考までね。 |
 |
|
 |
うーん
難しい。。。 |
|
|
|
 |
|
 |
|
|
テストの種類 |
|
正常系 |
仕様に基づいた通常の動作テスト |
異常系 |
不正な値の入力など想定外の動作テスト |
|
|
|
|
|
 |
|
 |
|
|
おまえは
よくやってるよ。
ほんと。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
でも、今はそれでOK。
テストのことについては
また別の機会にやる
からね。
今は気にしないで。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
はいっ!
まだまだ
勉強しないとね!
がんばるぞ! |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
ありがと! |
|
|
はあ~
休憩したばかり
なのに、もう
お疲れさんだわあ。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
さあ、
じゃあエラー処理は
これでおしまい。
今回は参考までね。
次は、いよいよ
最後のシナリオを・・・ |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
えっ!?
だめ!!
ちゃんとエラー処理
作ろう!
おかしくなったら
遊んでる人が困るでしょ! |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
ちゃんと
作ろう! |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
遊んでる人って・・・。
別に俺達だけなんだから
変なの打たなきゃ
いいだけだし。
作るの結構大変だからさ。
今回は練習ってことで・・・
だめ? |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
ねっ。
次は作るっ
てことで。 |
|
お願い!!
ちゃんと作りたい!
|
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
だめ!!
なぽちゃん、
エラー処理は重要って
言ってたでしょ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
ううー・・・
重要って言ったけど・・・。
しょうがない!
エラー処理を作ろう。
少し難しいけど覚悟しろよ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
この娘、
頑固だわあ。
誰に似た
のかしら。 |
 |
|
 |
やったあー
ありがとー |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
ただし、
今回もエラー処理に
ついては簡単な対応
にするよ。
詳しくは別の機会に
やるからね。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
簡単なのでも
取り合えず
大丈夫だからね。
ねっ。 |
|
大丈夫
なんだね。
|
 |
|
|
|
エラーの対応って
きちんとやると
大変なの。
今回の目的から
はずれちゃう
からね。
とっても大事
なんだけどね。 |
 |
|
 |
大事だよね。
でもなんで
小声なの? |
|
|