Thinkers'Studio
JavaとC言語の自習ツール
ゲームで使う乱数生成(Math.random)の使用例

 ゲームなどでランダムな数を生成したいときには、Math クラスの random メソッドを使うことができます。
 今回はスロットマシンのようなプログラムで、使用例を紹介します。

【 スロットマシンのようなプログラム Math.random の使用例 】
class RandomSlot {
    public static void main( String[] args ) {
        final double NUM_TO = 10.0;
        final int LUCKY_NUM = 7;
        final int UPPER_CNT = 200;
        int i, n1, n2, n3;

        for( i = 0; i < UPPER_CNT; i++ ) {
            n1 = (int)( Math.random() * NUM_TO );
            n2 = (int)( Math.random() * NUM_TO );
            n3 = (int)( Math.random() * NUM_TO );
            System.out.print( n1 + " " + n2 + " " + n3 );
            if( n1 == n2 && n1 == n3 ) {
                if( n1 == LUCKY_NUM ) System.out.print( " ** Jackpot ** " ); 
                System.out.println( " MATCH! (" + (i+1) + "回目でした)" );
                break;
            }
            System.out.println();
        }
        if( i == UPPER_CNT ) System.out.println( "MATCHしませんでした" );
    }
}
 実行結果例
4 7 9
8 1 8
5 8 5
 :   (途中略)
7 4 7
8 2 2
7 7 7 ** Jackpot **  MATCH! (65回目でした)
 上のプログラムでは、200回(UPPER_CNT)までスロットを回します。
 3つの数字が合ったら、何回目で MATCH したかを表示してループを抜けます。 もし MATCH した数字が 7(LUCKY_NUM)なら大当たりです。

擬似乱数をつくる

擬似乱数を生成するメソッド

 Math.random( ) は、0.0 以上 1.0 未満の double の擬似乱数を返します。
【 擬似乱数を生成する Math.random 】
   public static double random( void )
 (他に、java.util.Randomクラスのメソッドを使う方法もあります。)

randomメソッドから返された値を利用したい範囲にする

 0〜9 の範囲にしたいなら次のように書きます。
 int n = (int)( Math.random() * 10.0 );
 random から 0.0〜1.0 未満の値が返されるので、10倍して int にキャストし端数を切り捨てれば、1桁の整数が得られます。

 上のプログラムで、final 変数の NUM_TO, UPPER_CNT, LUCKY_NUM に代入する値を書き換えると、条件を変えることができます。 たとえば NUM_TO を 5.0 に書き換えると、0 から 4 の数字しか出ないスロットマシンになります。

 (今回のクイズです)
 サイコロを使うプログラム用に 1〜6 の範囲の乱数を生成するには、Math.random を使ってどのように書けばよいでしょうか?
    (答えは、次回の Java の Tips で ・・・)
前回のクイズの答え: (前回の問題を見る
 getMMDD のコーディング例は下記です。
    public static String getMMDD( String s ) {
        int n = s.lastIndexOf( "." );
        if( n == -1 ) return s;
        return s.substring( n-4, n );
    }
s が "Dat.0531.txt" だとすると、txt の前の . の位置が n に求まります。
n の 4文字前から n-1 までを substringメソッドで取り出します。"0531" が返されます。