Powered by SmartDoc

数当てゲームを作る

コンピュータが作った乱数を当てるプログラムを作成します。

ゲームのルールは次の通りです。

  1. プログラムは0から10の間の適当な数を作る。
  2. 人間はその数を予測し、プログラムに入力します。
  3. プログラムの作った数と人間の予測した数が一致するかを調べ、一致すれば「あたり」、一致しなければ「はずれ」と表示します。

ゲームの流れ

ルールを元にゲームの流れをフローチャートで表現すると図のようになります。

それではこれをプログラムの変換してみます。

乱数を作る

乱数とはある範囲の数値内の任意の数値のことです。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回以内で人間が当てれば勝ち

5回以内で人間がPCの手を当てれば勝ちとする。このとき、「n回目で当てたので人間の勝ち」と、5回でてられなかったら「PCの勝ち」と表示する。

反復の制御法を工夫する。

ポイントをつける

最初のポイント100から始め、1回目で正解すると100ポイント、2回目で80ポイントといった感じに減らしていく。

ゲーム終了時のポイントを表示する。

ヒントの表示

人間の手とPCの手が一致するかの判定で不正解の時に人間の手よりPCの手が大きいか小さいかのヒントを表示させる。

3回勝ったら勝ちとする

5回までの入力を1セットとし、人間か、PCのどちらかが3セット勝利した方を勝ちとする。

最後に人間の成績を次のように表示する。

-----------------------------------------
ゲーム終了!!
人間の勝ち
1回目     60ポイント  2回目で勝利
2回目     40ポイント  3回目で勝利
3回目     60ポイント  2回目で勝利
合計160ポイントでした。

早く終わった人向け

数当てゲームを参考ににたようなゲームを作ってみよう。

さいころゲーム
さいころの目を当てる。あるいはさいころの目の偶数奇数を当てる。
じゃんけんゲーム
PCとじゃんけんする。5回勝った方の勝ち