[ source / home ]


source : 獣王


#!/usr/bin/perl
# 獣王 シミュレーション

$cginame  = 'juou.cgi';
$title    = '獣王 シミュレーション';

if ($ENV{'REQUEST_METHOD'} eq 'POST') {
    read (STDIN, $input, $ENV{'CONTENT_LENGTH'});
}

foreach ( split(/&/,$input) ) {
    ($name,$value) = split("=", $_);
    push(@input, $value);
}
($s, $play, $mode, $hazd, $mtrans) = @input;

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


$mode_chk[$mode]  = 'checked';
$haz_chk[$hazd]   = 'checked';
$mt_chk[$mtrans]  = 'checked';

# ヘッダとフォームの表示
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'>
<div align='right'>[ <a href='../simu_data_juou.html'>data</a> / <a href='juou_memo.html'>memo</a> / <a href='juou.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>設定</td><td><input type='text' maxlength=1  name='s' size=13 value='$s'></td></tr>
<tr><td>試行ゲーム数</td><td><input type='text' size=13 name='play' maxlength=4 value='$play'></td></tr>
<tr><td><font size=2>最初の mode</font></td><td><input type='radio' name='mode' value=1 $mode_chk[1]>高確率
 <input type='radio' name='mode' value=0 $mode_chk[0]>低確率</td></tr> 
<tr><td><font size=2>純ハズレの表\示</font></td><td><input type='radio' name='hazd' value=1 $haz_chk[1]> 有り
 <input type='radio' name='hazd' value=0 $haz_chk[0]>無し</td></tr>
<tr><td><font size=2>mode 移行の表\示</font></td><td><input type='radio' name='mtrans' value=1 $mt_chk[1]> 有り
 <input type='radio' name='mtrans' value=0 $mt_chk[0]>無し</td></tr>
</table><br>
<input type='submit' value="開始">
</form>
<font size=2>設定は 1 〜 6 までの数値を入力。</font>
</center><br><br>
__ FORM __


# エラーチェックとGET送信
if ($play > 9999)  { $error = 1; $er_msg = 'プレイ数は最大9999Pまでです。'; }
if (!$s or !$play) { $error=1; $er_msg = '記入漏れがあります。'; }
if ($s<=0 or $s>6)  { $error=1; $er_msg = '設定は 1 から 6 までです。'; }
if (grep { /[^\d]/ } ($s, $play)) { $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='../simu_data_juou.html'>data</a> / <a href='juou_memo.html'>memo</a> / <a href='juou.html'>source</a> / <a href='../index.html'>home</a> ]</div>};
    exit;
}

# データ
@big    = (149,149,149,149,149,188);
@reg    = (80,81,82,83,84,91);
@haz    = (319,318,317,316,315,269);
$big    = $big[$s-1];
$reg    = $reg[$s-1];
$haz    = $haz[$s-1];
$rep    = 8980;
$che    = 1024;
$c15    = 54984;
$bigget = 399.681;
$regget = 113.959;  # 2+111.959

@sc0 = (11,18,11,25,11,236);    # 低確率時 SC 当選 総数は 256
@sc1 = (55,79,105,127,155,236); # 高確率時 SC 当選
$sc0 = $sc0[$s-1];  $sc1 = $sc1[$s-1];
$ren0[1] = '986,3,3,3,3,3,3,3,3,3,3,3,3,2'; # 低確率時 SC 連荘数 [ ] 内は 設定
$ren0[2] = '755,60,118,52,5,5,5,5,5,5,3,3,2,1,';
$ren0[3] = '987,3,3,3,3,3,3,3,3,3,3,3,3,1';
$ren0[4] = '755,60,118,52,5,5,5,5,5,5,3,3,2,1,';
$ren0[5] = '987,3,3,3,3,3,3,3,3,3,3,3,3,1';
$ren0[6] = '680,0,333,1,1,1,1,1,1,1,1,1,1,1';
$ren1[1] = '228,48,136,205,112,112,112,11,11,11,11,11,9,7'; # 低確率時 SC 連荘数
$ren1[2] = '329,20,138,205,100,100,100,5,5,5,5,5,4,3,';
$ren1[3] = '228,48,136,205,112,112,112,11,11,11,11,11,9,7';
$ren1[4] = '329,20,138,205,100,100,100,5,5,5,5,5,4,3,';
$ren1[5] = '228,48,136,205,112,112,112,11,11,11,11,11,9,7';
$ren1[6] = '680,0,333,1,1,1,1,1,1,1,1,1,1,1';
$ren2[1] = '1011,1,1,1,1,1,1,1,1,1,1,1,1,1'; # 天井到達時 SC 連荘数
$ren2[2] = '807,205,1,1,1,1,1,1,1,1,1,1,1,1,';
$ren2[3] = '807,205,1,1,1,1,1,1,1,1,1,1,1,1,';
$ren2[4] = '807,1,205,1,1,1,1,1,1,1,1,1,1,1,';
$ren2[5] = '807,1,205,1,1,1,1,1,1,1,1,1,1,1,';
$ren2[6] = '807,1,205,1,1,1,1,1,1,1,1,1,1,1,';
@ren0 = split(/,/, $ren0[$s]);  @ren1 = split(/,/, $ren1[$s]); @ren2 = split(/,/, $ren2[$s]);
@ren_tbl = (1,2,3,5,7,9,11,13,15,17,19,21,25,29);  # 連荘回数

