プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
中継地点指定機能02

移動方針で中継拠点が指定可能となった。また、目的地や中継地は、拠点に限らずフリー座標指定が可能となった。



◎指定画面の実装

今回は、中継地点指定機能を作成します。まずは指定画面から実装しましょう。

移動方針指定画面01   任務確認画面01

中継拠点の指定が可能となりました。



◎移動処理の改修

次は移動処理の改修です。

1 中継地点指定済の場合、中継地点に移動する

2 中継地点に到着したら、中継地点情報を削除し、
  最終目的地へ移動する

これに伴い、入城処理や出城処理も修正します。

中継地点指定機能02

駐留拠点と中継拠点を指定すると、まず中継拠点に移動し、到着後に駐留拠点へ移動するようになりました。



◎デバッグ

沢山の部隊に任務を指定すると、経路探索がいつまでも終わらず動かない部隊がいます。再現条件がなかなか特定できず、原因を掴めずにいたのですが、ようやくアタリが付きました。

任務インスタンスはゲーム開始時のみ初期化し、以後同じインスタンスを使いまわしていたので、目標拠点や中継拠点を変更すると、影響が他の部隊に及んでました。

任務指定画面開始時にインスタンスを初期化するよう修正しました。



◎フリー座標指定

拠点だけでなく、地点(フリー座標指定)も指定可能とします。移動処理は最初から座標で計算しているので、画面インターフェースを改修すれば良いはずです。

フリー座標指定

しかし実際にやってみると、ミニマップ上で指定した座標位置と、メイン画面の座標位置がかなりずれました。改めて確認すると、拠点の位置もミニマップとメイン画面で以前からずれてました。

これまで、メインマップやミニマップ上の拠点座標は、緯度経度情報をベースにXNAで算出してました。しかしこのままでは個々の微調整がやりにくいので、座標は全てExcel側で管理し、XNAは座標データを呼び出すだけとしました。

改修後にテストすると、宛駐留後の部隊に任務を指定しても動かなくなりました。その原因は「XNA→Excel演算変更により拠点座標が微妙にズレて、部隊が水地形に出陣し移動不可と判定されたため」でした。

