jug7.com
[ home / cgi / juggler / column / diary / bbs / link / welcome ]
source : ノーマル機:スロット
#!/usr/bin/perl
# スロット結果シミュレーション。
$cginame = 'slot.cgi';
$title = 'スロット結果シミュレーション';
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read (STDIN, $input, $ENV{'CONTENT_LENGTH'});
}
foreach $str (split(/&/,$input)) {
($name,$value) =split(/=/, $str);
push(@input, $value);
}
($big, $reg, $reg_get, $play, $biggetcoin, $ddt) = @input;
print "Content-Type: text/html\n\n";
# ヘッダとフォームの表示
print <<"__ HTML __";
<!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'>
<div align='right'>[ <a href='slot_memo.html'>memo</a> / <a href='slot.html'>source</a> / <a href='../index.html'>home</a> ]</div>
<br><br>
<div align='center'><h2>$title</h2></div>
<hr width='70%'><center>
<form action='$cginame' method='POST'>
<table border=0>
<tr><td>BIG確率</td><td>1/<input type='text' size=10 name='big' value='$big'></td></tr>
<tr><td>REG確率</td><td>1/<input type='text' size=10 name='reg' value='$reg'></td></tr>
<tr><td>REG時の払出し枚数</td><td> <input type='text' size=10 name='reg_get' value='$reg_get'></td></tr>
<tr><td>試行ゲーム数</td><td><input type='text' size=13 name='play' maxlength=4 value='$play'></td></tr>
<tr><td>BIG獲得枚数</td><td><input type='text' size=13 name='bigget' value='$biggetcoin'></td></tr>
<tr><td>1000円でのゲーム数</td><td><input type='text' size=13 name='ddt' value='$ddt'></td></tr>
</table><br>
<input type='submit' value="開始">
<br><br>
<table border=0><tr><td>
<font size=2>
小役カウンタ搭載のリセット機 : REG時の払い出し枚数を 0 枚にする。<br><br>
小役カウンタ搭載のノーリセット機 : REG時の払い出し枚数を 0 枚に、<br>またBIG獲得枚数にBIGの払い出しは含めない。</font><br>
</td></tr></table>
</form></center>
__ HTML __
# エラーチェックと GET 送信
if ($play > 9999) { $error = 1; $er_msg = 'プレイ数は最大9999Pまでです。'; }
if ( grep { $_ eq '' } ($big, $reg, $play, $biggetcoin, $ddt) ) { $error = 1; $er_msg = '記入漏れがあります。'; }
if (grep { /[^\d\.]/ } @input) { $error = 1; $er_msg = '不適切な文字が記入されています。'; };
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='slot_memo.html'>memo</a> / <a href='slot.html'>source</a> / <a href='../index.html'>home</a> ]</div>};
exit;
}
# 期待値
$big_m = $biggetcoin * 20;
$reg_m = (112 + $reg_get) * 20;
$ddt2 = 1000/$ddt if $ddt; # 1プレイ当たり $ddt2円の消費
$expbig = &point(($play/$big),2) if $big;
$expreg = &point(($play/$reg),2) if $reg;
$exp_m = int( ($expbig * $big_m) + ($expreg*$reg_m) - ($play * $ddt2) ); # 期待収支
print <<"__ EXP __";
<br><center><b>期待値</b><table border=0>
<tr><td>BIG</td><td align='right'>$expbig 回</td></tr>
<tr><td>REG</td><td align='right'>$expreg 回</td></tr>
<tr><td>収支</td><td align='right'>$exp_m 円(等価)</td></tr>
</table><br>
<table border=1 cellspacing=0><caption>シミュレーション結果</caption>
<tr align='center' bgcolor='#ffffcc'><td><font size=2>ゲーム数</font></td><td><font size=2>当選</font></td>
<td><font size=2>BIG<br>回数</font></td><td><font size=2>REG<br>回数</font></td><td><font size=2>投資</font></td>
<td><font size=2>コイン</font></td><td><font size=2>total<br>ゲーム数</font></td></tr>
__ EXP __
#-------------------
# シミュレート開始
#-------------------
$game = 50/$ddt if $ddt; # 1P当たりのコイン減
$bonusr = $big * $reg; # 乱数の総数
if ($bonusr =~ /(\d+)\.(\d+)/) {
$temp = $2;
$temp2 = 10**length($temp);
} else { $temp2 = 1; }
$bonusr = $bonusr * $temp2;
$big_r = $reg * $temp2;
$reg_r = $big * $temp2;
$g = $count = $coin = $bigcount = $regcount = $k = $totalk = 0;
while (1) {
$g++; $count++;
if ($coin < $game) { $coin += 50; $k++; $totalk++; }
$coin -= $game;
$r = int(rand($bonusr)+1);
if ($r <= $big_r) { # BIG 当選
$bigcount++; $coin+= $biggetcoin; $flag = 1;
$get='<font color="red" face="Arial black"><b>777</b></font>';
} elsif ($r <= ($big_r+$reg_r)) { # REG 当選
$regcount++; $coin += 112 + $reg_get; $flag = 1; $get='<b>REG</b>';
}
if ($flag) {
$opt = ($count <= 100) ? '<font color=\'blue\'><b>' : ($count >= 500) ? '<font color=\'red\'><b>' : '';
$optc = ($count <= 100) ? '</b></font>' : ($count >= 500) ? '</b></font>' : '';
$k = ($k > 0) ? $k . 'k' : ' ';
$coin_d = int($coin);
if ($bigcount) { $b_prob = int($g/$bigcount+0.5); $b_prob = "(1/$b_prob)"; }
if ($regcount) { $r_prob = int($g/$regcount+0.5); $r_prob = "(1/$r_prob)"; }
print "<tr align='right'><td>$opt $count $optc</font></td><td>$get</td><td><font color='blue'>$bigcount</font> $b_prob</td>";
print "<td><font color='blue'>$regcount</font> $r_prob</td><td>$k</td><td>$coin_d</td><td>$g</td></tr>\n";
$k=''; $count = 0; $flag = 0;
}
if($g >= $play) {
$k = ($k > 0) ? $k . 'k' : ' ';
$coin_d = int($coin);
if ($bigcount) { $b_prob = int($g/$bigcount+0.5); $b_prob = "(1/$b_prob)"; }
if ($regcount) { $r_prob = int($g/$regcount+0.5); $r_prob = "(1/$r_prob)"; }
print "<tr align='right'><td>$count</td><td>ヤメ</td><td><font color='blue'>$bigcount</font> $b_prob</td>";
print "<td><font color='blue'>$regcount</font> $r_prob</td><td>$k</td><td>$coin_d</td><td>$g</td></tr>\n";
last;
}
}
# シミュデータの整理
$coin_d = int($coin);
$toushi = $totalk * 1000;
$kankin = int($coin) * 20;
$shushi = $kankin - $toushi;
$opt3 = ($shushi >= 0) ? 'blue' : 'red';
$payout = &point( (($coin - $totalk*50)/($g * 3) *100+100), 2 );
$payout = int((($coin-($totalk * 50))/($g * 3)*100+100)*100+0.5)/100;
if ($bigcount) { $b_prob = &point(($g/$bigcount), 3); $b_prob = "(1/$b_prob)"; }
if ($regcount) { $r_prob = &point(($g/$regcount), 3); $r_prob = "(1/$r_prob)"; }
# 整理したデータとフッタの表示
print <<"__ HTML __";
</table><br><br>
<table border=1 align='center' cellspacing=0>
<tr><td bgcolor='#ffffcc' colspan=2 align='center'><b>シミュレーション結果</b></td></tr>
<tr><td>総プレイ数</td><td align='right'>$g P</td></tr>
<tr><td>BIG</td><td align='right'><b>$bigcount <font color='red'>$b_prob</font></b></td></tr>
<tr><td>REG</td><td align='right'><b>$regcount <font color='red'>$r_prob</font></b></td></tr>
<tr><td>投資</td><td align='right'>$toushi 円</td></tr>
<tr><td>獲得枚数</td><td align='right'><b>$coin_d 枚</b></td></tr>
<tr><td>換金</td><td align='right'>$kankin 円</td></tr>
<tr><td>収支</td><td align='right'><b><font color='$opt3'>$shushi 円</font></b></td></tr>
<tr><td>PAYOUT</td><td align='right'><b>$payout %</b></td></tr>
</table>
<form action='$cginame' method='POST'>
<input type='hidden' name='big' value='$big'>
<input type='hidden' name='reg' value='$reg'>
<input type='hidden' name='reg_get' value='$reg_get'>
<input type='hidden' name='play' value='$play'>
<input type='hidden' name='bigget' value='$biggetcoin'>
<input type='hidden' name='ddt' value='$ddt'>
<center><input type='submit' value="再試行">
</center></form><br><br>
<br><br>
<div align='right'>[ <a href='slot_memo.html'>memo</a> / <a href='slot.html'>source</a> / <a href='../index.html'>home</a> ]</div>
</body></html>
__ HTML __
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 ]