$start_m = ($mode) ?   '高' : '低';
$hazd2   = ($hazd) ?   '有' : '無';
$mt      = ($mtrans) ? '有' : '無';

print <<"__ TABLE __";
<br><br><center><table border=1 cellspacing=0>
<caption><font size=2>最初のmode <b>$start_m</b>  純ハズレ表\示 <b>$hazd2</b>
  モード移行表\示 <b>$mt</b></font></caption>
<tr align='center' bgcolor='#ffffcc'><td><font size=2>ゲーム数</font></td><td><font size=2>当選</font></td>
<td><font size=2>mode</font></td><td><font size=2>BIG<br>回数</font></td><td><font size=2>REG<br>回数</font></td>
<td><font size=2>SC<br>回数</font></td><td><font size=2>備考</font></td><td><font size=2>投資</font></td>
<td><font size=2>コイン</font></td><td><font size=2>総プレイ数</font></td></tr>
__ TABLE __

# あらかじめ計算
$regr = $big + $reg;
$hazr = $big + $reg + $haz;
$repr = $big + $reg + $haz + $rep;
$cher = $big + $reg +$ haz + $rep + $che;

#---------------------
#  シミュレート開始
#---------------------
$g = $count = $coin = $bigcount = $regcount = $sccount = 0;
$m1sc = $m0sc = $m1hcount = $m0hcount = 0; $msg=' ';

