jug7.com
[ home / cgi / juggler / column / diary / bbs / link / welcome ]


source : A-400 type 4機種


#!/usr/bin/perl
# スロット結果シミュレーション
# (A 400-type の4機種:GOジャグ、花火、サンダー、ニューパルR)

$cginame  = 'a-type.cgi';
$title    = 'スロット結果シミュレーション A400-type';
$linkdata = '<a href=\'a-type_data.html\'>A-400 type 使用データ</a>';

if ($ENV{'REQUEST_METHOD'} eq 'POST') {
    read (STDIN, $input, $ENV{'CONTENT_LENGTH'});
}
($sub, $play0) = split(/&/, $input);
$sub   =~ s/sub=//;
$play0 =~ s/play0=//;

@play = (2000, 4000, 8000, 20000, 50000);
$play0        = 3 if !$play0;
$chk[$play0]  = 'checked';       # HTML の radio ボタンにチェック
$chk2[$sub]   = 'selected';
$play         = $play[$play0-1]; # 実際に使用するプレイ数を格納

print "Content-Type: text/html\n\n";

# ヘッダとフォームの表示
print <<"__ FORM __";
<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<html lang='ja'>
<head>
<meta http-equiv='Content-Type' content="text/html; charset=shift_jis">
<title>jug7.com - cgi $title</title>
 <style type="text/css"> <!--
   A:hover {color:#ff0000;}
 --></style>
</head>
<body text='#000000' bgcolor='#ffffff' link='#0000ff' alink='#ff0000' vlink='#0000cc'>
<font size=7><b><font face='Times New Roman,Times'>jug</font><font face='Bookman Old Style,arial black,Helvetica Black'>7</font><font face='Times New Roman,Times'>.com</font></b></font>
<hr color='#00aa00'>

<strong>[ <a href='../index.html'>home</a> / <a href='index.html'>cgi</a> / <a href='../jug/index.html'>juggler</a> / <a href='../column.html'>column</a> / <a href='../diary/index.html'>diary</a> / <a href='bbs.cgi'>bbs</a> / <a href='../link.html'>link</a> / <a href='../intro.html'>welcome</a> ]</strong>
<div align='center'><h2>$title</h2></div>
<hr width='70%'>
<div align='right'>[ <a href='a-type_data.html'>使用データ</a> / <a href='a-type_memo.html'>memo</a> / <a href='a-type.html'>source</a> ]</div>
<center>
<form action='$cginame' method='POST'>
<table border=0 align='center' cellspacing=0>
<tr><td>機種選択 <select name='sub'>
<option value=0 $chk2[0]>GOGOジャグラーSP
<option value=1 $chk2[1]>HANABI
<option value=2 $chk2[2]>サンダーV
<option value=3 $chk2[3]>ニューパルサーR
</select></td></tr>
<tr><td>プレイ数 
<input type='radio' name='play0' value=1 $chk[1]>2000
<input type='radio' name='play0' value=2 $chk[2]>4000
<input type='radio' name='play0' value=3 $chk[3]>8000
<input type='radio' name='play0' value=4 $chk[4]>20000
<input type='radio' name='play0' value=5 $chk[5]>50000
</td></tr>
</table>
<br><input type='submit' value="開始"><br><br></form></center>
__ FORM __


# エラーチェックとGET送信
if ($play > 50000)    { $error = 1; $er_msg = 'プレイ数は最大50000Pまでです。'; }
if ($play0 =~ /[^\d]/) { $error = 1; }
if ($ENV{'REQUEST_METHOD'} ne 'POST') { $error = 1; $er_msg = 0; }
if ($er_msg) {
    print q{<center><b><font color='red' size=4>*** ERROR !! ***</font><br><br>},"\n";
    print "$er_msg</b></center>\n";
}
if ($error) {
    print '<br><br><br><br><br>';
    print q{<div align='right'>[ <a href='a-type_data.html'>使用データ</a> / <a href='a-type_memo.html'>memo</a> / <a href='a-type.html'>source</a> ]</div>};
    print q{<strong>[ <a href='../index.html'>home</a> / <a href='index.html'>cgi</a> / <a href='../jug/index.html'>juggler</a> / <a href='../column.html'>column</a> / <a href='../diary/index.html'>diary</a> / <a href='bbs.cgi'>bbs</a> / <a href='../link.html'>link</a> / <a href='../intro.html'>welcome</a> ]</strong>};
    print '</body></html>';
    exit;
}

# 再試行ボタンの表示
print <<"__ AGAIN __";
<form action='$cginame' method='POST'>
<input type='hidden' name='sub' value='$sub'>
<input type='hidden' name='play0' value='$play0'>
<center><input type='submit' value="再試行"></center></form>
__ AGAIN __

# data
if ($sub == 0) { # jug
    @bigr     = (55, 60, 63, 67, 68, 68); # 16384
    @regr     = (25, 26, 27, 30, 35, 45);
    @free_ddt = (33.410, 33.453, 33.486, 33.564, 33.624, 33.675);  # 通常時 適当打ち 
    @full_ddt = (34.547, 34.681, 34.767, 34.915, 34.972, 35.103);  # 通常時 小役狙い
    @bigget   = (371.595, 382.599); # ハズシ無、有
    $regget   = 111.043;
} elsif ($sub == 1) { # hanabi
    @bigr     = (55, 59, 62, 65, 67, 68);
    @regr     = (39, 39, 39, 39, 42, 45);
    @free_ddt = (31.131, 31.140, 31.150, 31.159, 31.717, 32.109);
    @full_ddt = (31.611, 31.637, 31.664, 31.705, 32.308, 32.734);
    @bigget   = (364.06, 405.25);
    $regget   = 111.043;
} elsif ($sub == 2) { # thunder V
    @bigr = (56,60,63,66,67,68);
    @regr = (38,38,41,44,54,64);
    @free_ddt = (30.689, 30.698, 30.702, 30.705, 30.736, 30.770);
    @full_ddt = (31.591, 31.638, 31.680, 31.716, 31.761, 31.817);
    @bigget   = (366.34, 367.98, 369.88, 371.27, 373.36, 374.87);  # ハズシ無
    @bigget2  = (382.97, 387.20, 391.49, 395.90, 400.31, 404.72);  # ハズシ有
    $regget   = 111.043;
} elsif ($sub == 3) { # new pulsar
    @bigr     = (54, 58, 62, 66, 68, 68);
    @regr     = (27, 29, 31, 33, 37, 45);
    @free_ddt = (33.133, 33.212, 33.310, 33.331, 33.797, 34.305);
    @full_ddt = (34.493, 34.566, 34.683, 34.759, 35.282, 35.700);
    @bigget   = (373.4, 385.3);
    $regget   = 111.043;
}


#--------------------------------------------
# 全設定でシミュを行う。BR 回数だけ取り出す。
#--------------------------------------------

$s = 0; # 設定-1
while (1) {
    $g = $bigcount = $regcount = 0;
    $big = $bigr[$s]; $reg = $bigr[$s]+$regr[$s];
    while ($g < $play) {
        $g++; $r = int(rand(16384)+1);
        if ($r <= $big)    { $bigcount++; }
        elsif ($r <= $reg) { $regcount++; }
    }
    push(@big, $bigcount);
    push(@reg, $regcount);
    if ($s == 5) { last; }
    $s++;
}

#----------------------------------------------------------
# シミュ結果で得たBR回数から確率、PAYOUT、収支を計算する
#----------------------------------------------------------

# BR 確率
for ($i=0; $i<=5; $i++) {

    $bigp[$i] = ($big[$i]) ? &point(($play/$big[$i]),2) : '';  # シミュ値
    $regp[$i] = ($reg[$i]) ? &point(($play/$reg[$i]),2) : '';

    $big0p[$i] = &point((16384/$bigr[$i]),2); # 理論値
    $reg0p[$i] = &point((16384/$regr[$i]),2);
}

# 適当押し、小役目押し、ハズシ、フル攻略 の順で payout 計算 : シミュ値と理論値
for ($i=0; $i<=3; $i++) {
    for($j=0; $j<=5; $j++) {

        $ddt    = ($i==0 or $i==2) ? $free_ddt[$j] : $full_ddt[$j];
        $bigget = ($i < 2) ? $bigget[0] : $bigget[1];
        if ($sub == 2) {  # thunder V のBIG枚数だけ全設定で異なる
            $bigget = ($i < 2) ? $bigget[$j] : $bigget2[$j];
        }
        $partb = ($bigp[$j]) ? 1/$bigp[$j]*$bigget : 0;
        $partr = ($regp[$j]) ? 1/$regp[$j]*$regget : 0;

        $wari[$j]  = ($partb + $partr + 3-50/$ddt)/3 * 100;  # シミュ値 payout
        $wari[$j]  = &point($wari[$j], 2);

        $wari0[$j] = (1/$big0p[$j]*$bigget + 1/$reg0p[$j]*$regget + 3-50/$ddt)/3 *100; # 理論値 payout
        $wari0[$j] = &point($wari0[$j],2);

        push(@payout,  $wari[$j]);
        push(@payout0, $wari0[$j]);
    }
}
@name = ('GOGOジャグラーSP', 'HANABI', 'サンダーV', 'ニューパルサーR');
$name = $name[$sub];


# 結果の表示
print <<"__ TBL __";
<table border=1 align='center' cellpadding=5 cellspacing=0>
<caption><b>[ <font color='red'>$name</font> ]  $play P</font></b><br><font size=2>シミュレーション結果</font></caption>
<tr align='center' bgcolor='#ffffcc'><td colspan=3> </td><td><b>設定 1</b></td><td><b>設定 2</b></td>
<td><b>設定 3</b></td><td><b>設定 4</b></td><td><b>設定 5</b></td><td><b>設定 6</b></td></tr>
<tr align='center'><td rowspan=2 colspan=2><b>BIG</b></td><td><font size=2>回数<br>( 確率 )</font></td>
__ TBL __

for ($i=0; $i<=5; $i++) { print "<td><b>$big[$i] 回<br><font color='red'>1/$bigp[$i]</font></b></td>"; }

print "</tr>\n<tr align='center'><td><font size=2>理論値</font></td>";
for ($i=0; $i<=5; $i++) { print "<td>1/$big0p[$i]</td>"; }

print "</tr><tr align='center'><td rowspan=2 colspan=2><b>REG</b></td><td><font size=2>回数<br>( 確率 )</font></td>";
for ($i=0; $i<=5; $i++) { print "<td><b>$reg[$i] 回<br><font color='red'>1/$regp[$i]</font></td>"; }

print "</tr>\n<tr align='center'><td><font size=2>理論値</font></td>";
for ($i=0; $i<=5; $i++) { print "<td>1/$reg0p[$i]</td>"; }


print "</tr>\n<tr><td colspan=9> </td></tr>\n<tr align='center'><td rowspan=8><b>PAYOUT<br>( 機械割 )</b></td>";
@method = ('適当打ち','小役狙い<br>のみ','ハズシ<br>のみ','フル攻略');

for ($i=0; $i<=3; $i++) {
    print "<tr align='center'>" if $i;
    print "<td rowspan=2><font size=2 color='red'><b>$method[$i]</b></font></td><td><font size=2><b>シミュ値</font></td>";

    for ($y=($i*6); $y<=($i*6+5); $y++) {
        $opt = ($i==3) ? 'red' : 'black';
        print "<td><b><font color='$opt'> $payout[$y] %</font></b></td>";
    }
    print "</tr>\n<tr align='center'><td><font size=2>理論値</font></td>";
    for ($y=($i*6); $y<=($i*6+5); $y++) {  print "<td>$payout0[$y] %</td>";  }
    print "</tr>";
}

# payout から等価での収支を計算。表示
foreach (@payout) { push(@shushi, int($play*3*($_-100)/100*20)); } # シミュ値 @shushi  に入れる
foreach (@payout0){ push(@shushi0,int($play*3*($_-100)/100*20)); } # 理論値   @shushi0 に入れる
print "<tr><td colspan=9> </td></tr>\n<tr align='center'><td rowspan=8><b>収支</b><br><font size=2>( 等価 )</font></td>";

for ($i=0; $i<=3; $i++) {
    print "<tr align='center'>" if $i;
    print "<td rowspan=2><font size=2 color='red'><b>$method[$i]</b></font></td><td><font size=2><b>シミュ値</font></td>";

    for ($y=($i*6); $y<=($i*6+5); $y++) {
        $opt = ($i==3) ? 'red' : 'black';
        print "<td><b><font color='$opt'> $shushi[$y] 円</font></b></td>";
    }
    print "</tr>\n<tr align='center'><td><font size=2>理論値</font></td>";
    for ($y=($i*6); $y<=($i*6+5); $y++) {  print "<td>$shushi0[$y] 円</td>";  }
    print "</tr>";
}


# 再試行ボタンとフッタ
print <<"__ END __";
</table><br><br>
<form action='$cginame' method='POST'>
<input type='hidden' name='sub' value='$sub'>
<input type='hidden' name='play0' value='$play0'>
<center><input type='submit' value="再試行"></center>
</form>
<br>
<table border=0 align='center' width='50%'><tr><td>
機械割と収支は、成立ゲームでボーナスを揃えるものとして計算した。
</td></tr></table>
<br><br><br><br>$linkdata<br>
<div align='right'>[ <a href='a-type_data.html'>使用データ</a> / <a href='a-type_memo.html'>memo</a> / <a href='a-type.html'>source</a> ]</div>
<strong>[ <a href='../index.html'>home</a> / <a href='index.html'>cgi</a> / <a href='../jug/index.html'>juggler</a> / <a href='../column.html'>column</a> / <a href='../diary/index.html'>diary</a> / <a href='bbs.cgi'>bbs</a> / <a href='../link.html'>link</a> / <a href='../intro.html'>welcome</a> ]</strong>
</body></html>
__ END __

exit;

# 少数を四捨五入して指定の桁にする
sub point {
    my($value, $fig, $x);
    ($value, $fig) = @_;

    $value = int($value * (10 ** $fig) + 0.5) / (10 ** $fig);
    if ($value =~ /(\d+)\.(\d+)/) { $x = $2; }
    elsif ($value !~ /\./)        { $x =''; $value .= '.'; }
    $value = $value.'0' x ( $fig - length($x) );
    return $value;
}


[ home / cgi / juggler / column / diary / bbs / link / welcome ]