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


source : 機械割の計算


#!/usr/bin/perl
# 機械割の計算

$cginame = 'wari.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);
}
($big1, $big2, $big3, $reg1, $reg2, $reg3, $counter,
 $reset, $big_coin, $bigget, $reg_coin, $regget, $ddt, $loss) = @input;

# BIG,REG 確率とも複数記入されていればエラーとする
if ((grep { $_ } ($big1, $big2, $big3) )[1]) { $error = 1; $er_msg = 'BIG 確率が複数記入されています。'; };
if ((grep { $_ } ($reg1, $reg2, $reg3) )[1]) { $error = 1; $er_msg = 'REG 確率が複数記入されています。'; };

# 入力された値から BIG, REG 確率を計算
$big = ($big1) ? 1/$big1 : ($big2) ? $big2/16384 : ($big3) ? $big3/65536 : 0 ;
$reg = ($reg1) ? 1/$reg1 : ($reg2) ? $reg2/16384 : ($reg3) ? $reg3/65536 : 0 ;

$big_coin = 15  if $big_coin eq '';
$reg_coin = 15  if $reg_coin eq '';
$regget   = 112 if !$regget;
$counter  = 1   if !$counter;
$reset    = 1   if !$reset;
$reset    = 2   if $counter==2;  # 小役カウンタ無しなら、リセットもない
$loss     = 1   if !$loss;

# HTML の radio ボタンにチェックを入れる
$counter_chk[$counter] = 'checked';
$reset_chk[$reset]     = 'checked';
$loss_chk[$loss]       = '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='wari_memo.html'>memo</a> / <a href='wari.html'>source</a> ]</div>
<br><br><center>
<form action='$cginame' method='POST'>
<table border=1 cellspacing=0>
<tr>
<td bgcolor='#ffffcc'>BIG 確率</td><td>1/<input type='text' size=10 name='big1' value='$big1'> or 
<input type='text' size=5 name='big2' value='$big2'>/16384 or <input type='text' size=5 name='big3' value='$big3'>/65536</td>
<td rowspan=2><font size=2>いずれかを記入<br>(存在しない→未記入)</font></td>
</tr>
<tr><td bgcolor='#ffffcc'>REG 確率</td><td>1/<input type='text' size=10 name='reg1' value='$reg1'> or 
<input type='text' size=5 name='reg2' value='$reg2'>/16384 or <input type='text' size=5 name='reg3' value='$reg3'>/65536</td></tr>
<tr>
<td bgcolor='#ffffcc'>小役カウンタ</td><td><input type='radio' name='counter' value=1 $counter_chk[1]> あり 
<input type='radio' name='counter' value=2 $counter_chk[2]> なし</td>
<td rowspan=2><font size=2>古いA-400 type は<br>"あり"がほとんど。</font></td>
</tr>
<tr><td bgcolor='#ffffcc'>BIG でのカウンタリセット</td><td><input type='radio' name='reset' value=1 $reset_chk[1]> あり 
<input type='radio' name='reset' value=2 $reset_chk[2]> なし</td></tr>
<tr><td bgcolor='#ffffcc'>BIG 時の払出し</td><td><input type='text' size=3 name='big_coin' value='$big_coin'> 枚</td>
<td><font size=2>BIG が揃った時の枚数</font></td></tr>
<tr><td bgcolor='#ffffcc'>BIG 獲得枚数</td><td><input type='text' size=13 name='bigget' value='$bigget'> 枚</td>
<td><font size=2>(上記の払出し枚数を<font color='red'>含める</font>)</font></td></tr>
<tr><td bgcolor='#ffffcc'>REG 時の払出し</td><td><input type='text' size=3 name='reg_coin' value='$reg_coin'> 枚</td>
<td><font size=2>REG が揃った時の枚数</font></td></tr>
<tr>
<td bgcolor='#ffffcc'>REG 獲得枚数</td><td><input type='text' size=13 name='regget' value='$regget'> 枚</td>
<td><font size=2>(上記の払出し枚数を<font color='red'>含めない</font>)<br>
<a href="big_get.cgi" target="new">big_get.cgi</a> も参考に。</font></td>
</tr>
<tr><td bgcolor='#ffffcc'>1000円でのゲーム数</td><td><input type='text' size=13 name='ddt' value='$ddt'> プレイ</td>
<td><font size=2><a href="coinmochi.cgi" target="new">coinmochi.cgi</a> も参考に。</font></td></tr>
<tr><td bgcolor='#ffffcc'>ボーナス成立後の<br>コインロス</td>
<td colspan=2><font size=2><input type='radio' name='loss' value=1 $loss_chk[1]> なし  (BRとも成立プレイで揃えられる)<br>
<input type='radio' name='loss' value=2 $loss_chk[2]> 1枚  (成立後、1枚掛けで BR とも 1 プレイで揃えられる)<br>
<input type='radio' name='loss' value=3 $loss_chk[3]> 1枚〜(成立後、1枚掛けで BIG を狙う。次に REG を狙う)<br>
<input type='radio' name='loss' value=4 $loss_chk[4]> 3枚  (成立後、3枚掛けで BR とも 1 プレイで揃えられる)<br>
<input type='radio' name='loss' value=5 $loss_chk[5]> 3枚〜(成立後、3枚掛けで BIG を狙う。次に REG を狙う)</font>
</td></tr>
</table>
<br><input type='submit' value="計算開始">
</form>

<br>
ボーナス成立後のコインロスについて … 1枚掛けや3枚掛けでボーナスを揃える場合、小役は成立しないものとしています。
</center><br><br>
__ HTML __

# エラーチェック と GET での送信
if (grep { /[^\d\.]/ } ($big, $reg, $bigget, $regget, $ddt, $reg_coin)) { $error = 1; $er_msg = '不適切な文字が記入されています。'; };
if (!$ddt) { $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='wari_memo.html'>memo</a> / <a href='wari.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;
}

#----------------
#    計算開始
#----------------

if ($counter==1 && $reset==1)    {  $reg_total = $regget; }  # 小役カウンタあり、BIGリセットあり
elsif ($counter==1 && $reset==2) {  $reg_total = $regget; $bigget -= $big_coin; } # 小役カウンタあり、リセットなし
else                             {  $reg_total = $regget + $reg_coin; } # 小役カウンタなし(リセットなし)

$bigget    -= ($loss==1) ? 0 : ($loss==2 or $loss==3) ? 1 : 3;
$reg_total -= ($loss==1) ? 0 : ($loss==2) ? 1 : ($loss==3) ? 2 : ($loss==4) ? 3 : 6;

$part_big    = $big * $bigget;
$part_reg    = $reg * $reg_total;
$part_koyaku = (3 - 50/$ddt) if($ddt);

$wari = ( $part_big + $part_reg + $part_koyaku ) * 1/3 * 100;
$wari = &point($wari,3);

#----------------
#   結果の表示
#----------------

$b_bunshi = ($big1) ?     1 : ($big2) ? $big2 : $big3;
$b_bunbo  = ($big1) ? $big1 : ($big2) ? 16384 : 65536;

$big_disp1 = "$b_bunshi/$b_bunbo";
$b_calc    = &point(($b_bunbo/$b_bunshi), 3) if $b_bunshi;
$big_disp2 = "( = 1/$b_calc )";

$r_bunshi = ($reg1) ?     1 : ($reg2) ? $reg2 : $reg3;
$r_bunbo  = ($reg1) ? $reg1 : ($reg2) ? 16384 : 65536;

$reg_disp1 = "$r_bunshi/$r_bunbo";
$r_calc      = &point(($r_bunbo/$r_bunshi), 3) if $r_bunshi;
$reg_disp2 = "( = 1/$r_calc )";

$big_disp1 = $big_disp2 = ' ' if !$b_bunshi;
$reg_disp1 = $reg_disp2 = ' ' if !$r_bunshi;

print <<"__ HTML __";
<center>***** 計算結果 *****</center>
<br><br>
<table border=1 align='center' cellspacing=0>
<tr><td bgcolor='#ffffcc'>BIG 確率</td><td align='right'>$big_disp1 $big_disp2 </td></tr>
<tr><td bgcolor='#ffffcc'>REG 確率</td><td align='right'>$reg_disp1 $reg_disp2 </td></tr>
<tr><td bgcolor='#ffffcc'>機械割</td><td align='right'><b><font color='red' size=4>$wari %</font></b></td></tr>
</table>
__ HTML __


# 時間当たりの期待獲得コインの表示
print <<"__ HTML __";
<br><br><br><table border=1 cellpadding=5 align='center' cellspacing=0>
<caption>この機械割での期待収支</caption>
<tr bgcolor='#ffffcc' align='center'><td>プレイ数</td><td>時間の<br>目安(hour)</td>
<td>期待<br>獲得コイン</td><td>等価での<br>期待収支(円)</td></tr>
__ HTML __

for (1..8) {
    $play  = $_ * 1000;
    $hour  = $_ * 1.5;
    $exp   = int($play * 3 * $wari * 1/100  -  $play * 3 );
    $money = $exp * 20;
    print "<tr align='center'><td>$play</td><td>$hour h</td><td>$exp 枚</td><td>$money 円</td></tr>\n";
}

# フッタ
print <<"__ HTML __";
</table><br><br>
<div align='right'>[ <a href='wari_memo.html'>memo</a> / <a href='wari.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 ]