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


source : GOGOジャグラーSP


#!/usr/bin/perl
# GOGOジャグラー シミュレーション

$cginame  = 'jug.cgi';
$title    = 'GOGOジャグラーSP シミュレーション';

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, $play_meth, $big_meth) = @input; # 設定, プレイ数, 通常時打ち方, BIG中打ち方

$play_meth[2] = 'checked' if $play_meth eq '';
$big_meth[1]  = 'checked' if $big_meth  eq '';

$play_meth[$play_meth] = 'checked';
$big_meth[$big_meth]   = 'checked';

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'>
<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='jug_memo.html'>memo</a> / <a href='jug.html'>source</a> ]</div>
<br><br><center>
<form action='$cginame' method='POST'>
<table border=0>
<tr><td>設定</td><td><input type='text' size=10 name='s' maxlength=1 value='$s'></td></tr>
<tr><td>試行ゲーム数</td><td><input type='text' size=10 name='play' maxlength=4 value='$play'></td></tr>
</table><br>
<table border=1 cellspacing=0><caption><font size=2>打ち方</font></caption>
<tr><td bgcolor='#ffffcc'>通常時</td><td><input type='radio' name='play_meth' value=0 $play_meth[0]> <font size=2>順押し適当</font><br>
<input type='radio' name='play_meth' value=1 $play_meth[1]> <font size=2>順押しチェリー狙い</font><br>
<input type='radio' name='play_meth' value=2 $play_meth[2]> <font size=2>ハサミ打ち小役狙い(右リール適当)</font><br>
<input type='radio' name='play_meth' value=3 $play_meth[3]> <font size=2>完全小役狙い</font></td>
<td bgcolor='#ffffcc'>BIG中</td><td><input type='radio' name='big_meth' value=0 $big_meth[0]> <font size=2>順押し適当</font><br>
<input type='radio' name='big_meth' value=1 $big_meth[1]> <font size=2>簡易ハズシ(ベル・ピエロの目押しなし)</font><br>
<input type='radio' name='big_meth' value=2 $big_meth[2]> <font size=2>完全ハズシ</font></td></tr>
</table><br>
<input type='submit' value="開始">
<br><br>
<table border=0><tr><td>
BIG、REG成立プレイで揃えるが、1枚のコインロスとした。<br>
BIG中、ハズシ使用の場合は残り10Pから順押し優先。
</td></tr></table>
</form></center>
__ HTML __


# エラーチェックと GET 送信
if ($play > 9999)   { $error = 1; $er_msg = 'プレイ数は最大9999Pまでです。'; }
if (!$play or !$s)  { $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='jug_memo.html'>memo</a> / <a href='jug.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;
}


