コンピュータが作った乱数を当てるプログラムを作成します。
ゲームのルールは次の通りです。
ルールを元にゲームの流れをフローチャートで表現すると図のようになります。
それではこれをプログラムの変換してみます。
乱数とはある範囲の数値内の任意の数値のことです。Javaで乱数を作るにはMath.random()というメソッドを使います。
0から10の範囲に入る整数値の乱数は次のように記します。int型の変数Rに乱数が代入されます。
R = (int)(10 * Math.random());
Math.random()メソッドは0から1までの乱数を作る機能を持っています。
プログラム実行中にキーボードからの入力を取り込むには次のようなコードを使います。
// 入力に必要なライブラリを指定 import java.io.*; import java.text.*; public class Input { public static void main(String[] args) throws IOException, ParseException{ // 入力を読み取るためのオブジェクトを作る BufferedReader BR = new BufferedReader(new InputStreamReader(System.in)); DecimalFormat DF = new DecimalFormat(); // 入力を促すメッセージを表示 System.out.print("整数を入力してください:"); // キーボードから入力をsに代入 String s = BR.readLine(); // 入力された文字列を数値に変換 Number Num = DF.parse(s); // 変換された数値を整数に変換 int X = Num.intValue(); // 入力された数値を表示する System.out.println("入力されたのは「" + X + "」です。"); } }
出力に比べ入力は少し手間がかかります。
乱数で作ったPCの手と人間の予想した手を比較します。if文を使って比較すればよい。
上記の説明を元にプログラムを完成させてください。
プログラムの名前(クラス名)はKazuateとします。
なお、変数などは表に示すものを使ってください。
値 | 変数名 | 型 |
---|---|---|
PCの手 | pcNoTe | int |
人間の予測 | ningenNoTe | int |
この数当てゲームは一度しか人間の予想を入力できませんでした。これではおもしろくないので5回まで人間の予測を入力できるようにプログラムを改良します。
5回入力を繰り返すわけですから反復(ループ)を利用することになります。つまり、フローチャートの最初の処理(PCの手を乱数で作る)以外を繰り返せばよい。そこで次に示すフローチャートを考えた。空欄部に適切な語を当てはめ5回のループにしてください。繰り返しの回数は変数cntでカウントすることにします。
空欄部に適切な語を当てはめたらそれをプログラムに反映し、コンパイル、実行し動作を確認する。
改良したプログラムには次のような不具合がある。
そこで、フローチャートを次のように変更した。
空欄に適切な語を当てはめ、それらをプログラムに反映し、動作を確認してみよう。
ここまでの内容を元に新しい機能を追加したゲームに改良してみよう。
5回以内で人間がPCの手を当てれば勝ちとする。このとき、「n回目で当てたので人間の勝ち」と、5回でてられなかったら「PCの勝ち」と表示する。
反復の制御法を工夫する。
最初のポイント100から始め、1回目で正解すると100ポイント、2回目で80ポイントといった感じに減らしていく。
ゲーム終了時のポイントを表示する。
人間の手とPCの手が一致するかの判定で不正解の時に人間の手よりPCの手が大きいか小さいかのヒントを表示させる。
5回までの入力を1セットとし、人間か、PCのどちらかが3セット勝利した方を勝ちとする。
最後に人間の成績を次のように表示する。
----------------------------------------- ゲーム終了!! 人間の勝ち 1回目 60ポイント 2回目で勝利 2回目 40ポイント 3回目で勝利 3回目 60ポイント 2回目で勝利 合計160ポイントでした。
数当てゲームを参考ににたようなゲームを作ってみよう。