Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
マイクロソフトの田中達彦です。
単に説明しているだけも何なので、昔作ったアプリケーションにプレグロス バーとアイコン オーバーレイの機能を何分で追加できるかを試してみました。
今回使用するアプリケーションは、僕の最初の著書である「実践プログラミング 入門編」の第9章~第11章で作成するシューティングゲームです。本については、こちらのブログをご覧ください。
シューティングゲーム自体は、こんな感じです。
本が出たのが2006年の2月ですので、このシューティングゲームはVisual Studio 2005で作成されています。
使用しているフレームワークは、.NET Framework 2.0です。
このプロジェクトファイルを持ってきて、Windows 7のタスクバーの機能を追加してしまいます。
はたして何分くらいで実装できるのでしょうか?
[実装するもの]
このシューティングゲームは、飛行機みたいな機体をカーソルキーで操り、スペースキーを押すことによって弾を出し、敵をやっつけていきます。
敵の弾や機体にあたった場合は、ヒットポイントのようなものが減っていきます。
ヒットポイントがゼロ以下になったらゲームオーバーです。
ヒットポイントを表すバーが、画面上部についています。
このヒットポイントを、タスクバーのプログレスバーとして表示させます。
もしヒットポイントが50%以下になれば黄色、20%以下になれば赤で表示させます。
アイコン オーバーレイの部分は、出てくる敵の機体を表示させます。
敵の機体はImageとして登録されているので、それをアイコンに変換してから表示させます。
それでは、実装スタート!!
17時ちょうどにスタートしました。時間を書きながら進めていきます。
[17:00]
Visual Studio 2010を起動し、シューティングゲームのプロジェクトファイルを読み込みます。
もともとVisual Studio 2005で作成していたプロジェクトなので、Visual Studio変換ウィザードが自動的に起動します。
ウィザードに従って、プロジェクトをVisual Studio 2010形式に変換します。
[17:01]
変換後のプロジェクトをビルドし、試しに遊んでみます。
Windows 7上でもちゃんと動きました。
[17:02]
Windows API Code Packのタスクバーを使用するために、メニューの[プロジェクト]-[プロパティ]を選択し、対象のフレームワークを.NET Framework 2.0から.NET Framework 3.5に変更します。
メニューの[プロジェクト]-[参照の追加]では、Microsoft.WindowsAPICodePack.Shell.dllへの参照を追加します。
[17:03]
ソースコードの先頭には、以下のコードを追加します。
using Microsoft.WindowsAPICodePack.Taskbar;
[17:03]
ヒットポイントを表示させているメソッドを見つけ、以下のコードを追加します。
これは、書籍の217ページにあるList 11-7にあるメソッドです。
// API Code Packを使用したプログレスバー
int restLife = MyRestLife * 100 / MyTotalLife;
if (restLife < 20)
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Error);
else if (restLife < 50)
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Paused);
else
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal);
if (restLife < 0)
restLife = 0;
TaskbarManager.Instance.SetProgressValue(restLife, 100);
単に、全体のヒットポイントと残りのヒットポイントから割合を計算し、20%以下ならTaskbarProgressBarState.Errorによって赤で表示させるように指定し、50%以下ならPausedによって黄色で表示させるようにしているだけです。
このプログラムの仕様上、MyRestLifeという残りのヒットポイントがゼロ以下になることもあるため、もし計算結果がゼロ以下になったらゼロを指定します。
その割合を、SetProgressValueを使用して設定しています。
これでプログレスバーの部分の実装は終わりです。
[17:08]
敵を表示させているメソッドを探し出し、以下のコードを追加します。
書籍の192~193ページにある、List 10-11にあるメソッドです。
// API Code Packを使用したアイコン オーバーレイ
Bitmap enemyBmp = new Bitmap(EnemyImage[enemyType].Images[0]);
TaskbarManager.Instance.SetOverlayIcon(Icon.FromHandle(enemyBmp.GetHicon()), "");
敵キャラの画像は、Imageクラスを使用しているので、ImageをいったんBitmapに変換し、そのBitmapをIconに変換しています。
これでアイコン オーバーレイの実装は終わりです。
[17:10]
試しに遊んでみます。
このように、プログレスバーとしてヒットポイントの残りが、アイコン オーバーレイとして出現してくる敵のビットマップが表示されています。
ちょっと見にくいですが、右下にある緑の三角っぽい形をしたものが、出現してきた敵キャラです。
ここまでで実装終了で、所要時間は約10分でした。
原稿を書いている時間のほうがはるかに長かったです。
この実装で、昔作ったシューティングゲームも、Windows 7 アプリ投稿キャンペーンに応募できる条件を持ったことになりました。
マイクロソフト
田中達彦