# data     小役は( 低確率 , 高確率 )
@big   = (55,60,63,67,68,68); $big = $big[$s-1];
@reg   = (25,26,27,30,35,45); $reg = $reg[$s-1];
$pay   = 104/256;
$rep   = 2245;         $jac = 5300; $jac_haz = 1638;
@che2  = (282,4000);   @big_che2  = (41,42,43,44,45,46); $big_che2 = $big_che2[$s-1];
@che4  = (410,2000);   $big_che4  = 21;
@grape = (1850,1851);  $big_grape = 9200;
@jug   = (50,700);     $big_jug   = 8;
@bell  = (50,600);     $big_bell  = 10;

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><td>};
print q{<font size=2>BIG<br>獲得</font></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";

# あらかじめ乱数を計算
@che4r  = ($che2[0]+$che4[0],  $che2[1]+$che4[1]);
@repr   = ($che4r[0]+$rep,     $che4r[1]+$rep);
@graper = ($repr[0]+$grape[0], $repr[1]+$grape[1]);
@jugr   = ($graper[0]+$jug[0], $graper[1]+$jug[1]);
@bellr  = ($jugr[0]+$bell[0],  $jugr[1]+$bell[1]);
@bigr   = ($bellr[0]+$big,     $bellr[1]+$big);
@regr   = ($bigr[0]+$reg,      $bigr[1]+$reg);

#---------------------------
#  シミュレート開始
#  $m = 1 が小役高確率
#---------------------------
$g = $count = $coin = $bigcount = $regcount = $k = $totalk = $bigget = $jacin = $jacplay = 0;
$bigget=' ';

$r2 = 16384-$big-$reg;
while (1) {

    $g++; $count++; $in++; $in2++;
    if ($coin < 3) { $coin += 50; $coin2 += 50; $k++; $totalk++; }
    $coin  -= 3;
    $coin2 -= 3; # 完全小役狙い・完全ハズシをしていた場合のコイン

    $m = (($out/($in*3)) <= $pay) ? 1 : 0;
    if ($play_meth!=3) { $m2 = (($out2/($in2*3)) <= $pay) ? 1 : 0; } # 完全小役狙いしていた場合の払い出し率

    $r = int(rand(16384)+1);
    if ($r <= $che2[$m]) { # 2che
        if ($play_meth==0) {
            $r = int(rand(21)+1); if ($r<=10) { $coin += 2; $out += 2; }
        } else { $coin += 2; $out += 2; }
    } elsif ($r <= $che4r[$m])  { # 4che
        if ($play_meth==0) {
            $r = int(rand(21)+1); if ($r<=14) { $coin += 4; $out += 4; }
        } else { $coin += 4; $out += 4; }
    } elsif ($r <= $repr[$m])   { $coin += 3;  $in--; }   # rep
    elsif ($r <= $graper[$m]) { $coin += 7;  $out += 7; } # grape
    elsif ($r <= $jugr[$m])   { # jug
        if ($play_meth==0) {
            $r = int(rand(9261)+1); if ($r<=1700) { $coin += 10; $out += 10; }
        } elsif ($play_meth==1) { 
            $r = int(rand(441)+1);  if ($r<=85)   { $coin += 10; $out += 10; }
        } elsif ($play_meth==2) {
            $r = int(rand(21)+1);   if ($r<=19)   { $coin += 10; $out += 10; }
        } else { $coin += 10; $out += 10; }
    } elsif ($r <= $bellr[$m])  { # bell
        if ($play_meth==0) {
            $r = int(rand(441)+1); if ($r<=198) { $coin += 15; $out += 15; }
        } elsif ($play_meth==1) { 
            $r = int(rand(21)+1);  if ($r<=18)  { $coin += 15; $out += 15; }
        } elsif ($play_meth>=2) { $coin += 15; $out += 15; }
    } elsif ($r <= $bigr[$m])   { # BIG
        $flag = 1; $bigcount++; $in = $out = 0;  $in2 = $out2 = 0;
        $get="<font color='red' face='Arial black'><b>777</b></font>";
        $jacin = $jacplay = 0;
        $bigget = 14; $bigget2 = 14; # 1枚のコインロスとする。

        # BIG中プレイ開始
        for ($i=1; $i<=30; $i++) {
            $r = int(rand(16384)+1);
            $bigget  -= 3 if (!$virtual);
            $bigget2 -= 3;  # 仮想
            if ($r <= $big_grape) {
                if ($virtual) { $bigget2 += 7; $vir_p = 1 if ($i==30); next; }
                $bigget += 7; $bigget2 += 7;
            } elsif ($r <= ($big_grape+$jac)) {
                if (($big_meth==0) or ($jacin<2) or (($big_meth>=1) && ($jacin==2) && ($i>=21))) {
                    if ($virtual) {
                        if ($i>=21) { last; } else { next; }
                    }

                    $bigget += 6; $bigget2 += 6;
                    $jacin++;
                    for (1..12) { # JAC中
                        $r = int(rand(16384)+1);
                        if ($r <= $jac_haz) {
                            $bigget -= 1; $bigget2 -=1; next;
                        } else { 
                            $bigget += 14; $bigget2 += 14; $jacplay++;
                        }
                        if ($jacplay == 8)  { $jacplay = 0; last; }
                    }
                    if ($jacin==3) {
                        if ($big_meth==0) { $virtual = 1; next; }  # ハズシ時は3回目のJACINで終了
                        else { last; }  # ハズシなし時は、完全ハズシをした場合の獲得枚数も計算
                    }
                } else { next; }
            }
            elsif ($r <= ($big_grape+$jac+$big_che2)) { # 2che
                if ($virtual) { $bigget2 += 2; $vir_p = 1 if ($i==30); next; }
                if ($big_meth==0) {
                    $r = int(rand(21)+1); if ($r<=10) { $bigget +=  2; } else { $big_loss += 2; }
                } else { $bigget += 2; $bigget2 += 2; }
            } elsif ($r <= ($big_grape+$jac+$big_che2+$big_che4)) { # 4che
                if ($virtual) { $bigget2 += 4; $vir_p = 1 if ($i==30); next; }
                if ($big_meth==0) {
                    $r = int(rand(21)+1); if ($r<=14) { $bigget +=  4; } else { $big_loss += 4; }
                } else { $bigget += 4; $bigget2 += 4; }
            } elsif ($r <= ($big_grape+$jac+$big_che2+$big_che4+$big_jug)) { # jug
                if ($virtual) { $bigget2 += 10; $vir_p = 1 if ($i==30); next; }
                if ($big_meth==0) {
                    $r = int(rand(9261)+1); if ($r<=1700) { $bigget +=  10; } else { $big_loss += 10; }
                } elsif ($big_meth==1) {
                    if ($jacin<2) { 
                        $r = int(rand(21)+1);
                        if ($r<=19) { $bigget += 10; } else { $big_loss += 10; }
                    } else {
                        $r = int(rand(441)+1);
                        if ($r<=85) { $bigget += 10; } else { $big_loss += 10; }
                    }
                } else { $bigget += 10; $bigget2 += 10; }
            } elsif ($r <= ($big_grape+$jac+$big_che2+$big_che4+$big_jug+$big_bell)) { # bell
                if ($virtual) { $bigget2 += 15; $vir_p = 1 if ($i==30); next; }
                if ($big_meth==0) {
                    $r = int(rand(441)+1); if ($r<=198) { $bigget +=  15; } else { $big_loss += 15; }
                } elsif ($big_meth==1) {
                    if ($jacin<2) { $bigget += 15; }
                    else {
                        $r = int(rand(21)+1);
                        if ($r<=11) { $bigget += 15; } else { $big_loss += 15; }
                    }
                } else { $bigget += 15; $bigget2 += 15; }
            } else {  # ハズレ
                if ($virtual) { $vir_p = 1 if ($i==30); next; }
            }
        }

        $coin += $bigget; push(@bigget, $bigget);
        if ($vir_p) { $vir_coin -= 111+6; }
        $bigget2 += $big_loss;
        $coin2 += $bigget2;
        if ($big_meth!=2) { push(@bigget2, $bigget2); }
        if($jacin != 3) { $bigget = "$bigget <font size=2>($jacinパン)</font>"; }

    } elsif ($r <= $regr[$m]) {  # REG
        $flag = 1; $regcount++; $coin += 14;  $coin2 += 14; # 1枚のコインロスとする。
        $out += 15; $out2 += 15;
        $get='<b>REG</b>'; $jacplay =  $h = 0;

        for (1..12) {
            $r = int(rand(16384)+1); 
            if ($r <= $jac_haz) { $coin -= 1;  $coin2 -= 1; next; } else { $coin += 14; $coin2 += 14; $jacplay++; }
            last if ($jacplay==8);
        }
    }

    if ($play_meth!=3 && !$flag) { # 完全小役狙い以外なら、完全小役狙いしていたと仮定した場合の払い出し率で小役を抽選
        $r  = int(rand($r2)+1);
        if ($r <= $che2[$m2])      { $coin2 += 2;  $out2 += 2; }  # 2che
        elsif ($r <= $che4r[$m2])  { $coin2 += 4;  $out2 += 4; }  # 4che
        elsif ($r <= $repr[$m2])   { $coin2 += 3;  $in2--; }      # rep
        elsif ($r <= $graper[$m2]) { $coin2 += 7;  $out2 += 7; }  # grape
        elsif ($r <= $jugr[$m2])   { $coin2 += 10; $out2 += 10; } # jug
        elsif ($r <= $bellr[$m2])  { $coin2 += 15; $out2 += 15; } # bell
    }

    if ($flag) {
        $k = ($k > 0) ? $k .'k' : ' ';
        $opt  = ($count < 100) ? "<b><font color='blue'>" : ($count >= 500) ? "<b><font color='red'>" : '';
        $opt2 = ($count < 100) ? "</font></b>"            : ($count >= 500) ? "</font></b>"           : '';

        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='center'><td align='right'>$opt $count $opt2</td></td><td>$get</td><td>$bigget</td>";
        print "<td><font color='blue'>$bigcount</font> $b_prob</td><td><font color='blue'>$regcount</font> $r_prob</td>";
        print "<td>$k</td><td>$coin</td><td>$g</td></tr>\n";
        $flag = $count = 0; $k=''; $bigget=' ';
        $virtual = $vir_p = $vir_coin = $bigget2 = $big_loss = 0;
    }

    if ($g >= $play) {
        $k = ($k > 0) ? $k.'k' : ' ';
        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='center'><td align='right'>$count</td></td><td>ヤメ</td><td> </td>";
        print "<td><font color='blue'>$bigcount</font> $b_prob</td><td><font color='blue'>$regcount</font> $r_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);
$brcount= $bigcount + $regcount;
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)"; }
if ($brcount)  { $br_prob = &point(($g/$brcount),3);  $br_prob = "(1/$br_prob)"; }

foreach (@bigget) { $t_bigget += $_; }
$aveget = &point( ($t_bigget/$bigcount), 3 ) if $bigcount;
$coin1k = &point(($g*50/($t_bigget + $regcount*111.043 + $totalk*50 - $coin)), 3);

# 完全フル攻略の場合
$coin2  += $big_loss + $vir_coin;
$kankin2 = int($coin2*20);
$shushi2 = $kankin2 - $toushi;
$opt4    = ($shushi2 >= 0) ? 'blue' : 'red';
$payout2 = ($coin2-($totalk*50))/($g*3)*100+100;
$payout2 = &point($payout2,3);
foreach (@bigget2) { $t_bigget2 += $_; }
$aveget2 = &point( ($t_bigget2/$bigcount), 3 ) if $bigcount;
$coin1k2 = &point(($g*50/($t_bigget2 + $regcount*111.043 + $totalk*50 - $coin2)), 3);
$coin_gap = $coin2 - $coin;      if ($coin_gap>0) { $coin_gap = '+'.$coin_gap; }
$shu_gap  = $shushi2 - $shushi;  if ($shu_gap>0)  { $shu_gap  = '+'.$shu_gap; }


@play_meth = ('順押し適当', '順押しチェリー狙い', 'ハサミ打ち小役狙い', '完全小役狙い');
@big_meth  = ('順押し適当', '簡易ハズシ', '完全ハズシ');
$play_meth_d = $play_meth[$play_meth];
$big_meth_d  = $big_meth[$big_meth];

# 整理した結果と再試行ボタン、フッタの表示
print <<"__ HTML __";
<table border=1 align='center' cellpadding=3 cellspacing=0>
<tr align='center' bgcolor='#ffffcc'><td colspan=2><b>GOGOジャグラーSP 設定 $s</b></font></td></tr>
<tr bgcolor='#ffffcc'><td>通常時</td><td><font size=2><b>$play_meth_d</b></font></td></tr>
<tr bgcolor='#ffffcc'><td>BIG中</td><td><font size=2><b>$big_meth_d</b></font></td></tr>
<tr><td>プレイ数</td><td align='right'> $g P</td></tr>
<tr><td><font color='red' face='Arial black'><b>777</b></font></td><td align='right'><b>$bigcount 回 <font color='red'>$b_prob</font></td></tr>
<tr><td><b>REG</b></td><td align='right'><b>$regcount 回 <font color='red'>$r_prob</font></td></tr>
<tr><td><b>BR合成</b></td><td align='right'><b>$brcount 回 <font color='red'>$br_prob</font></td></tr>
<tr><td>投資</td><td align='right'>$toushi 円</td></tr>
<tr><td>獲得枚数</td><td align='right'><b>$coin 枚</b></td></tr>
<tr><td><font size=2>BIG平均<br>獲得枚数</font></td><td align='right'><b>$aveget 枚</b></td></tr>
<tr><td>1k当たり</td><td align='right'><b>$coin1k P</b></td></tr>
<tr><td>PAYOUT</td><td align='right'><b>$payout %</b></td></tr>
<tr><td>換金</td><td align='right'>$kankin 円</td></tr>
<tr><td>収支</td><td align='right'><font color='$opt3'><b>$shushi 円</b></font></td></tr>
__ HTML __

if ($play_meth!=3 && $big_meth!=2) {
print <<"__ HTML __";
<tr align='center' bgcolor='#ffffcc'><td colspan=2><b><font size=2>完全小役狙い、完全ハズシだった場合</font></b></td></tr>
<tr><td>獲得枚数</td><td align='right'><font size=2><b>$coin2 枚<br>(差 $coin_gap 枚)</b></font></td></tr>
<tr><td><font size=2>BIG平均<br>獲得枚数</font></td><td align='right'><font size=2><b>$aveget2 枚</b></font></td></tr>
<tr><td>1k当たり</td><td align='right'><font size=2><b>$coin1k2 P</b></font></td></tr>
<tr><td>PAYOUT</td><td align='right'><font size=2><b>$payout2 %</b></font></td></tr>
<tr><td>換金</td><td align='right'><font size=2>$kankin2 円</font></td></tr>
<tr><td>収支</td><td align='right'><font color='$opt4' size=2><b>$shushi2 円<br>(差 $shu_gap 円)</b></font></td></tr>
</table></center>
__ HTML __

} else { print "</table></center>\n"; }

print <<"__ HTML __";
<form action='$cginame' method='POST'>
<input type='hidden' name='s' value='$s'>
<input type='hidden' name='play' value='$play'>
<input type='hidden' name='play_meth' value='$play_meth'>
<input type='hidden' name='big_meth' value='$big_meth'>
<center><input type=submit value="再試行"></center>
</form>

<br><br>
<div align='right'>[ <a href='jug_memo.html'>memo</a> / <a href='jug.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>
__ 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 ]