私設SoS2オーナー応援BBS

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

No.1847  Re[5]:カードトレードと、カード画像の実装を目指して…
発言者: YOUME
発言日: 2015 08/14 09:22
おはようございます!
カードのトレードリストは無事に名前とIDが表示されるようになりました!ありがとうございます!


カードの画像表示についてもご教授ありがとうございます!

とりあえずコレクション画面に画像を表示させるところから始めようと思い、下記のようにしてみたのですが

# Sub Collection #
sub collection {
@rcdlines = &get_user("$Fm{'id'}");
@collines = &get_coll("$Fm{'id'}");
&header;
&splititem('F');

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 'L') { push(@Alines,"$break△$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 'C') { push(@Alines,"$co△$item△$sts") }
}
@Alines = sort(@Alines);

foreach $items (@Alines) {
($dammy,$item,$sts) = split(/△/,$items);
push(@Blines,"$item△$sts");
}
@fitems = @Blines;

print qq|<center>$nmのコレクション<br>\n|;

print qq|<hr><TABLE border="0" cellpadding="0" cellspacing="0"><TBODY><TR><TD><IMG src="img/(1).jpg" width="59" height="135" border="0"></TD><TD><IMG src="img/(2).jpg" width="379" height="135" border="0"></TD><TD><IMG src="img/(3).jpg" width="62" height="135" border="0"></TD></TR><TR><TD><IMG src="img/(4).jpg" width="59" height="306" border="0"></TD><TD bgcolor="#000000" valign="top" width="379">|;
print qq|<table>|;
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=purple>魔</font>";}
if ($sts =~ /C7/) {$cde1 = "<font color=black>虚</font>";}

#カード画像表示
# 定義
$card_name_hash = (
'魔女・ヴィクトリア' => '0000',
'カード名2' => '画像名2',
'カード名n' => '画像名n',
);
#カード画像表示

#カード画像表示
# 利用
my $image_path = exists($card_name_hash{$item}) ? $card_name_hash{$item} : 'unknown';
$image_path = 'img/' . $image_path . '_' . $etc . '.jpg';
#カード画像表示

print qq|<tr><td><img src="$card_name_hash"><b>$item</b></td><td>$idd</td><td>$cde1</td></tr> \n|;
}
print qq|</table>|;
print qq|<hr>|;
print qq|全<b>$fco</b>種</TD><TD><IMG src="img/(5).jpg" width="62" height="306" border="0"></TD></TR><TR><TD><IMG src="img/(6).jpg" width="59" height="59" border="0"></TD><TD><IMG src="img/(7).jpg" width="379" height="59" border="0"></TD><TD><IMG src="img/(8).jpg" width="62" height="59" border="0"></TD></TR></TBODY></TABLE></center>|;
}

上手くいかず…
WEB上のソースを見ると、

<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>

こんな感じになっています…

そして画像表示とは別件なのですが、コレクションファイルを生成した時に何故か「0」の値が1行目にできてしまう原因も分かっておらず…
画像を表示させることを考えると、これも修正できれば…と思いつつ下記の部分に問題を見つけることもできず;

# Sub Make File #
sub make_file {
@rcdlines = &get_user("$Fm{'id'}");
$line = join('<>',$id,'',"$maxcard","\n");
$sp .= 'Ca';
$mn -= $cost;
&writedat("$cardir$id\.cgi",$line);
chmod(0666,"$cardir$id\.cgi");
push (@msg,"カードファイルを作成しました。");
&userout;
}

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

# Sub Up After #
sub up_after {
@rcdlines = &get_user("$Fm{'id'}");
return if $fg ne 'UPB';
@carlines = &get_card("$Fm{'id'}");
&splititem('iC');
foreach (0 .. $#items) {
($item,$sts,$price) = split(/△/,$items[$_]);
$upbag = 1;
if ($Fm{"$_"}) {
if ($csp > 0) {
push (@msg,"$itemを入れました");
$space++;
$csp--;
push (@citems,"$item△$sts△$break△$iimg");
$upbag = 0;
} else { push (@msg,"ファイルがいっぱいです") }
}
if ($upbag) { push(@newitems,$items[$_]); }
}
@items = @newitems; &joinitem('iC');
$fg = ''; &userout; &cardout;
}


カードトレードの件もご指導ありがとうございます!

> 渡されてくる名前は'M'と'Y'なのでここを修正する必要があります。
> あと、今回の件とは関係ありませんが、入力値チェックが行われていないので通常のアイテムとも交換できてしまいます。

危ない…全く気づきませんでした;
ありがとうございます!

早速、下記のように修正してみたのですが

# Sub CardTrade After #
sub catd_after {
    if (!$Fm{'M'}) { push (@msg,'自分のカードが選択されていません'); return }#tm⇒M修正
    if (!$Fm{'Y'}) { push (@msg,'相手のカードが選択されていません'); return }#ty⇒Y修正
    @rcdlines = &get_user("$Fm{'id'}");
    return if $fg ne 'TRB';
    @prclines = &get_partner("$Fm{'pd'}");
    &splititem('iI');
    ($item,$sts,$price) = split(/△/,$items[$Fm{'M'}]);
    ($pitem,$psts,$pprice) = split(/△/,$pitems[$Fm{'Y'}]);
#入力値チェック追加
if(index($sts, 'Td') == -1){push(@msg, '自分の交換できないカードが選択されました。'); return;}
if(index($psts, 'Td') == -1){push(@msg, '相手の交換できないカードが選択されました。'); return;}
#入力値チェック追加
    $sts =~ s/Td//g; $psts =~ s/Td//g;
    splice(@items,$Fm{'M'},1,"$pitem△$psts");
    splice(@pitems,$Fm{'Y'},1,"$item△$sts");
    push (@msg,"「$item」と$pnmの「$pitem」を交換しました");
    $woeds .= "[$id]$nmの「$item」と「$pitem」を交換しました。";
    &joinitem('iI');
    $fg = ''; &userout; &add_record($words);
        }

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

お知恵をお借りできたら幸いです…!

▼関連発言

1841:カードトレードと、カード画像の実装を目指して… [YOUME] 08/12 15:30
 └1842:Re:カードトレードと、カード画像の実装を目指して... [moon] 08/12 21:47
  └1843:Re[2]:カードトレードと、カード画像の実装を目指.. [moon] 08/12 22:03
   ├1844:Re[3]:カードトレードと、カード画像の実装を目.. [YOUME] 08/12 22:36
   └1845:Re[3]:カードトレードと、カード画像の実装を目.. [YOUME] 08/13 18:45
    └1846:Re[4]:カードトレードと、カード画像の実装を.. [moon] 08/13 20:28
     └1847:Re[5]:カードトレードと、カード画像の実装.. [YOUME] 08/14 09:22
      └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

  返信フォーム [引用]
名 前 保存
題 名
発 言
PASSWORD
投稿確認必ずチェックを入れてください。こちらにはチェックを入れないでください。
書き込む
◇題名は、短くわかりやすく書いてください。
◇過去に同じ内容が投稿されていないか検索してから書き込んで下さい。
◇管理人の判断により相応しくない投稿は削除します。

Pass 保存


CGIROOM