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


source : 青ドン


#!/usr/bin/perl
# 青ドン シミュレーション

$cginame  = 'aodon.cgi';
$title    = '青ドン シミュレーション';

$url_data   = '../simu_data_aodon.html';
$url_memo   = 'aodon_memo.html';
$url_source = 'aodon.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, $bita) = @input; # 設定, プレイ数

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

$s = 1 if !$s;
$check[$s] = 'checked';
$bita = 1 if !$bita;
$bita[$bita] = '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 <input type='radio' name='s' value='4' $check[4]> H</td></tr>
<tr><td>試行ゲーム数</td><td><input type='text' size=10 name='play' maxlength=4 value='$play'></td></tr>
<tr><td>BIG中ビタ精度</td><td><input type='radio' name='bita' value='1' $bita[1]> 順押し <input type='radio' name='bita' value='2' $bita[2]> 50% <input type='radio' name='bita' value='3' $bita[3]> 80% <input type='radio' name='bita' value='4' $bita[4]> 99%</td></tr>
</table><br>
<input type='submit' value="開始">
<br><br>
<table border=0><tr><td><font size=2>
通常時は左リールBAR狙い(桃チェリーは取りこぼすもの)とした。<br>
リーチ目を察知した場合、七 or REG 狙い。次にドン狙い。<br>
強氷重複の場合、ドン狙い。<br>
ベル重複は、次プレイでリーチ目を確認してから 七 or REG 狙い。<br>
弱氷重複は、次プレイでリーチ目を確認してからドン狙い。<br>
いずれの場合も、小役成立時は小役優先とした。<br>
最初の打ち始めの時の天井プレイ数は1200Pとした。
</font>
</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 && $s!=4) { $error = 1; $er_msg = '設定は 1 or 4 or 6 or H です。'; }
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;
}

# data /65536
$rep    = 8980;
@bell   = (8420, 8498, 8576, 8654);   $bell  = $bell[$s-1];
$bellb  = 8;
$bellr  = 8;
@r_che   = (744, 742, 740, 737); $r_che  = $r_che[$s-1];
@r_cheb  = (8, 10, 12, 15);      $r_cheb = $r_cheb[$s-1];
@p_che   = (744, 742, 740, 737); $p_che  = $p_che[$s-1];
@p_cheb  = (8, 10, 12, 15);      $p_cheb = $p_cheb[$s-1];
$both_che = 272;
@ice_w   = (486, 482, 478, 474); $ice_w = $ice_w[$s-1];
@ice_wb  = (26, 30, 34, 38);     $ice_wb = $ice_wb[$s-1];
$ice_s   = 64;
$ice_sb  = 64;
@don     = (32, 36, 42, 48);     $don = $don[$s-1];
@r7      = (32, 36, 42, 48);     $r7  = $r7[$s-1];
@reg     = (62, 66, 70, 74);     $reg = $reg[$s-1];

$pre_bonus = 1; # 1:BIG, 2:REG
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><td><font size=2>bonus 合成<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_rep       = $rep;
$t_bell      = $bell     + $t_rep;
$t_r_che     = $r_che    + $t_bell;
$t_p_che     = $p_che    + $t_r_che;
$t_ice_w     = $ice_w    + $t_p_che;
$t_both_che  = $both_che + $t_ice_w;
$t_reg       = $reg      + $t_both_che;
$t_don       = $don      + $t_reg;
$t_r7        = $r7       + $t_don;
$t_ice_s     = $ice_s    + $t_r7;
$t_ice_sb    = $ice_sb   + $t_ice_s;
$t_ice_wb    = $ice_wb   + $t_ice_sb;
$t_r_cheb    = $r_cheb   + $t_ice_wb;
$t_p_cheb    = $p_cheb   + $t_r_cheb;
$t_bellb     = $bellb    + $t_p_cheb;
$t_bellr     = $bellr    + $t_bellb;

$img1 = '<img src=\'../image/aodon/don.jpg\' width=35 height=19>';
$img2 = '<img src=\'../image/aodon/r7.jpg\' width=35 height=19>';
$img3 = '<img src=\'../image/aodon/hanabi.jpg\' width=35 height=19>';

$bita_p = ($bita==1) ? 0 : ($bita==2) ? 50 : ($bita==3) ? 80 : 99;

