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


source : テーブルタグ吐き出し(AT機)


#!/usr/local/bin/perl
# データ取りした時の table タグを吐き出し(AT機)

$cginame = 'table_for_data2.cgi';
$title   = 'データを取った時のテーブルタグ吐き出し(AT機)';

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

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

$input =~ s/data=//; $input =~ s/%0D%0A/\n/g;
$input =~ s/\+/ /g;  $input =~ s/%2C/,/g;

# ヘッダとフォームの表示
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'>
<div align='right'>[ <a href='table_for_data2_memo.html'>memo</a> / <a href='table_for_data2.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'>
入力<br><textarea name='data' rows=8 cols=30></textarea><br>
<input type='submit' value="送信">
</form>
<table border=0 width='80%'>
<caption><b>入力の仕方</b></caption>
<tr><td>
入力は全て<font color='red'>半角文字</font>で記入。<br>
<table border=0>
<tr><td><font size=2>BIGの場合 → </font></td><td><font size=2><font color='red'>プレイ数 半角スペース 獲得枚数</font><br>(プレイ数のみでも可)</font></td></tr>
<tr><td><font size=2>REGの場合 → </font></td><td><font size=2 color='red'>プレイ数 半角スペース r</font></td></tr>
<tr><td><font size=2>純ハズレなど → </font></td><td><font size=2 color='red'>プレイ数 半角スペース h</font></td></tr>
<tr><td><font size=2>AT → </font></td><td><font size=2 color='red'>プレイ数 半角スペース at</font></td></tr>
<tr><td><font size=2>ヤメ時 → </font></td><td><font size=2 color='red'>プレイ数 半角スペース end</font></td></tr>
</table>
<br>

初期投資、追加投資があった場合は、上記のあとに <font color=red>半角スペース *k</font> と記入。<br>
end のすぐ後に <font color=red>(コンマ)総獲得枚数</font> を記入すれば、収支とPAYOUTを計算する。<br><br>
<font color=red>(純ハズレ、ATではボーナスカウンタをリセットしないで下さい。)</font>
<br><br>
<table border=0 align='center'><tr valign='top'><td>
 <table border=1 cellspacing=0>
 <tr><td><font size=2>入力の例</font></td><td><font size=2>意味</font></td></tr>
 <tr valign='top'><td><font size=2>29 386 1k<br>2 h<br>57 at<br>100 r<br>5 at<br>50 at<br>200 end,600</font></td>
 <td><font size=2>29P BIG ( 1k 投資 )<br>2P 純ハズレ<br>57P AT(ハズレから55P後)<br>100P REG<br>5P AT<br>50P AT(REGから50P後)
<br>200P ヤメ(REGから200P後)<br>( 総獲得600枚 )</font>
 </td></tr></table>
</td><td>
 <table border=1 cellspacing=0>
 <tr><td><font size=2>入力の例</font></td><td><font size=2>意味</font></td></tr>
 <tr valign=top><td><font size=2>17 h<br>200 h<br>600 end,0 20k</font></td>
 <td><font size=2>17P 純ハズレ<br>200P 純ハズレ(開始から200P後)<br>600P ヤメ(開始から600P)<br>( トータル 20k 投資、総獲得0枚 )</font>
 </td></tr></table>
</td></tr></table>
</center>
</td></tr></table>
</center><br><br>
__ HTML __


# エラーチェックとGET送信
if (!$input) { $error = 1; $er_msg = '記入漏れがあります。'; }
if ($input =~ m/[^ \d+endrhatk\n,]/) { $error = 1; $er_msg = '不適切な文字が入力されています。'; }
if (( @list = $input =~ /\n/g) >= 200) { $error = 1; $er_msg = '200行以上のデータは受けつけないようにしています。'; }

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='table_for_data2_memo.html'>memo</a> / <a href='table_for_data2.html'>source</a> / <a href='../index.html'>home</a> ]</div>};
    exit;
}

