私設SoS2オーナー応援BBS

新規発言一覧最新記事過去一覧検索ダウンロードページHOME

スレッド

└◇1848:
Re[6]:カードトレードと、カード画像の実装を目指して… [moon] 08/14 12:22

 └◇1849:Re[7]:カードトレードと、カード画像の実装を目指して… [YOUME] 08/15 09:52
  └◇1850:Re[8]:カードトレードと、カード画像の実装を目指して… [moon] 08/15 11:19
   └◇1851:Re[9]:カードトレードと、カード画像の実装を目指して… [YOUME] 08/15 19:58
    └◇1852:Re[10]:カードトレードと、カード画像の実装を目指して… [moon] 08/15 22:19
     └◇1853:Re[11]:カードトレードと、カード画像の実装を目指して… [YOUME] 08/16 16:08
      └◇1855:Re[12]:カードトレードと、カード画像の実装を目指して… [moon] 08/16 21:42
       └◇1857:Re[13]:カードトレードと、カード画像の実装を目指して… [YOUME] 08/16 21:49
        └◇1859:Re[14]:カードトレードと、カード画像の実装を目指して… [moon] 08/16 22:00<-last


1848● Re[6]:カードトレードと、カード画像の実装を目指して…[ moon ] 2015 08/14 12:22
今更ですが、いのそうさんが公開されていた改造方法についての話題だったのですね。


> <b>▼カード名</b></td><td><b>▼攻撃力</b></td><td><b>▼属性</b></td></tr>
> <tr><td><img src="画像名n"><b></b></td><td>0</td><td></td></tr>
> <tr><td><img src="画像名n"><b>魔女・ヴィクトリア</b></td><td>3</td><td><font color=yellow>雷</font></td></tr>
>
> こんな感じになっています…

> print qq|<tr><td><img src="$card_name_hash"><b>$item</b></td><td>$idd</td><td>$cde1</td></tr> \n|;
画像のパスは$image_pathです。
また、$etcは適切な値で定義するか、使用しないのでしたら$image_pathの作成時に使わなくても構いません。

先頭行が空なのはデータ的に余計なものが存在するか、先頭に余計なデータが含まれるようにsplitされているか、だと思います。

> そして画像表示とは別件なのですが、コレクションファイルを生成した時に何故か「0」の値が1行目にできてしまう原因も分かっておらず…

sub make_fileはカードファイルを貰った際の処理なので関係はないと思います。
ファイルを貰うと以下のようなデータになります。
  0000<><>20
  ※ 0000はID、次の空文字列は所持カード、最後の20は空きの数、最後に改行
以下を確認してみてください。
・sub get_cardで正常に読み込まれているか?
・sub cardoutで正常に保存できているか?
・これ以外のサブルーチンでカードファイルを誤って保存していないか?
・何をした後におかしなデータになるか?

> 余計なフラグの$break、$iimg…
> これがSub Up AfterとSub Collectionにも記載があったので、これを削除すれば治るのかな…?と思いつつ、関係ない気もしてまだ検証まではしていない感じです;(とりあえず画像表示を何とかしたい…!)

いのそうさんが公開されていたsos2の名残なのだろうと思います。($breakはわかりませんが、$iimgはアイコン用画像ファイルのパスのようです。)

> 動作確認をしたところ、今度は
> 「相手のカードが選択されていません」
> と出てトレードできない状態に…涙

渡されてくる値が0からなので、自分か相手の先頭のものが選択されるとチェックに引っかかるのだと思います。
以下のように変更してみてください。
  if ($Fm{'M'} eq '') { push (@msg,'自分のカードが選択されていません'); return }#tm⇒M修正
  if ($Fm{'Y'} eq '') { push (@msg,'相手のカードが選択されていません'); return }#ty⇒Y修正
コメントを書く(引用) | スレッド一覧


1849● Re[7]:カードトレードと、カード画像の実装を目指して…[ YOUME ] 2015 08/15 09:52
おはようございます!
カードトレードの方は上手く動くようになりました!
ありがとうございます!

> 今更ですが、いのそうさんが公開されていた改造方法についての話題だったのですね。

はい!懐かしいなぁなんて思いながらも、頭を悩ませております…

> 画像のパスは$image_pathです。
> また、$etcは適切な値で定義するか、使用しないのでしたら$image_pathの作成時に使わなくても構いません。

