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 ]