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


source : テーブルタグ吐き出し(北斗の拳用)


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

$cginame = 'table_for_data_hokuto.cgi';
$title   = '北斗の拳 データを取った時のテーブルタグ吐き出し';

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


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

foreach $str (split(/&/,$input) ) {
    ($name,$value) = split(/=/, $str);
    $value =~ s/%0D%0A/\n/g;
    $value =~ s/\+/ /g;
    $value =~ s/%2C/,/g;
    push(@input, $value);
}

($sub, $rate, $get, $data) = @input;
$rate =   5 if !$rate;


$sub1chk = 'checked' if $sub == 1;
$sub2chk = 'checked' if $sub == 2;
$sub2chk = 'checked' if !$sub;

$get1chk = 'checked' if $get == 1;
$get2chk = 'checked' if $get == 2;
$get1chk = 'checked' if !$get;

# ヘッダとフォームの表示
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='table_for_data_hokuto_memo.html'>memo</a> / <a href='table_for_data_hokuto.html'>source</a> ]</div>
<br><br><center>
<form action='$cginame' method='POST'>

<table border=1 align='center' cellspacing=0 rules='none'><caption>機種</caption>
<tr><td><input type='radio' name='sub' value=1 $sub1chk>北斗の拳</td></tr>
<tr><td><input type='radio' name='sub' value=2 $sub2chk>北斗の拳 SE</td></tr>
</table>
<br><br>
<table border=1 align='center' cellspacing=0>
<tr align='right'><td>換金率</td><td><input type='text' size=4 name='rate' value='$rate'> 枚 = 100円</td></tr>
<tr><td rowspan=2>GET COIN</td><td><input type='radio' name='get' value=1 $get1chk><font size=2>獲得枚数</font></td></tr>
<tr><td><input type='radio' name='get' value=2 $get2chk><font size=2>連荘数</font></td></tr>
</table>

<br><br>
入力<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>
BBの場合 → <font color='red'>プレイ数 半角スペース 獲得枚数</font> もしくは <font color=red>プレイ数 半角スペース 連荘数。</font><br>
ヤメ時 → <font color='red'>プレイ数 半角スペース end</font>。<br>
プレイ数には<font color='red'>プレイ数-プレイ数</font>の区間指定も可(例: 100-300 → 100P〜300P)。<br>
<br>
北斗の拳での「北斗の拳」揃い、北斗SEでの「赤7」揃いの時はプレイ数の前に <font color='red'>0</font> をつける。
<br>初期投資、追加投資があった場合は、上記のあとに <font color='red'>半角スペース *k</font> と記入。<br>
end のすぐ後に <font color='red'>(コンマ)総獲得枚数</font> を記入すれば、収支とPAYOUTを計算する。<br>
<br>
獲得枚数のみ記入しても、獲得枚数から連荘数を計算して表\示する。<br>
<br>
行の最後に <font color='red'>半角スペース オーラ色</font> の指定も可能\。<br>
( 白:w  青:b  黄:y  緑:g  赤:r  虹:rb )<br>
<br><br>

<table border=0 align=center><tr valign=top><td>
 <table border=1 cellspacing=0><caption>北斗SE (獲得枚数を選択)</caption>
 <tr bgcolor='#ffffcc'><td><font size=2>入力の例</font></td><td><font size=2>意味</font></td></tr>
 <tr><td><font size=2>265-390 84 5k w<br>297 417 7k w<br>0389 82 2k w<br>96 305 1k w<br>477 end,0 10k</font></td>
 <td><font size=2>265〜390P BB(白オーラ、5k投資、84枚獲得)<br>297P BB(白オーラ、7k追い金、417枚)<br>389P 赤7 BB(2k 追い金)<br>96P BB (1k追い金)<br>477P ヤメ( 10k追い金 )</font>
 </td></tr></table>
</td><td>
 <table border=1 cellspacing=0><caption>北斗 (連荘数を選択)</caption>
 <tr bgcolor='#ffffcc'><td><font size=2>入力の例</font></td><td><font size=2>意味</font></td></tr>
 <tr><td><font size=2>170 8 6k r<br>200 10 y<br>66 5 b<br>150 end,2620</font></td>
 <td><font size=2>170P BB 8連 ( 6k 投資 )<br>200P BB 10連<br>66P BB 5連<br>150P ヤメ(総獲得2620枚 )</font>
 </td></tr></table>
</td></tr></table>
</center>
</td></tr></table>
</center><br><br>
__ HTML __