なるほど!早速以下のようにしてみたのですが
---------------------
print qq|<tr><td><b>▼カード名</b></td><td><b>▼攻撃力</b></td><td><b>▼属性</b></td></tr>\n|;
foreach $items (@fitems) {
($item,$sts) = split(/△/,$items);
$idd = int(substr($sts,7,1));
$pc = int(substr($sts,0,4));
if ($sts =~ /C0/) {$cde1 = "<font color=red>火</font>";}
if ($sts =~ /C1/) {$cde1 = "<font color=blue>水</font>";}
if ($sts =~ /C2/) {$cde1 = "<font color=yellow>雷</font>";}
if ($sts =~ /C3/) {$cde1 = "<font color=blown>土</font>";}
if ($sts =~ /C4/) {$cde1 = "<font color=green>風</font>";}
if ($sts =~ /C5/) {$cde1 = "<font color=gray>天</font>";}
if ($sts =~ /C6/) {$cde1 = "<font color=#8C008C>冥</font>";}
if ($sts =~ /C7/) {$cde1 = "<font color=powderblue>空</font>";}

#カード画像表示
# 利用
my $image_path = exists($card_name_hash{$item}) ? $card_name_hash{$item}:'2011-12-23_1-246.gif';
# $itemはカード名、未定義の場合は'2011-12-23_1-246.gif'
$image_path = 'img/' . $image_path . '';
# ディレクトリ、拡張子、その他の情報(解像度を区別するため等)を付加
# 最終的に'./image/example_thumb.png'のようなパスになる
#カード画像表示

#カード画像表示
# 定義
$card_name_hash = (
'C1カード' => 'test.jpg',
'C2カード' => 'test2.jpg',
'C3カード' => 'test3.jpg',
);
#カード画像表示

print qq|<tr><td><img src="$image_path"><b>$item</b></td><td>$idd</td><td>$cde1</td></tr> \n|;
}
---------------------
カード名が一致していても全てが未定義状態になってしまい…

「カード画像表示」の定義部分は別の場所に移した方が良いでしょうか?
可能であれば、カード画像表示の定義部分は(カード数が増えたことを想定して)別ファイルから読み込むような形をとりたいなとも考えているのですが、難しいでしょうか…?


> 先頭行が空なのはデータ的に余計なものが存在するか、先頭に余計なデータが含まれるようにsplitされているか、だと思います。
> 以下を確認してみてください。
> ・sub get_cardで正常に読み込まれているか?
> ・sub cardoutで正常に保存できているか?
> ・これ以外のサブルーチンでカードファイルを誤って保存していないか?
> ・何をした後におかしなデータになるか?

自分なりに条件を変えて確認してみたのですが、コレクションファイルを作成した時は問題なく、カードを1枚でもいれると0行ができ…
ただ現在は何故か入れたカードの最下部に0行が並ぶように;
0行の場所が変わったのは下記のように変更したせいかも;
---------------------
foreach $items (@fitems) {
($item,$sts) = split(/△/,$items);
$at = int(substr($sts,7,1));
$co = int(substr($sts,0,4));
$el = int(substr($sts,8,2));
if ($Fm{'sort'} eq 'N') { push(@Alines,"$item△$item△$sts") }
#if ($Fm{'sort'} eq 'N') { push(@Alines,"$item△$sts") }
#if ($Fm{'sort'} eq 'L') { push(@Alines,"$break△$item△$sts") }
if ($Fm{'sort'} eq 'L') { push(@Alines,"$item△$sts") }
if ($Fm{'sort'} eq 'A') { push(@Alines,"$at△$item△$sts") }
if ($Fm{'sort'} eq 'E') { push(@Alines,"$el△$item△$sts") }
if ($Fm{'sort'} eq 'S') { push(@Alines,"$se△$item△$sts") }
#if ($Fm{'sort'} eq 'S') { push(@Alines,"$item△$sts") }
if ($Fm{'sort'} eq 'C') { push(@Alines,"$co△$item△$sts") }
}
---------------------
コレクションカードデータの中身は、
---------------------
0004<>,C2カード△10000264C2,C0カード△00300264C0,C1カード△01000264C1,C3カード△00300264C3,C4カード△00300264C4,C5カード△00300264C5,C6カード△00300264C6,C7カード△00300264C7<>8<>
---------------------
こんな感じになっていました。
「,C2カード」が変な気がしたのですが、,がついている理由が分からず…

sub get_cardとsub cardoutは現状こんな感じです。
---------------------
# Sub Get Card #
sub get_card {
return if $getcardflag;
if ( $sp =~ /Ca/ ) {
open(IN,"$cardir$_[0]\.cgi") || &error("ID $_[0]は存在しません");
@_ = <IN>;
close(IN);
if (!@_) { &error("ID $_[0] 読みこみエラー") }
($cid,$cbg,$csp) = split(/<>/,$_[0]);
shift(@_);
$getcardflag = 1;
return @_;
}
}

# Sub Card Out #
sub cardout {
$carline = join('<>',$cid,$cbg,$csp,"\n");
unshift (@carlines,$carline);
&writedat("$cardir$id\.cgi",@carlines);
}
---------------------

