過去の結果感想とか考察とかのまとめを「前置き」の「最初に」に置きましたので、ブログの読み込み遅い時とかはご活用をー。
第4回!!
続きです。
前回は戦闘開始時に居る「キャラクターの名前」の取得、まで進みましたね。
そしてこれと同様の手法でデータは取得出来る、ので。
得たデータをどのように紐付けておくか?
に主眼を置きましょう。
そこにちょいと足せば……アドベントカレンダー記事のゴールまでは辿り着けます。
続きです。
前回は戦闘開始時に居る「キャラクターの名前」の取得、まで進みましたね。
そしてこれと同様の手法でデータは取得出来る、ので。
得たデータをどのように紐付けておくか?
に主眼を置きましょう。
そこにちょいと足せば……アドベントカレンダー記事のゴールまでは辿り着けます。
ではでは、紐付け方について考えてみましょう。
……この場合の紐付ける、って何を意味するのでしょうか?
と自分も思ったので、ちょっと図解してみましょうね。
……はい!これが紐付ける、です。
正確に言えば、図4の最後であるナマズと剣を合体させる行為のことを紐付ける、と言えるでしょうか。
同様の手段で、「ゆるキャラ」の中の「ねこ」の引き出しに入っているものと、「ぶき」の中の「ねこ」の引き出しに入っているみかんを合体させたり。
ある戸棚の引き出し「しらないわ」に入っているものと別の戸棚の引き出し「しらないわ」に入っているリボンを合体させたり。
これらを、ぼくは紐付ける、と呼んだわけですね。
……えっ、意味がわかりません?あんこう……
この戸棚というのは前回利用した配列、arrayのことを指します。
戸棚$nameの中の[0]番目にデータを入れることを、引き出し「あんこう」に入れることである、と考えましょう。
図1みたく、前回引っこ抜くことが出来たキャラクター名の1つ、「くるい」を引き出し「あんこう」、つまり$name[0]の中に入れて。
図2のように、すべてのキャラクター名を別々の引き出しに入れる、例えば「ナレハテ」を$name[1]に入れて。
さらにスタイルを前回のように引っこ抜いて、「くるい」のスタイルを別の戸棚$styleの引き出し[0]に入れたり、同様に「ナレハテ」のスタイルを$style[1]に放り込んで。
図3の通り$nameや$styleの[0]番目の引き出しからデータを引き出して、最後図4のようにこれらのデータを合体させたら。
くるいのスタイル、を書くことが出来るようになるわけです。
1番目の引き出しから引っこ抜けば、同様にナレハテのスタイルも書けるようになりますね。
よしじゃあ、書いていきましょうか。
とりあえず、大体の前回までのデータはテキストファイルでpre2としてまとめたのでどうぞ。
……文字化けとかしてたらUTF-8に合わせたりしてなんとかしてください!
ここに順々に足していきましょう。
まずは上述の、前回得たキャラクター名を格納する配列、$name!
print_r($outa1);やecho $outa1[1][0];で確認したように、PC側のキャラクター名は$outa1[1]の引き出しの中に入っていきます。
つまり4人PTの場合は、$outa1[1]の0~3番目の引き出しに入るわけですね!
また引き出しの中に入っている数を数える関数countを用いてcount($outa1[1])とすると1人PTなら1、4人PTなら4を返してくれるので……
$pl = 0;
$plmax = count($outa1[1]);
while($pl < $plmax){
$aisyo = $outa1[1][$pl];
$name[$pl] = $aisyo;
$pl++;
}
whileを用いてこうすると、$nameの引き出しに、一人目から順番に名前が入っていきます。$plmax = count($outa1[1]);
while($pl < $plmax){
$aisyo = $outa1[1][$pl];
$name[$pl] = $aisyo;
$pl++;
}
今回の結果は一人PTなので、print_r($name);で確認すると、
Array ( [0] => くるい )
のように返ってきますね。
そしてこのwhileの中では、定義している通り$aisyoがキャラクター名扱いになるので……以降の作業は全部この中でやっちゃいましょう。
例えばスタイルの場合!
ソースを見てみましょう。
この辺り!
だいたい、「I CLASS=F5>愛称ほにゃらら【スタイル】ほにゃらら<BR」
となっているのがわかりますね。
つまり、その通りの条件で切り出せばOK。
ただ、毎回切り取る作業の為に全部読み込ませるのはあまりにも馬鹿げているので……
その前に、この辺の作業に必要な範囲を切り取っておきましょうか。
いわゆる「戦闘開始時」の作業は今切り取ろうとした「I CLASS=F5」から……
ターン終わりを表すぐらいの、「CLASS=RFOOT」まで入っていればまあ十分。
$pattern0 = '/I CLASS=F5(.*?)CLASS=RFOOT/s';
preg_match_all($pattern0,$src,$out0);
これを名前を引っこ抜くとこの直後にでも挿し込んでおきましょう。preg_match_all($pattern0,$src,$out0);
では、スタイルの切り出しに戻りましょう。
「I CLASS=F5>愛称ほにゃらら【スタイル】ほにゃらら<BR」、ですね。
$patt1 = '/I CLASS=F5>'.$aisyo.'.*?【(.*?)】.*?<BR/';
preg_match_all($patt1,$out0[0][0],$outt1);
$style[$pl] = $outt1[1][0];
こんなんで大丈夫でしょう。実際動きますし。preg_match_all($patt1,$out0[0][0],$outt1);
$style[$pl] = $outt1[1][0];
前回言った通り、ほにゃららみたいな部分には.*?を突っ込んでおけばだいたい大丈夫です。
.*?を信じろ。
あとはprint_r($name);やprint_r($style);で確認してみれば、そこにちゃんとデータが入っていることがわかりますね?
じゃあここで図4でやってるとこまで進んじゃいましょうか!
そう、紐付け……ナマズと剣を合体させます!
合体させる、んですが。
さて問題。どうするのが一番作業しやすくなりますか?
ぼくはやっぱりエクセルに生で貼り付けた時にそのままうまくいく形にしたいな、と思っていて……
なので、tableタグを使って、それに合うように整形しちゃいましょう。
このpre3のような形になります。
見ての通り、ここまで作ったものの上の方にtableタグを。
そして通し番号であるpll=0;をPT人数分の数値を入れてある$plmaxまでwhile関数で回すことで、
全員分のデータをひたすら書き出させています。
今回は$no = 1;かつ$nom = 100;なので……
100人分の数字がずらっと紐付け完了!
すなわち、ナマズと剣が合体できました!
ここまでやれば、あとは単純。
ひたすら引っこ抜いては新しい戸棚の引き出しの中に入れていきます。
本当に、それだけ。
例えば装備!
ソースを見ましょうか。
「I CLASS=F5>愛称ほにゃらら【スタイル】ほにゃらら<BR」から始まる、「CLASS=BA」までの範囲を先に切り取って、
⇒と<BR>で囲まれた範囲を更に切り取り、そこから/と:の間、或いは強さと/の間を切り取れば、武器の種類と強さは切り取れる!
あとは切り取ったデータを$sobisyuや$sobituyoに入れるだけ。
装備は複数種になるので、読むときも書き出すときも装備している数である$sobimaxの回数だけ繰り返すようにwhileで記述、っと。
戦闘開始時スキル!
スキル使用時の記述である「B CLASS=HK」を基点に、ターン終了時である「CLASS=RFOOT」までを切り出し、
この範囲だけを検索していきます。
そしてこの範囲からざっくりと、「愛称のほにゃららB><BR」までを切り出してから、なのですが。
……スキル名を変えている場合と変えていない場合で、挙動が異なります。
なので、ifを使ってこれに対応しましょう。
見たところ、この二つを区別する為に便利なのは、CLASS=SKの存在。
故に、先に切り出した範囲にこれが存在する場合と、存在しない場合に分けて、それぞれをみればOKです。
「愛称のほにゃららB><BR」まで切り出した範囲を$otto0[0][0]と呼べば、
if (false == strpos($otto0[0][0],'CLASS=SK')) {
存在しない場合
}else{
存在する場合
}
でOK。
ソースを見ると、
存在しない場合は「愛称の」から「!」の間に、
存在する場合は「>>>」から「<」の間に、
それぞれ技名が存在していることが、分かるので……切り出す条件も、それで。
最後に、使用したスキルを別途書き込ませることで……
ようやく、ようやく……
アドベントカレンダーのゴール地点まで辿り着きました!!
ということで、次回がデータ取りのスタート地点です。
ここまでの内容はpre4にまとめたので、こちらを参考に、頑張りましょう!!!!!!!!!
PR
カレンダー
プロフィール
HN:
甲殻類
性別:
男性
自己紹介:
定期更新型ネットゲーム「SoulDrops」参加者(黒鉄遥[417]PL)。他も色々。
最新記事
(04/13)
(01/21)
(02/06)
(01/17)
(01/13)
最新コメント
[05/16 CloneFBAgish]
[09/03 アカシ]
[04/17 玄武門 影久(1)]
[03/21 甲殻類(ブログ書いてる奴)]
[03/20 玄武門 影久(1)]
アーカイブ
カテゴリー
リンク
ブログ内検索