#! /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
MTGCGI  
ライブラリー:$LBM[$F{"PlayNumber"}]枚
手札
フリー
END #=場のカードを表示=================================================================== for($i=0 ; $i < @PH ; ++$i){ print qq($PH[$i]); } print <
END if($PlayName{$PlayL[0]} ne ""){print qq($PlayName{$PlayL[0]}  ライブラリー:$LBM[$PlayL[0]] 手札:$HAM[$PlayL[0]] 墓地:$GYM[$PlayL[0]] フリー:$FRM[$PlayL[0]] ライフ:$Life{$PlayL[0]}
\n)} if($PlayName{$PlayL[2]} ne ""){print qq($PlayName{$PlayL[2]}  ライブラリー:$LBM[$PlayL[2]] 手札:$HAM[$PlayL[2]] 墓地:$GYM[$PlayL[2]] フリー:$FRM[$PlayL[2]] ライフ:$Life{$PlayL[2]}
\n)} print qq(
); if($PlayName{$PlayL[1]} ne ""){print qq($PlayName{$PlayL[1]}  ライブラリー:$LBM[$PlayL[1]] 手札:$HAM[$PlayL[1]] 墓地:$GYM[$PlayL[1]] フリー:$FRM[$PlayL[1]] ライフ:$Life{$PlayL[1]}
\n)} if($PlayName{$PlayL[3]} ne ""){print qq($PlayName{$PlayL[3]}  ライブラリー:$LBM[$PlayL[3]] 手札:$HAM[$PlayL[3]] 墓地:$GYM[$PlayL[3]] フリー:$FRM[$PlayL[3]] ライフ:$Life{$PlayL[3]}
\n)} print < ライフ: 







報告
END for($i=@HOUKOKU ; $i >= 0 ; --$i){ print qq($HOUKOKU[$i]\n); } print <
END } #=ロビー========================================================================================= sub Lobby { yomikomiK("deck/$F{'DecNumber'}.dat"); yomikomiGame(); if($F{"Reset"} ne ""){ if($F{"Reset"} == 1){ yomikomiGame2(0); yomikomiGame2(1); %PlayName="";%DecNumber="";$Life{0}=20;$Life{1}=20; kakikomiGame2(0); kakikomiGame2(1); }elsif($F{"Reset"} == 2){ yomikomiGame2(2); yomikomiGame2(3); %PlayName="";%DecNumber="";$Life{2}=20;$Life{3}=20; kakikomiGame2(2); kakikomiGame2(3); }elsif($F{"Reset"} == 3){ yomikomiGame2(4); yomikomiGame2(5); yomikomiGame2(6); yomikomiGame2(7); %PlayName="";%DecNumber="";$Life{4}=30;$Life{5}=0;$Life{6}=30;$Life{7}=0; kakikomiGame2(4); kakikomiGame2(5); kakikomiGame2(6); kakikomiGame2(7); }elsif($F{"Reset"} == 4){ yomikomiGame2(8); yomikomiGame2(9); yomikomiGame2(10); yomikomiGame2(11); %PlayName="";%DecNumber="";$Life{8}=30;$Life{9}=0;$Life{10}=30;$Life{11}=0; kakikomiGame2(8); kakikomiGame2(9); kakikomiGame2(10); kakikomiGame2(11); } kakikomiGame(); } for($i=0;$i<@GAMEDATA;++$i){ yomikomiGame2($i); if($i == 0 or $i == 2){ if($PlayName{$i} eq ""){ $Button[$i]="" }else{ $Button[$i]=" " } }elsif($i == 1 or $i == 3){ if($PlayName{$i} eq ""){ $Button[$i]="" }else{ $Button[$i]=" " } }elsif($i == 4 or $i == 8){ if($PlayName{$i} eq ""){ $Button[$i]="" }else{ $Button[$i]=" " } }elsif($i == 5 or $i == 9){ if($PlayName{$i} eq ""){ $Button[$i]="" }else{ $Button[$i]=" " } }elsif($i == 6 or $i == 10){ if($PlayName{$i} eq ""){ $Button[$i]="" }else{ $Button[$i]=" " } }elsif($i == 7 or $i == 11){ if($PlayName{$i} eq ""){ $Button[$i]="" }else{ $Button[$i]=" " } } } print < Magic: The Gathering
ロビー
プレイヤー名:

1st Desk               (2人戦用)
$Button[0]$Button[1]  
2nd Desk               (2人戦用)
$Button[2]$Button[3]  
3rd Desk               (4人戦用)

$Button[4]$Button[5]  
$Button[6]$Button[7]
4th Desk               (4人戦用)

$Button[8]$Button[9]  
$Button[10]$Button[11]
$DecName
($DecMaisuu枚)  製作者:$DecOwner
END for($i=1 ; $i < @KDECDATA ; ++$i){ print qq($CardName{$CardListN{$i}} ×$Maisuu{$i}
\n); } print < END } #=デッキメイク========================================================================================= sub DecMake { if($DecName eq ""){ $KDECDATA[0]="デッキ名をつけて下さい\t名前を入力してください\t\n"; open(FILE,">deck/$F{'DecNumber'}.dat"); eval{ flock(FILE, 2) }; print FILE @KDECDATA; close FILE; }else{ yomikomiK("deck/$F{'DecNumber'}.dat"); } print < Magic: The Gathering
デッキメイク
デッキ名:

制作者:

キー:$key
      
$DecName
($DecMaisuu枚)  製作者:$DecOwner
END for($i=1 ; $i < @KDECDATA ; ++$i){ print qq($CardName{$CardListN{$i}} ×$Maisuu{$i}
\n); } print <
10版カードリスト
END for($i=10000 ; $i < $a ; ++$i){ print qq($CardName{$i}
); } print < END } sub DecMake1 { yomikomiK("deck/$F{'DecNumber'}.dat"); $key =~ s/\n//; if($F{"DecName"} ne ""){$DecName=$F{"DecName"}} if($F{"DecOwner"} ne ""){$DecOwner=$F{"DecOwner"}} if($F{"key"} ne ""){$key=$F{"key"}} $KDECDATA[0]="$DecName\t$DecOwner\t$key\n"; if($F{"kazu"} > 0){ require '10.pl'; for($i=1 ; $i < @KDECDATA ; ++$i){ if($CardListN{$i} == $F{"CardListN"}){ $Maisuu{$i}=$F{"kazu"}; kakikomiK2($i); $flag=1;$i=@KDECDATA; }elsif($CardListN{$i} > $F{"CardListN"}){ kakikomiK4($i,"$F{'CardListN'}\t$F{'kazu'}\t$CardData{$F{'CardListN'}}\t$CardName{$F{'CardListN'}}\t$CardColor{$F{'CardListN'}}\n"); $flag=1;$i=@KDECDATA; } } if($flag != 1){ $a=1+@KDECDATA; kakikomiK4($a,"$F{'CardListN'}\t$F{'kazu'}\t$CardData{$F{'CardListN'}}\t$CardName{$F{'CardListN'}}\t$CardColor{$F{'CardListN'}}\n"); } }elsif($F{"kazu"} eq "0"){ for($i=1 ; $i < @KDECDATA ; ++$i){ if($CardListN{$i} == $F{"CardListN"}){ kakikomiK3($i); $i=@KDECDATA+1; } } } kakikomiK("deck/$F{'DecNumber'}.dat"); kanryou("書き込みました。","$ENV{'SCRIPT_NAME'}?mode=DecMake&DecNumber=$F{'DecNumber'}&key=$key "); } sub DecDelete { yomikomiK("deck/nodata.dat"); kakikomiK("deck/$F{'DecNumber'}.dat"); kanryou("削除しました","$ENV{'SCRIPT_NAME'}"); } #========================================================================================== sub DecCoise { print < Magic: The Gathering
デッキ選\択\
    \:ゲームへ  [ :キー  \:\調\整・新規作成  \:\削除 ] 

END for($i=0;$i<50;++$i){ yomikomiK2("deck/$i.dat"); ($DecName,$DecOwner)=split(/\t/,$KDECDATA[0]); if($DecName ne ""){ $DecName="$DecName $DecOwner"; }else{ $DecName="新規デッキ"; } print qq($i \ $DecName
\n) } print <
END } #=その他細かいの========================================================================================= # 構築デッキデータの読み込み書き込み sub yomikomiK { my $i; open(FILE,"<$_[0]"); eval{ flock(FILE, 1) }; @KDECDATA = ; close FILE; ($DecName,$DecOwner,$key)=split(/\t/,$KDECDATA[0]); for($i=1 ; $i < @KDECDATA ; ++$i){ yomikomiK3($i); } } sub yomikomiK2 { open(FILE,"<$_[0]"); eval{ flock(FILE, 1) }; @KDECDATA = ; close FILE; } sub yomikomiK3 { my ($CD, $CN , $CL); ($CardListN{$_[0]},$Maisuu{$_[0]},$CD,$CN,$CL) = split(/\t/,$KDECDATA[$_[0]]); $CardData{$CardListN{$_[0]}}=$CD; $CardName{$CardListN{$_[0]}}=$CN; $CardColor{$CardListN{$_[0]}}=$CL; $CardColor{$CardListN{$_[0]}} =~ s/\n//; } sub kakikomiK2 { $KDECDATA[$_[0]]="$CardListN{$_[0]}\t$Maisuu{$_[0]}\t$CardData{$CardListN{$_[0]}}\t$CardName{$CardListN{$_[0]}}\t$CardColor{$CardListN{$_[0]}}\n"; } sub kakikomiK3 { splice @KDECDATA,$_[0],1; } sub kakikomiK4 { splice @KDECDATA,$_[0],0,"$_[1]"; } sub kakikomiK { open(FILE,">$_[0]"); eval{ flock(FILE, 2) }; print FILE @KDECDATA; close FILE; } # ゲームデータの読み込み書き込み sub yomikomiGame { open(FILE,"; close FILE; } sub yomikomiGame2 { ($PlayName{$_[0]},$Life{$_[0]},$DecNumber{$_[0]}) = split(/\t/,@GAMEDATA[$_[0]]); $DecNumber{$_[0]} =~ s/\n//; } sub kakikomiGame2 { @GAMEDATA[$_[0]]="$PlayName{$_[0]}\t$Life{$_[0]}\t$DecNumber{$_[0]}\n"; } sub kakikomiGame { open(FILE,">game/GameData.dat"); eval{ flock(FILE, 2) }; print FILE @GAMEDATA; close FILE; } # ゲームデッキデータの読み込み書き込み sub yomikomiG { my $i; @CardListN="";@Basyo="";@Z="";@X="";@Y="";@Comment=""; open(FILE,"<$_[0]"); eval{ flock(FILE, 1) }; @GDECDATA = ; close FILE; for($i=0 ; $i < @GDECDATA ; ++$i){ ($CardListN[$i],$Basyo[$i],$Z[$i],$X[$i],$Y[$i],$Comment[$i]) = split(/\t/,@GDECDATA[$i]); $Comment[$i] =~ s/\n//; } } sub kakikomiG { my $i; for($i=0 ; $i < @GDECDATA ; ++$i){ $GDECDATA[$i]="$CardListN[$i]\t$Basyo[$i]\t$Z[$i]\t$X[$i]\t$Y[$i]\t$Comment[$i]\n"; } open(FILE,">$_[0]"); eval{ flock(FILE, 2) }; print FILE @GDECDATA; close FILE; } sub kakikomiG2 { my $i; for($i=0 ; $i <= $_[0] ; ++$i){ # push @GDECDATA , "$CardListN[$i]\t$Basyo[$i]\t$Z[$i]\t$X[$i]\t$Y[$i]\t$Comment[$i]\n"; $GDECDATA[$i]="$CardListN[$i]\t$Basyo[$i]\t$Z[$i]\t$X[$i]\t$Y[$i]\t$Comment[$i]\n"; } } sub kakikomiG3 { open(FILE,">$_[0]"); print FILE @GDECDATA; close FILE; } sub loadFormdata { my ($query, $pair); if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } foreach $pair (split(/&/, $query)) { my ($key, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $F{$key} = $value; } } #完了========================================= #0にコメント、1に戻る場所を入れる。2を入れればボタンを押さなければ戻らない sub kanryou { print <