いろいろ見てはみたものの、どこが良くない動きをしているのか現状わからず…お知恵をお借りできたら幸いです…!
コメントを書く(引用) | スレッド一覧


1850● Re[8]:カードトレードと、カード画像の実装を目指して…[ moon ] 2015 08/15 11:19
> # 利用
> # 定義
> カード名が一致していても全てが未定義状態になってしまい…

「# 定義」と「# 利用」の順番が逆になってしまっています。
あと、card_name_hashの定義はハッシュなので「$」ではなく「%」です。

> 「カード画像表示」の定義部分は別の場所に移した方が良いでしょうか?
> 可能であれば、カード画像表示の定義部分は(カード数が増えたことを想定して)別ファイルから読み込むような形をとりたいなとも考えているのですが、難しいでしょうか…?

以下のような別ファイルを作成してrequireで呼び出せば良いです。
なお、返信されたコードに少し修正を加えてあります。

#### ここから ####
my $image_dir = 'img/'; # 画像ディレクトリ
my %card_name_hash = (
'C1カード' => 'test.jpg',
'C2カード' => 'test2.jpg',
'C3カード' => 'test3.jpg',
); # カード名と画像ファイルパスのハッシュ

# 画像のパスを取得する
# 【引数】
# name: カード名
# 【戻り値】
# カード名に対応する画像のパス
sub get_card_image_path{
  my $name = shift;

  my $image_file = exists($card_name_hash{$name}) ? $card_name_hash{$name}:'2011-12-23_1-246.gif';
  # $nameはカード名、未定義の場合は'2011-12-23_1-246.gif'
  return $image_dir . $image_file;
}

1;
#### ここまで ####

利用は以下のようにします。
  require './ディレクトリ/ファイル名'; # ループ中で毎回requireするのは無駄なので場所はforeach以前が良い
  print qq|<tr><td><img src="|, &get_card_image_path($item), qq|"><b>$item</b></td><td>$idd</td><td>$cde1</td></tr> \n|;

> > 先頭行が空なのはデータ的に余計なものが存在するか、先頭に余計なデータが含まれるようにsplitされているか、だと思います。
> > 以下を確認してみてください。
> > ・sub get_cardで正常に読み込まれているか?
> > ・sub cardoutで正常に保存できているか?
> > ・これ以外のサブルーチンでカードファイルを誤って保存していないか?
> > ・何をした後におかしなデータになるか?

すみません、上記のget_card、cardoutと「0000<><>20」に関しては勘違いしておりましてカードファイルだった場合でした。
コレクションなのでsub get_coll、sub fileout、あとsub file_in_afterが関連個所です。

> 自分なりに条件を変えて確認してみたのですが、コレクションファイルを作成した時は問題なく、カードを1枚でもいれると0行ができ…
> ただ現在は何故か入れたカードの最下部に0行が並ぶように;
> 0行の場所が変わったのは下記のように変更したせいかも;
...
> コレクションカードデータの中身は、
> ---------------------
> 0004<>,C2カード△10000264C2,C0カード△00300264C0,C1カード△01000264C1,C3カード△00300264C3,C4カード△00300264C4,C5カード△00300264C5,C6カード△00300264C6,C7カード△00300264C7<>8<>
> ---------------------
> こんな感じになっていました。
> 「,C2カード」が変な気がしたのですが、,がついている理由が分からず…

sub file_in_afterで「&joinitem('iF');」が行われていないか、sub joinitemが変更されていない場合にこのようになりそうですので、これらを確認してみてください。
コメントを書く(引用) | スレッド一覧


1851● Re[9]:カードトレードと、カード画像の実装を目指して…[ YOUME ] 2015 08/15 19:58
ご教授ありがとうございます!
つ、ついにカードごとの画像を出せるようになりました!!!
本当にありがとうございます!!!
理想のカードコレクション画面が出せるように調整していきたいと思います!


そして、0行の件につきまして…

> sub file_in_afterで「&joinitem('iF');」が行われていないか、sub joinitemが変更されていない場合にこのようになりそうですので、これらを確認してみてください。

ご指摘通り、# Sub File In After #に、&joinitem('iF');がありました!

無ければ良いのかな?と思い

# Sub File In After #
sub file_in_after{
@rcdlines = &get_user("$Fm{'id'}");
return if $fg ne 'FIBB';
@collines = &get_coll("$Fm{'id'}");
&splititem('iF');
foreach (0 .. $#items) {
($item,$sts) = split(/△/,$items[$_]);
$filebag = 1;
if ($Fm{"$_"}) {
my $tmpflg=0; ##
foreach $tmp (@fitems) {
($tmpitem,$tmpsts) = split(/△/,$tmp);
if ($tmpitem eq $item) {$tmpflg=1;}
}
if (!$tmpflg) {
$fco++;
push (@fitems,"$item△$sts");
push (@msg,"$itemをファイルに入れました。");
$fbg .= ",$item△$sts"; #(4/8)修正
$filebag = 0;
} else { push (@msg,"既に「$item」はファイル内に存在します。") }
}
if ($filebag) { push(@newitems,$items[$_]); }
}
@items = @newitems; #&joinitem('iF');
$fg = ''; &userout; &fileout;
}

としてみたのですが、0行は生成されてしまうままで…
別の表記にした方が良いのでしょうか?


また、これとは別件なのですが…

現状だとカードデュエルがプレイヤーと行えないので、
これをデッキを持っているプレイヤーが相手でもデュエルできるようにしたいなと思い始めました。

理想は、プレイヤーと接触した際に、相手とデュエルできるようにしたいとは思いつつ…
ただデュエルできる場所が隔離された場所で実行されてるので、デュエルする相手をデッキを持っているプレイヤーからプルダウンで選ぶか、NPCにするかを選択できるようにしたほうが良いのかな…とも思いつつ…

現状のデュエルバトルシステムがduel.pl内にある下記の部分に相当しているのですが

# バトルシステム #
sub battle_duel {
    $reid = $Fm{'id'};
    &read_dc;
@cardlines = &get_card("$Fm{'id'}");
&splitcard('c');
&mcard_dat;
        $catm = $cat1+$cat2+$cat3;
$battle_mn = $catm * 5;
if ($mn < $battle_mn) { &duel_error("お金が足りません。");}
$mn = $mn - $battle_mn;
    &write_dc;
    open(IN,"$pcard_d");
    @PCARDD = <IN>;
    close(IN);
    $eld = @PCARDD;
    srand;
    $rnd = int(rand($eld));
    ($dekkinm,$wn_point,$pcd1,$pcd2,$pcd3) = split(/<>/,$PCARDD[$rnd]);
    &splitcard('C');
    &pcard_dat;
        $pcatm = $pcat1+$pcat2+$pcat3;
    $pcom_nm = "なっしんぐ";$com_nm = "なっしんぐ";
    &go_combo;
    &go_combop;
&header;
&table_top;
&msg;
#先鋒戦#
$zokusei1 = 0;
$pzokusei1 = 0;
if (($cds1 =~ /C0/) && ($pcds1 =~ /C1/)) { $pzokusei1 = "1"; } #自分火<相手水
if (($cds1 =~ /C1/) && ($pcds1 =~ /C0/)) { $zokusei1 = "1"; } #相手火<自分水
if (($cds1 =~ /C1/) && ($pcds1 =~ /C2/)) { $pzokusei1 = "1"; } #自分水<相手雷
if (($cds1 =~ /C2/) && ($pcds1 =~ /C1/)) { $zokusei1 = "1"; } #相手水<自分雷
if (($cds1 =~ /C2/) && ($pcds1 =~ /C3/)) { $pzokusei1 = "1"; } #自分雷<相手土
if (($cds1 =~ /C3/) && ($pcds1 =~ /C2/)) { $zokusei1 = "1"; } #相手雷<自分土
if (($cds1 =~ /C3/) && ($pcds1 =~ /C4/)) { $pzokusei1 = "1"; } #自分土<相手風
if (($cds1 =~ /C4/) && ($pcds1 =~ /C3/)) { $zokusei1 = "1"; } #相手土<自分風
if (($cds1 =~ /C4/) && ($pcds1 =~ /C0/)) { $pzokusei1 = "1"; } #自分風<相手火
if (($cds1 =~ /C0/) && ($pcds1 =~ /C4/)) { $zokusei1 = "1"; } #相手風<自分火
if ($cds1 =~ /C5/) { $zokusei1 = "1"; } #自分天
if ($pcds1 =~ /C5/) { $pzokusei1 = "1"; } #相手天
if ($cds1 =~ /C6/) { $zokusei1 = "2"; } #自分冥
if ($pcds1 =~ /C6/) { $pzokusei1 = "2"; } #相手冥
    $bat1 = $cat1 + $zokusei1 + $combo1 - $pcombo1;
    $pbat1 = $pcat1 + $pzokusei1 + $pcombop1 - $combop1;
        if ($bat1 > $pbat1) { $bwin1 = "1"; $pbwin1 = "0"; $result1 = "<font color=blue>$cdn1の勝利!!"; }
        elsif ($bat1 < $pbat1) { $bwin1 = "0"; $pbwin1 = "1"; $result1 = "<font color=red>$pcdn1の勝利!!"; }
        else { $bwin1 = "0"; $pbwin1 = "0"; $result1 = "<font color=gray>引き分け</font>"; }
#中堅戦#
$zokusei2 = 0;
$pzokusei2 = 0;
if (($cds2 =~ /C0/) && ($pcds2 =~ /C1/)) { $pzokusei2 = "1"; } #自分火<相手水
if (($cds2 =~ /C1/) && ($pcds2 =~ /C0/)) { $zokusei2 = "1"; } #相手火<自分水
if (($cds2 =~ /C1/) && ($pcds2 =~ /C2/)) { $pzokusei2 = "1"; } #自分水<相手雷
if (($cds2 =~ /C2/) && ($pcds2 =~ /C1/)) { $zokusei2 = "1"; } #相手水<自分雷
if (($cds2 =~ /C2/) && ($pcds2 =~ /C3/)) { $pzokusei2 = "1"; } #自分雷<相手土
if (($cds2 =~ /C3/) && ($pcds2 =~ /C2/)) { $zokusei2 = "1"; } #相手雷<自分土
if (($cds2 =~ /C3/) && ($pcds2 =~ /C4/)) { $pzokusei2 = "1"; } #自分土<相手風
if (($cds2 =~ /C4/) && ($pcds2 =~ /C3/)) { $zokusei2 = "1"; } #相手土<自分風
if (($cds2 =~ /C4/) && ($pcds2 =~ /C0/)) { $pzokusei2 = "1"; } #自分風<相手火
if (($cds2 =~ /C0/) && ($pcds2 =~ /C4/)) { $zokusei2 = "1"; } #相手風<自分火
if ($cds2 =~ /C5/) { $zokusei2 = "1"; } #自分天
if ($pcds2 =~ /C5/) { $pzokusei2 = "1"; } #相手天
if ($cds2 =~ /C6/) { $zokusei2 = "2"; } #自分冥
if ($pcds2 =~ /C6/) { $pzokusei2 = "2"; } #相手冥
    $bat2 = $cat2 + $zokusei2 + $combo2 - $pcombo2;
    $pbat2 = $pcat2 + $pzokusei2 + $pcombop2 - $combop2;
        if ($bat2 > $pbat2) { $bwin2 = "1"; $pbwin2 = "0"; $result2 = "<font color=blue>$cdn2の勝利!!"; }
        elsif ($bat2 < $pbat2) { $bwin2 = "0"; $pbwin2 = "1"; $result2 = "<font color=red>$pcdn2の勝利!!"; }
        else { $bwin2 = "0"; $pbwin2 = "0"; $result2 = "<font color=gray>引き分け</font>"; }
#大将戦#
$zokusei3 = 0;
$pzokusei3 = 0;
if (($cds3 =~ /C0/) && ($pcds3 =~ /C1/)) { $pzokusei3 = "1"; } #自分火<相手水
if (($cds3 =~ /C1/) && ($pcds3 =~ /C0/)) { $zokusei3 = "1"; } #相手火<自分水
if (($cds3 =~ /C1/) && ($pcds3 =~ /C2/)) { $pzokusei3 = "1"; } #自分水<相手雷
if (($cds3 =~ /C2/) && ($pcds3 =~ /C1/)) { $zokusei3 = "1"; } #相手水<自分雷
if (($cds3 =~ /C2/) && ($pcds3 =~ /C3/)) { $pzokusei3 = "1"; } #自分雷<相手土
if (($cds3 =~ /C3/) && ($pcds3 =~ /C2/)) { $zokusei3 = "1"; } #相手雷<自分土
if (($cds3 =~ /C3/) && ($pcds3 =~ /C4/)) { $pzokusei3 = "1"; } #自分土<相手風
if (($cds3 =~ /C4/) && ($pcds3 =~ /C3/)) { $zokusei3 = "1"; } #相手土<自分風
if (($cds3 =~ /C4/) && ($pcds3 =~ /C0/)) { $pzokusei3 = "1"; } #自分風<相手火
if (($cds3 =~ /C0/) && ($pcds3 =~ /C4/)) { $zokusei3 = "1"; } #相手風<自分火
if ($cds3 =~ /C5/) { $zokusei3 = "1"; } #自分天
if ($pcds3 =~ /C5/) { $pzokusei3 = "1"; } #相手天
if ($cds3 =~ /C6/) { $zokusei3 = "2"; } #自分冥
if ($pcds3 =~ /C6/) { $pzokusei3 = "2"; } #相手冥
    $bat3 = $cat3 + $zokusei3 + $combo3 - $pcombo3;
    $pbat3 = $pcat3 + $pzokusei3 + $pcombop3 - $combop3;
        if ($bat3 > $pbat3) { $bwin3 = "1"; $pbwin3 = "0"; $result3 = "<font color=blue>$cdn3の勝利!!</font>"; }
        elsif ($bat3 < $pbat3) { $bwin3 = "0"; $pbwin3 = "1"; $result3 = "<font color=red>$pcdn3の勝利!!</font>"; }
        else { $bwin3 = "0"; $pbwin3 = "0"; $result3 = "<font color=gray>引き分け</font>"; }
#戦闘結果#
$bwin_l = $bwin1 + $bwin2 + $bwin3;
$pbwin_l = $pbwin1 + $pbwin2 + $pbwin3;
    if ($bwin_l > $pbwin_l) {$cdwn = $cdwn + 1;$cdpoint = $cdpoint + $wn_point;
    $result_l = "<font color=Yellow>おめでとうございます。$nmさんの勝利です!<br>勝利ボーナスとして、デュエルポイントを<b>$wn_point</b>を得た。</font>";
    }
    elsif ($bwin_l < $pbwin_l) {$cdlz = $cdlz + 1;
    $result_l = "<font color=red>残念でした。$nmさんの敗北です。</font></font>";
    }
    else {
    $result_l = "<font color=gray>残念でした。引き分けです。</font>";
    }
$line = join('<>',$cdid,$cdpoint,$cdwn,$cdlz,$cd1,$cd2,$cd3,"\n");
&writedat("$carddir$id\.dat",$line);
print <<"_EOF_";
<tr><td>
<center>
<img src=img/card_b.jpg><br>
<br>
<table width=80% border="1" bordercolor="#0000FF">
<tr bgcolor="#000066"><td align=center><font color="#F4F4F4">デュエルアリーナ</font></td></tr>
<tr><td> デュエルの相手は自動的に決まります。デッキによっては相性の良い悪いがあると思いますが、いかに効率よく勝てるかという事を研究するのも大事ですね。攻撃力も重要ですが、カードの配置、コンボの組立等見直すところはたくさんありますよ。攻撃力が全然なくてもコンボで生きてくるカードもあります。<br> 例え勝てなくても相手のデッキを見て得ることもあるでしょう。どんどん挑戦しましょう!</td></tr>
</table><br>
<table width=80% border="1" bordercolor="#9ACD32">
<tr bgcolor="#556B2F"><td colspan=4 align=center><font color="#F4F4F4">+$nmのデッキ+<br>(合計値:$catm/$cdall_max|勝:$cdwn/負:$cdlz)</font></td></tr>
<tr bgcolor="#6B8E23"><td width=15% align=center>順番</td><td width=55% align=center>カード名</td><td width=15% align=center>攻撃</td><td width=15% align=center>属性</td></tr>
<tr><td align=center>先鋒</td><td>$cdn1</td><td align=center>$cat1</td><td align=center>$cde1</td></tr>
<tr><td align=center>中堅</td><td>$cdn2</td><td align=center>$cat2</td><td align=center>$cde2</td></tr>
<tr><td align=center>大将</td><td>$cdn3</td><td align=center>$cat3</td><td align=center>$cde3</td></tr>
</table><br>
<table width=80% border="1" bordercolor="darkred">
<tr bgcolor="Maroon"><td colspan=4 align=center><font color="#F4F4F4">+対戦相手:$dekkinm+<br>(合計値:$pcatm/$cdall_max)</font></td></tr>
<tr bgcolor="brown"><td width=15% align=center>順番</td><td width=55% align=center>カード名</td><td width=15% align=center>攻撃</td><td width=15% align=center>属性</td></tr>
<tr><td align=center>先鋒</td><td>$pcdn1</td><td align=center>$pcat1</td><td align=center>$pcde1</td></tr>
<tr><td align=center>中堅</td><td>$pcdn2</td><td align=center>$pcat2</td><td align=center>$pcde2</td></tr>
<tr><td align=center>大将</td><td>$pcdn3</td><td align=center>$pcat3</td><td align=center>$pcde3</td></tr>
</table><br>
<table width=80% border="1" bordercolor="#0000FF">
<tr><td width=25% bgcolor=#000066 align=center><font color="#F4F4F4">所持金</font></td><td width=25% align=center>$mn</td><td width=25% bgcolor=#000066 align=center><font color="#F4F4F4">ポイント</font></td><td width=25% align=center>$cdpoint</td></tr>
</table>
<br>
<table width=85%><tr><td>
<tr bgcolor="#000066"><td colspan=3 align=center><font color="#F4F4F4"><b>特別処理</b></font></td></tr>
<tr><td align=center><font color=#808080>
<b><$nm側の特別効果></b><br>必殺コンボ『<b>$com_nm</b>』!<br>$com_mes<br><b><$dekkinm側の特別効果></b><br>必殺コンボ『<b>$pcom_nm</b>』!<br>$pcom_mes
</font></td></tr></table><br>
<table width=85%>
<tr bgcolor="#000066"><td colspan=3 align=center><font color="#F4F4F4"><b>先鋒戦</b></font></td></tr>
<tr><td width=25% align=center><font color=blue>$cdn1<br>$cde1<br>$bat1</font></td><td width=50%>
<font color=blue>
「基本攻撃力:<b>$cat1</b>」+「属性効果:<b>$zokusei1</b>」<br>+「自特殊効果:<b>$combo1</b>」−「敵特殊効果:<b>$pcombo1</b>」<br>=「合計攻撃力:<b>$bat1</b>」</font><br>
<font color=red>
「基本攻撃力:<b>$pcat1</b>」+「属性効果:<b>$pzokusei1</b>」<br>+「自特殊効果:<b>$pcombop1</b>」−「敵特殊効果:<b>$combop1</b>」<br>=「合計攻撃力:<b>$pbat1</b>」</font><br><center><b>$result1</b></center>
</td><td width=25% align=center><font color=red>$pcdn1<br>$pcde1<br>$pbat1</font></td></tr></table>
<table width=85%>
<tr bgcolor="#000066"><td colspan=3 align=center><font color="#F4F4F4"><b>中堅戦</b></font></td></tr>
<tr><td width=25% align=center><font color=blue>$cdn2<br>$cde2<br>$bat2</font></td><td width=50%>
<font color=blue>
「基本攻撃力:<b>$cat2</b>」+「属性効果:<b>$zokusei2</b>」<br>+「自特殊効果:<b>$combo2</b>」−「敵特殊効果:<b>$pcombo2</b>」<br>=「合計攻撃力:<b>$bat2</b>」</font><br>
<font color=red>
「基本攻撃力:<b>$pcat2</b>」+「属性効果:<b>$pzokusei2</b>」<br>+「自特殊効果:<b>$pcombop2</b>」−「敵特殊効果:<b>$combop2</b>」<br>=「合計攻撃力:<b>$pbat2</b>」</font><br><center><b>$result2</b></center>
</td><td width=25% align=center><font color=red>$pcdn2<br>$pcde2<br>$pbat2</font></td></tr></table>
<table width=85%>
<tr bgcolor="#000066"><td colspan=3 align=center><font color="#F4F4F4"><b>大将戦</b></font></td></tr>
<tr><td width=25% align=center><font color=blue>$cdn3<br>$cde3<br>$bat3</font></td><td width=50%>
<font color=blue>
「基本攻撃力:<b>$cat3</b>」+「属性効果:<b>$zokusei3</b>」<br>+「自特殊効果:<b>$combo3</b>」−「敵特殊効果:<b>$pcombo3</b>」<br>=「合計攻撃力:<b>$bat3</b>」</font><br>
<font color=red>
「基本攻撃力:<b>$pcat3</b>」+「属性効果:<b>$pzokusei3</b>」<br>+「自特殊効果:<b>$pcombop3</b>」−「敵特殊効果:<b>$combop3</b>」<br>=「合計攻撃力:<b>$pbat3</b>」</font><br><center><b>$result3</b></center>
</td><td width=25% align=center><font color=red>$pcdn3<br>$pcde3<br>$pbat3</font></td></tr></table>
<table width=85%>
<tr bgcolor="darkorange"><td colspan=3 align=center><font color="#000000"><b>総合結果報告</b></font></td></tr>
<tr><td align=center><font color=#808080>$result_l<br><br>デュエル代 <b>$battle_mn</b> KIRAを支払った。</font><br><br>

<form method="POST" action="sos2.cgi">
<input type="hidden" name="mode" value="duel">
<input type="hidden" name="name" value="$nm">
<input type="hidden" name="id" value="$id">
<input type="hidden" name="pass" value="$ps">
<input type="submit" class="buttonY" value=" 戻る ">
</form>

</td></tr></table>
</center>

<table width=100%><tr><td align=right><small>『Duel of Sphere $cd_ver』 By <a href="http://www.bellcity.ne.jp/~yamato/" target="_blank">Sphere(大和)</a></small></td></tr></table>
</td></tr>
_EOF_

&table_bottom;

}

