ガチャは連続で回さない方が良いのか


アニメ『ラストピリオド -終わりなき螺旋の物語-』

毎回悪玉三人組と戦います。いつも敵のスぺシャルキャラが強いので、お金はないけど、ガチャを回すかありません。でも手に入るのは、★1キャラばかり。
アニメ出てくるキャラは、老若男女みんなかわいいです。ゲームの絵よりも好きです。

ラストピリオドではないですが、スマホゲームのガチャは、課金はないものの楽しく回しています。欲しいですよね。高★キャラ。ガチャを何十連しても、目当てのキャラやアイテムが出ない場合、おまじないで、ガチャを回す以外のことをして、確率変動させた方がいいとよく聞きます。シード値変更ってやつでしょうか。

まあランダムはどこまでいってもランダムだと思いますが、シード値を毎回ランダムにすると、もしかしたら、偏った結果になるのでは? と思い、さっそくCプログラミング。

★1~★3までのキャラ出現回数をカウントするプログラムです。star1は★1。star3は★3キャラのつもり。 乱数は、★1キャラが90%。★2が9%、★3が1%にしてます。
シード値は固定させて、ガチャ1000連。このプログラムでは、★3は何キャラ手に入るでしょうか。

takk@deb9:~/tmp$ cat -n srand-1.c
     1	#include <stdlib.h>
     2	#include <stdio.h>
     3	
     4	int main()
     5	{
     6		int i,r;
     7		int star1=0;
     8		int star2=0;
     9		int star3=0;
    10	
    11		srand(1);
    12		for(i=0;i<1000;i++){
    13			r = rand() % 1000;
    14			if(r < 10){
    15				star3++;
    16				continue;
    17			}else if(r < 100){
    18				star2++;
    19				continue;
    20			}else{
    21				star1++;
    22			}
    23		}
    24	
    25		printf("star1=%d\n", star1);
    26		printf("star2=%d\n", star2);
    27		printf("star3=%d\n", star3);
    28	
    29		return 0;
    30	}
takk@deb9:~/tmp$ 

実行してみます。

takk@deb9:~/tmp$ gcc srand-1.c
takk@deb9:~/tmp$ ./a.out
star1=897
star2=95
star3=8
takk@deb9:~/tmp$

8キャラですね。
シード値固定なので、何回回しても、8キャラです。

takk@deb9:~/tmp$ ./a.out
star1=897
star2=95
star3=8
takk@deb9:~/tmp$ ./a.out
star1=897
star2=95
star3=8
takk@deb9:~/tmp$ 

次はシード値を乱数で変更しながら1000 x 100回回します。

takk@deb9:~/tmp$ cat -n srand-2.c
     1	#include <stdlib.h>
     2	#include <stdio.h>
     3	
     4	int main()
     5	{
     6		int i,j,r;
     7		int star1=0;
     8		int star2=0;
     9		int star3=0;
    10	
    11		for(j=0;j<100;j++){
    12			srand(r);
    13			for(i=0;i<1000;i++){
    14				r = rand() % 1000;
    15				if(r < 10){
    16					star3++;
    17					continue;
    18				}else if(r < 100){
    19					star2++;
    20					continue;
    21				}else{
    22					star1++;
    23				}
    24			}
    25		}
    26	
    27		printf("star1=%3.2f %\n", star1/1000.0);
    28		printf("star2=%3.2f %\n", star2/1000.0);
    29		printf("star3=%3.2f %\n", star3/1000.0);
    30	
    31		return 0;
    32	}
takk@deb9:~/tmp$ 

実行。★3がいきなり1%を上回りました。

takk@deb9:~/tmp$ gcc srand-2.c
takk@deb9:~/tmp$ ./a.out
star1=89.94 %
star2=8.99 %
star3=1.07 %
takk@deb9:~/tmp$

何度やっても、上回ります。

takk@deb9:~/tmp$ ./a.out
star1=89.79 %
star2=9.12 %
star3=1.09 %
takk@deb9:~/tmp$ ./a.out
star1=89.93 %
star2=8.99 %
star3=1.08 %
takk@deb9:~/tmp$ 

ん~。確率が良くなっているのは、たまたまでしょうけど、ガチャを回すときは、シード値、気にしてしまいます。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA