jug7.com
[ home / cgi / juggler / column / diary / bbs / link / welcome ]
source : サンダーV スペシャル
#!/usr/bin/perl
# サンダーV スペシャル シミュレーション
$cginame = 'thundervsp.cgi';
$title = 'サンダーV スペシャル シミュレーション';
$url_data = '../simu_data_thundervsp.html';
$url_memo = 'thundervsp_memo.html';
$url_source = 'thundervsp.html';
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read (STDIN, $input, $ENV{'CONTENT_LENGTH'});
}
foreach $str (split(/&/,$input)) {
($name,$value) = split(/=/, $str);
push(@input, $value);
}
($s, $play) = @input; # 設定, プレイ数
print "Content-Type: text/html\n\n";
$s = 1 if !$s;
$check[$s] = 'checked';
# ヘッダとフォームの表示
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'>
<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='$url_data'>data</a> / <a href='$url_memo'>memo</a> / <a href='$url_source'>source</a> ]</div>
<br><br><center>
<form action='$cginame' method='POST'>
<table border=0>
<tr><td>設定</td><td><input type='radio' name='s' value='1' $check[1]> 1 <input type='radio' name='s' value='2' $check[2]> 4 <input type='radio' name='s' value='3' $check[3]> 6</td></tr>
<tr><td>試行ゲーム数</td><td><input type='text' size=10 name='play' maxlength=4 value='$play'></td></tr>
</table><br>
<input type='submit' value="開始">
<br><br>
<table border=0><tr><td>
ボーナス成立後、次プレイでボーナスを揃えられる(小役成立時を除く)。<br>
小役重複によるボーナス当選時は、一度ハズレ目でリーチ目を<br>
確認してからボーナスを揃えられるものとした。<br>
Middle BIG は248枚獲得とした。
<br>
</td></tr></table>
</form></center>
__ HTML __
# エラーチェックと GET 送信
if ($play > 9999) { $error = 1; $er_msg = 'プレイ数は最大9999Pまでです。'; }
if (!$play or !$s) { $error = 1; $er_msg = '記入漏れがあります。'; }
if ($s!=1 && $s!=2 && $s!=3) { $error = 1; $er_msg = '設定は 1 or 4 or 6 です。'; }
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 "<div align='right'>[ <a href='$url_data'>data</a> / <a href='$url_memo'>memo</a> / <a href='$url_source'>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;
}
if ($s==4) { $s=2; } elsif ($s==6) { $s=3; } # 設定4 はシミュ内では 2、設定6 はシミュ内では 3
# data /65536
$rep = 8980;
@bell = (6745, 6845, 6995); $bell = $bell[$s-1];
@che = (2032, 2030, 2028); $che = $che[$s-1];
@che14 = (16, 18, 20); $che14 = $che14[$s-1];
$suika = 512;
@r7 = (54, 59, 67); $r7 = $r7[$s-1];
@bv = (70, 73, 79); $bv = $bv[$s-1];
@ct = (40, 52, 68); $ct = $ct[$s-1];
print q{<table border=1 cellspacing=0 align='center' cellpadding=2><caption>シミュレーション結果</caption>},"\n";
print q{<tr align='center' bgcolor='#ffffcc'><td><font size=2>ゲーム数</font></td><td><font size=2>当選</font></td>};
print q{<td>備考</td><td>BIG枚数</td><td><font size=2>BIG<br>回数</font></td><td><font size=2>REG<br>回数</font></td>};
print q{<td><font size=2>投資</font></td><td><font size=2>コイン</font></td><td><font size=2>total<br>ゲーム数</font></td></tr>},"\n";
$t_bell = $bell;
$t_rep = $bell+$rep;
$t_che = $bell+$rep+$che;
$t_che14 = $bell+$rep+$che+$che14;
$t_suika = $bell+$rep+$che+$che14+$suika;
$t_r7 = $bell+$rep+$che+$che14+$suika+$r7;
$t_bv = $bell+$rep+$che+$che14+$suika+$r7+$bv;
$t_ct = $bell+$rep+$che+$che14+$suika+$r7+$bv+$ct;
#---------------------------
# シミュレート開始
#---------------------------
$g = $count = $coin = $k = $totalk = 0;
$rt_flag = $rt_msg = 0;
$r7_count = $bv_count = $ct_count = $msg = $big_coin = $rt_count3 = 0;
$bell_count = $rep_count = $che_count = $suika_count = $bell_hit = $rep_hit = $che_hit = $suika_hit = 0;
while (1) {
$g++; $count++;
if ($coin < 3) { $coin += 50; $k++; $totalk++; }
$coin -= 3;
if ($wait) { $wait--; }
if ($rt_flag && $flag) { $rt_flag = $wait = 0; }
$r = int(rand(65536)+1);
if ($r <= $t_bell) {
$coin += 10; $wait++ if $flag;
$bell_count++;
if ($r<=16 && !$msg) { $flag = 'ct'; $wait = 2; $msg='ベル'; $bell_hit++; } # CT同時当選
next;
} elsif ($r <= $t_rep) {
$coin += 3; $wait++ if $flag;
$rep_count++;
$r = int(rand(8980)+1);
if ($r<=16 && !$msg) { $flag = 'bv'; $wait = 2; $msg='リプレイ'; $rep_hit++; } # 赤V同時当選
next;
} elsif ($r <= $t_che) {
$coin += 2; $che_count++;
$r = int(rand($che)+1); # (2032, 2030, 2028)
if ((($s==1 && $r<=8) or ($s==2 && $r<=7) or ($s==3 && $r<=6)) && !$msg) { # 赤7同時当選
$flag = 'r7'; $wait = 1;
$msg = 'チェリー'; $che_hit++;
} elsif ((($s==1 && $r<=16) or ($s==2 && $r<=14) or ($s==3 && $r<=12)) && !$msg) { # 赤V同時当選
$flag = 'bv'; $wait = 1;
$msg = 'チェリー'; $che_hit++;
}
next;
} elsif ($r<=$t_che14 && !$msg) { # 14枚役 = 赤V同時当選
$coin += 15;
$flag = 'bv'; $wait = 1;
$msg = '<font color=\'red\'><b>チェリー(14枚役)</b></font>';
next;
} elsif ($r<=$t_suika) {
$coin += 6;
$suika_count++;
$r = int(rand(512)+1);
if ($r<=48 && !$msg) { # 赤7同時当選
$flag = 'r7'; $wait = 2;
$msg = 'スイカ'; $suika_hit++;
} elsif ($r<=64 && !$msg) { # 16, CT同時当選
$flag = 'ct'; $wait = 2;
$msg = 'スイカ'; $suika_hit++;
}
next;
} elsif ($r<=$t_r7 && !$msg) { # 赤7単独当選
$flag = 'r7'; $wait = 1;
$msg = '<b>単独当選</b>';
} elsif ($r<=$t_bv && !$msg) { # 赤V単独当選
$flag = 'bv'; $wait = 1;
$msg = '<b>単独当選</b>';
} elsif ($r<=$t_ct && !$msg) { # CT単独当選
$flag = 'ct'; $wait = 1;
$msg = '<b>単独当選</b>';
} else {
if ($rt_flag) { # 追加リプレイの考慮
if (($s==1 && $r>=25002) or ($s==2 && $r>=25122) or ($s==3 && $r>=25302)) { $coin += 3; $rt_count3++; next; }
}
if ($count>=1000 && !$rt_flag && !$flag) { $flag='rt'; $rt_flag = $rt_msg = 1; } # 天井 RT 発動
}
if (($flag && $wait<=0) or $rt_msg) { # ボーナスを揃えられる or RT突入表示
$k = ($k > 0) ? $k .'k' : ' ';
# BIG中
# che 2028, 14枚役 21, スイカ 512, ハズレ 1, 15枚役 62974
if (($flag eq 'bv') or ($flag eq 'r7')) {
while($big_inc <= 345) {
$big_coin -= 1;
$r = int(rand(65536)+1);
if ($r<=65023) { $big_coin += 15; $big_inc += 15; } # 15枚役
}
}
push(@big_coin, $big_coin);
if ($flag eq 'r7') { $get = '<font color=\'red\' face=\'Arial black\'><strong>777</strong></font>'; $coin += $big_coin; $r7_count++; $rt_flag = 0; }
elsif ($flag eq 'bv') { $get = '<font color=\'blue\' face=\'Arial black\'><strong><i>VVV</i></strong></font>'; $coin += $big_coin; $bv_count++; $rt_flag = 0; }
elsif ($flag eq 'ct') { $get = '<strong>Middle BIG</strong>'; $coin += 248; $big_coin = ' '; $ct_count++; $rt_flag = 0; }
else { $get = '<font face=\'Arial black\' size=2 color=\'blue\'><b>( 天井 RT )</b></font>'; $msg = ' '; $big_coin = ' '; }
$opt = ($count < 100) ? "<b><font color='blue'>" : ($count >= 500) ? "<b><font color='red'>" : '';
$opt2 = ($count < 100) ? "</font></b>" : ($count >= 500) ? "</font></b>" : '';
$big_count = $r7_count + $bv_count;
if ($big_count) { $b_prob = int($g/$big_count+0.5); $b_prob = "(1/$b_prob)"; }
if ($ct_count) { $ct_prob = int($g/$ct_count+0.5); $ct_prob = "(1/$ct_prob)"; }
if ($flag eq 'rt') { $d_count = "($count)"; } else { $d_count = $count; }
print "<tr align='center'><td align='right'>$opt $d_count $opt2</td><td>$get</td><td><font size=2>$msg</font></td><td>$big_coin</td>";
print "<td><font color='blue'>$big_count</font> $b_prob</td><td><font color='blue'>$ct_count</font> $ct_prob</td>";
print "<td>$k</td><td>$coin</td><td>$g</td></tr>\n";
if ($flag eq 'rt') { $flag = $msg = $rt_msg = 0; $k=''; next; }
$flag = $wait = $count = 0;
$big_coin = $big_inc = $rt_flag = $msg = 0;
$k='';
}
if ($g >= $play) {
$k = ($k > 0) ? $k.'k' : ' ';
if ($big_count) { $b_prob = int($g/$big_count+0.5); $b_prob = "(1/$b_prob)"; }
if ($reg_count) { $r_prob = int($g/$reg_count+0.5); $r_prob = "(1/$r_prob)"; }
print "<tr align='center'><td align='right'>$count</td></td><td>ヤメ</td><td> </td><td> </td>";
print "<td><font color='blue'>$big_count</font> $b_prob</td><td><font color='blue'>$ct_count</font> $ct_prob</td>";
print "<td>$k</td><td>$coin</td><td>$g</td></tr>\n";
last;
}
}
print '</table><br><br><br>';
# 結果の整理
$toushi = $totalk * 1000;
$kankin = int($coin*20);
$shushi = $kankin - $toushi;
$opt3 = ($shushi >= 0) ? 'blue' : 'red';
$payout = ($coin-($totalk*50))/($g*3)*100+100;
$payout = &point($payout,3);
if ($big_count) { $b_prob = &point(($g/$big_count),3); $b_prob = "(1/$b_prob)"; }
if ($ct_count) { $ct_prob = &point(($g/$ct_count),3); $ct_prob = "(1/$ct_prob)"; }
if ($r7_count) { $r7_prob = &point(($g/$r7_count),3); $r7_prob = "(1/$r7_prob)"; }
if ($bv_count) { $bv_prob = &point(($g/$bv_count),3); $bv_prob = "(1/$bv_prob)"; }
if ($bell_hit) { $bell_hit_p = &point(($bell_count/$bell_hit),3); }
if ($rep_hit) { $rep_hit_p = &point(($rep_count/$rep_hit),3); }
if ($che_hit) { $che_hit_p = &point(($che_count/$che_hit),3); }
if ($suika_hit) { $suika_hit_p = &point(($suika_count/$suika_hit),3); }
foreach (@big_coin) { $t_bigget += $_; }
$coin1k = &point(($g*50/($t_bigget + $ct_count*248 + $totalk*50 - $coin + $rt_count3*3)), 3);
$s_d = $s;
$s_d = 4 if $s==2;
$s_d = 6 if $s==3;
# 整理した結果と再試行ボタン、フッタの表示
print <<"__ HTML __";
<table border=1 align='center' cellpadding=3 cellspacing=0>
<tr align='center' bgcolor='#ffffcc'><td colspan=2><b>サンダーV スペシャル</b> <b>設定 $s_d</font></td></tr>
<tr><td>プレイ数</td><td align='right'> $g P</td></tr>
<tr><td><b>BIG</b></td><td align='right'><b>$big_count 回 <font color='red'>$b_prob</font></td></tr>
<tr><td><b><font color='red' face='Arial black'>777</font></b></td><td align='right'><b>$r7_count 回 $r7_prob</td></tr>
<tr><td><b><font color='blue' face='Arial black'><i>VVV</i></font></b></td><td align='right'><b>$bv_count 回 $bv_prob</td></tr>
<tr><td><b>Middle BIG</b></td><td align='right'><b>$ct_count 回 <font color='red'>$ct_prob</font></td></tr>
<tr><td><font size=2>ベル重複当選</font></td><td align='right'><b>$bell_hit/$bell_count (1/$bell_hit_p) </b></td></tr>
<tr><td><font size=2>リプ重複当選</font></td><td align='right'><b>$rep_hit/$rep_count (1/$rep_hit_p) </b></td></tr>
<tr><td><font size=2>チェリー重複当選</font></td><td align='right'><b>$che_hit/$che_count (1/$che_hit_p) </b></td></tr>
<tr><td><font size=2>スイカ重複当選</font></td><td align='right'><b>$suika_hit/$suika_count (1/$suika_hit_p) </b></td></tr>
<tr><td>投資</td><td align='right'>$toushi 円</td></tr>
<tr><td>獲得</td><td align='right'>$coin 枚</td></tr>
<tr><td>換金</td><td align='right'>$kankin 円</td></tr>
<tr><td>PAYOUT</td><td align='right'><b>$payout %</b></td></tr>
<tr><td>1k当たり</td><td align='right'><b>$coin1k P</b></td></tr>
<tr><td>収支</td><td align='right'><font color='$opt3'><b>$shushi 円</b></font></td></tr>
</table></center>
<form action='$cginame' method='POST'>
<input type='hidden' name='s' value='$s'>
<input type='hidden' name='play' value='$play'>
<center><input type='submit' value='再試行'></center>
</form>
<br><br><br><br>
<div align='right'>[ <a href='$url_data'>data</a> / <a href='$url_memo'>memo</a> / <a href='$url_source'>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>
__ 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 ]