プレイヤー同士のデュエルをとなると、上記バトルシステムの、プレイヤーverが必要になるのかな…?と思いつつ…

どうしたものかと…
お知恵を借りれたら幸いです…!
コメントを書く(引用) | スレッド一覧


1852● Re[10]:カードトレードと、カード画像の実装を目指して…[ moon ] 2015 08/15 22:19
> そして、0行の件につきまして…
>
> > sub file_in_afterで「&joinitem('iF');」が行われていないか、sub joinitemが変更されていない場合にこのようになりそうですので、これらを確認してみてください。
>
> ご指摘通り、# Sub File In After #に、&joinitem('iF');がありました!
>
> 無ければ良いのかな?と思い

いえ、先に書いたようにjoinitemが行われていないとその症状になるので、あるのが正しいです。
まず、データの先頭にある「,」を削除してから動作させ、症状がでた場合はsub joinitemの中身を確認してみてください。

> また、これとは別件なのですが…
>
> 現状だとカードデュエルがプレイヤーと行えないので、
> これをデッキを持っているプレイヤーが相手でもデュエルできるようにしたいなと思い始めました。
>
> 理想は、プレイヤーと接触した際に、相手とデュエルできるようにしたいとは思いつつ…
> ただデュエルできる場所が隔離された場所で実行されてるので、デュエルする相手をデッキを持っているプレイヤーからプルダウンで選ぶか、NPCにするかを選択できるようにしたほうが良いのかな…とも思いつつ…