# データの表示
@data = split(/\n/, $input);
$input=~s/\n/<br>/g;

print <<"__ HTML __";
<hr width='88%'><br>
<table border=1 align='center' cellspacing=0><caption><font size=2>入力データ</font></caption><tr><td>$input</td></tr></table><br><br><br>
<table border=1 align='center' cellpadding=2 cellspacing=0><caption><font size=2>実戦データ</font></caption>
<tr bgcolor='#ffffcc' align='center'><td><font size=2>投資</font></td><td><font size=2>プレイ数</font></td><td><font size=2>当選</font></td>
<td><font size=2>獲得枚数</font></td><td><font size=2>BIG回数<br>(BIG確率)</font></td><td><font size=2>REG回数<br>(REG確率)</font></td>
<td><font size=2>純ハズレ回数<br>(純ハズレ確率)</font></td><td><font size=2>AT回数<br>(AT確率)</font></td>
<td><font size=2>総プレイ数</font></td><td><font size=2>コメント</td></tr>
__ HTML __

# 実戦データの分割と表示
$minus = $bigcount = $regcount = $hazcount = $atcount= $t_bigget = 0;

for (@data) {
    if (/end/) { # ヤメ
        $bonus = 'ヤメ'; $bigget = ' ';
        $coin += $1 if /.+,(\d+)/;
    } elsif (/r/) { # REG
        $bonus = '<b>REG</b>'; $regcount++; $bigget = ' ';
    } elsif (/h/) { # haz
        $bonus='<font size=2>純ハズレ</font>'; $hazcount++; $bigget=' ';
    } elsif (/at/) { # AT
        $bonus = '<font color=\'blue\'><b>AT</b></font>';
        $atcount++; $bigget=' ';
    } else { # BIG
        $bonus = '<font color=\'red\' face=\'Arial black\'><b>777</b></font>';
        $bigcount++;
        if (/^\d+ (\d+)( +|$| \d+k)/) { $bigget = $1; $t_bigget += $bigget; } else { $bigget=' '; } # BIG 獲得枚数
    }

    if (/(\d+)k/) { $toushi = $1; $t_toushi += $toushi; } else { $toushi = ' '; } # 投資
    if (/^(\d+)/) { $game = $1; $t_game += $game; } # プレイ数
    if ($minus > 0) { $t_game -= $minus; }
    if ($bonus =~ /size=2/ or $bonus =~ /AT/) { $minus = $game; $game = "($game)"; }
    if ($bonus =~ /777/ or $bonus =~ /REG/) { $minus = 0; }

    if ($bigcount) { $bigp = int($t_game/$bigcount+0.5); $big = "$bigcount (1/$bigp)"; } else { $big = 0; }
    if ($regcount) { $regp = int($t_game/$regcount+0.5); $reg = "$regcount (1/$regp)"; } else { $reg = 0; }
    if ($hazcount) { $hazp = int($t_game/$hazcount+0.5); $haz = "$hazcount (1/$hazp)"; } else { $haz = 0; }
    if ($atcount)  { $atp  = int($t_game/$atcount+0.5);  $at  = "$atcount (1/$atp)"; }   else { $at  = 0; }
    if ($toushi =~ /\d+/) { $toushi .='k'; }

    print $display ="<tr align='center'><td>$toushi</td><td>$game</td><td>$bonus</td><td>$bigget</td><td>$big</td><td>$reg</td><td>$haz</td><td>$at</td><td>$t_game</td><td> </td></tr>\n";
    $display =~ s/</</g;
    $display =~ s/>/>/g;
    $display =~ s/\n/<br>/g;
    push(@print, $display);
}

# 上で表示したテーブルタグのHTMLソースの表示
print <<"__ HTML __";
</table><br><br>
<table border=1 align='center' cellspacing=0 width='80%'><caption><font size=2>↑ テーブルのソ\ース</font></caption><br><tr><td>
<table border=1 align='center' cellpadding=2 cellspacing=0><caption><font size=2>実戦データ</font></caption>
<tr bgcolor='#ffffcc' align='center'><td><font size=2>投資</font></td><td><font size=2>プレイ数</font></td>
<td><font size=2>当選</font></td><td><font size=2>獲得枚数</font></td>
<td><font size=2>BIG回数<br>(BIG確率)</font></td>
<td><font size=2>REG回数<br>(REG確率)</font></td>
<td><font size=2>純ハズレ回数<br>(純ハズレ確率)</font></td>
<td><font size=2>AT回数<br>(AT確率)</font></td><td><font size=2>総プレイ数</font></td>
<td><font size=2>コメント</td></tr><br>
__ HTML __

foreach (@print) { print; }
print '</table></td></tr></table><br><br><br><br>',"\n";

$brcount = $bigcount + $regcount;
$bigprob = &point(($t_game/$bigcount),2) if $bigcount;
$regprob = &point(($t_game/$regcount),2) if $regcount;
$brprob  = &point(($t_game/ $brcount),2) if $brcount;
$hazprob = &point(($t_game/$hazcount),2) if $hazcount;
$atprob  = &point(($t_game/ $atcount),2) if $atcount;
$wari    = ($coin-$t_toushi*50)/($t_game*3) *100 + 100;
$wari    = &point($wari,2);
$shushi  = int($coin*20 - $t_toushi*1000);  # 等価での収支
$clr     = ($shushi>=0) ? 'blue' : 'red';
$bigget_ave = ($bigcount) ? &point(($t_bigget/$bigcount),2) : '<center>-</center>'; # BIG平均獲得枚数

# 実戦データまとめ を表示
$data2="<table border=1 align='center' cellspacing=0>
<tr><td colspan=5 align='center' bgcolor=ffffaa>実戦データ</td></tr>
<tr><td bgcolor='#ffffaa'>プレイ数</td><td align='right'>$t_game</td><td> </td>
<td bgcolor='#ffffaa'>投資</td><td align='right'>$t_toushi k</td></tr>
<tr><td bgcolor='#ffffaa'>BIG</td><td align='right'>$bigcount</td><td align='right'>1/$bigprob</td>
<td bgcolor='#ffffaa'>回収</td><td align='right'>$coin 枚</td></tr>
<tr><td bgcolor='#ffffaa'>REG</td><td align='right'>$regcount</td><td align='right'>1/$regprob</td>
<td bgcolor='#ffffaa'>PAYOUT</td><td align='right'>$wari %</td></tr>
<tr><td bgcolor='#ffffaa'>BR合成</td><td align='right'>$brcount</td><td align='right'>1/$brprob</td>
<td bgcolor='#ffffaa'>収支(等価)</td><td align='right'><b><font color='$clr'>$shushi 円</font></b></td></tr>
<tr><td bgcolor='#ffffaa'>純ハズレ</td><td align='right'>$hazcount</td><td align='right'>1/$hazprob</td>
<td bgcolor='#ffffaa'>平均BIG枚数</td><td align='right'>$bigget_ave</td></tr>
<tr><td bgcolor='#ffffaa'>AT</td><td align='right'>$atcount</td><td align='right'>1/$atprob</td>
<td bgcolor='#ffffaa'> </td><td align='right'> </td></tr>
</table>";

print $data2;
$data2 =~ s/</</g;
$data2 =~ s/>/>/g;
$data2 =~ s/\n/<br>/g;

print q{<br><br><table border=1 align='center' cellspacing=0 width='80%'><caption>};
print q{<font size=2>↑ テーブルのソース</font></caption><tr><td>};
print $data2;
print '</td></tr></table>';

# フッタ
print <<"__ HTML __";
<br><br><br><br>
<div align='right'>[ <a href='table_for_data2_memo.html'>memo</a> / <a href='table_for_data2.html'>source</a> / <a href='../index.html'>home</a> ]</div>
</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 ]