while (1) {
    $g++; $count++;
    if ($coin < 3) { $coin += 50; $k++; $totalk++; }
    $coin -= 3;

    if ($soku) {
        $soku = 0; $r = int(rand(8)+1); # 初当たり後、1/4 で即放出
        if ($r <= 2) {
            $sc_on = 1; $sccount++; $flag = 1; $clr = '#ffffbb';
            $get = '<font face=\'arial black\' size=2 color=\'red\'>SAVANNA CHANCE</font>';
            $scplay0 = ($r == 1) ? 30 : 10;  # 表示用
            $scplay  = ($r == 1) ? 30 : 10;
        }
    }
    if ($sc_hold && !$sc_on) { # SC放出抽選。潜伏していれば 1/25 で放出とする。
        $r = int(rand(50)+1);
        if ($r <= 2) {
            $sc_on = 1; $sccount++; $flag = 1; $clr = '#ffffbb';
            $get = '<font face=\'arial black\' size=2 color=\'red\'>SAVANNA CHANCE</font>';
            $scplay0 = ($r == 1) ? 30 : 10;
            $scplay  = ($r == 1) ? 30 : 10;
        }
    }
    $scplay--;
    if ($scplay=='-1' && $sc_on) {
        $sc_on = 0; $sc_hold--; $flag = 1;
        $opt = ($scplay0 == 10) ? 'black' : 'red';
        $get = "<font size=2><font color='$opt'><b>SC $scplay0</b></font> 終了</font>"; $clr = 'white';
    }

    $r = int(rand(65536)+1);

    if ($r <= $big) {
        $get = '<font color=\'red\' face=\'arial black\'><b>777</b></font>';
        $bigcount++; $coin += $bigget; $m_up = 1; $mode = 1; $flag = 1;
    } elsif ($r <= $regr) {
        $get = '<font color=black><b>REG</b></font>'; $regcount++; $coin += $regget; $flag = 1;
        $r = int(rand(256)+1); # mode 移行
        if ($mode && $r<=128) { $m_down = 1; $mode = 0; } elsif (!$mode && $r<=11) { $m_up = 1; $mode = 1; }
    } elsif ($r <= $hazr) { # 純ハズレ
        $r = int(rand(256)+1);
        if ($mode) { $scr = $sc1; $m1hcount++; } else { $scr = $sc0; $m0hcount++; }
        if ($r <= $scr) { # SC 当選
            if ($mode) { $m1sc++; } else { $m0sc++; }
            $opt2 = ($hazd) ? '<font size=2>純ハズレ</font><br>' : '';
            $flag = 1; $soku = 1;
            $sc_hit =  &scren($mode); $sc_hold += $sc_hit;
            $get = "$opt2<font size=2 color='#00aa00'><b>SC 内部当選</b></font>";
            $msg = "<font color='#00aa00' size=2><b>SC $sc_hit 連</b></font>";
        } else { # SC 非当選
            if ($hazd) { $flag = 1; $get = '<font size=2>純ハズレ</font>'; }
        }
    } elsif ($r <= $repr) {
        $coin += 3; $r=int(rand(256)+1);
        if ($mode && $r<=10) { # mode down
            $m_down = 1; $mode = 0;
           if ($mtrans) { $flag = 1; $get = '<font size=2>mode 移行(rep)</font>'; }
        }
    } elsif ($r <= $cher) {
        $coin += 4; $r = int(rand(256)+1);
        $ten_che = 1 if ($count >= 1136);  # 天井フラグ
        if ($mode && $r <= 64) { # mode down
            $m_down = 1; $mode = 0;
            if ($mtrans) { $flag = 1; $get = '<font size=2>mode移行(che)</font>'; }
        } elsif (!$mode && $r==100) { # mode up
            $m_up = 1; $mode = 1;
            if ($mtrans) { $flag = 1; $get = '<font size=2>mode移行(che)</font>'; }
        }
    } else { # 15枚役
        if ($sc_on) { $coin+=15; } else {
            $r = int(rand(12)+1);
            $coin += 15 if ($r==10);
        }
    }

    if ($ten_che && !$ten) {  # 天井
        $r = int(rand(1024)+1);
        if ($r <= 100) {
            $ten = 1; $flag = 1;
            $get = '<font size=2 color=\'#00aa00\'><b>SC 内部当選<br><font color=\'blue\'>天井</font></font>';
            $sc_hit = &scren(2); $sc_hold += $sc_hit;
            $msg = "<font color='#00aa00' size=2><b>SC $sc_hit 連</b></font>";
            if ($mode) { $m1sc++; } else { $m0sc++; }
        }
    }

    if ($flag) {
        $coin_d = int($coin);
        $k_d = ($k>0 && ($get =~ /777/ or $get =~ /REG/ or $get =~ /SAVA/)) ? $k.'k' : ' ';
        if ($get =~ /777/ or $get =~ /REG/) {  # BR の時はカウントやその他フラグを 0 に戻す
            $count_d = "<b>$count"; $count = 0; $ten = 0; $ten_che = 0;
        } else {
            $count_d="($count)";  # サバやモード移行表示の時は ( カウント ) の形で表示
        }
        $mode_d = ($mode) ? '<font size=2 color=\'blue\'><b>高</b></font>' : '<font size=2>低</font>';
        $mode_d = ($m_up) ? '<font size=2 color=\'blue\'><b>→高</b></font>' : ($m_down) ? '<font size=2>→低</font>' : $mode_d;

        if ($bigcount) { $bp = int($g/$bigcount+0.5); $bigcp = "$bigcount (1/$bp)"; } else { $bigcp = 0; }
        if ($regcount) { $rp = int($g/$regcount+0.5); $regcp = "$regcount (1/$rp)"; } else { $regcp = 0; }

        print "<tr align='center' bgcolor='$clr'><td>$count_d</td><td>$get</td><td>$mode_d</td><td>$bigcp</td>";
        print "<td>$regcp</td><td>$sccount</td><td>$msg</td><td>$k_d</td><td>$coin_d</td><td>$g</td></tr>\n";
        $flag = 0; $msg = ' ';
        $k = 0 if (($get =~ /777/ or $get =~ /REG/ or $get =~ /SAVA/));
    }
    $m_up = $m_down = 0;

    if($g >= $play) {
        $k = ($k > 0) ? $k.'k' : ' ';
        $coin_d = int($coin);
        if ($bigcount) { $bp = int($g/$bigcount+0.5); $bigcp = "$bigcount (1/$bp)"; } else { $bigcp = 0; }
        if ($regcount) { $rp = int($g/$regcount+0.5); $regcp = "$regcount (1/$rp)"; } else { $regcp = 0; }
        $mode_d = ($mode) ? '<font size=2><b>高</b></font>' : '<font size=2>低</font>';

        print "<tr align='center'><td>$count</td><td>ヤメ</td><td>$mode_d</td><td>$bigcp</td><td>$regcp</td>";
        print "<td>$sccount</td><td> </td><td>$k</td><td>$coin_d</td><td>$g</td></tr>\n";
        last;
    }
}

