source : アラジンA
#!/usr/bin/perl
# アラジンA シミュレーション
$cginame = 'aladdin.cgi';
$title = 'アラジンA シミュレーション';
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) = @input;
$start_m = $mode;
$mode = 0 if !$mode;
$hazd = 0 if !$hazd;
$mtrans = 0 if(!$mtrans);
$haz_chk[$hazd] = 'checked';
print "Content-Type: text/html\n\n";
# ヘッダとフォームの表示
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_aladdin.html'>data</a> / <a href='aladdin_memo.html'>memo</a> / <a href='aladdin.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>最初のモード</td><td><input type='text' size=2 name='mode' maxlength=1 value='$mode'> </td></tr>
<tr><td><font size=2>純ハズレの表\示</font></td><td><input type='radio' name='hazd' value=0 $haz_chk[0]> 無
<input type='radio' name='hazd' value=1 $haz_chk[1]> 有</td></tr>
</table><br>
<input type='submit' value="開始">
</form>
<table border=0><tr><td><font size=2>
設定は 1 〜 6 までの数値を入力。<br>
最初のモードには 0 〜 2 までの数値を入力。<br>
( <b>0</b>:低確率 <b>1</b>:高確ショート <b>2</b>:高確ロング )<br></font>
</td></tr></table>
</center>
__ 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]/ } @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 q{<div align='right'>[ <a href='../simu_data_aladdin.html'>data</a> / <a href='aladdin_memo.html'>memo</a> / <a href='aladdin.html'>source</a> / <a href='../index.html'>home</a> ]</div>};
exit;
}
# データ /65536
@big = (149,149,149,160,180,219); $big = $big[$s-1];
@reg = (100,100,100,110,120,132); $reg = $reg[$s-1];
@haz = (328,328,328,307,277,226); $haz = $haz[$s-1];
$rep = 8980;
$k6 = 11230;
$k5 = 730;
$sin = 44019;
$bigget = 395.352; $regget = 127;
@low_ac = (9,1,0,0,0,0); #/1024 アラチャン抽選 単チェ、ハズレ目、リプ、月、チェ、シングルの順
@high_ac = (512,50,50,50,50,50); #/1024
@mup_big = (13654,2218,512); #/16384 mode up 左から 0→0 , 0→1 , 0→2
@mup_reg = (16302,0,82); #/16384
$mup_haz[1] = '14746 819 819';
$mup_haz[2] = '14398 993 993';
$mup_haz[3] = '14030 1177 1177';
$mup_haz[4] = '13442 1471 1471';
$mup_haz[5] = '12296 2044 2044';
$mup_haz[6] = '8192 4096 4096';
@mup_haz = split(/ /, $mup_haz[$s]);
@mup_haz2 = (0,12288,4096); # 高確ショートから高確ロングへ mode up 4096/16384
@ten = (13220,3000,164); #/16384
@mdown1 = (323,237,323,235,341,230); #/16384 左から設定1~6。 リプ、月、チェ、シングル
@mdown2 = (59,64,55,63,53,56);
$mdown1 = $mdown1[$s-1];
$mdown2 = $mdown2[$s-1];
@sac = (8192,5547,820,820,820,41,41,41,41,17,1,1,1,1); #/16384
@sac2 = (0,10,30,50,100,200,300,400,500,1000,2000,3000,4000,5000);
@ten_mt = (3000,164); #/16384
$hazd2 = ($hazd) ? '有' : '無';
# あらかじめ計算
$k6_r = $sin + $k6;
$rep_r = $k6_r + $rep;
$k5_r = $rep_r + $k5;
$haz_r = $k5_r + $haz;
$big_r = $haz_r + $big;
$reg_r = $big_r + $reg;
print <<"__ TBL __";
<br><br><center><table border=1 cellspacing=0><caption><font size=2>最初のmode <b>$mode</b>
純ハズレの表\示 <b>$hazd2</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>備考</font></td><td><font size=2>BIG<br>回数</font></td>
<td><font size=2>REG<br>回数</font></td><td><font size=2>AC<br>回数</font></td><td><font size=2>投資</font></td>
<td><font size=2>コイン</font></td><td><font size=2>総プレイ数</font></td></tr>
__ TBL __
#-------------------
# シミュレート開始
#=------------------
$g = 0; $g2 = 0; # $g 総プレイ数, $g2 はシングルボーナスを1Pとカウントした総プレイ数
$count = $coin = $sac = $bigcount = $regcount = $account = $hazcount = 0;
$hazm0 = $hazmup = $sactotal = $ren = 0; $msg=' ';
while (1) {
$g++; $g2++; $count++;
if ($coin < 3) { $coin += 50; $k++; $totalk++; }
$coin -= 3;
if ($ac_start) {
$ac_start = 0; $account++; $ac_on = 1; $ac_play = 1; $ren++;
$msg = ($ten && $ren==1) ? '<font color=\'blue\' size=2><b>天井</b></font>':"<font size=2>$ren 連</font>";
$flag = 'ac'; $disp = 1; $clr = '#ffffcc';
$get = (!$sacplay) ? '<font color=\'red\' face=\'Arial black\' size=2><b>ALADDIN CHANCE</b></font>'
: '<font color=\'#00aa00\' face=\'Arial black\' size=2><i><b>SUPER<br>ALADDIN CHANCE</i></b></font>';
}
$r = int(rand(65536)+1);
if ($r <= $sin) { # single
if ($ac_on) { $coin += 20; $g2++; } # AC中 sin 6枚+14枚
else {
$r = int(rand(65536)+1); $flag = 'sin';
if ($r <= 164) { $coin += 20; $g2++; } # 押し順に正解
}
} elsif ($r <= $k6_r) { # moon
if ($ac_on) { $coin += 6; }
else {
$r = int(rand(65536)+1); $flag = 'moon';
$coin += 6 if($r <= 32932); # 押し順に正解
}
} elsif ($r <= $rep_r) { $coin += 3; $flag = 'rep'; } # replay
elsif ($r <= $k5_r) { # cherry
$coin += 5; $flag = 'che';
if ($count>=1251 && !$ten) { $ac_start = 1; $ten = 1; $flag = 'ac'; }
}
elsif ($r <= $haz_r) { # haz
$hazcount++;
if ($count>=1251 && !$ten) { $ac_start = 1; $ten = 1; $flag = 'ten'; }
if ($hazd) {
$disp = 1; $get2 = '<font size=2 color=\'blue\'>純ハズレ</font>';
$get = ($get) ? $get."<br>$get2" : $get2;
}
if ($ac_on) { # SAC抽選
$sac = &mt(@sac);
if ($sac>0) {
$flag = 'sac'; $disp = 1; $sac = $sac2[$sac]; $sacplay += $sac; $sactotal += $sac;
$get2 = "<font color='#00aa00'><b>Super AC $sac <font size=2>当選</font></b></font>";
$get = ($get) ? $get."<br>$get2" : $get2;
}
} else {
$r = int(rand(4)+1);
$flag = ($r == 1) ? 'haz' : 'sinche'; # ハズレ目と単チェの振り分け
}
} elsif ($r <= $big_r) { # BIG
$coin += $bigget; $bigcount++;
$flag = 'b'; $disp = 1; $get2 = '<font color=\'red\' face=\'Arial black\'><b>777</b></font>';
$get = ($get) ? $get."<br>$get2": $get2;
} else { # REG
$coin += $regget; $regcount++;
$flag = 'r'; $disp = 1; $get2 ='<b>REG</b>';
$get = ($get) ? $get."<br>$get2": $get2;
}
# AC 抽選
if ($flag eq 'haz') {
$r = int(rand(1024)+1);
$ac_start = 1 if ((!$mode && $r==1) or ($mode && $r<=50 && !$ac_on));
} elsif ($flag eq 'sinche') {
$r = int(rand(1024)+1);
$ac_start = 1 if ((!$mode && $r<=9) or ($mode && $r<=512 && !$ac_on));
} elsif ($mode && !$ac_on && (($flag eq 'sin') or ($flag eq 'rep') or ($flag eq 'moon') or ($flag eq 'che'))) {
$r = int(rand(1024)+1);
$ac_start = 1 if ($r<=50);
}
# モード移行
if (!$ac_start && !$ac_on) {
if (!$mode && $flag eq 'b') { @arg = @mup_big; }
elsif (!$mode && $flag eq 'r') { @arg = @mup_reg; }
elsif (!$mode && (($flag eq 'haz') or ($flag eq 'sinche'))) { @arg = @mup_haz; $hazm0++;}
elsif ($mode==1 && (($flag eq 'haz') or ($flag eq 'sinche'))) { @arg = @mup_haz2; }
elsif (!$mode && $flag eq 'rep') {
$r = int(rand(65536)+1);
@arg = ($r==1 or $r==65536) ? @mup_big : 0;
} elsif (!$mode && $flag eq 'che') { $r = int(rand(65536)+1); @arg = @mup_haz if ($r<=2); }
elsif ($mode==1 && $flag eq 'che') { $r = int(rand(65536)+1); @arg = @mup_haz2 if ($r<=2); }
else { $arg[0] = 0; }
@arg = @ten if ($ten && $flag eq'ten' && !$mode);
$mode = &mt(@arg) if $arg[0]; # モード昇格抽選
if ((($flag eq 'haz') or ($flag eq 'sinche')) && $mode>=1 && $arg[0]) { $hazmup++; }
if (($flag eq 'sin') or ($flag eq 'rep') or ($flag eq 'moon') or ($flag eq 'che')) {
$r=int(rand(16834)+1);
if (($mode==1 && $r<=$mdown1) or ($mode==2 && $r<=$mdown2)) { $mode=0; $ren=0; } # モード降格抽選
}
}
if ($ac_on) { # AC終了
if ($ac_play==10 && !$sac_on) {
$flag = 'end'; $disp = 1; $ac_on = 0; $get = 'ac <font size=2>終了</font>'; $clr = 'white';
if ($sacplay > 0) { $ac_start = 1; $sac_on = 1; }
} elsif ($sac_on) {
$sacplay--; $sacplay2++;
if ($sacplay==0 or $sacplay2>=9999) {
$flag = 'end'; $disp = 1; $ac_on = 0; $sac_on = 0; $sacplay2 = 0;
$get = 'sac <font size=2>終了</font>'; $clr = 'white';
}
}
$ac_play++;
}
if ($disp) {
$k_d = ($k>0 && (($flag eq 'b') or ($flag eq 'r') or ($flag eq 'ac'))) ? $k.'k' : ' ';
$coin_d = int($coin);
$count_d = (($flag eq 'b') or ($flag eq 'r')) ? "<b>$count</b>" : "($count)";
$mode_d = ($mode >= 1) ? "<font color='red'>$mode</font>" : $mode;
if ($bigcount) { $bigp = int($g/$bigcount+0.5); $bigp = "$bigcount (1/$bigp)"; } else { $bigp = 0; }
if ($regcount) { $regp = int($g/$regcount+0.5); $regp = "$regcount (1/$regp)"; } else { $regp = 0; }
if ($account) { $acp = int($g/ $account+0.5); $acp = "$account (1/$acp)"; } else { $acp = 0; }
print "<tr align='center' bgcolor='$clr'><td>$count_d</td><td>$get</td><td>$mode_d</td><td>$msg</td>";
print "<td>$bigp</td><td>$regp</td><td>$acp</td><td>$k_d</td><td>$coin_d</td><td>$g</td></tr>\n";
if (($flag eq 'b') or ($flag eq 'r')) { $count = $ten = 0; }
if (($flag eq 'b') or ($flag eq 'r') or ($flag eq 'ac')) { $k = 0; }
$msg = ' '; $get = ''; $disp = 0;
}
if($g2 >= $play) {
$k = ($k > 0) ? $k.'k' : ' ';
$coin_d = int($coin);
if ($bigcount) { $bigp = int($g/$bigcount+0.5); $bigp = "$bigcount (1/$bigp)"; } else { $bigp = 0; }
if ($regcount) { $regp = int($g/$regcount+0.5); $regp = "$regcount (1/$regp)"; } else { $regp = 0; }
if ($account) { $acp = int($g/ $account+0.5); $acp = "$account (1/$acp)"; } else { $acp = 0; }
print "<tr align='center'><td>$count</td><td>ヤメ</td><td>$mode</td><td> </td><td>$bigp</td>";
print "<td>$regp</td><td>$acp</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);
if ($bigcount) { $bigp = &point(($g/$bigcount),3); } else { $bigp = ''; }
if ($regcount) { $regp = &point(($g/$regcount),3); } else { $regp = ''; }
if ($account) { $acp = &point(($g/ $account),3); } else { $acp = ''; }
if ($hazcount) { $hazp = &point(($g/$hazcount),3); } else { $hazp = ''; }
if ($hazmup) { $hazmup2 = &point(($hazm0/$hazmup),2); } else { $hazmup2 = 0; }
# 整理したデータと再試行ボタン、フッタの表示
print <<"__ RESULT __";
</table><br><br>
<table border=0><tr><td colspan=2 align='center' bgcolor='#ffffcc'>
<b><font size=4 color='red'>アラジンA</font> 設定 $s</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></font></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></td></tr>
<tr><td align='center'><font color='red' size=2 face='Arial black'><b>ALADDIN<br>CHANCE</b></font></td>
<td align='right'><b>$account 回 <font color='red'>1/$acp</font></b></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>からの昇格</font></td>
<td align='right'><b>$hazmup / $hazm0 <font color='red'>1/$hazmup2</font></b></td></tr>
<tr><td align='center'><font size=2>SACトータル<br>プレイ数</font></td>
<td align='right'><b><font color='red'>$sactotal P</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'><font color='$opt3'><b>$shushi 円</b></font></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='$start_m'>
<input type='hidden' name='stock' 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_aladdin.html'>data</a> / <a href='aladdin_memo.html'>memo</a> / <a href='aladdin.html'>source</a> / <a href='../index.html'>home</a> ]</div>
</body></html>
__ RESULT __
exit;
# モード移行
sub mt {
my($x,$r,$i);
$x = $_[0]; $i = 0;
$r = int(rand(16384)+1);
while ($r > $x) { $i++; $x+=$_[$i]; }
return $i;
}
# 少数を四捨五入して指定の桁にする
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;
}