プロフィール

Na-7

Author:Na-7
SE(システムエンジニア)として約15年間システム系ソフト会社を勤めあげ、2008年3月退社。現在、ゲーム制作会社設立を目指して活動中。


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
回避移動05
開発中のメイン画面
後続部隊の横展開や包囲がスムーズになった。
しかし全ての課題が解消されたわけではないらしい。



◎課題

前回は回避移動を実装しましたが、幾つか気になる点があります。

・敵前で部隊は横展開するが、包囲に至らないことが多い

・侵入不可地形に侵入してしまう

・拠点付近に部隊が多数集結すると挙動不審な動きをする

・橋の位置で進行方向が逆の味方部隊と向き合うと、
 両部隊共に立ち往生してしまう



◎包囲に至らない

包囲に至らないことが多い

後続部隊は後ろの方で行ったり来たり右往左往しつつ、徐々に左右に展開します。展開速度が遅いため、包囲に至る前に敵部隊が壊滅するケースがかなり多いです。

後続部隊が行列の後方で右往左往する様子は、実際の戦場では結構ありえる(むしろ古戦場で部隊がきちんと連携する方が稀)と思うので、これはこれでアリかもしれません。

しかし、開発者が部隊移動を管理しきれていないのは問題です。特に、斜め後方に回避移動するケースがあるのは、不自然で理解できません。やはり部隊移動はきちんとコントロールする必要がありますね。



◎侵入不可地形への侵入

一方、侵入不可地形に侵入する原因を調査すると、部隊が斜めを向いた場合の回避移動に問題がありました。

部隊が上を向いた場合の回避移動経路   部隊が右上を向いた場合の回避移動経路

斜めを向いた場合の回避移動経路が、予定外のセルを指しています。そのため、中間に侵入不可地形があっても、チェックでNGにならず侵入してしまいました。

これを正すには、斜め方向の回避経路を修正する必要がありますね。



◎斜め方向の回避経路

従来は、回避経路算出後に一旦セル座標系に変換し、これをフリー座標系に戻しています。ところが、回避先に想定外の座標が算出されることがあります。

部隊方向がフリーだったので、回避移動処理では45度単位で計算するよう改修したのですが、それでも解消されません。結局原因は「回避経路をフリー座標系で算出したため」でした。

斜め方向の回避経路がおかしくなる原因

上図Aにおいて、右方向へ1.0の距離を加算すれば、右セルへの移動経路を示すことになります。これは、部隊Aがセルの左下隅や右下隅に居たとしても同様です。部隊の向きが90度単位で回転した場合も問題ありません。

しかし、部隊が斜め方向を向くと事情が変わります。右方向へ1.0の距離を加算しても、セルの左下隅に居る部隊Bと、セルの右下隅に居る部隊Cとでは、移動先のセルが異なります。これは、部隊BとCのX座標が

COS(45度)=約0.7

となるからです。実は中学生レベルの話だったわけですが、気が付くまで延々と悩んでました(>_<)


フリー座標系で算出する場合は、斜めを向いた場合に距離を調整する必要がありますが、‘右右上’などの座標を考慮すると煩わしいので、先にセル座標系に変換してから算出することとします。



◎初歩的なボケ

実装してテストすると、予定外の座標が算出されることがあります。Excel上ではバッチリなのに、XNAでは何故異なる座標が算出されるのか?

まず最初に失敗したのは、

int a = addPoint.X ^ 2;

