この記事はスタイルシートに対応した適当なブラウザで、適当なウィンドウ幅でごらんください。調整するのだるいんで。


携帯電話(?)でゲームを作る。ただしやや一般的でない方法で。
電気通信大学大学院 情報システム学研究科 情報ネットワーク学専攻 *1 博士後期課程 2年 大島聡史
*1 : 専攻改変で見事に消滅いたしましたとさ。
1 はじめに
ろっぱ8年目の大島です。留年も浪人もしていないのに8年目なのは ( 仕様 ) です。 ゲーム記事、絵記事ときたので *2 次は音楽記事を書けば完璧なんですが、 残念ながらそうは問屋が卸しませんでした。チクショウ!
そんなわけで、今年は携帯電話でゲームを作る話を書きたいと思います。 携帯電話でゲームなんて、もうそこらじゅうでやられまくってるじゃない か? はい。 まぁそのとおりです。ですので、やや一般的でない方向で攻めてみようと思います。
*2 : いや、同時にやったけど。2006年度会誌を参照。
2 新世代携帯電話は楽しいな
みなさんはどんな携帯電話を利用しているでしょうか。 多くの人はDoCoMoだとかauだとかSoftBankだとか答えると思いますが、そんなことはどうでもいいです。 問題なのは搭載されている基本ソフトウェア(OS)です。 これまでの携帯電話ではOSが注目されることはあまりありませんでしたが、 最近はWindowsMobileを搭載した携帯電話、いわゆるスマートフォン(図1)の登場によって 注目されるようになりました。
図1:WindowsMobile6を搭載した、アドエスことAdvanced/W-ZERO3[es]。 スマートフォンの代名詞(?)ZERO3の最新型だ!
さてこのWindowsMobileですが、Windowsの名がつくだけあって、 いわゆる普通のWindowsに近いことがいろいろとできちゃいます。 Officeのモバイル版があったり、PDFが読めたり、IEやOperaのモバイル版があったり。 いや、OperaはWindowsじゃなくてもいろんなところで動くか *3。 更にはWindowsMobile用の.NET環境があるので、 一般的なWindowsのソフトウェア開発に近い *4 手法でWindowsMobile向けのソフトウェアが開発できちゃいます。
ところで、 一般的にPC用のゲームを作るときは、特に高速な描画などをしたいときはDirectXという道具を使います。 DirectXは、Windows向けの描画・入力(ゲームパッドやキーボードなど)・サウンドを扱う道具です。 元々はC/C++から利用するものでしたが、今では.NETなどからも使えます。 というものなんですが、なんとWindowsMobileでも利用できることを知ってしまいました。びっくり。 そんなわけで、せっかくだから *5 弄ってみることにしました。
いや、携帯電話で使うものなのか? コレは……。
ちなみに、WindowsMobileは 一般的な携帯電話向けのゲームによく用いられているJAVAにも対応しています(図2)。 というか、ゲームを作るのが目的ならおとなしくJAVAを利用したほうが賢明かもしれません。 資料いっぱいあるし。
図2:いつの間にか、携帯電話はJAVAを使えて当然になりましたね。
*3 : Wiiとか。
*4 : むしろ同じかもしれませんが、いじっていないのでわかりません。
*5 : 俺は今でも赤の扉を選び続けるぜ!
3 開発環境を整えよう
とりあえず、私が導入した開発に必要らしい *6 ソフトを書いておきます。
Microsoft VisualStudio.NET 2005 Professional
C++の開発環境。無料のC++ExpressでもOKかどうかはわかりません。
Microsoft DirectX SDK
DirectXのSDK。適当に最新のものを。
Windows Mobile デバイスセンター 6.1\\ (Windows Vista) または Microsoft ActiveSync4.5 (Windows XP)
WindowsMobileの端末とPCで同期を取ったりするソフト。 単純にファイルをやりとりしたりするためにも必要です。
Windows Mobile 6 SDK
WindowsMobile開発のための道具。 ドキュメントやサンプルも同梱されているので活用しましょう。
*6 : 公式資料どーこー?
4 とりあえず動かしてみよう
Windows Mobile SDKのSampleには実行ファイルが同梱されているので、WindowsMobileに転送すれば実行することができます。 また各サンプルのプロジェクト一式も同梱されているので、開いてビルドすれば動かすことができます。
SampleのDirectX以下 *7 にはd3dmとDDrawが存在します。 前者はDirectX8以降で用いられているDirectXに近く、 後者はDirectX7以前で用いられていたDirectXに近くなっています。 私はDirectX7の方が(ハードウェア性能が低くても)軽快に動く気がしていたのですが、 DDrawのアプリをアドエスに投げ込んでみたら 見事に動きませんでした *8。 d3dmの方は問題なく動いてくれた(図3)ので、こちらを利用することにします。 ちなみにこれ、Diect3D Mobileの略称っぽいです。
図3:なんかグラフィックスが表示されたよ!
*7 : C:/ProgramFiles/WindowsMobile6SDK/Samples/PocketPC/CPP/win32/directx あたり。/は円記号に脳内変換してください。
*8 : スマートフォンよりもっとPCっぽい端末向けなのかしら?
5 とりあえず開発してみよう
さてさて、開発環境が整ったので、頑張って開発してみましょう。
VisualStudioの新しいプロジェクトで``スマートデバイス''の ''Win32 スマートデバイス プロジェクト'' oを選択して、ウィザードに従いプラットフォームに``Windows Mobile 6 Professional SDK''を追加して、 とにかく実行可能なプロジェクトの作成をできるようにする。 tutorialを真似して必要なコードを追加して、 とにかくDirect3D Mobileが動くようにして---。
さぁ、ここからが本当の地獄だ!(図4)
図4:とりあえず適当に。
あれ? なんか、勘でテキトーに組んだら動いたぞ。
どうやらDirect3D Mobile(d3dm)は、ほとんどDirect3Dそのもののようです。 ドキュメントを見ると、Direct3Dで見たものとそっくりなものがたくさん。 確かに関数名や定数名は変更されていますし、使えなくなっているものがたくさんあります。 ですが、基本が同じなのでちょっとしたサンプルを作るくらいなら簡単です。 うれしいことに、加算描画とかもちゃんと使えます。描画速度が不安ですが。
まぁ、サウンド関係は全然いじってないけどな!!!
6 今後の予定?
というわけで、Direct3Dが使える人なら、Direct3D Mobileも使えるんじゃないかという結論でお茶を濁します。 いかんせんハードウェアの性能が低いので、 動くけどゲームにならないという素敵な落ちが見えているあたりが困りモノですが。