# エラーチェックと GET での送信
if (!$data) { $error = 1; $er_msg = '記入漏れがあります。'; }
if (grep { /[^\d+]/ } ($rate)) { $error = 1; $er_msg = '不適切な文字が記入されています。'; };
if ($data =~ /[^ \d+endrkwbyg\n,\-]/) { $error = 1; $er_msg = '不適切な文字が入力されています。'; }
if (( @list = $data=~ /\n/g) >= 200) { $error = 1; $er_msg = '200行以上のデータは受けつけないようにしています。'; }
if ($data=~ /^\d+\-/) {
    @list = split(/\n/, $data);
    for (@list) {
        if (/^(\d+)\-(\d+)/ && $2-$1<=0) { $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='table_for_data_hokuto_memo.html'>memo</a> / <a href='table_for_data_hokuto.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 = split(/\n/, $data);
$data =~ s/\n/<br>/g;

$sub2 = '北斗の拳'    if $sub == 1;
$sub2 = '北斗の拳 SE' if $sub == 2;


print <<"__ HTML __";
<hr width='88%'><br>
<table border=1 align='center' cellspacing=0><caption><font size=2>入力データ</font></caption>
<tr><td>$data</td></tr></table>
<br><br><br>

<table border=1 align='center' cellpadding=2 cellspacing=0><caption><font size=2>$sub2</caption>
<tr bgcolor='#ffffcc'><td><font size=2>投資</font></td><td><font size=2>プレイ数</font></td>
<td><font size=2>当選</font></td><td><font size=2>獲得枚数<br>(連荘)</font></td>
<td><font size=2>BB回数<br>(BB確率)</font></td><td><font size=2>REG回数<br>(REG確率)</font></td>
<td><font size=2>総プレイ数</font></td><td><font size=2>コメント</font></td></tr>
__ HTML __

# 実戦データの分割してテーブルで表示

$ren = $flag = $bbcount = $regcount = $t_bbget = 0;
$comment = ' ';

for (@data) {

    if (/end/) { # ヤメ
        $bonus = 'ヤメ';  $bbget=' '; $flag = 1; $d_bbget = ' ';
        $coin += $1 if /.+,(\d+)/;
    } else { # BB
        if ($_ =~ m/^0/) {
            if ($sub==1) { $bonus = '<font color=\'#ffffff\' face=\'Arial black\' style=\'background-color:#000000;\'><i>北斗の拳</i></font>'; }
            else         { $bonus = '<font color=\'red\' face=\'Arial black\'><b>777</b></font>'; }
        } else { 
            if ($sub==1) { $bonus = '<font color=\'red\' face=\'Arial black\'><b>777</b></font>'; }
            else         { $bonus = '<font color=\'blue\' face=\'Arial black\'><b>777</b></font>'; }
        }
        $bbcount++; $flag = 1;
        if (/^\d+ (\d+)( +|| \d+k)/ or /^\d+\-\d+ (\d+)( +|| \d+k)/) {   # 獲得枚数を取り出す
            $bbget = $1;
            # 獲得枚数から連荘数を計算する
            if ($sub==1) { $c = 140; } else { $c = 100; }
            $j_ren = int($bbget/$c+0.5);
            if ($get == 1) { $d_bbget = "$bbget ($j_ren連)"; $reg += $j_ren; }
            else           { $d_bbget = "$bbget連"; $reg += $bbget; $bbget = $bbget * $c; }
            $d_bbget =~ s/1連/単発/;
            $t_bbget += $bbget;
        }
    }

    if (/(\d+)k/) { $toushi = $1; $t_toushi += $toushi; } else { $toushi = ' '; }  # 投資額を取り出す
    if (/^(\d+) /) { # プレイ数を取り出す
        $game  = $1;
        if ($game =~ m/^0/) { $game =~ s/0//; }
        $t_game   += $game;
    }

    elsif (/^(\d+)-(\d+)/) { # 区間入力のプレイ数
        $start = $1; $hit = $2;
        if ($start =~ m/^0/) { $start =~ s/0//; }
        if ($hit   =~ m/^0/) { $hit   =~ s/0//; }
        $game    = $hit - $start;
        $t_game += $game;
        $comment = "$start 〜 $hit P";
    }

    $clr = ($game <= 100) ? 'blue' : ($game >= 400) ? 'red' : 'black';  # プレイ数の色

    if ($bbcount) { $bbp = int($t_game/$bbcount+0.5); $bb = "$bbcount (1/$bbp)"; } else { $bb = 0; }
    if ($reg)     { $regp = int($t_game/$reg+0.5); $d_reg = "$reg (1/$regp)"; } else { $d_reg = 0; }
    if ($toushi =~ /\d+/) { $toushi .='k'; }

    $count += $game;  # $count : 最大BB間プレイ数を調べるためのフラグ
    $ren++ if $count<=100 && $bbcount>=2;  # 100P以内のBBなら $ren++ とする

    if ($flag) {  # BB の時に $flag が真
        $s2nd = $count; $count=0;
        $max = $s2nd if $max < $s2nd;    # $max : 最大BB間プレイ数
    }

    @aura  = ('w', 'b', 'y', 'g', 'r', 'rb');
    @aura2 = ('白','青','黄','緑','赤','虹');
    for ($i=0; $i<=$#aura; $i++) {
        if ($_ =~ m/$aura[$i]$/) { $aura = $aura2[$i]; $aura_flag = 1; }
    }
    if ($comment eq ' ' && $aura_flag) { $comment = "$aura"; }
    elsif ($comment && $aura_flag)      { $comment .= '<br>'."$aura"; }

    print $display ="<tr align='center'><td>$toushi</td><td><font color='$clr'>$game</font></td><td>$bonus</td><td>$d_bbget</td><td>$bb</td><td>$d_reg</td><td>$t_game</td><td align='left'>$comment</td></tr>\n";
    $comment = ' ';
    $aura_flag = 0;

    $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><tr><td>
<table border=1 align='center' cellpadding=2 cellspacing=0><br>
<tr bgcolor='#ffffcc' align='center'><td><font size=2>投資</font></td><td><font size=2>
プレイ数</font></td><br><td><font size=2>当選</font></td><td><font size=2>
獲得枚数<br>(連荘)</font></td><br><td><font size=2>BB回数<br>(BB確率)</font></td>
<td><font size=2>REG回数<br>(REG確率)</font></td><br><td><font size=2>
総プレイ数</font></td><td><font size=2>コメント</font></td></tr><br>
__ HTML __

foreach (@print) { print; }  # 実戦データ部分
print '</table></td></tr></table><br><br><br><br>';


# 実戦データの整理
$bbprob = &point(($t_game/$bbcount),2) if $bbcount;   # BB確率
$regprob = &point(($t_game/$reg),2)    if $reg;       # REG確率
$reg     = ' ' if !$reg;
$shushi  = int($coin*100/$rate - $t_toushi*1000) if $rate;  # 収支
$clr     = ($shushi>=0) ? 'blue' : 'red';
$wari    = ($coin-$t_toushi*50)/($t_game*3) *100+100 if $coin ne '';  # 機械割
$wari    = &point($wari,2);
$bbget_ave  = &point(($reg/$bbcount),2) if $bbcount; # BB平均連荘数
$bbget_ave2 = ($bbget_ave) ? "$bbget_ave 連" : '>center<->/center<'; 
$bunbo      = ($bbcount > 1) ? $bbcount - 1 : 0;
$ren_rate   = ($bunbo > 0) ? int($ren/$bunbo *100) : 0;  # 100P以内のBB連荘率

$per = $t_bbget + $t_toushi * 50 - $coin;
$per = &point(($t_game*50/$per), 3) if $per;

# 実戦データ整理 を表示
$data2 = "<table border=1 align='center' cellspacing=0>
<tr><td colspan=7 align='center' bgcolor='#ffffaa'>$sub2</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><td bgcolor='#ffffaa'>連荘率(BB)</td><td align='right'>$ren/$bunbo = $ren_rate %</td></tr>
<tr><td bgcolor='#ffffaa'>BB</td><td align='right'>$bbcount</td><td align='right'>1/$bbprob</td>
<td bgcolor='#ffffaa'>回収</td><td align='right'>$coin 枚</td><td bgcolor='#ffffaa'>最大BB間</td>
<td align='right'>$max</td></tr>
<tr><td bgcolor='#ffffaa'>REG</td><td align='right'>$reg</td><td align='right'>1/$regprob</td>
<td bgcolor='#ffffaa'>収支</td><td align='right'><b><font color='$clr'>$shushi 円</font></b></td><td bgcolor='#ffffaa'>1k当たりのP数</td>
<td align='right'>$per</td></tr>
<tr><td bgcolor='#ffffaa'> </td><td align='right'> </td><td align='right'> </td>
<td bgcolor='#ffffaa'>PAYOUT</td><td align='right'>$wari %</td><td bgcolor='#ffffaa'>平均連荘数</td>
<td align='right'>$bbget_ave2 連</td></tr></table>
";
print "$data2";

# HTML ソース表示
$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>↑ テーブルのソース</caption><tr><td>};
print $data2;
print '</td></tr></table>';




# フッタ
print <<"__ HTML __";
<br><br><br><br>
<div align='right'>[ <a href='table_for_data_hokuto_memo.html'>memo</a> / <a href='table_for_data_hokuto.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=~m/(\d+)\.(\d+)/) { $x=$2; }
    elsif ($value!~m/\./) { $x='';  $value=$value.'.'; }
    $value= $value.'0'x($fig-length($x));
    return $value;
}


[ home / cgi / juggler / column / diary / bbs / link / welcome ]