この課題は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):」と表示する。

ヒント:なし。

以上。

JavaSEの問題集トップページに戻る