のように記述したら、^はべき乗ではなくてxorとのこと。エラーにならないので、気付きにくくハマリやすいです(--;


また、int型にcastする際の誤差が問題になりました。
0.9999…が0になって想定外の値に。
融通がききませんね…ブツブツ。

その後、0.001加算してキャストしたら、-0.9999…のケースで失敗。マイナスのケースを考慮し、丸める関数を作った後で気が付きました。

「Math.Roundという便利な関数があるじゃないか!」

…大ボケかましちゃいました(爆)



◎修正

そんなこんなで、回避経路は予定通りの座標が算出されるようになりました。にもかかわらず、後続部隊が右往左往するケースは緩和されません。むしろ悪化したかも(ーー;

左上ではなく左下に回避移動するケースが増えたようなので、Y座標を反転したり、Math.Atan2()の引数を入れ替えたりしたのですが、なかなか上手くいきません。全コードを見直してようやく気付いたのは、X座標をsin、Y座標をcosで求めてた、ということ。…ぐはっ!><

しかしそこを直してもまだ改善に至りません。何か根本的な問題があるのかと考え直して、ようやく肝心なことに気付きました。

回避経路はXY平面で算出するので、当然のようにY座標は上方向がプラスとイメージしていたのですが、XNAは上(奥)から下(手前)にZ座標が増加します。この点に思い至らず、Y座標(Z座標)の算出に失敗してました。

・移動候補配列のY座標指定を反転する
・Math.Atan2で取得した角度を反転する
・「目標方向-部隊方向」の減算式を加算式とする
・sinで取得した値を反転する

上記のように修正したら、ようやく改善が実感できるレベルになりました。

回避移動05

静止画なのでわからないと思いますが、後方の右往左往率が低下し、横展開や包囲の部隊展開速度が向上しました。また、『移動不可地形に侵入してしまう』現象はほぼ無くなりました。

とは言え、完全に理想通りになったというわけではなく、『理想に一歩近づいた』という感じです。



◎次回予告

回避移動のコードは自作ながら不信感が強かったのですが、デバッグとテストを繰り返すことで、ようやくモノになった気がします。

しかしまだ気になる点が残っているので、次回も引き続き部隊移動を調整します。

スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
回避移動04
開発中のメイン画面
回避移動が実装された。敵前で後続部隊が左右に展開し、各個撃破に奔走する戦場の雰囲気が楽しめる。


◎すれ違いと包囲

今回は、移動先に味方部隊が在る場合、その部隊を避けながら目的地に向かう部隊移動処理を実装します。

図に描くとこんな感じです。

すれ違い01   包囲01

すれ違いの際は、

・格上の部隊は待機
・格下の部隊は回避移動

とします。さらに、地形や他部隊による侵入不可のパターンも考慮する必要がありますね。

すれ違い02   包囲02

包囲パターンでさらに後続部隊があった場合は…二重に取り囲んだ位置で待機かな?

…なんか、予想以上に複雑な気がしてきました(汗)



◎設計

前述のパターンを踏まえて、回避移動のロジックを設計します。

回避移動フローチャート(PDF)

あれ?意外とシンプルにまとまったようですが、これで本当に上手くいくのでしょうか?(^_^;



◎実装

とりあえず左前方と右前方の回避移動のみ実装して動かすと、一応回避移動はするのですが、あるタイミングから経路探索が完了せず全部隊停止してしまいます。

回避移動01   回避移動02

原因が解らず悩みまくったのですが、経路探索内のopenListとcloseListの件数が上下しているので、

1 ある部隊の経路探索が完了
2 しかし移動先は味方部隊が存在し移動不可
3 移動処理のやり直し(1に戻る)

上記の永久ループに陥ったものと結論付けました。経路探索対象が他の部隊に移ってくれれば良いのですが、現在のロジックでは、1部隊の周囲が味方部隊で塞がると、探索対象が移行せず永久ループに陥るようです。

そこで、前回の探索要求クライアントと同一かチェックし、同一の場合は経路探索処理を一回パスするようにすると、各部隊が動き始めました。



◎重なった部隊の問題

拠点から再出撃した部隊が動かなくなるケースがあります。

回避移動04

これは、複数の部隊が拠点から一斉に出撃すると、「移動先に味方部隊が存在する」という判定に該当し、停止してしまうことが原因でした。

…そうか、今回は「1つのセル(マス目)に複数部隊は存在しない」という前提で改修してきましたが、このケースはその前提が崩れたわけですね。

対処案を検討します。

A案:部隊の出現位置を複数用意する

B案:部隊の出陣タイミングをずらす

C案:1つのセルに複数部隊もアリとする

A案は、部隊出陣数に上限を設ける必要があるので却下。
B案は、出撃待ちの部隊をプレイヤーに分かりやすく見せるのが面倒なので却下。
消去法で、C案とします。

複数部隊が重なった場合、プレイヤーが参照/指示する部隊を選択するミニウィンドウが必要になりそうですが、その辺は後日検討します。

とりあえず、C案前提で移動処理を改修したら、動くようになりました。



◎現状

左斜め前方と右斜め前方の回避移動を追加しました。現在はこんな感じです。



今回は、部隊展開の様子を見せたかったので、移動やダメージを倍速としています。
(倍速はパフォーマンスがキツイですw)

各部隊が敵前でわらわらと分散展開する様は、なかなか味があると思うのですが、いかがでしょうか?



◎次回予告

幾つか気になる点があるので、次回はそれらに対応します。

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
モーション切替パフォーマンス改善01
開発中のメイン画面
モーション切替のパフォーマンスが向上し、槍兵のモーションが切り替わるようになった。部隊移動の既存バグも改修された。



◎素朴な疑問

今回は、モーション切替が遅い原因を調査し、パフォーマンスの改善を図ります。

…で、原因調査で試行錯誤するうちに、ふと疑問が湧きました。

・モーション切替
 =板ポリのテクスチャ切替
  =エフェクト変更発生

というわけで、モーションが切り替わる瞬間のみ遅延するのであれば理解できますが、実際には戦闘中ずっと遅延状態が続きます。

攻撃モーションはきちんと再生されますが、内部的には移動→攻撃→移動→攻撃…のように連続で切り替わっているのかもしれません。



◎原因と対処

コンソールに出力して確認すると、「移動→停止→移動→停止…」でループするパターンや、「歩行→停止→攻撃→歩行→停止→攻撃…」でループするパターンがありました。

このような現象が発生した直接の原因は、移動速度変更メソッド内で、

・移動速度 = 0 の場合 → 停止

・移動速度 > 0 の場合 → 歩行

としていたので、攻撃等の別モーションが絡むと、モーション変更が多発し遅延してました。

停止モーションのテクスチャは歩行モーションと共通なので、遅延は発生しないと考えていたのですが、実際には攻撃時にも移動速度変更メソッドを呼び出していたようです。

移動速度変更メソッドと呼び出し側を修正して対処しました。



◎正しいのに…?

実はその後も「停止→攻撃→停止→攻撃…」等の別パターンが発覚し、それぞれ原因調査&修正しました。

例えば、「歩行→攻撃→歩行→攻撃…」は、下記の条件で発生しました。

・近接攻撃射程範囲内に敵部隊(ターゲット)が不在 &
 索敵範囲内に敵部隊(ターゲット)が存在する &
 移動速度が0
 →移動先の目的地を敵部隊(ターゲット)とする
 →移動速度を上げる(歩行開始モーション)

これは敵部隊が射程外の場合、敵部隊に向けて移動を開始する処理ですが、敵部隊が射程外なのに攻撃モーションに切り替わる(攻撃が発生する)理由がわかりませんでした。

どこかの判定処理がおかしいのかと疑い総チェックしましたが、プログラムは悪くなさそうです。結局この現象は「このパターンが存在する」という結論に至りました。

このパターンが存在するの図

・ターゲットは近接射程外なので、
 ターゲットに向けて移動開始

・他の敵部隊に攻撃されたので、
 移動を停止し攻撃モーションに移行

もし移動先に他の敵部隊が存在して邪魔な場合は、その敵部隊が新たなターゲットになります。しかし横や後ろの敵部隊は移動の邪魔になりません。その場合は最初のターゲットを目指すので、上記の状態がループします。

つまり、各部隊の動きはそれぞれ正しいのですが、しかしモーション切替が多発して遅延するのは問題です。

結局、複数部隊から攻撃された場合も考慮して、「攻撃を受けた部隊は、ターゲットが近接射程外だった場合のみ、ターゲットを変更する」ことにしました。



◎方針変更

こんな調子で修正を続けていくと、修正したパターンに関しては遅延現象が改善されるのですが、次のパターンでは、以前修正した部分も含めて全体の整合を見直す必要があります。

今後、(他の攻撃方法や計略など)パターンが無数に増えることを考えると、従来のやり方(ロジック)に限界を感じました。そこで、ロジック方針を変更します。

従来:
 アクションが変更されたタイミングでモーションを変更する

新方式:
 現在のアクションに応じたモーションを再生する
 (毎フレーム)


というわけで、ここまで修正したロジックをまた組み直します。はふぅ…。



◎既存バグ修正

新方式に修正してテストすると、それなりのパフォーマンスで動くようですが、一個所に多数部隊が集結すると激オモになりました。試しにモーション変更コードをコメント化しても、現象は変わりません。…あれ?この遅延はモーション切替と無関係?

結局この問題は、城に近付く部隊が城内駐留部隊をターゲットと認識することが原因だったので、駐留部隊を無視するよう改修しました。


また、あるタイミングから全ユニットの移動が停止することがあります。この現象は以前から不規則に発生して悩みのタネだったのですが、今回ようやく原因が判明しました。

移動経路定期探索中のユニットを(戦闘発生等の理由で)突然停止させると、定期探索処理はそのクライアントの再要求を永久に待ち続けてしまい、経路探索処理が実質機能停止してしまうのです。

原因が判れば対処は簡単。移動停止処理内で、探索要求クライアントをチェック&初期化したら、直りました。

また、攻撃中はターゲットの方へ向くようにしました。



ちょっと判り難いかもしれませんが、今回の動画は槍兵のモーションを切り替えています。
(騎兵や旗兵は攻撃モーション未作成)

部隊移動やモーション切替等の動作には満足していますが、肝心のパフォーマンスは…微妙ですね(汗)

以前よりは格段に向上したものの、多数の部隊が一斉に攻撃態勢に入ると、

30 ~ 60 fps → 8 ~ 20 fps

まで低下することがあります。1秒後には概ね回復するのが救いかな?



◎次回予告

次回は、部隊回避移動を実装します。

見栄えの向上や敵部隊の包囲が目的ですが、副作用として、遅延現象が若干緩和されるかもしれません。

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
無敵三国
無敵三国
基本プレイ無料の三国志シミュレーションRPG。
施設建設/武将育成/装備/技能/任務/戦闘/連盟など、ブラウザゲームの主だった機能は一通り提供されている。



◎9月の目標達成度

・活動時間月160時間以上

実績:89h(達成率:55%)


・中継地点の自動設定(16h)

実績:24h(達成率:100%)


・戦闘処理の実装(32h)

実績:21h(達成率:60%)


・連隊の隊列制御(24h)
・戦闘モーションの作成(40)

実績:未着手(達成率:0%)


・ブログ更新/HP更新(48h)

実績:28hでブログ更新(達成率:100%)


・予定外作業

実績:10hでメインマップテクスチャ修正


・電気使用量:150kWh以下

実績:142kWh(達成率:100%)


・空調使用禁止

実績:目標達成


部隊戦の実装が進んだのは良いのですが、時間目標達成率55%は過去最低かもしれません…(ーー;



◎作業時間分析

作業時間集計2011年9月(PDF形式)

○良かった点
・部隊戦が展開できるレベルまで進んだ
・長年先送りしてた懸案を解決した
 (メインマップテクスチャ修正)

○悪かった点
・後半休みすぎ
・1日の作業時間が目標掲示/達成共に少ない
・ブログ更新数が少ない

一度休むとなかなか復帰できずズルズル、というのがパターンになってきました。ここまでくると、思い切った対策が必要ですね…。



◎工事騒音状況

『8月からうるさくなってきた』と先月書きましたが、気のせいではなくて、近所でもう一軒別の工事が始まってました。
確認すると、施工主/施工業者共に別件。春先の道路工事で同じ場所を何度も掘り返した理由が判りました。

二軒目の工事期間は8~12月とのこと。
年末までやるのかよ~!!(泣)


騒音は9月にピークを迎えたようですが、現在は

 一軒目:ほぼ完了(残りは内装のみ)

 二軒目:基礎工事が終わって建屋に突入

という状況なので、今後はマシになると思います。



◎罰則規定

サボリ対策として『一週間の活動時間が40h未満だったらペナルティを科す』こととします。

ペナルティは『翌週一週間ゲーム/アニメ禁止!』です。

…ペナルティルールは設けたくなかったのですが、最近サボリが酷いので仕方無いですね(ーー;



◎進捗状況チェック

現在、3カ月以上遅延しています。

9月の進捗が酷かったので、10月にペースが回復するか様子を見て、11月にスケジュールを見直します。



◎10月の目標

・活動時間月160時間以上

・部隊戦の実装/調整(8h)

・モーション切替パフォーマンス向上(32h)

・陣形追加(8h)

・モデル個別移動の実装(16)

・部隊回避移動の実装(24h)

・戦闘モーションの作成(32)

・ブログ更新/HP更新(40h)

上記の中で一番難しいのはモーション切替でしょう。なるべく後廻しにしたいのですが、プログラムを追加した後の調査はもっと大変なので、やはり先にやるべきでしょう。



◎次回予告

というわけで、次回は「モーション切替パフォーマンス調査」です。

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
部隊戦08
開発中のメイン画面
小隊単位でダメージを受けるようになった。
敵部隊を倒すと、自動的に元の任務に復帰する。



◎小隊の壊滅

前回は試しに部隊の総兵数を減らしました。今回は部隊内の小隊の兵数を減らします。そこでまず問題になるのが「どの小隊がダメージを負うのか?」という点です。

近接攻撃によるダメージは、敵に近い小隊から受けるべきですが、その際には陣形や部隊の向きも考慮すべきでしょう。

例えば、(前衛に槍兵、後衛に弓兵を配置した陣形で)後方から攻撃を受けると、弓兵から倒されるようにすれば、奇襲や挟み撃ちなどがより効果的になります。

その辺は陣形を拡充してから対応するとして、今は各小隊が順番にダメージを負うこととします。

部隊戦06

…あれ?何故か1小隊だけ残るぞ?…そうか!

→兵数が減ると攻撃力が減る
 →攻撃力が一定以下になるとダメージを受けない
  →1小隊残る

計算式はいずれ見直すとして、とりあえずダメージが1未満の場合は1ダメージ受けることにします。

…全ての小隊が壊滅しました!



◎壊滅した部隊の後処理

小隊数=0になったら、部隊リストから部隊インスタンスを削除します。すると(foreachループ内でリストが変更されたので)エラーになりました。

そこで(foreachループ後に)forループ内で部隊リストから小隊数=0の部隊インスタンスを削除しました。エラーは発生せず、部隊が削除されたように見えますが、これでいいのかなぁ?(汗)



◎モーション切り替え

旗兵や槍兵のモーションを歩行→攻撃(戦闘終了時は攻撃→歩行)に切り替えます。

部隊戦07

モーション切り替えは成功したものの、フレームレートが

 30 ~ 60fps → 6fps

まで下がってしまいました。まじっすか~!?

…あれこれ試してみたものの、どうもよくわかりません。パフォーマンス問題は時間がかかりそうなので、他の問題から片付けましょう。



◎複数の敵部隊と遭遇した場合の処理

1対1の部隊戦は簡単ですが、1対多や多対多で乱戦状態になると、なかなか思い通りに動いてくれません。例えば、

・敵部隊を一度認知したのにスルーして当初目的地へ移動する

・敵部隊の目前で停止するが攻撃しない

・敵部隊を倒した後、移動を再開しない

このような現象が次々と発覚するので、その都度原因を調査し対処します。



大体思い通りに動くようになってきました。
いかがでしょうか?

…武将メッセージはちょっとウザイかもしれませんが、暫定のオマケなので気にしないでください(笑)



◎次回予告

10月になったので、次回は「9月の総括と10月の目標」です。

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
部隊戦05
開発中のメイン画面
部隊のネームプレートに総兵数が表示された。索敵範囲に敵部隊を発見すると、自動的に近付いて攻撃を開始する。



◎作業計画

今回は部隊戦を実装します。作業計画はこんな感じ。

1 周囲の敵部隊を認知する
2 敵部隊を攻撃目標と定める
3 敵部隊に向けて移動する
4 近付いたら攻撃を開始する
5 攻撃効果を反映する
6 壊滅した部隊の後処理
7 壊滅させた部隊の後処理

果たして計画通りに出来るでしょうか?w



◎周囲の敵部隊を認知する

以前、中級モードの索敵機能を実装した際に、索敵範囲内の敵部隊を判定しました。これを流用して初心者モードに実装します。

部隊戦01

判定結果を可視化したかったので、とりあえずエンカウントメッセージ復活!(笑)



◎敵部隊を攻撃目標と定める

敵部隊を攻撃目標と定めます。

部隊戦02

敵部隊を攻撃目標と定めた場合、部隊情報画面に表示するようにしました。
(通常は任務目標が表示されています)



◎敵部隊に向けて移動する

敵部隊への移動処理に関しては、懸念事項があります。

経路探索開始から完了まで時間がかかると、その間に自部隊が移動している(当初任務継続)可能性がありますが、その場合は経路不正で停止してしまいます。

すぐに思いつく対策案は下記2点ですが、それぞれ懸念があります。

・探索終了まで自部隊を停止する
 →敵部隊に追い付けない
 →プレイヤーに不快感を与えそう

・定期探索ではなく通常探索を利用する
 →探索完了までフリーズしてしまう

とりあえず自部隊停止せず定期探索で試してみると…予想してたほど悪くないですね。敵が居た場所に移動するし。
多少気になる点もありますが、もう少し進めてから考えましょう。


敵味方がすれ違い、位置が入れ替わった所で停止するようなので、停止後の処理を追加します。

・索敵範囲内に目標部隊が存在するかチェックする
 →存在すれば敵部隊に向けて移動する
 →存在しなければ敵部隊目標をクリアする
  (当初任務に戻る)

部隊戦03

敵部隊と何度かすれ違って距離を縮め、最後は重なった位置で共に停止するようになりました。

ちなみに、周囲に他の敵部隊がいた場合は、当初任務に一旦戻ってから、改めて「周囲の敵部隊を認知する」という最初のフェーズに入ります。



◎近付いたら攻撃を開始する

このゲームは、(現時点では)近接攻撃と中距離攻撃の2種類があります。攻撃方法は各武将が(編成、性格、戦略等を総合的に考慮して)自動的に判断しますが、今回はまず近接攻撃を実装しましょう。

・近接攻撃の射程距離に入ったら攻撃態勢に入る
 →部隊移動停止
 →兵士モーション切替

最終的には、部隊内の各小隊(兵士モデル各個体)が敵小隊と隣接するよう個別移動させたいのですが、その辺は陣形を拡充してから実装します。

…攻撃目標部隊のみチェックしたら、他の敵部隊がすり抜けてしまいました。移動先に敵部隊がいたら、停止して攻撃目標を変更する必要がありますね。

部隊戦04

各部隊は敵部隊の直前で停止しました。いずれ味方部隊が重ならないよう回避移動させるつもりですが、今はこのまま進めます。



◎攻撃効果を反映する

ダメージ判定は以下の通りです(暫定)。

ダメージ=(攻撃力*20)/(防御力+1000)-(攻撃力/回避力)

ターン制の場合は、上記のような計算式だけでOKですが、セミリアルタイム制の場合は、上記の計算式にゲーム時間(前回フレームから今回フレームまでの更新時間)を掛け合わせて現時点のダメージを算出します。

また、複数部隊から攻撃された場合を考慮して、攻撃側は攻撃力や攻撃時間を引数として防御側のダメージ判定メソッドを呼び出します。とりあえず暫定で(小隊は無視して)総兵数のみ減らしてみましょう。

部隊戦05

ネームプレートに総兵数を表示しました。隣接すると攻撃を開始し、兵数がどんどん減ります。1つの部隊を複数部隊が攻撃すると、凄い勢いで減ります。(複数部隊の攻撃は後日見直します)



◎次回予告

長文につき、今回はここまでとします。

次回は今回の続きです。
とりあえず戦闘っぽくなってきましたよ!^^

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

| BLOG TOP |

copyright © ゲーム制作の舞台裏 all rights reserved.Powered by FC2ブログ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。