# シミュデータの整理
$toushi = $totalk * 1000;
$coin   = int($coin);
$kankin = $coin * 20;
$shushi = $kankin - $toushi;
$opt3   = ($shushi>=0) ? 'blue' : 'red';
$payout = ($coin-$totalk*50)/($g*3) *100+100;
$payout = &point($payout,2);

$hazcount = $m1hcount + $m0hcount;
if ($bigcount) { $bigp  = &point(($g/$bigcount),3); } else { $bigp = ''; }
if ($regcount) { $regp  = &point(($g/$regcount),3); } else { $regp = ''; }
if ($sccount)  { $scp   = &point(($g/$sccount),3);  } else { $scp  = ''; }
if ($hazcount) { $hazp  = &point(($g/$hazcount),3); } else { $hazp = ''; }
if ($m1sc)     { $m1scp = &point(($m1sc/$m1hcount*100),2); } else { $m1scp = 0; }
if ($m0sc)     { $m0scp = &point(($m0sc/$m0hcount*100),2); } else { $m0scp = 0; }

$hit = $m1sc + $m0sc;
$ren = ($hit) ? &point(($sccount/($m1sc+$m0sc)),2) : 0;


# 整理したデータ、再試行ボタン、フッタの表示
print <<"__ RESULT __";
</table><br><br>
<table border=0><tr><td colspan=2 align='center' bgcolor='#ffffcc'>
<b><font size=4 color='red'>獣王</font>  設定 $s</font></b></td></tr>
<tr valign='top'><td><table border=1 align='center' cellpadding=3 cellspacing=0>
<tr><td align='center'>プレイ数</td><td align='right'> $g P</td></tr>
<tr><td align='center'><font color='red' face='arial black'><b>777</b></td>
<td align='right'><b>$bigcount 回 <font color='red'>1/$bigp</font></td></tr>
<tr><td align='center'><b>REG</b></td><td align='right'><b>$regcount 回 <font color='red'>1/$regp</font></b></td></tr>
<tr><td align='center'><font color='red' face='arial black' size=2><b>SAVANNA<br>CHANCE</b></font></td>
<td align='right'><b>$sccount 回 <font color='red'>1/$scp</font>
 <br><br><font size=2>初当たり <b>$hit 回<br>平均 $ren 連</b></font></td></tr>
<tr><td align='center'><font size=2>純ハズレ</font></td>
<td align='right'><b>$hazcount 回 <font color='red'>1/$hazp</font></b></td></tr>
<tr><td align='center'><font size=2>高確ハズレ<br>からのSC</font></td>
<td align='right'>$m1sc / $m1hcount   <b><font color='red'>$m1scp %</font></b></td></tr>
<tr><td align='center'><font size=2>低確ハズレ<br>からのSC</font></td>
<td align='right'>$m0sc / $m0hcount   <b><font color='red'>$m0scp %</font></b></td></tr>
</table></td><td>
<table border=1 align='center' cellpadding=3 cellspacing=0>
<tr><td align='center'>投資</td><td align='right'>$toushi 円</td></tr>
<tr><td align='center'>獲得枚数</td><td align='right'><b>$coin 枚</b></td></tr>
<tr><td align='center'>PAYOUT</td><td align='right'><b>$payout %</b></td></tr>
<tr><td align='center'>換金</td><td align='right'>$kankin 円</td></tr>
<tr><td align='center'>収支</td><td align='right'><b><font color='$opt3'>$shushi 円</font></b></td></tr>
</table></td></tr></table></center>

<form action='$cginame' method='POST'>
<input type='hidden' name='s' value='$s'>
<input type='hidden' name='play' value='$play'>
<input type='hidden' name='mode' value='$mode'>
<input type='hidden' name='hazd' value='$hazd'>
<input type='hidden' name='mtrans' value='$mtrans'>
<center><input type='submit' value="再試行"></center>
</form>

<br><br>
<div align='right'>[ <a href='../simu_data_juou.html'>data</a> / <a href='juou_memo.html'>memo</a> / <a href='juou.html'>source</a> / <a href='../index.html'>home</a> ]</div>
</body></html>
__ RESULT __

exit;

# SC 連荘数決定
sub scren {
    my(@tbl,$x,$i,$r,$ren);
    @tbl = ($_[0] == 0) ? @ren0 : ($_[0] == 1) ? @ren1 : @ren2;
    $x = $tbl[0]; $i = 0;
    $r = int(rand(1024)+1);
    while ($r > $x) { $i++; $x += $tbl[$i]; }
    $ren = $ren_tbl[$i];
    return $ren;
}
# 少数を四捨五入して指定の桁にする
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;
}


[ source / home ]