リストから選ぶ方式は表示時に毎回各ファイル(もしくはそのファイルがあるディレクトリ)を読まなければいけないのでお勧めはしません。
まあ、利便性はあると思いますのでメリット・デメリットを考慮して仕様はお好きなように。

> プレイヤー同士のデュエルをとなると、上記バトルシステムの、プレイヤーverが必要になるのかな…?と思いつつ…
>
> どうしたものかと…

sub battle_duelで行っている処理のプレイヤーバージョンが必要なのは当然ですが、それを実現するにあたってはコピーして修正するよりは引数で区別して処理を振り分けるようにしたほうがシンプルだと思います。
以下のような流れで作っていくのが良いです。
1. デュエルを開始する流れの仕様を決める。
2. 1.の流れ(ダミーで良いのでデュエルのサブルーチンが正常に呼び出されるまでの処理)を実装する。
3. 実際のデュエル処理を実装する。(随時動作させてみて、意図しない動作の場合はデバッグ用メッセージを仕込むなどして原因を特定して修正する。)
コメントを書く(引用) | スレッド一覧


1853● Re[11]:カードトレードと、カード画像の実装を目指して…[ YOUME ] 2015 08/16 16:08
0行の件について、ご指導ありがとうございます!

",$item△$sts";を"$item△$sts,";に変更したところ、0行が生成されなくなりました!
他に弊害が出ないか心配ではあるのですが、これで様子をみてみようと思います…!

