#!/usr/bin/perl # 星の掛け合わせシミュレータ $mag="火水木月太金土"; $num="0123456789"; ############ 火のテーブル (火lim,火+,土lim,土+), 水月金土を除去後 $tues{"0000"}="3150"; #      $tues{"1000"}="3A52"; # 水    $tues{"0100"}="3050"; #  月   $tues{"1100"}="3A52"; # 水月   $tues{"0010"}="5B50"; #   金  $tues{"1010"}="3152"; # 水 金  $tues{"0110"}="3150"; #  月金  $tues{"1110"}="3052"; # 水月金  $tues{"0001"}="3C52"; #    土 $tues{"1001"}="3053"; # 水  土 $tues{"0101"}="3A52"; #  月 土 $tues{"1101"}="3053"; # 水月 土 $tues{"0011"}="3152"; #   金土 $tues{"1011"}="3153"; # 水 金土 $tues{"0111"}="3052"; #  月金土 $tues{"1111"}="3A53"; # 水月金土 if($ARGV[0] eq ''){ print "stars.pl [] sequence\n"; exit(1); } $vm=0; if($ARGV[0] eq '-s') { $vm=1; shift; } if($ARGV[0] eq '-e') { $vm=2; shift; } $desc=''; $init=0; if($ARGV[1] eq ''){ @star=(0,0,0,0,0,0,0); $seq=$ARGV[0]; }else { for($i=0;$i<7;$i++){ $star[$i+1]=substr($ARGV[0],$i,1); } $init=1; $desc=substr($ARGV[0],7); $seq=$ARGV[1]; } if($vm==0) { print "初期状態:"; for($i=0;$i<7;$i++){ print substr($num,$star[$i+1]*2,2); } print "\n操作順序:"; for($i=0;$i6)){ print "Illegal star $s\n"; last; } if($vm==0) { print substr($mag,$s*2,2); } $s=$s+1; # 1234567 if($s==1){ $n=""; if($star[2]>0) { $star[2]--; $n=$n."1"; } else { $n=$n."0"; } if($star[4]>0) { $star[4]--; $n=$n."1"; } else { $n=$n."0"; } if($star[6]>0) { $star[6]--; $n=$n."1"; } else { $n=$n."0"; } if($star[7]>0) { $star[7]--; $n=$n."1"; } else { $n=$n."0"; } $c=$tues{$n}; $l=substr($c,0,1); $u=substr($c,1,1); if(($u eq "A")&&($star[1]>0)) { $star[1]--; $u=0; } if($u eq "B") { if($star[1]>2) { $u=1; } else { $u=2; } } if(($u eq 'C')&&($star[1]>2)) { $star[1]--; $u=0;} if(($u>0)&&($star[1]+$u>$l)) { $star[1]=$l; } else { $star[1]+=$u; } $l=substr($c,2,1); $u=substr($c,3,1); if(($u>0)&&($star[7]+$u>$l)) { $star[7]=$l; } else { $star[7]+=$u; } }elsif($s==2){ # 水 if($star[3]>0) { if($star[1]<5) { $star[1]++; } if($star[2]>2) { $star[2]--; }} else { if($star[2]<3) { $star[2]++; }} if($star[5]>0) { $star[5]--; if($star[6]<5) { $star[6]++; }} }elsif($s==3){ # 木 if($star[3]<3) { $star[3]++; } if($star[6]>0) { $star[6]--; if($star[4]<5) { $star[4]++; }} if($star[1]>0) { $star[1]--; if($star[7]>0) { if($star[3]<4) { $star[3]++; }} else { if($star[3]<5) { $star[3]++; }} } # 土があると木は5以上にならない by Sorcerian Data page }elsif($s==4){ # 月 if($star[4]<3) { $star[4]++; } if($star[2]>0) { if($star[2]>5) { $star[2]--; } # 水>5で急激に減衰 $star[2]--; if($star[4]<5) { $star[4]++; }} }elsif($s==5){ # 太 if($star[5]<3) { $star[5]++; } if($star[4]>0) { $star[4]--; if($star[6]<5) { $star[6]++; }} if($star[1]>0) { $star[1]--; if($star[5]<5) { $star[5]++; }} }elsif($s==6){ # 金 if(($star[2]>0)&&($star[5]>0)){ # 水太 $star[2]--; # 水は消える if($star[6]>2) { $star[6]--; } # 金が3つ以上あるとさらに消える if($star[6]>0) { $star[6]--; } # 金があるとさらに消える if($star[3]<5) { $star[3]++; } } elsif($star[2]>0) { # 水 $star[2]--; } elsif($star[5]>0) { # 太 if($star[3]<5) { $star[3]++; } } else { # その他 if($star[6]<3) { $star[6]++; } } }elsif($s==7){ if($star[6]>0) { $star[6]--; if($star[1]<5) { $star[1]++; }} if($star[3]>0) { $star[3]--; if($star[7]>2) { $star[7]--; }} else { if($star[7]<3) {$star[7]++; }} } if($vm==0) { print "|"; for($i=0;$i<7;$i++){ print substr($num,$star[$i+1]*2,2); } print "\n"; } } if($vm==1) { for($i=0;$i<7;$i++){ print substr($mag,$i*2,2).":"; print substr($num,$star[$i+1]*2,2)." "; } print "\n"; } if($vm==2) { for($i=0;$i<7;$i++){ print $star[$i+1]; } print "\n"; }