エラー処理を作る つづき |
|
 |
|
 |
|
課題:エラー処理を作る |
|
・エラーメッセージの表示 |
・最初のモード(行動処理モード)に戻す |
|
|
|
|
 |
|
 |
|
|
|
できなくても
いいからね。
気楽にやろう。
って、
聞いてないね。 |
 |
|
 |
よーし、
ラストスパートだ!
全力でいくぞ! |
|
|
|
|
 |
|
|
|
|
 |
 |
 |
|
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
じゃあ、
エラー処理を作ろう。
これが終われば
プログラムは本当に
ほぼ完成と言えるね。
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
 |
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
これが出来れば
あとはシナリオ
をのせるだけだね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
今回のエラーの問題は、
キーボードから不正な値が
入力されるのが問題に
なってる。
だから、入力された値を
チェックをしよう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
チェックして
不正な値を使わない
ようにするんだね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
大変なの。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
実は、今回のゲームは
クイズゲームの時より
エラー処理が難しいんだ。
見るものや持ってる
アイテムの数が
常に変わるからね。
不正な番号をチェックするにも
番号が部屋や画面によって
減ったり増えたり変わるんだ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
なるほど。
クイズゲームは固定で
よかったんだね。
うーん。
どうやればいいのかな? |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
クイズゲームは
1~3だけで
よかったんだ。 |
|
|
|
 |
|
 |
|
|
エラー処理:クイズゲームとの違い |
|
クイズゲーム |
答えの選択肢の数は常に3つで固定。
入力される値は数字の1、2、3をチェックする
だけですんだ。それ以外の値は不正。 |
テキスト
アドベンチャー
ゲーム |
選択肢の数が、部屋や行動、アイテムの所持によって変化する。
単純に入力値チェックができない。 |
|
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
今回のエラー対応の仕方を
説明するよ。
まず、コマンド値「以外」の
異常な値が入ってきた時は、
制御文の「その他」で受けよう。
例えば、
100とか入ってきたら、そんな
コマンドないから「その他」になるね。
そして、
そのブロックでエラー処理をしよう。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
|
今回のエラー処理の方法 |
|
目的 |
外部から入力された値をチェックする。
(キーボードから入力された値)
|
対応 |
異常な値を、制御文の「その他」の分岐で受けて処理する。 |
|
|
※ |
キー入力処理で、数値の0~5以外の値は入力できないように制限されている。
文字に対するエラー処理は不要。 |
|
|
|
 |
|
 |
|
|
 |
|
 |
|
入力値のチェックの例 |
|
・・・ |
|
|
|
230 |
|
/** |
|
231 |
|
* 対象処理モード |
|
232 |
|
*/ |
|
233 |
|
private static void
execModeTarget() { |
|
234 |
|
//***** 入力された行動コマンドから対象コマンドを表示する ***** |
|
235 |
|
|
|
236 |
|
//対象コマンドの一覧を表示 |
|
237 |
|
System.out.println("---------------------------------------------"); |
|
238 |
|
|
|
239 |
|
//部屋ごとの処理 |
|
240 |
|
//*************** |
|
241 |
|
//もし入口なら |
|
242 |
|
if (nowRoomNum ==
TAR_ROOM_ENTRANCE) { |
|
243 |
|
//もし移動なら |
|
244 |
|
if (inputNum ==
ACT_MOVE) { |
|
245 |
|
selectMove();//対象モード 移動表示処理 |
|
246 |
|
|
|
247 |
|
//もし見るなら |
|
248 |
|
}
else if (inputNum ==
ACT_LOOK) { |
|
249 |
|
//全部の部屋共通の表示 |
|
250 |
|
System.out.println("何を見る?"); |
|
251 |
|
|
|
252 |
|
//対象コマンド表示(ドア) |
|
253 |
|
System.out.println(TAR_LOOK_ENTRANCE_DOOR +
":ドア"); |
|
254 |
|
|
|
255 |
|
//もし使うなら |
|
256 |
|
} else if (inputNum ==
ACT_USE) { |
|
257 |
|
selectUse();//対象モード 使う表示処理 |
|
258 |
|
} |
ここにelse
「その他」を
追加する |
・・・ |
|
|
|
|
入力された値がコマンド値以外の場合は「その他」で受ける。
「その他」が必要な場所を検討する必要がある。 |
|
|
 |
|
 |
|
|
「その他」を
使えば
いいんだ。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
if文の場合ならelse、
switch文ならdefaultね。
そっか。
そうすれば「エラーです」って
表示したりできるね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
エラーだった場合に
必要な処理は2つ。
まず、エラーの状況を知らせる
ためのエラーメッセージ
を表示しよう。
エラーメッセージには
入力した番号も表示して
間違いを分かりやすくしておこう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
なるほど。
こうすれば
何でエラーになったのか
原因が分かるね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
今回は
メッセージと
番号ね。 |
 |
|
 |
もっと詳しく
書いても
いいんだね。 |
|
|
|
 |
|
 |
|
|
エラーに対応する処理を作る |
|
必要な処理 |
・エラーメッセージの表示 |
・最初のモード(行動処理モード)に戻す |
|
|
|
エラーメッセージ |
ユーザーにエラーの内容を通知する
(エラーの原因、理由、対応方法など)
表示例
"無効なコマンド番号です:" +
inputNum |
|
|
|
|
 |
|
 |
|
|
つじつまが
合わなくなる
でしょー |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
それから、エラーの場合は
最初の「行動処理モード」
に戻して「結果」を実行しない
ようにしよう。
例えば
持ってないアイテムを使って
そのまま進んだら、おかしな
結果が出ちゃうだろ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
そっか、アイテムを使う前に
止めないといけないんだ。
エラーメッセージを表示する
だけじゃ、次の処理に進んで、
おかしくなっちゃうもんね。
こうすれば、エラーになっても
ゲームを続けられるんだね。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
話がおかしく
なっちゃう。 |
|
|
|
|
|
|
|
 |
|
 |
|
|
今回のエラー処理の方法 |
|
目的 |
外部から入力された値をチェックする。
(キーボードから入力された値)
|
対応 |
異常な値を、制御文の「その他」の分岐で受けて処理する。 |
|
必要な処理 |
・エラーメッセージの表示 |
・最初のモード(行動処理モード)に戻す |
|
|
|
エラーメッセージ |
ユーザーにエラーの内容を通知する
(エラーの原因、理由、対応方法など)
表示例:
"無効なコマンド番号です:" +
inputNum |
|
|
|
※ |
キー入力処理で、数値の0~5以外の値は入力できないように制限されている。
文字に対するエラー処理は不要。 |
|
|
|
 |
|
 |
|
|
いろいろな
やり方が
できるけどね。 |
 |
|
 |
まだなんとなくしか
分かんないけど。 |
|
|
|
|
 |
|
|
|
|
 |
 |
 |
|
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
まとめると・・・
今回はこんなやり方で
エラーの対応をしよう。
これで変な数が入ってきても
何もなかったようにゲームを
継続できるよ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
 |
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
こうすれば、
持ってないアイテムの番号
が入力されても大丈夫に
なるんだ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
うーん・・・
いろいろ難しいね。
画面ごとに
細かくチェックが必要
なんだね。
全部のモードで
チェックが必要な場所を
探さなきゃ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
今回の場合は
そうなるね。
これもやり方の1つ。
いろいろなやり方を
覚えていこう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
一ヶ所で
できれば
いいのに。 |
 |
|
 |
また鋭い事
言うしー。
いろいろなやり方が
あるからね。
徐々に勉強しようね。 |
|
|