プレイヤー同士のデュエルについてもご指導ありがとうございます!もう少しちゃんと考えて試してみたいと思います…!

いつもお知恵を貸して頂き、ありがとうございます!
また一人ではどうにもならなくなった時に相談させて頂けたら幸いです!
コメントを書く(引用) | スレッド一覧


1855● Re[12]:カードトレードと、カード画像の実装を目指して…[ moon ] 2015 08/16 21:42
> 0行の件について、ご指導ありがとうございます!
>
> ",$item△$sts";を"$item△$sts,";に変更したところ、0行が生成されなくなりました!

これは「(4/8)修正」とのコメントがあるところでしょうか?
先に書いたのはそうではなくて、ファイルに保存されたデータ自体を意図していたのですが…。
その処理自体が不要と思われますので、もしそこの修正で変化があったのだとしたらsub joinitemの変更が行われていない可能性が高くなります。
コメントを書く(引用) | スレッド一覧


1857● Re[13]:カードトレードと、カード画像の実装を目指して…[ YOUME ] 2015 08/16 21:49
> これは「(4/8)修正」とのコメントがあるところでしょうか?

はい、そうです…!
ここではなかったのですね…汗

> その処理自体が不要と思われますので、もしそこの修正で変化があったのだとしたらsub joinitemの変更が行われていない可能性が高くなります。

