この課題はJavaSE基本文法の卒業課題です。
個々人でチャレンジしてください。
コンピュータが用意した0-99の数を探すゲーム。
ユーザーが推測した数を入れると正解よりも大きいか小さいか,または正解であるかをコンピュータが答える。
それを繰り返すことで答えを探す。
ただし、5回以内に正解できないとゲームオーバー。
なお、答えの数は乱数を使って毎回別の答えを用意する。
ヒント1:0-99の範囲の整数の乱数を発生させるにはjava.util.Randomが便利です。
例えば、1~6の目を出すサイコロは以下のようにして作成できます。
Random dice = new Random();
System.out.println( dice.nextInt(6)+1);
ヒント2:キーボード入力は研修内でお伝えしたScannerクラスを使ってください。
●数当てゲームを作成してください。
1.ユーザーが3回以内で正解したら褒め言葉を言う
ユーザーが文字列を入力したなどのキーボード入力エラー処理は考慮しなくてよい。
なお、以下の例ではデバッグ用に「秘密の答え:」を表示させている。
(出力例1:1回~3回で当てた大成功ケース)
秘密の答え:25 5回以内に数を当ててね。3回以内ならすごいことだよ。 キーボードから数値を入力してください>25 大あたり!すごいことだよ! |
(出力例2:4回~5回で当てた成功ケース)
秘密の答え:89 5回以内に数を当ててね。3回以内ならすごいことだよ。 キーボードから数値を入力してください>50 もっと大きいよ キーボードから数値を入力してください>75 もっと大きいよ キーボードから数値を入力してください>82 もっと大きいよ キーボードから数値を入力してください>89 あたり。まあまあすごいよ。 |
(出力例3:5回以内で当てられなかった失敗ケース)
秘密の答え:3 5回以内に数を当ててね キーボードから数値を入力してください>1 もっと大きいよ キーボードから数値を入力してください>2 もっと大きいよ キーボードから数値を入力してください>4 もっと小さいよ キーボードから数値を入力してください>5 もっと小さいよ キーボードから数値を入力してください>6 もっと小さいよ 5回以内で答えられなかったのでゲーム終了 |
2.タイマーで経過時間(秒)を表示する
(出力例)
秘密の答え:9 5回以内に数を当ててね。3回以内ならすごいことだよ。 キーボードから数値を入力してください>50 もっと小さいよ キーボードから数値を入力してください>25 もっと小さいよ キーボードから数値を入力してください>12 もっと小さいよ キーボードから数値を入力してください>6 もっと大きいよ キーボードから数値を入力してください>9 あたり。まあまあすごいよ。 27秒かかったよ |
ヒント:時間を計測するためには、java.lang.SystemクラスのcurrentTimeMillisメソッドを参照ください。
3.プレイヤーにレベルを選択させる
(1)0~9 (2)0~99 (3)0~999
の3通りでレベルを選択させる。
1~3以外の入力があった場合は再入力を促す。
(出力例)
レベルを選んで下さい (1)0~9 (2)0~99 (3)0~999 > 4 (#^ω^)もう一度レベルを選んで下さい (1)0~9(2)0~99(3)0~999 >3 秘密の答え:69 5回以内に数を当ててね。3回以内ならすごいことだよ。 キーボードから数値を入力してください>69 \(^o^)/大あたり!1回目だからすごいことだよ! 3秒かかったよ |
条件:繰り返しと分岐を組み合わせてユーザーからのエラー入力を適切に処理すること。
4.最後に入力履歴を表示する。
(出力例1 成功ケース)
レベルを選んで下さい (1)0~9 (2)0~99 (3)0~999 1 秘密の答え:8 5回以内に数を当ててね。3回以内ならすごいことだよ。 キーボードから数値を入力してください>6 もっと大きいよ キーボードから数値を入力してください>7 もっと大きいよ キーボードから数値を入力してください>8 大あたり!すごいことだよ! 12秒かかったよ 次回のために履歴を表示するので参考にしてね 6→7→8→終了! |
(出力例2 失敗ケース)
レベルを選んで下さい (1)0~9 (2)0~99 (3)0~999 > 1 秘密の答え:7 5回以内に数を当ててね。3回以内ならすごいことだよ。 キーボードから数値を入力してください>50 もっと小さいよ キーボードから数値を入力してください>25 もっと小さいよ キーボードから数値を入力してください>12 もっと小さいよ キーボードから数値を入力してください>6 もっと大きいよ キーボードから数値を入力してください>8 もっと小さいよ 5回以内で答えられなかったのでゲーム終了(@^^)/~~~ 18秒かかったよ 次回のために履歴を表示するので参考にしてね (^^)! 50→25→12→6→8→終了! |
ヒント:ユーザーからの入力履歴を配列等に格納しておく。
5.自由改良
チーム内で話し合いの上、自由に改良する
●Hit & Blowを作成してください
なお、Collectionsクラスのshuffleメソッドを使わずに実現すること。
※新しいプロジェクトを作成すること
6.コンピューターが3桁の数値を出題する
10回以内に正解しないとゲームオーバー。
以下の例のように、3桁であるか否かをチェックすること。
ただし、ユーザーが入力したのが文字列であった場合のエラー処理はまだ考えなくてよい。
(出力例:成功ケース)
―Hit & Blow― コンピューターが用意した3桁の数字を当ててください。 3桁の数字に重複はありません。 あなたが入力した数字の 位置と数字が当たってたらhit、 数字だけあってたらblowです。 3桁ともヒットになったらあなたの勝ちです。 なお、あなたも重複した数字を入力することはできません。 10回以内に当ててください。 秘密の答え867 — 1回目の3桁の数値を入力 — 867 hit:3 blow:0 あなたの勝ちです!(^_-)-☆ |
(出力例:エラーケース)
(中略) 秘密の答え679 — 1回目の3桁の数値を入力 — 12 3桁で入力してください。 解答権を1回分失いました。 — 2回目の3桁の数値を入力 — aaa hit:0 blow:0 — 3回目の3桁の数値を入力 — 796 hit:0 blow:3 — 4回目の3桁の数値を入力 — |
ヒント1:キーボード入力した3桁の文字列から目的の1桁の文字を取得するためには、 StringクラスのcharAt() メソッドを調べてください。
ヒント2:1桁の文字を数値に変換するためには、 CharacterクラスのgetNumericValue() メソッド を調べてください。
7.バリデーションをする
3桁の数値以外が入力された場合はユーザーに再入力を依頼する。
ヒント:3桁の数値かどうかを判定するためには、キーワード:「正規表現」 で調べてください。
8.1桁から10桁の出題に対応する。
最初に「レベルを選んでください(1-10):」と表示する。
ヒント:なし。
以上。