#---------------------------
#  シミュレート開始
#---------------------------
$g = $count = $coin = $k = $totalk = 0;
$rt_flag = $rt_msg = 0;
$r7_count = $don_count = $reg_count = $msg = $big_coin = $rt_count3 = 0;
$bell_count = $che_count = $icew_count = $ices_count = $bell_hit = $che_hit = $icew_hit = $ices_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_rep) {
        $coin += 3; $wait++ if $flag;
        next;
    } elsif ($r <= $t_bell) { 
        $coin += 10; $wait++ if $flag;
        $bell_count++;
        next;
    } elsif ($r <= $t_r_che) {
        $coin += 6;
        $che_count++;
        next;
    } elsif ($r <= $t_p_che) {
        $che_count++;
        next;
    } elsif ($r <= $t_ice_w) {
        $coin += 6;
        $icew_count++;
        next;
    } elsif ($r <= $t_both_che) {
        $coin += 3;
        $che_count++;
        next;
    } elsif ($r <= $t_reg && !$flag) { # REG
        $flag = 'reg'; $wait = 1;
        $msg = '<b>単独当選</b>';
    } elsif ($r <= $t_don && !$flag) { # 単独ドン
        $flag = 'don'; $wait = 2;
        $msg = '<b>単独当選</b>';
    } elsif ($r <= $t_r7 && !$flag) { # 単独 七
        $flag = 'r7'; $wait = 1;
        $msg = '<b>単独当選</b>';
    } elsif ($r <= $t_ice_s) { # 強氷・非重複
        $coin += 6; $ices_count++;
        next;
    } elsif ($r <= $t_ice_sb && !$flag) { # 強氷・重複ドン
        $coin += 6; $ices_count++; $ices_hit++;
        $flag = 'don'; $wait = 1;
        $msg = '<b><font color=\'blue\'>強氷</font></b>';
    } elsif ($r <= $t_ice_wb && !$flag) { # 弱氷・重複ドン
        $coin += 6; $icew_count++; $icew_hit++;
        $flag = 'don'; $wait = 2;
        $msg = '弱氷';
    } elsif ($r <= $t_r_cheb && !$flag) { # 赤チェ・重複ドン
        $coin += 3;
        $flag = 'don'; $wait = 1;
        $che_count++; $che_hit++;
        $msg = '<font color=\'red\'>赤チェリー</font>';
    } elsif ($r <= $t_p_cheb && !$flag) { # 桃チェ・重複七
        $flag = 'r7'; $wait = 1;
        $che_count++; $che_hit++;
        $msg = '<font color=\'red\'>桃チェリー</font>';
    } elsif ($r <= $t_bellb && !$flag) { # bell・重複七
        $flag = 'r7'; $wait = 2; $coin += 10;
        $bell_count++; $bell_hit++;
        $msg = 'ベル';
    } elsif ($r <= $t_bellr && !$flag) { # bell・重複REG
        $flag = 'reg'; $wait = 2; $coin += 10;
        $bell_count++; $bell_hit++;
        $msg = 'ベル';
    } else {
        if ($rt_flag) { # 追加リプレイの考慮 設定1・4 で + 35000, 設定6・H で +34700
            if ( (($s==1 or $s==2) && $r>=30536) or (($s==3 or $s==4) && $r>=30836) ) { $coin += 3; $rt_count3++; next; }
        }
        if (!$rt_flag && !$flag && (($pre_bonus==1 && $count>=1201) or ($pre_bonus==2 && $count>=801))) { $flag='rt'; $rt_flag = $rt_msg = 1; } # 天井 RT 発動
    }


    if (($flag && $wait<=0) or $rt_msg) {  # ボーナスを揃えられる or RT突入表示
        $k = ($k > 0) ? $k .'k' : ' ';

        # BIG中
        # 12497/65536 で斜め氷、他は15枚
        if (($flag eq 'don') or ($flag eq 'r7')) {
            while($big_inc <= 403) {
                $big_coin -= 2;
                $r = int(rand(65536)+1);
                if ($r<=12497) { # 斜め氷
                    if ($bita==1) { $big_coin += 15; $big_inc += 15; }
                    elsif ($big_bita<2) {
                        $r = int(rand(100)+1);
                            if ($r>=$bita_p) { $big_coin += 15; $big_inc += 15; }
                            else { $big_coin += 14; $big_inc += 14; $big_bita++; }
                    } else { $big_coin += 15; $big_inc += 15; }
                } else { $big_coin += 15; $big_inc += 15; }
            }
        push(@big_coin, $big_coin);
        }



        if    ($flag eq 'don')  { $coin += $big_coin; $don_count++; $rt_flag = 0; $pre_bonus = 1; $get = "$img1$img1$img1"; }
        elsif ($flag eq 'r7')   { $coin += $big_coin; $r7_count++;  $rt_flag = 0; $pre_bonus = 1; $get = "$img2$img2$img2"; }
        elsif ($flag eq 'reg')  { $coin += 104; $big_coin = ' '; $reg_count++; $rt_flag = 0; $pre_bonus = 2;  $get = "$img2$img2$img3"; }
        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 = $don_count + $r7_count;
        $bon_count = $big_count + $reg_count;
        if ($big_count) { $b_prob  = int($g/$big_count+0.5); $b_prob = "(1/$b_prob)"; }
        if ($reg_count) { $reg_prob = int($g/$reg_count+0.5);  $reg_prob = "(1/$reg_prob)"; }
        if ($bon_count) { $bon_prob = int($g/$bon_count+0.5);  $bon_prob = "(1/$bon_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'>$reg_count</font> $reg_prob</td><td><font color='blue'>$bon_count</font> $bon_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 = $big_bita = $rt_flag  = $msg = 0;
        $k='';
    }

    if ($g >= $play) {
        $k = ($k > 0) ? $k.'k' : ' ';
        $big_count = $don_count + $r7_count;
        $bon_count = $big_count + $reg_count;
        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)"; }
        if ($bon_count) { $bon_prob = int($g/$bon_count+0.5);  $bon_prob = "(1/$bon_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'>$reg_count</font> $reg_prob</td><td><font color='blue'>$bon_count</font> $bon_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);
$bon_count = $big_count + $reg_count;
if ($big_count) { $b_prob  = &point(($g/$big_count),3); $b_prob = "(1/$b_prob)"; }
if ($reg_count)  { $reg_prob = &point(($g/$reg_count),3);  $reg_prob = "(1/$reg_prob)"; }
if ($don_count)  { $don_prob = &point(($g/$don_count),3);  $don_prob = "(1/$don_prob)"; }
if ($bon_count)  { $bon_prob = &point(($g/$bon_count),3);  $bon_prob = "(1/$bon_prob)"; }
if ($r7_count)  { $r7_prob = &point(($g/$r7_count),3); $r7_prob = "(1/$r7_prob)"; }
if ($bell_hit)  { $bell_hit_p  = &point(($g/$bell_hit),3); }
if ($che_hit)   { $che_hit_p   = &point(($g/$che_hit),3); }
if ($icew_hit) { $icew_hit_p = &point(($g/$icew_hit),3); }
if ($ices_hit) { $ices_hit_p = &point(($g/$ices_hit),3); }


foreach (@big_coin) { $t_bigget += $_; }
$coin1k = &point(($g*50/($t_bigget + $reg_count*104 + $totalk*50 - $coin + $rt_count3*3)), 3);
$ave_bigget = &point($t_bigget/$big_count,3) if $big_count;
$ave_bigget = 0 if !$ave_bigget;
$s_d = $s;
$s_d = 4 if $s==2;
$s_d = 6 if $s==3;
$s_d = 'H' if $s==4;
# 整理した結果と再試行ボタン、フッタの表示
print <<"__ HTML __";
<table border=1 align='center' cellpadding=3 cellspacing=0>
<tr align='center' bgcolor='#ffffcc'><td colspan=2><b>青ドン</b> <b>設定 $s_d</font></td></tr>
<tr><td>プレイ数</td><td align='right'> $g P</td></tr>
<tr><td>$img1$img1$img1</td><td align='right'><b>$don_count 回 $don_prob</td></tr>
<tr><td>$img2$img2$img2</td><td align='right'><b>$r7_count 回 $r7_prob</td></tr>
<tr><td><b>BIG合成</b></td><td align='right'><b>$big_count 回 <font color='red'>$b_prob</font></td></tr>
<tr><td>$img2$img2$img3</td><td align='right'><b>$reg_count 回 <font color='red'>$reg_prob</font></td></tr>
<tr><td><b>ボーナス合成</b></td><td align='right'><b>$bon_count 回 <font color='red'>$bon_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>$che_hit/$che_count (1/$che_hit_p) </b></td></tr>
<tr><td><font size=2>弱氷重複当選</font></td><td align='right'><b>$icew_hit/$icew_count (1/$icew_hit_p) </b></td></tr>
<tr><td><font size=2>強氷重複当選</font></td><td align='right'><b>$ices_hit/$ices_count (1/$ices_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>1k当たり</td><td align='right'><b>$coin1k P</b></td></tr>
<tr><td>BIG平均獲得</td><td align='right'><b>$ave_bigget 枚</b></td></tr>
<tr><td>機械割</td><td align='right'><b><font color='red'>$payout %</font></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'>
<input type='hidden' name='bita' value='$bita'>
<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 ]