日別アーカイブ: 2018年4月18日

タワーディフェンスゲームを作る(3)

今回は、RallyToFlag (移動先を示すフラッグ)に味方ユニットが移動するあたりを実装します。敵ユニットが移動するあたりは実装済みなので、そのあたりを参考にすればいいかなと思いながら実装開始です。

思ってたよりも修正点が多くて実装に時間がかかった。
「ああなってるコードをこう修正しよう」って具体的な実装が思い浮かばないときには、楽観的な見積もりになりがちだよなと思った。

ともあれ、とりあえず動作するようになった。

気づいた点

  • 目的地まで移動できないときの挙動がおかしい。(想定外)
  • 兵舎占拠の進捗が表示されない。(実装したはずなのに)
  • ゲームの途中で占拠した兵舎の目的地が (0, 0) になってる。

まぁ、このあたりは見直せば修正できると思うのでチケット管理システムに登録しておく。

次は、敵と味方が互いに攻撃するあたりを実装していきたい。

HotS のミニマップみようツールの作成(3)

今回は、視線検出した結果に基づいてミニマップを見てないときに警告音を出力するあたりを実装します。

で、実装したメインのロジックはこのあたり。

        private void UpdateWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            int nextAudioPlayMsec = NoCheckMsec;
            var noCheckElapsed = new System.Diagnostics.Stopwatch();
            noCheckElapsed.Start();

            var previousGameState = state;
            while (!updateWorker.CancellationPending)
            {
                System.Threading.Thread.Sleep(20);
                
                if (IsLookingMinimap)
                {
                    if (nextAudioPlayMsec != NoCheckMsec)
                    {
                        okSound.Play();
                    }

                    noCheckElapsed.Restart();
                    nextAudioPlayMsec = NoCheckMsec;
                }
                else if (noCheckElapsed.ElapsedMilliseconds > nextAudioPlayMsec)
                {
                    warningSound.Play();
                    nextAudioPlayMsec += 2000;
                }
                ...
             }
        }

抜粋でないソースコードはこちら。 https://bitbucket.org/satofumi/hots_tools/src/cf889c6dc2389ea045709e29c03e4e7bf9093a75/hots_minimap_instructor/hots_minimap_instructor/MainWindow.xaml.cs?at=default&fileviewer=file-view-default

このコードでは、定期的に視線がミニマップの中にあるかをチェックした結果の IsLookingMinimap プロパティを利用して、「見てないね効果音」や「見たね効果音」を鳴らしてる。
定期的にポーリングしてるのが微妙によくないけど気にしないことにしたい。イベントトリガをがんがん使ったコードは私には読みにくいので。

で、ここまででとりあえずゲームで使えるレベルのツールにはなったので利用していこうと思う。
次回は、ゲームのロード中か死んでないかを判断するための処理をスクリーンショットから取得するあたりのコードを作成していこうと思う。

いい感じです!