結局、宛のX座標を"1"ずらすだけで解決したのですが、原因が判るまで悩みまくりでした(^^;



◎経路探索処理の動作モード

ミニマップとメイン画面の座標のズレ具合を確認するため、動作テストを繰り返すと、任務を指定しても、部隊が動かないケースがありました。またしても悩みまくったのですが、これはもしかすると「移動不可の目的地を指定している」のかもしれません。座標がズレるので、実は川の反対側を指定してるとか。

そこでまず、経路探索処理に動作モードを設けます。

通常探索モード:
 ゲーム開始時やミニマップ目的地指定時に使用

定期探索モード:
 部隊移動時に使用


実装し、ミニマップで適当な場所を指定すると、応答時間に相当なバラツキがありました。数分以上待っても応答しないケースは、恐らく移動不可地形と思われます。判定に時間かかりすぎなので改善しましょう。



◎移動不可判定の改善

もし、ゴール座標やその周囲8座標が移動不可地形だった場合、エースター経路探索アルゴリズムは、スタートから全経路をチェックし、全ての経路がダメな場合にようやく「辿り着けない」と判定するようです。これでは時間がかかりすぎるので、まず最初にゴール座標と周囲8座標をチェックしましょう。

そこには移動できません!   目標が遠すぎです!

移動不可地点を指定すると、警告メッセージが2秒間表示され、プレイヤーに再指定を促すようになりました。ついでに、距離もチェックして遠距離指定不可としました。


この改善により「いつまで待っても部隊が動かない」というケースは無くなったようです。しかし、ミニマップで目的地を指定した直後の応答時間にムラがあり、0~5秒ぐらい待たされます。その間はフリーズ状態となってしまうので、さらなる改善が必要です。



◎次回予告

動作テストする度に数分待たねばならず、かなりやる気を削がれたのですが、ようやく一歩前進しました。

次回はミニマップを改善します。画像の再取得、座標変換の修正、城アイコンの変更、部隊アイコンの配置等を行う予定です。

スポンサーサイト

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
部隊情報画面改修04
開発中の部隊情報画面
部隊ネームプレート選択時は部隊情報画面が表示され、命令権限の有無によってボタン名称が変わるようになった。



◎指揮系統の確認

プレイヤーが軍団長の場合、通常は連隊長に対して指示します。連隊配下の部隊長に直接指示を出すことも可能ですが、軍団長と連隊長の指示が異なると部隊長が判断に迷うかもしれませんし、連隊長は自分の立場が無視されたようで不快かもしれません。
(直属部隊以外は、細かい指示に向かない)

組織図における命令と要請の例示(PDF)


連隊への発令を促すことを意図して、部隊ネームプレート押下時は連隊情報画面を表示していたのですが、実際に操作してみると、部隊選択時に連隊情報画面が表示されるのは違和感があります。

そこで、部隊選択時は部隊情報画面を表示するよう改めます。プレイヤー武将が軍団長の場合、連隊への発令を促す工夫は別途検討します。
(メイン画面の片隅に発令ボタンを別途設けるなど)

尚、他の軍団に所属する部隊に対しては、指示はできません。援軍や共同攻撃等の要請は可能です。(要請は断られる可能性があります)



◎命令権限の判定

命令権限の有無を判定するプログラムを作成したのですが、様々なケースを個別に判定したため、冗長的なコードになってしまいました。

プログラムをチェックして規則を整理すると、「武将1の役職が武将2より格上で、同一所属であれば命令権を有する」という結論に達したので、下記のように作り直しました。

命令権を判定するサンプルコード

しかし動作テストを行うと、判定を誤るケースがありました。不在武将は同一インスタンスを使いまわしているので、所属判定に失敗してしまうのです。

命令とは、人が人に対して与えるものなので、命令権の有無は(部隊や連隊等の組織に対してではなく)武将に対して判定すべきものと思われます。しかしそれを実現するには、同一インスタンス方式をやめて、不在武将インスタンスを沢山作る必要があります。
(現実世界では無名の部隊長が沢山いました)

しかし、武将一覧に不在武将をリストアップするわけにはいかないので、結局どこかで例外処理を行う必要があります。どうせ例外処理を行うなら、インスタンスは1つの方がメモリを節約できます(微量ですが)。

…というわけで、組織に対して命令権の有無を判定するよう改めました。毎度ながら「不在」と「不明」は扱いが面倒です(^^;



◎実装

部隊選択時は部隊情報画面を表示します。また、任務ボタンの名称を変更し、プレイヤーが参照部隊に対して命令権を有する場合は「発令」、無い場合は「要請」、勢力が異なる場合はボタン無しとします。

部隊情報画面改修03   部隊情報画面改修04

プレイヤー武将を変更してテストしましたが、そちらもOKでした。



◎仕様の見直し

実装の前後で、幾つか迷う点がありました。

1つは「他軍団配下の連隊や部隊に直接要請可とすべきか否か?」という点です。本来は他軍団長を通すのが筋ですが、戦場でいちいち上司を介していたら機を失うので、直接要請可としました。
(但し、受信者が「上司の許可が無いと応じられない」と判断することもあります。孟達とかw)


もう1つは「任務と要請は同一管理すべきものか?」という点です。最初は要請受諾時に任務を上書きするつもりでしたが、これでは要請達成後に元の任務に戻れません。要請を受諾しようとしまいと任務は変わらないので、任務と要請は別々に管理すべきものかもしれません。

例えば、城Aを守る武将Bが援軍要請に応じて出撃したとします。しかし途中で『敵の別働隊が城Aに進行中』との情報を入手したら、(通常は要請より任務の方が優先順位高いので)武将Bは城Aに引き返すのが一般的です。

このような情報や判断が戦局を左右する可能性が高く、計略の基本とも言うべき‘偽報’の背景に不可欠な要素であることを考慮すると、やはり別管理が理想的?

しかし既存ゲームでは、要請を一時イベントとして処理するのが一般的です。本格的に別管理して情報画面に表示したら、プレイヤーは混乱しないでしょうか?選択画面のレイアウトは?思考ロジックは?

…というわけで、本件に関しては引き続き検討します。



◎次回予告

実装段階で新しいアイデアが浮かぶことがありますが、なるべく活かして面白いゲームにしたいですね^^

次回は、中継地点指定機能を作成する予定です。

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
連隊情報画面改修01
開発中の連隊情報画面
リンクボタンが追加されて、連隊長や軍団等の関連情報が手早く参照可能となった。戻るボタンの動作は従来と異なるケースがある。



◎ダイアログマネージャの作成

部隊情報画面に連隊情報画面へのリンクボタンを設けると、スタックオーバーフローのエラーが発生しました。コンストラクタ処理時にリンク配下画面を予め呼び出す方式としていたので、連隊情報画面と部隊情報画面の無現ループ呼び出しに陥ってしまったようです。

そこで、ダイアログマネージャを新設して、初期化/描画/操作制御等をこちらで集中管理することにしました。

部隊情報画面改修01

部隊情報(曹操隊)→連隊情報→部隊一覧→部隊情報(郭淮隊)→連隊情報…

といったリンクループ操作も可能になりました。戻るボタンを使って一覧画面←→情報画面とした方が早いけど(笑)



◎ダイアログ画面の参照履歴

今回の改修の影響で、戻るボタンを重ねて使用すると、以前とは異なる画面が表示されるケースが発生しました。履歴フローをスタック管理すれば完全再現可能ですが、そこまでする必要があるのかな?

とりあえず考えられる選択肢を挙げて、どうするか検討しましょう。

A案:参照パラメータを履歴として保持する
   →プレイヤーの利便性は高い
   →メモリ効率はB案より良い
   →工数:大

B案:画面インスタンスを履歴として保持する
   →プレイヤーの利便性は高い
   →メモリ効率は最も悪い(GCの懸念あり)
   →工数:中

C案:現在の状態で放置
   →プレイヤーが混乱する可能性がある
   →プレイヤーが混乱しなければそこそこ便利
   →工数:無

D案:1つ前の画面にのみ戻れるようにする
   →プレイヤーは少し便利
   →工数:小

E案:戻るボタンを廃止する
   →プレイヤーは最も不便だが混乱しない
   →工数:小

う~ん…かなり迷いますね(^_^;

市販ゲームを確認すると、戻るボタンは存在せず、部隊情報画面に他部隊の一覧を同時に表示して直接選択可能としてました。ということは、1つ前の一覧画面に戻れれば機能的に十分と言えそうです。

でも、普段インターネットブラウザを使用しているプレイヤーは、戻るボタンが1回限定だと不満に思うかもしれません。

…なかなか結論が出ないので、この件はとりあえず保留とします(汗)



◎参照ボタンの追加

勢力/軍団/連隊/部隊/拠点の各情報画面に参照ボタンを追加します。

部隊情報画面改修02   軍団情報画面改修01

各リンクボタン(青字で背景黄色のボタン)を押すと、詳細画面が表示されます。

武将や勢力等が不明/不在の場合は、ボタンではなくラベルで表示されます。
(不明/不在判定処理も改修しました)


ダイアログマネージャの新設で、ループ参照が可能となり、プログラムがすっきりしました。従来はシナリオ初期データ設定処理に影響を及ぼしていたので、開発工数増加要因となっていましたが、今後はそちらの開発も楽になりました。



◎次回予告

次回は任務関連処理に指揮系統を反映させます。

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
鄭問之三國誌
鄭問之三國誌
台湾漫画家のイラストを売りとした三国志シミュレーションゲーム。兵站線の概念があり、敵の兵站線を断ち切れば劣勢からの挽回も可能。PS2版とWindows版が発売された。



◎7月の目標達成度

・活動時間月100時間以上

実績:83h(達成率:83%)


・移動処理関連整備(16h)

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


・駐留任務効果の実装(24h)

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


・攻撃任務画面の実装(32h)

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


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

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


・電気使用量:240kWh以下

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


7月前半は暑さでヘロヘロでしたが、後半は涼しくなって回復してきました。



◎作業時間分析

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

○良かった点
・後半はペースを回復した
・伝令システムを仮作成し、移動処理と任務を連携させた
・攻撃任務に着手した

○悪かった点
・前半サボりすぎ
・ブログ更新数が過去最低

前半はあまりに暑いので古本屋等で涼んでました。節電目標は達成したものの進捗はボロボロです(ーー;

台風が過ぎた中旬頃から急に涼しくなり、ペースが徐々に回復してきました。



◎暑さ対策

以前、天窓に断熱シート(アルミシート)を張ったら予想以上に涼しくなったのを思い出して、2階南西側の窓3箇所及び玄関に断熱シートを張りました。(総額500円)

見た目は悪い(というか怪しいw)のですが、効果は絶大で、体感温度は3度ぐらい下がりました。「安くて効果が高ければ見た目なんか気にしない」という人は、ぜひ試してみてください。

但し、ご近所様から通報されても当方は一切関知しません(笑)


ちなみに、電気使用量は例年比50%削減し、目標の25%を大幅達成しました。
(エアコン3回ぐらいしか使ってません。前半もっと使えば良かったw)



◎工事の騒音

普段は意外と静かでした。たまに振動を伴うほど轟音が響く日もありますが、我慢できずに実家へ避難したのは1日だけでした。

8月以降もこの程度で済めば良いのですが…。



◎近況報告

甥の家庭教師の件ですが、先日指定された時間に伺ったら「これからTV(ドラマ再放送3時間)見るから待って」と言われました。録画しろと言っても「生で見たい」と聞きません。

怒って家庭教師を辞めると宣言し帰宅したのですが、後で甥が謝罪してきたので家庭教師を継続することにしました。

それにしても、甥は何故あんなことを平気で言えるのか?
どうやら「自分が酷いワガママを言っている」という自覚が無いので、あんなことを言えば相手が怒ると予想できなかったようですが…。

最近の中学生はこれが普通なのか?
それとも甥が特別なのか?

ワガママかつヘタレなままだと、将来ニートになりそうで心配です。



◎進捗状況チェック

現在、2カ月近く遅延しています。これ以上遅れないよう頑張らねば…。



◎8月の目標

・活動時間月140時間以上

・指揮系統の反映(8h)

・中継地点指定機能の作成(24h)

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

・連隊の隊列制御(24h)

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

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

・電気使用量:200kWh以下

8月前半は平年より涼しく、後半は平年より暑くなるそうです。エアコンを使うタイミングが難しいかも。



◎次回予告

次回は、任務関連処理に指揮系統を反映させます。

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

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
ゾロゾロ
開発中のメイン画面
出城処理が修正された。連隊に他の拠点への駐留任務を指示すると、所属部隊がゾロゾロと移動を開始する。



◎デバッグ画面(内部情報表示画面)の実装

部隊移動の様子を伺っていると、ある時期から部隊が移動せず、経路も探索しないように見えます。

こういう場合は内部パラメータを確認する必要がありますが、デバッグの度に内部パラメータ出力コードを書くのは効率が悪いので、部隊の内部情報を画面に表示するボタンを設けましょう。

デバッグボタン   デバッグ情報画面

実行中に任意の部隊の内部パラメータが確認できるのでかなり便利です。もっと早く実装すれば良かった(笑)

ちなみに、数値パラメータは簡単に追加できます。文字パラメータはスプライトフォントの登録が必要なので若干面倒です。



◎拠点入城処理の修正

ある時期から部隊が移動しない原因は、以下のようなものでした。

「1つの部隊が拠点に到着すると、同じ連隊に所属する全部隊を停止させていた」

拠点に連隊を入城させていたことが問題となったようです。

…そうか、拠点に入城するのは連隊ではなく部隊ですね。
問題は拠点に駐留する連隊数ですが、

A案:最初の1部隊が入城した際に計上する

B案:本隊が入城した際に計上する

C案:所属部隊が全て入城した際に計上する

本隊の武将に指示を出すことを考慮し、B案とします。

拠点入城処理の修正01



◎拠点出城処理の修正

拠点に入城した連隊に新たな駐留先を指定すると、城外に部隊が現れ、経路探索後に出発します。しかし、いつまで待っても出発しないケースがあるようです。確認すると、経路探索結果が「経路無し」となってました。
(ここまではデバッグ画面で確認できます)

さらに経路探索処理をデバッグするため、Console.WriteLine()を1行追加すると、最初の探索すら失敗してしまいました。
どうやら、コンソール出力は時間がかかるので結果が変わるらしく、探索時間制限を3ms→1000msに変更すると、最初の探索は成功しました。コンソール出力って意外に重いのね。

…その後も原因調査に難儀しましたが、拠点出城処理でbase.~と記述すべき箇所をthis.~と記述したことが問題だったようです。

よくあるミスかもしれませんが、プログラムが複雑なのでデバッグがしんどいです(^_^;



◎経路探索時間の確認

デバッグが一段落したので、拠点間を移動させて経路探索時間を確認しました。

近距離:一瞬
中距離(マップの1/3):1~2秒
遠距離(マップの1/2以上):5秒以上

中距離までなら大丈夫そうですね。ちなみに、宛~樊城間は街道沿いなので1秒未満です。遠距離の場合は、中継地点を自動or任意設定する仕様とすればイケそうです。



◎次回予告

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

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

| BLOG TOP |

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