#! /usr/local/bin/perl
loadFormdata();
if($F{"mode"} eq ""){
DecCoise();
}elsif($F{"mode"} eq "game"){
Game();
}elsif($F{"mode"} eq "DecMake"){
yomikomiK("deck/$F{'DecNumber'}.dat");
$key =~ s/\n//;
if($F{"key"} eq $key){
DecMake();
}else{
DecCoise();
}
}elsif($F{"mode"} eq "DecMake1"){
DecMake1();
}elsif($F{"mode"} eq "DecDelete"){
yomikomiK("deck/$F{'DecNumber'}.dat");
$key =~ s/\n//;
if($F{"key"} eq $key){
DecDelete();
}else{
DecCoise();
}
}elsif($F{"mode"} eq "Lobby"){
Lobby();
}else{
DecCoise();
}
exit;
#=ゲーム=========================================================================================
sub Game {
yomikomiGame();
#############################################
# 新規ゲーム (デッキをGDデータに入れ、シャッフル)
#
if($F{"NewGame"}){
yomikomiK("deck/$F{'DecNumber'}.dat");
#ゲームデータに名前を登録
yomikomiGame();
yomikomiGame2($F{"PlayNumber"});
$PlayName{$F{"PlayNumber"}}=$F{"Name"};
$DecNumber{$F{"PlayNumber"}}=$F{'DecNumber'};
kakikomiGame2($F{"PlayNumber"});
kakikomiGame();
#デッキデータをGDデータに
$b=-1;
for($i=1 ; $i < @KDECDATA ; ++$i){
for($a=0 ; $a < $Maisuu{$i} ; ++$a){
++$b;
$CardListN[$b]=$CardListN{$i};
$Basyo[$b]="LB";
}
}
#$bはここから合計枚数
for($a=0 ; $a <= $b ; ++$a){
$c=0;
for($i=0 ; $i <= $b ; ++$i){
if($Z[$i] eq ""){
$kariban[$c]=$i;
++$c;
}
}
#$cは次のループまで「$Z[]が割り振られていないカードの数」
if($c == 0){$Z[$kariban[$c]]=0}
else{
$e=int(rand $c);--$c;
$Z[$kariban[$e]]=$c;
}
}
#書き込み。G2,3は枚数が不確定なこの時しか使わない。
kakikomiG2($b);
kakikomiG3("game/$F{'PlayNumber'}.dat");
}
#############################################
# ループの準備 $PlayL[0〜プレイヤー数]で、ループするプレイヤーナンバーを返す
#
#・$PlayL[テーブル内プレイヤーナンバー]=一般プレイヤーナンバー;
if($F{'PlayNumber'} == 0 or $F{'PlayNumber'} == 1){$PlayL[0] = 0 ; $PlayL[1] = 1 ; $Table=1}
elsif($F{'PlayNumber'} == 2 or $F{'PlayNumber'} == 3){$PlayL[0] = 2 ; $PlayL[1] = 3; $Table=2}
elsif($F{'PlayNumber'} == 4 or $F{'PlayNumber'} == 5 or $F{'PlayNumber'} == 6 or $F{'PlayNumber'} == 7){$PlayL[0] = 4 ; $PlayL[1] = 5 ; $PlayL[2] = 6 ; $PlayL[3] = 7; $Table=3}
elsif($F{'PlayNumber'} == 8 or $F{'PlayNumber'} == 9 or $F{'PlayNumber'} == 10 or $F{'PlayNumber'} == 11){$PlayL[0] = 8 ; $PlayL[1] = 9 ; $PlayL[2] = 10 ; $PlayL[3] = 11; $Table=4}
$i2=0;#全デッキのカードデータを表示するための、全デッキのカードの種類(デッキ間において重複の可能性はあり)
#############################################
# ここからループ!
#
for($i = 0 ; $i < @PlayL ; ++$i){
yomikomiGame2($PlayL[$i]);
#############################################
# ライフ操作
if($PlayL[$i] eq $F{"PlayNumber"} and $F{"mode2"} eq "LifeS"){
$Life{$F{"PlayNumber"}}=$F{"Life"};
kakikomiGame2($F{"PlayNumber"});
kakikomiGame();
}
#
#############################################
# ゲームデッキデータを読み込み、それぞれの場所のカード枚数をカウント
#・二次元ハッシュを使う。「$MaisuuG{場所記号}->{プレイヤーナンバー}」という形で
yomikomiG("game/$PlayL[$i].dat");
%MaisuuG="";
for($i2=0 ; $i2 < @GDECDATA ; ++$i2){
++$MaisuuG{$Basyo[$i2]}
}
#
#############################################
# 構築デッキデータからカードテキストを読み込む
#
yomikomiK("deck/$DecNumber{$PlayL[$i]}.dat");
for($i2=1 ; $i2 < @KDECDATA ; ++$i2){
$CardDataH[$CardDataSuu]="if(CN == $CardListN{$i2}){\n text.innerHTML='
$CardData{$CardListN{$i2}}
';\n}";
++$CardDataSuu;
}
#
#############################################
# 書き込み系プログラム
#
if($PlayL[$i] eq $F{'PlayNumber'} and $F{"mode2"} eq "Draw"){
for ($a=0; $a < $F{"Maisuu"} ; ++$a) {
if($MaisuuG{$F{'SakiB'}} eq ""){$MaisuuG{$F{'SakiB'}}=0}
if($MaisuuG{"LB"} > 0){
for($i2=0 ; $i2 < @GDECDATA ; ++$i2){
if($Basyo[$i2] eq "LB" and $Z[$i2] > $MAX){
$MAX=$Z[$i2];$Taisyou=$i2;
}
}
$Basyo[$Taisyou]=$F{'SakiB'};
$Z[$Taisyou]=$MaisuuG{$F{'SakiB'}};
--$MaisuuG{"LB"};
++$MaisuuG{$F{'SakiB'}};
$MAX=0;$Taisyou=0;
}
}
kakikomiG("game/$PlayL[$i].dat");
}elsif($PlayL[$i] eq $F{'PlayNumber'} and $F{"mode2"} eq "Kakikomi"){
if($Basyo[$F{"Taisyou"}] ne $F{"Basyo"} or $F{"Basyo"} eq "PU" or $F{"Basyo"} eq "PT" or $F{"Basyo"} eq "MU" or $F{"Basyo"} eq "MT" or $F{"Basyo"} eq "TU" or $F{"Basyo"} eq "TT"){
if($Basyo[$F{"Taisyou"}] ne $F{"Basyo"} and $F{"Basyo"} ne ""){
$Seiri=$Basyo[$F{"Taisyou"}];
$Seiri2=$Z[$F{"Taisyou"}];
$Basyo[$F{"Taisyou"}]=$F{"Basyo"};
}
if($F{"Basyo"} eq "PU" or $F{"Basyo"} eq "PT" or $F{"Basyo"} eq "MU" or $F{"Basyo"} eq "MT" or $F{"Basyo"} eq "TU" or $F{"Basyo"} eq "TT"){
if($F{"Z"} ne ""){$Z[$F{"Taisyou"}]=$F{"Z"}}
if($F{"X"} ne ""){$X[$F{"Taisyou"}]=$F{"X"}}
if($F{"Y"} ne ""){$Y[$F{"Taisyou"}]=$F{"Y"}}
if($F{"Comment"} ne ""){$Comment[$F{"Taisyou"}]=$F{"Comment"}}
}
if($F{"Basyo"} eq "LB" or $F{"Basyo"} eq "HA" or $F{"Basyo"} eq "GY" or $F{"Basyo"} eq "RM" or $F{"Basyo"} eq "FR"){
if($MaisuuG{$F{"Basyo"}} eq ""){$MaisuuG{$F{"Basyo"}}=0}
$Z[$F{"Taisyou"}]=$MaisuuG{$F{"Basyo"}};
$X[$F{"Taisyou"}]="";$Y[$F{"Taisyou"}]="";
}
if($Seiri eq "LB" or $Seiri eq "HA" or $Seiri eq "GY" or $Seiri eq "RM" or $Seiri eq "FR"){
for($i2=0 ; $i2 < @GDECDATA ; ++$i2){
if($Basyo[$i2] eq $Seiri and $Z[$i2] > $Seiri2){
--$Z[$i2];
}
}
}
if($Seiri ne $F{"Basyo"}){
--$MaisuuG{$Seiri};
++$MaisuuG{$F{"Basyo"}};
}
kakikomiG("game/$PlayL[$i].dat");
}
}elsif($PlayL[$i] eq $F{'PlayNumber'} and $F{"mode2"} eq "LBBottom"){
if($Basyo[$F{"Taisyou"}] ne "LB"){
for($i2=0 ; $i2 < @GDECDATA ; ++$i2){
if($Basyo[$i2] eq "LB"){
++$Z[$i2];
}
}
$Seiri=$Basyo[$F{"Taisyou"}];
$Seiri2=$Z[$F{"Taisyou"}];
$Basyo[$F{"Taisyou"}]="LB";
$Z[$F{"Taisyou"}]=0;
$X[$F{"Taisyou"}]="";$Y[$F{"Taisyou"}]="";
if($Seiri eq "LB" or $Seiri eq "HA" or $Seiri eq "GY" or $Seiri eq "RM" or $Seiri eq "FR"){
for($i2=0 ; $i2 < @GDECDATA ; ++$i2){
if($Basyo[$i2] eq $Seiri and $Z[$i2] > $Seiri2){
--$Z[$i2];
}
}
}
--$MaisuuG{$Seiri};
++$MaisuuG{"LB"};
kakikomiG("game/$PlayL[$i].dat");
}
}elsif($PlayL[$i] eq $F{'PlayNumber'} and $F{"mode2"} eq "TupUntup"){
if($Basyo[$F{"Taisyou"}] eq "PU"){$Basyo[$F{"Taisyou"}]="PT"}
elsif($Basyo[$F{"Taisyou"}] eq "PT"){$Basyo[$F{"Taisyou"}]="PU"}
elsif($Basyo[$F{"Taisyou"}] eq "MT"){$Basyo[$F{"Taisyou"}]="MU"}
elsif($Basyo[$F{"Taisyou"}] eq "MU"){$Basyo[$F{"Taisyou"}]="MT"}
elsif($Basyo[$F{"Taisyou"}] eq "TT"){$Basyo[$F{"Taisyou"}]="TU"}
elsif($Basyo[$F{"Taisyou"}] eq "TU"){$Basyo[$F{"Taisyou"}]="TT"}
kakikomiG("game/$PlayL[$i].dat");
}elsif($PlayL[$i] eq $F{'PlayNumber'} and $F{"mode2"} eq "Untup"){
for($i2=0 ; $i2 < @GDECDATA ; ++$i2){
if($Basyo[$i2] eq "PT"){$Basyo[$i2]="PU"}
elsif($Basyo[$i2] eq "MT"){$Basyo[$i2]="MU"}
elsif($Basyo[$i2] eq "TT"){$Basyo[$i2]="TU"}
}
kakikomiG("game/$PlayL[$i].dat");
}elsif($PlayL[$i] eq $F{'PlayNumber'} and $F{"mode2"} eq "Shuffle"){
for($a=0 ; $a < @GDECDATA ; ++$a){
if($Basyo[$a] eq "LB"){$Z[$a]="";}
}
for($a=0 ; $a < @GDECDATA ; ++$a){
$c=0;
for($i2=0 ; $i2 <= @GDECDATA ; ++$i2){
if($Z[$i2] eq "" and $Basyo[$i2] eq "LB"){
$kariban[$c]=$i2;
++$c;
}
}
#$cは次のループまで「$Z[]が割り振られていないカードの数−1」
if($c == 0){$Z[$kariban[$c]]=0}
else{
$e=int(rand $c);--$c;
$Z[$kariban[$e]]=$c;
}
}
kakikomiG("game/$PlayL[$i].dat");
}
#
#############################################
# ゲームデッキデータをループさせ、変数に具体的な表示用パーツを登録する。
#
#・手札、リムーブ、フリーは自分のものしか表示しない
#・場、墓地はみんな表示するが、自分のものしか選択はできない
#・ライブラリーはみんな表示しない(サーチモードの時は自分のをする)
#・カウント用変数 $HAG[テーブル内プレイヤーナンバー]:手札合計 $LMG[テーブル内プレイヤーナンバー]:リムーブ合計 ……
#・表示用変数 $HAH[手札番号(Z)]:手札 $RMG[0〜リムーブ枚数]:リムーブ ……
#・$i2にはゲーム内カードナンバー
#・$CountPは全てのプレイヤーのパーマネントの総数
#・$TekiMikataはこのプレイヤーが敵か見方か。敵だと1、見方だと0が入る。
#・敵プレイヤーはカードムーブ領域の中心座標に対して、データに記載されている位置と対象になるよう表示する。
# 現在のカードムーブ領域の中心座標は(X=500px,Y=205px)。カードムーブ領域のインターフェイスをいじればここも変更すること!
$TekiMikata=($PlayL[$i]+$F{"PlayNumber"})%2;
for($i2=0 ; $i2 < @GDECDATA ; ++$i2){
if($PlayL[$i] eq $F{"PlayNumber"}){
if($Basyo[$i2] eq "HA"){
$HAH[$Z[$i2]]="$Z[$i2].$CardName{$CardListN[$i2]}
";
}elsif($Basyo[$i2] eq "GY"){
$GYH[$Z[$i2]]="$Z[$i2].$CardName{$CardListN[$i2]}
";
}elsif($Basyo[$i2] eq "FR"){
$FRH[$Z[$i2]]="$Z[$i2].$CardName{$CardListN[$i2]}
";
}elsif($Basyo[$i2] eq "RM"){
$RMH[$Z[$i2]]="$Z[$i2].$CardName{$CardListN[$i2]}
";
##サーチテスト##
}elsif($Basyo[$i2] eq "LB" and $F{"mode2"} eq "Search"){
$HOUKOKU[$Z[$i2]]="$Z[$i2].$CardName{$CardListN[$i2]}
";
##サーチ本物##
# }elsif($Basyo[$i2] eq "LB" and $F{"mode2"} eq "Search"){
# $HOUKOKU[$Z[$i2]]="$Z[$i2].$CardName{$CardListN[$i2]}
";
##パーマネント表示##
}elsif($Basyo[$i2] eq "PU"){
$PH[$CountP]="$CardName{$CardListN[$i2]}
\n";
++$CountP;
}elsif($Basyo[$i2] eq "PT"){
$Y[$i2]=$Y[$i2]+5;$X[$i2]=$X[$i2]-5;
$PH[$CountP]="$CardName{$CardListN[$i2]}
\n";
++$CountP;
}elsif($Basyo[$i2] eq "MU"){
$PH[$CountP]="裏返し
\n";
++$CountP;
}elsif($Basyo[$i2] eq "MT"){
$Y[$i2]=$Y[$i2]+5;$X[$i2]=$X[$i2]-5;
$PH[$CountP]="裏返し
\n";
++$CountP;
}
##他プレイヤーの表示##
}else{
if($Basyo[$i2] eq "GY"){
# $GYH[$PlayL[$i]][$Z[$i2]]="$Z[$i2].$CardName{$CardListN[$i2]}
";
##パーマネント表示##
}elsif($Basyo[$i2] eq "PU"){
if($TekiMikata){$X[$i2]=960-$X[$i2];$Y[$i2]=380-$Y[$i2]}
$PH[$CountP]="$CardName{$CardListN[$i2]}
\n";
++$CountP;
}elsif($Basyo[$i2] eq "PT"){
$Y[$i2]=$Y[$i2]+5;$X[$i2]=$X[$i2]-5;
if($TekiMikata){$X[$i2]=960-$X[$i2];$Y[$i2]=380-$Y[$i2]}
$PH[$CountP]="$CardName{$CardListN[$i2]}
\n";
++$CountP;
}elsif($Basyo[$i2] eq "MU"){
if($TekiMikata){$X[$i2]=960-$X[$i2];$Y[$i2]=380-$Y[$i2]}
$PH[$CountP]="裏返し
\n";
++$CountP;
}elsif($Basyo[$i2] eq "MT"){
$Y[$i2]=$Y[$i2]+5;$X[$i2]=$X[$i2]-5;
if($TekiMikata){$X[$i2]=960-$X[$i2];$Y[$i2]=380-$Y[$i2]}
$PH[$CountP]="裏返し
\n";
++$CountP;
}
}
}
#
#############################################
$LBM[$PlayL[$i]]=$MaisuuG{"LB"};
$HAM[$PlayL[$i]]=$MaisuuG{"HA"};
$GYM[$PlayL[$i]]=$MaisuuG{"GY"};
$FRM[$PlayL[$i]]=$MaisuuG{"FR"};
if($GYM[$PlayL[$i]] eq ""){$GYM[$PlayL[$i]]=0}
if($FRM[$PlayL[$i]] eq ""){$FRM[$PlayL[$i]]=0}
}
print <
Magic: The Gathering