$_[0]

END exit; } #=プログラムの説明======================================== # # # ●●●●●●●用語、変数の確認 # # データの種類 # # 構築デッキデータ # デッキレシピと、デッキのテキストが収納されている。カードのテキストが収納されているのは、 # ゲーム中にいちいちカードリストファイルを全部読み込むわけにはいかないため。 # # ゲームデータ # プレイヤー名、使用デッキ、ライフが収納されている。 # 収納枠は4つあるデスク(ゲームエリア)のプレイヤーナンバーにそれぞれ対応している。 # # ゲームデッキデータ # ゲーム中に使うファイルで、デッキにあるカード一枚一枚のパラメータが収納されている。 # 収納枠は4つあるデスク(ゲームエリア)のプレイヤーナンバーにそれぞれ対応している。 # ゲームが始まったときに、使用デッキの構築デッキデータを参照し、このデータに具体的な # ゲーム中のカードデータとして書き込む。 # # # 変数の種類 # #  構築デッキデータ:@KDECDATA #   一行目 # $DecName:デッキ名 $DecOwner:デッキの制作者 $key:デッキの削除、変更パスワード # #   二行目以降 # $CardListN{行数}:カードリストからの通し番号 $Maisuu{行数}:この種類のカードの枚数 # $SaidBoard{行数}:サイドボードかどうか # $CardData{$CardListN{カード番号}}:カードリストにあるこの種類のカードのテキストデータ # $CardColor{$CardListN{カード番号}}:カードリストにあるこの種類のカードの色 # $CardName{$CardListN{カード番号}}:カードリストにあるこの種類のカードの名前 # # #  ゲームデータ:@GAMEDATA # $PlayName{行数・プレイヤーナンバー}:プレイヤー名 $Life{行数・プレイヤーナンバー}:ライフ # $DecNumber{行数・プレイヤーナンバー}:使用する構築デッキデータ # # #  ゲームデッキデータ:@GDECDATA # $CardListN[行数]:カードリストからの通し番号 $Basyo[行数]:場所データ※ # $Z[行数]:場所におけるカードの順番、場においてのみカード表示用のレイヤー番号 # $X[行数]:場のみ使用カード表示時のX座標 # $Y[行数]:Xと同様、Y座標 $Comment[行数]:コメント。カウンター等に使う # ※ 場所データの記号 # LB:ライブラリー HA:手札 GY:墓地 # RM:リムーブ FR:効果解決用フリーエリア # PU:パーマネントアンタップ PT:パーマネントタップ # MU:裏返しアンタップ MT:裏返しタップ # TU:トークンアンタップ TT:トークンタップ #  ゲーム画面のフォームデータ受け渡し変数 # mode:game PlayNumber:プレイヤーナンバー # Basyo:異動先の場所 Taisyou:移動するカードの行ナンバー # Z:異動先のZ # # ●●●●●●●画面説明 # # ・1モードに1画面が対応しており、それぞれのモードには以下の役割がある # #  デッキ選択───┬─────┐ #    │     │     │ #  ロビー画面 デッキ削除 デッキ構築 #   (Lobby)  (DecDelete) (DekMake) #    │ #  ゲーム画面 #   (Game) # # デッキ選択:デッキを選択する画面。選択した後で # ゲームへ → このデッキを持ってロビーに行く # デッキの削除、デッキの調節 → キーを入れなければその画面に行けない # 新規作成 → デッキの作成。デッキには50枠があり、からの枠には新規作成メニューが現れる。 # # デッキ構築:カードリストから構築デッキデータを作成する。 # # デッキ削除:選択された構築デッキデータを削除し、白紙に戻す。 # # ロビー画面:4つあるDeskのうち、どこで戦うか選ぶ。ゲーム内で使うニックネームを入力する。 # # ゲーム画面:実際にゲームをやる画面。最初に構築デッキデータの内容を、ゲームデッキデータに反映させる。 # ゲームデータ、ゲームデッキデータを参照する。 # # # # # # #