現状のsos2.cgi内にあるsub joinitemの状態は下記のような感じで…

# Sub Join Item #
sub joinitem {
@items = sort(@items) if $_[0] =~ /i/ && $def_so;
    $bg = join(',',@items) if $_[0] =~ /i/;
@pitems = sort(@pitems) if $_[0] =~ /I/ && $def_so;
    $pbg = join(',',@pitems) if $_[0] =~ /I/;
#カードファイル
@citems = sort(@citems) if $_[0] =~ /C/ && $def_so; # カード
$cbg = join(',',@citems) if $_[0] =~ /C/; # カード
}
#カードファイル
#コレクションファイル
@fitems = sort(@fitems) if $_[0] =~ /F/ && $def_so; # コレクション
$fbg = join(',',@fitems) if $_[0] =~ /F/; # コレクション
#コレクションファイル

ここに問題がある感じでしょうか?
理解が上手くできず申し訳ないです…
コメントを書く(引用) | スレッド一覧


1859● Re[14]:カードトレードと、カード画像の実装を目指して…[ moon ] 2015 08/16 22:00
> #カードファイル
> #コレクションファイル
> @fitems = sort(@fitems) if $_[0] =~ /F/ && $def_so; # コレクション
> $fbg = join(',',@fitems) if $_[0] =~ /F/; # コレクション
> #コレクションファイル
>
> ここに問題がある感じでしょうか?

上記がsub joinitemのブロック外にあるのでjoinitemを実行しても処理されないようです。
コメントを書く(引用) | スレッド一覧

CGIROOM