...

pdf file

by user

on
Category: Documents
29

views

Report

Comments

Description

Transcript

pdf file
i-mode JAVA による
ゲームの作成
国際文化学部国際文化学科
00g0422
村石 俊弘
1
はじめに
私は今回、i-mode Java を使用して、「温泉探索ゲーム」を作成した。
そして、この論文は
1.iアプリについて
2.簡単なiアプリの作成
3.私が作成した「温泉探索ゲーム」の説明
という 3 つの大きな流れで構成されている。
「1. iアプリについて」では、iアプリとはどういったものなのか、どのような言語
を使うのか、また、他のシステムとどのような点で違うのかなどについて述べた。
「2. 簡単なiアプリの作成」では、iアプリを作るのに必要なツールのダウンロード・
インストール方法。そして実際簡単なiアプリを作成することによって、ダウンロードし
た基本ツールの使い方を述べた。
「3.『温泉ゲーム』の説明」では、私が実際に作成した、温泉探索ゲームのシステム内
容などについて述べた。
2
1.iアプリとJava言語
1-1.iアプリ
(1) iアプリのとは
従来の携帯電話に載っているプログラムは、あらかじめ決まったものだけであった。iモード
のブラウザやメールのソフトも含めて、内蔵するソフトウェアを変更することは出来なかった。
iモードのサービスにおいても、コンテンツを提供する側はさまざまな工夫を凝らして、いか
に便利で使いやすいサービスを提供するかに努めている。ただ、あくまでもサーバ側のプログラ
ムでできる範囲であって、携帯電話自身の機能に関しては一切触れることは出来なかった。
「携帯電話機でプログラムが動くようになる」というのは、ユーザーの手で機能が拡張できる
ことを意味している。これは、今までの携帯電話では到底望めなかった事である。
Java によるプログラムが動くだけでなく、携帯電話の中に Java プログラムが使うデータを保
存できるようになる点も見逃せない。ちょっとしたメモ書き、ゲームの途中結果、といった自分
専用のデータをいつでも持ち歩けるのである。
(2) iモード Java で何ができるか?
○ 携帯電話が携帯ゲーム機に
Java でつくったiアプリのゲームなら、通信できない場所でも遊べる。プログラムを一
回よみこんでおけば、好きなときに呼び出して使えるからである。
もちろん、Java で作ったゲームにできることは、それだけではない。携帯電話のテンキ
ーパッドの入力を検知できるので、よりインタラクティブな、いわゆるアクションゲーム
やパズルゲームも作ることができる。
○ 多人数が同時参加、オンラインゲームも可能
通信機能を採り入れればさらにおもしろいゲームを作ることができる。本当の意味での
オンラインゲームも可能になる。
サーバ側でゲームのロジックをプログラムし、携帯電話側で表示や音楽などのフロント
エンドを受け持つことによって、よりリッチなオンラインゲームも可能になる。
サーバを介したチャットや、見知らぬ人との対戦ゲームなどが可能である。いつでもど
こでも通信できる携帯電話ならではの使い方といえる。
○ 業務用端末として]
業務用システムの分野でも、iモード対応 Java は威力を発揮する。
iモードを社内システムに接続して使っていると、セキュリティに不安がある。それは
ユーザIDとパスワードだけでしか、本人のチェックができないということである。パス
ワードがもれてしまうのも問題であるし、長すぎるパスワードも考え物である。
iアプリでは、本人を特定するためのキーファイルを、サーバからあらかじめダウンロ
ードして、携帯電話の中にあるデータエリアに保存しておくことができる。イントラネッ
トのサーバにアクセスする際に、そのキー情報を送信すればいい。サーバとの通信では、
3
PCのブラウザではおなじみのSSLも使える。よりセキュリティが高い環境を作れる。
さらに高いセキュリティが求められるときには、独自の暗号をプログラムに組み入れて
サーバとデータをやり取りすることも可能になる。
業務用システムの端末としてiモード機を使うとき、もうひとつの問題として、「対話
型の処理に時間がかかる」ということがあげられる。サーバから入力画面をダウンロード
してくるのに、まず時間がかかる。その画面に数字を入力して送信しても、サーバ側でチ
ェックして、問題があればまた入力して直さないといけない。いちいち通信しないといけ
ないので、こうした対話型の処理にはとても時間がかかっていた。パケット料もかさむ。
こうした問題もiアプリで改善できる。数字を入力する画面や、入力した数字のチェッ
ク機能などを、iアプリに組み込んでおけば、サーバとは最低限の回数だけ通信すればよ
くなる。業務システムでも、iアプリは有能なのである。
(3)iアプリの特徴
○ 開発ツールが無償で提供されている
携帯ゲームの開発には、たいてい数万円もする開発ツールが必要である。しかし、iアプ
リの開発に必要なツールは、サンマイクロシステムズやNTTドコモのサイトから無償で入
手できる。お金を出して用意する必要があるのは、ネットに接続できる Windows パソコン
と、iアプリが動く携帯電話だけ。
○ ゲームの配布とバージョンアップが簡単にできる
ゲームを作ってもたくさんの人に遊んでもらえなければ、あまり意味がない。
その点、iアプリが動く携帯電話はゲーム機に比べて、はるかに多くのユーザ数
をもっている。しかも、iアプリを配布するには、自分のホームページを公開す
るだけでよいのである。
また、バージョンアップも簡単なので、実際にゲームを遊んでくれる人の声を
ききながら、ゲーム内容を更新していくこともできる。
○ 通信機能が標準装備されている
近年オンライン/ネットワークゲームが脚光をあびている。しかし、実際のと
ころネットワークゲームで遊ぶには、ゲーム機に通信回線をつなぐ必要があったり、ゲーム
料金の支払い手続きが面倒だったりと、結構手間がかかる。それに比べ、iアプリはハード
が携帯電話なのですぐに通信することができ、料金の支払いも公式アプリならば、数字4桁
のパスワードを入力するだけでできる。
○ メモリやCPUなどのリソースが限られている
携帯電話はメモリや CPU などのリソースが限られている。そのため、iアプリ
は実行ファイルが限られており、処理速度もゲーム機に比べて遅くなっている。
4
これは欠点であるが、考えようによっては利点にもなる。できることが制限されることによ
って、純粋にアイディアとプログラミング能力だけが、ゲームのおもしろさの決め手になる。
そのため、能力さえあればゲームメーカーのゲームよりもおもしろいものを作ることも可能
なのである。つまり、不可能であることをどのように可能にするかというプログラミングの
醍醐味を味わえる。
1-2
Java言語
(1)Java言語
iアプリの開発にはプログラミング言語としてJava言語を使用する。
Java言語はサン・マイクロシステムズの開発したプログラミング言語で、「Javaで開
発されたソフトウェアは特定のOSやマイクロプロセッサに依存することなく、基本的にはど
のようなプラットホームでも動作する」という特徴を持っているので、他の言語に比べて人気
がある。
Javaで記述したプログラムファイルは、Javaバイトコードという中間形式にいったん
変換して、実行時にJava仮想マシン(JVM)と呼ばれるソフトウェアによって、そのプ
ラットフォームで実行可能な形式に変換して実行するという方法をとっている。
●従来の言語
Windows
用ネイティブコード
Solaris
用ネイティブコード
Windows
Solaris
プラットフォームごとに異なるネイティブコー
ドを作る必要がある
●Java 言語
Java
Windows
バイトコード
用 Java 仮想マシン
Windows
Solaris
用 Java 仮想マシン
Solaris
Java バイトコードは Java 仮想マシンを介してさ
まざまなプラットフォーム上で動く。
5
実際には、iアプリでは動作が機種に依存している部分も多く、ハードのメモリや CPU など
のリソースが限られているので、全く同じプログラムですべての機種に対応するのは困難である。
また、従来のデスクトップ用アプリケーションを作るための Java ライブラリで携帯電話用プ
ログラムを作っても、携帯電話のようなリソースが限られている機器には負荷が高すぎて思い通
りに動かない。そこで、携帯電話用アプリケーションの開発には、機能が限定された Java ライ
ブラリのサブセットが使われる。また、バイブレーション機能やバックライトの点滅など、携帯
電話特有の機能があるので、専用のライブラリも必要になる。
(2)Java の実行環境
Java 言語の API は以下の3つのエディションに分けられている。
・ Java2 Platform, Enterprise Edition (J2EE)
・ Java2 Platform, Standard Edition (J2SE)
・ Java2 Platform, Micro Edition (J2ME)
J2EE は、
サーバーサイドで使われる Java 実行環境で、Web ページを動的に生成する JavaServer
Pages(JSP)をはじめとする、エンタープライズ API 群を統合したもの。
J2SE は、デスクトップ環境で使われる Java 実行環境で、従来の Java アプリケーションや Java
アプレットを作る環境はこれにあたる。
J2ME は、PDA や携帯電話などの、組み込みでの用途に使われる Java 実行環境である。
(3)Java2 Platform, Micro Edition
J2ME では機器に応じて以下で説明するコンフィギュレーションとプロファイルを組み合わせ
て使うことになる。
○ コンフィギュレーション
J2ME では、処理能力の低い機器でも Java プログラムが動くように、従来の J2SE から機
器を絞り込んだサブセットを定義する。この定義のことをコンフィギュレーションという。
現在以下の2つがある。
・ J2ME CLDC (J2ME Connected, Limited Device Configuration)
・ J2ME CDC (J2ME Connected Device Configuration)
「J2ME CLDC」は、PDA や携帯電話などの処理能力やメモリに制限のあるデバイスを対
象としているコンフィギュレーションである。サポートするクラスの数を必要最低限に絞っ
て、クラスを小さくしている。CLDC 使用の Java プログラムを動作させるための Java 仮
想マシンは、キロのオーダーのメモリで動作することから、「K Virtual Machine (KVM)」と
呼ばれている。iアプリの開発にはこのコンフィギュレーションが使われる。
「J2ME CDC」は、カーナビやセットトップ・ボックスなどの中程度の処理能力を持つデ
6
バイスを対象としているコンフィギュレーションで、Java 仮想マシンは J2SE で使われて
いるものと同じものを使う。
○ プロファイル
組み込み機器は、PDA ならペン入力、携帯電話ならバイブレーション機能というように、
それぞれ特有の機能をもつため、それに対応できるように用途に応じた特殊な API が必要に
なる。
J2ME CLDC には次の3つのプロファイルがある。
・MID Profile (Mobile Information Device Profile)
・DoJa-1.0 プロファイル (iモード対応 Java プロファイル)
・DoJa-2.0 プロファイル (iモード対応 Java プロファイル)
「MID Profile」は携帯電話向けのプロファイルである。Vodaphone, au, または Palm の
Java 実行環境はこのプロファイルがベースとなっている。
「DoJa-1.0 プロファイル」はiモードの 503i シリーズ用のプロファイルである。iモー
ドでは、MID Profile とは別のプロファイルを作ることにより、iモードの機能を活かしや
すい仕様を採用した。「iモード対応 Java プロファイル」とも呼ばれる。
「 DoJa-2.0 プロファイル」はiモードの 504 iシリーズ用のプロファイルである。
「DoJa-1.0 プロファイルを拡張したもので、「3D ポリゴン」、「待受けアプリ」、および「赤
外線通信」を使ったアプリが作れるようになった。
(4)iモード端末の互換性
Java 言語では「一度作成した Java プログラムは、Java 仮想マシンを介して、どんなコ
ンピュータでも動作する」という特徴をもっている。そのため、iアプリを一つ作ればどの
機種でも動くと思われがちであるが、実際のところシンプルなプログラムでない限り、機種
ごとの違いを頭に入れて作らないと難しい。主な違いとしては以下のものがあげられる。
○ 実行ファイルのサイズ
実行ファイルである JAR ファイルの最大サイズである。503iシリーズでは 10K バイト、
504iシリーズは 30K バイトである。FOMA は統一サイズが決められていないため最大サ
イズは今後発売される端末によっては変わる可能性がある。
○ スクラッチパッドのサイズ
データの保存領域であるスクラッチパッドのサイズである。503iシリーズは 30Kバイト、
504iシリーズは 100Kバイト、FOMA は統一サイズが決められていない。
○ 画面サイズ
7
基本的には 120×130 ドットの端末が多いが、最小 120×120 ドット(SO503i)、最大
176×182 ドット(P2101V)とさまざまである。使用する画面サイズを最小の端末にあ
わせればどの端末でも表示できるが、できれば画面サイズにあったレイアウトで表示した
ほうがよい。
○ メモリ容量
メモリには、Java 仮想マシンが使うメモリである「Java ヒープ」と、Java 仮想マシン
以外が使うメモリである「ネイティブヒープ」がある。Java ヒープとネィティブヒープの
区別がない端末もある。スクラッチパッドのサイズが大きくなっても、メモリが小さいと
すべてのデータを読み込むことができない。
○ フォントサイズ
iアプリでは文字列を表示する時、その大きさをラージ、ミディアム、スモールの 3 段
階で指定する。しかし、その指定でどんなサイズの文字が表示されるかはそれぞれの機種
に依存する。すべての端末で全角 12×12 ドットのフォントを持っているが、SO503iや
D503iなどはデフォルトフォントが大きいので、スモールを指定しなければならない。
504iシリーズからは、デフォルトフォントが 12×12 で統一されるようになった。
○ 処理速度
Java 搭載iモードの処理速度は機種によって全く違う。遅い機種と速い機種とでは、10
倍以上の差が出る。すべての機種で同じように動作させるには遅い機種にあわせればよい
のであるが、それではゲームとしては成り立たないことも多い。機種ごとの処理速度の違
いは、ベンチマークテスト「KVM Mark」を参考にするとよい。
・ iモード対応端末の情報
http://www.nttdocomo.co.jp/p_s/imode/spec/info/html
・
KVM Mark
http://www.seckey.net/iappli/KVMMark.html
http://appget.com/pc/view_97.htm
8
2.プログラミング
2-1 開発環境を整える
(1) 開発ツールとドキュメントを手に入れる
はじめに、サン・マイクロシステムズと NTT ドコモのサイトから、iアプリの開発ツールとド
キュメントを入手する。これらは無償でダウンロードできる。
iアプリの開発ツールには、503i向けの「J2ME Wireless SDK for the DoJa」と 504i向け
の「DoJa2.0 API 向けiα ppli Development Kit」がある。
ダウンロードしたファイルの拡張子が「ZIP」のものは、圧縮・解糖ソフトで解凍する必要が
ある。
○ サン・マイクロシステムズのサイト
・Java 2 SDK, Standard Edition Version 1.3.1(JDK1.3.1 以降)
http://java.sun.com/j2se/1.3/download-windows.html
従来の アプリケーションや Java アプレットを作るための開発キットである。「J2ME
」や「DoJa2.0 API 向けiα ppli Development Kit」を実行す
るために必要なので、それらより先にインストールする必要がある。
・ Japanese document for the J2ME CLDC
Java
Wireless SDK for the DoJa
http://java.sun.com/j2me/docs/
J2ME CLDC
の各 API のクラスについてのドキュメントである。
○ NTT ドコモのサイト
① 503i向け
・ iモード対応 Java コンテンツ開発ガイド(詳細編)
http://www.nttdocomo.co.jp/p_s/imode/java/pdf/jguide010514.pdf
iシリーズ共通の基本 API の使い方とサンプルプログラムが載っている
・ API リファレンス
503
http://www.nttdocomo.co.jp/p_s/imode/java/javadoc_dojaapiref11_re12.zip
iシリーズ共通の各基本 API のクラスについてのドキュメント
503
・
J2ME Wireless SDK for the DoJa
http://www.nttdocomo.co.jp/p_s/imode/java/tool_503i.html
9
i向けiアプリの開発をサポートするためのツール
503
②
i向け
○iアプリコンテンツ開発ガイド for504i(詳細編)
504
http://www.nttdocomo.co.jp/p_s/imode/java/pdf/jguide504_020517.pdf
iシリーズ共通の基本 API の使い方とサンプルプログラムが載っている
504
○iアプリコンテンツ開発ガイド for504i(iアプリオプション・拡張編)
http://www.nttdocomo.co.jp/p_s/imode/java/pdf/jguide504_opt020517.pdf
504iシリーズの機種に依存したオプション API と拡張 API の使い方とサンプルプ
ログラムが載っている
○API リファレンス(iアプリ基本 API)
http://www.nttdocomo.co.jp/p_s/imode/java/jguide504_apiref020517.zip
iシリーズの基本 API のクラスについてのドキュメント
504
○API リファレンス(iアプリオプション・拡張 API 編)
http://www.nttdocomo.co.jp/p_s/imode/java/jguide504_apiref_opt020517.zip
iシリーズ機種に依存したオプション API と各拡張 API クラスについてのドキュ
メント
504
○各機種オプション API・拡張 API 実装状況
http://www.nttdocomo.co.jp/p_s/imode/java/pdf/jguide504_opt_impl020517.pdf
iシリーズの各機種でのオプション API と拡張 API の採用状況がわかる表
504
○DoJa2.0 API 向けiα ppli Development Kit
http://www.nttdocomo.co.jp/p_s/imode/java/tool_504i.html
iシリーズ向けiアプリの開発をサポートするためのツール。これを使えば、ボ
504
10
タン一つで実行ファイルの作成や、パソコン上での実行ができるため、iアプリの開発
を効率的に行うことができる。
(3) 開発ツールをインストールする
●Java 2 SDK, Standard Edition Version 1.3.1 (JDK1.3.1 以降)のインストール
以下順に説明していく。
ダウンロードしたファイルを実行する
「ようこそ」の画面が表示される。「次へ>」をクリックする
「製品ライセンス契約」では、ライセンスに関する記述が表示されるので、契約内容を
確認してから[はい]をクリック
「インストール先の選択」では、インストールするフォルダを選択できる。
インストールするフォルダを変更したい場合は[参照…]ボタンをクリックして、フォルダ
を選択する。
「ブラウザ選択」では、JavaPlag-in のデフォルト実行環境とするブラウザを選択する。
iアプリの開発とは直接関係ないが、最新の Java 実行環境でアプレットを実行できるよう
になる。
「コンポーネントの選択」ではインストールするコンポーネントを選択する。「プログラ
ムファイル」は Java 2 SDK, Standard Edition でのライブラリと実行ファイルである。
「Native Interface のヘッダファイル」は Java Native Debugger Interface 用の C ヘッダ
ファイルである。「古い Native Interface のヘッダファイル」は以前の Native Method
Interface 用の C ヘッダファイルである。
「デモ」は Java のデモを実行するアプレットと
アプリケーションである。[次へ]ボタンをクリックするとインストールを開始する。
セットアップの完了]が表示されるので、[完了]ボタンをクリックするとインストールが
完了する。
[
11
●DoJa2.0 API 向けiα ppli Development Kit のインストール
NTT ドコモのサイト(http://www.nttdocomo.co.jp/p_s/imode/java/tool_504i.html)よ
りダウンロードしたファイル「emu504_1.02_020529.zip」を解凍すると、doc フォルダと
disk1 フォルダができる。
Doc フォルダには開発ツール用のドキュメントが含まれている。
○README (README_install.txt)
インストール方法の簡単な説明が記述されている
○DoJa2.0API 向けiαppli Development Kit ユーザーズガイド
(emu504_1.02_userguide020510.pdf)
開発ツールの使い方が記述されている
○DoJa2.0 エミュレータ for 504i 1.02 版リリースノート
(emu504_1.02_relnote020529.pdf)
エミュレータ for 504i 1.02 版の概要と制限事項について記述されている。
○ソフトウェア使用許諾契約書 (emu_license020510.html)
ソフトウェアの使用許諾契約書。
DoJa2.0
以下、インストール方法を説明していく
「emu504_1.02_020529.zip」を解凍するとできる disk1 フォルダにある「setup.exe」を実
行するとインストーラが立ち上がる。
「ようこそ」の画面が表示される。
「製品ライセンス契約ではライセンスに関する記述が表示されるので、契約内容を確認し
てから[はい]ボタンをクリックする。
すると英語によるバイナリコードのライセンス内容が表示されるので、もう一度[はい]を
クリックする。
12
「インストール先の選択」ではインストールするフォルダを選択できる。
インストールするフォルダを変更したい場合は[参照…]ボタンをクリックして、フォルダ
を選択する。
「セットアップ方法」では、「標準」を選んで[次へ>]ボタンをクリックする。
「プログラムフォルダの選択」も、そのまま[次へ>]をクリックする。
「ファイルのコピー開始」では、設定を確認する。[次へ>]ボタンをクリックするとイン
ストールを開始する。
実行環境の設定が完了すると、「セットアップの完了」が表示されるので、[完了]ボタ
ンをクリックすればインストールが完了する。
2-2 iアプリを作る
ここでは、「Hello World!」という文字列を表示するだけの簡単なiアプリを作って、
iアプリ作成の簡単な手順を見ていくことにする。ちなみに、ここではプログラムソース
は割愛する。
手順は以下のようになる。
1.プロジェクトを作成する
2.プログラムファイルをテキストエディタで書く
3.プログラムファィルをビルドして実行ファイルを作成する
4.iアプリの情報ファイルを編集する
5.エミュレータで実行する
●プロジェクトの作成
「DoJa2.0 API 向けiαppli Development Kit」をインストールすると、Windows のスタ
ートメニューに[プログラム]-[iappliTool]が追加されているのでそれを選択する。「iα
ppli Development Kit」の核となるツール「iα ppliTool」が起動する。
「プロジェクトの新規作成」ボタンをクリックすると、「新規作成」ダイアログが開く
ので、プロジェクト名に”HelloWorld”と入力する。
13
「作成」ボタンをクリックすると、「iα ppli Development Kit」のルートにある「apps」
フォルダの下に「Hello World」フォルダが生成される。さらに、この下には以下の 4 つの
フォルダが生成されている。
○bin フォルダ
「JAR(Java Archive)ファイル」と「ADF (Application Descriptor File)ファ
イル」がここに生成される。「JAR ファイル」は、クラスファイルや画像ファイル
をまとめた実行ファイルで、拡張子は「jar」である。「ADF ファイル」は、iアプ
リの名前やサイズなどの情報を保持するテキストファイルで、拡張子は「jam」で
ある。
○res フォルダ
JAR ファイルに含ませる画像ファイルやサウンドファイルを置くフォルダであ
る。
○sp フォルダ
エミュレータで実行した時のスクラッチパッドのデータを保持するフォルダ。
○ プログラムファイルをテキストエディタで書く
今回のプログラムは、「HelloWorld クラス」を「HelloCanvas クラス」の2つのクラス
で構成されている。
・ HelloWorld クラス (HelloWorld.java)
・ HelloCanvas クラス (HelloCanvas.java)
「HelloWorld.java」と「HelloCanvas.java」をテキストエディタで作成し、HelloWorld
プロジェクトの src フォルダに置く。
○プログラムファイルをビルドして実行ファイルを作成する。
実行ファイルを作成するには、「iαppliTool」の[ビルド]ボタンをクリックする。
成功すれば、HelloWorld プロジェクトフォルダの bin フォルダに『JAR ファイル』が
生成される。
『JAR ファイル』は、複数のファイルを 1 つのファイルにまとめるためのプラット
フォームから独立したファイル形式で、iアプリのクラスファイルや画像ファイルを
まとめる。HelloWorld プロジェクトでは HelloWorld.jar がそれにあたる。
プログラムの内容に誤りがあると次の図のようにエラーが表示される。行末に「;」
を忘れていないかなど、間違っている場所を見つけて修正してビルドしなおす必要が
14
ある。
○ iアプリの情報ファイルを(ADF)を編集する
JAR ファイルを直接ダウンロードして、バージョン非対応やメモリ不足などの理由でう
ごかないと、ダウンロードにかかった通信費が無駄になってしまう。そこで、ADF と呼
ばれる「iアプリの情報ファイル」を先にサーバからダウンロードして、そのiアプリが
実行可能かどうかチェックしてから、JAR ファイルをダウンロードする仕組みになってい
る。
HelloWorld プロジェクトでは HelloWorld.jam がそれにあたる。
サーバ
①ADF をダウンロードし、ADF が示すiア
プリが実機で動作可能かチェック
②iアプリが実機で動作可能なら
jar ファイルをダウンロードする。
( )
ファイル
ADF .jam
(.jar)
ファイル
JAR
「iαppliTool」の[ADF 設定]ボタンをクリックすると、「ADF 設定」ダイアログが開
く。各項目に情報を入力して設定ボタンをクリックすると、ADF に内容が反映される。
今回は、「AppName」キーに「HelloWorld」、「AppClass」キーにも「HelloWorld」を入
力して、[設定]ボタンをクリックする。
「AppName」キーは、実機でダウンロードした時に、iアプリの画面で表示される名
前で、最大16バイト。
「AppClass」キーには、iアプリの本体となるクラスのクラス名を指定する。最大 255
バイトで ASCII 文字のみ指定可能。
「PackageURL」、「AppSize」、「LastModified」も入力必須項目であるが、一度ビルド
すれば自動的に入力される。
15
○ エミュレータで実行する。
「iαppliTool」の[起動]ボタンをクリックすると、パソコン上でiアプリを実行するこ
とができる。エミュレータでの実行を終了するには、[終了キー]をクリックする。終了状態
でないと、ビルドや起動ができない。
また、メニューの端末で、エミュレータのビューを変更することができる。以下の 3 つ
がある。
2-3 実機で実行する
エミュレータでiアプリが正常に動くことを確認したら、ネットに公開して、実機で実行し
てみる。
●ダウンロード用 HTML ファイルの作成
iアプリをネットに公開してダウンロードできるようにするためには、JAR ファイルと
ADF の他に、iアプリをダウンロードするための HTML ファイルが必要である。HTML は
Web ページを記述するための言語である。HTML の書式は次のようになる。
16
HelloWorld.htm
<OBJECT DECLARE ID=”HelloWorld”DATA=”HelloWorld.jam”
TYPE=”application/x-jam”></OBJECT>
HelloWorld <A IJAM=”#HelloWorld”HREF=”error.html”>
を
○
ダウンロード</A>
タグ
OBJECT タグは、iアプリに対応する ADF を参照するために使われる。OBJECT タ
グの ID 属性は、A タグから参照される名前を指定する。この名前は HTML ファイル内で
一意であれば何でもよい。DATA 属性には、ADF の位置を示す URL をしていする。
OBJECT
○ A タグと IJAM 属性
A タグは、ダウンロード対象のアプリケーションに対応する OBJECT タグを参照する
ためにしようする。ユーザがこの A タグで囲まれた文字を選択することによって、iアプ
リンのダウンロードを開始する。A タグの IJAM 属性には、OBJECT タグの ID 属性に指
定した名前を指定する。HREF 属性には、iアプリが実行できない端末でアクセスした際
に表示する HTML ファイルの URL を指定する。
HelloWorld.html では、
「HelloWorld をダウンロード」の「ダウンロード」をクリック
したときに、iアプリが実行できる端末なら HelloWorld.jam が示すiアプリをダウンロ
ードし、それ以外なら error.htm を表示するように指定している。
error.htm
▼ ―端末エラー―▼<BR>
iアプリ対応のiモードでお願いします<BR>
○ ファイルのアップロード
ネットにアップロードするファイルは以下の 4 つである。
・ HelloWorld.jar
・ HelloWorld.jam
・ HelloWorld.htm
・ error.htm
ファイルをアップロードする方法はホームページを公開するのと同じで、「FTP ツ
ール」を使用する。FTP ツールはインターネット上でファイル転送を行う多面のツー
ルである。
○ 実機で実行する
アップロードした HTML ファイルに実機でアクセスする。
17
iアプリの開発に使うAPI
iアプリの開発に使う API には次の4種類がある。
・ J2ME CLDC の API
・ iアプリ基本API
・ iアプリオプション API
・ iアプリ拡張 API
●J2ME CLDC の API
「J2ME CLDC の API」は、PDA や携帯電話など、処理能力やメモリなどのリソースに制
限のあるデバイス向けの汎用的な API である。この API は、以下の4種類のパッケージを持
っている。
○ java.lang パッケージ
Java 言語の基本となるクラスを持つパッケージである。このパッケージには、Object
クラスや String クラスなどがある。
○ java.io パッケージ
データの入出力を行うためのクラスを持つパッケージである。このパッケージには、
InputStream クラスや OutputStream クラスなどがある。
○ java.util パッケージ
日時の取得や乱数の発生などの、ある特定の目的のために設計されたクラスをもつパッ
ケージ。このパッケージには、Date クラスや Random クラスなどがある。
○ javax.microedition.io パッケージ
汎用接続用のクラス。このパッケージには、Connection クラスなどがある。
詳しくは、
http://java.sun.com/products/ddc/docs/CDLC1.0_ja_docs.zip
から入手できる「Japanese document for the J2ME CLDC」を参照
18
● iアプリ基本 API
「iアプリ基本 API」は、iモードに特化した処理を行うための API である。これは、すべ
ての Java 搭載iモード端末で使用できる API で、共通の仕様として携帯端末の API と動作が
規定されている。DoJa-2.0 プロファイルは DoJa-1.0 プロファイルと比べて若干機能が拡張さ
れている。この API は、次の5種類のパッケージを持っている。
○
○
○
○
○
パッケージ
GUI 関連のクラスで、Iapplication クラスや Canvas クラスなどがある。iアプリ基本
API のクラスのほとんどは、このパッケージにある。
com.nttdocomo.io パッケージ
通信関連のパッケージ。このパッケージには、HTTP プロトコルで通信するための
HttpConnection クラスがある。
com.nttdocomo.net パッケージ
String 型の文字列を MIME 形式にエンコード、またはデコードするためのパッケー
ジ。このパッケージには、URLEncoder や URLDecoder クラスなどがある。
com.nttdocomo.util パッケージ
タイマ関連のクラスをもつパッケージ。このパッケージには、Timer クラスや Phone
クラスがある。
com.nttdocomo.lang パッケージ
例外のクラスを持つパッケージ。このパッケージには、
UnsupportedOperationException クラスがある.
com.nttdocomo.ui
詳しくは、
http://www.nttdocomo.co.jp/p_s/imode/java/jguide504_apiref020517.zip
から入手できる「API リファランス(iアプリ基本 API 編)を参照。
19
● iアプリオプション API
「iアプリオプション API」は、搭載の有無の判断がメーカーに委ねられている API で、共
通の仕様として携帯電話の API と動作が規定されている。これは DoJa-2.0 プロファイルから
採用されている。この API は、以下の 1 種類のパッケージを持っている。
○
パッケージ
機種に依存する GUI 関連のクラス。このパッケージには、 Graphics2 クラスや
PhoneSystem2 クラスなどがある。
詳しくは、
com.nttdocomo.opt.ui
http://nttdocomo.co.jp/p_s/java/jguide504_apiref_opt020517.zip
から得られる「API リファレンス(iアプリオプション・拡張 API 編)」を参照。
● iアプリ拡張 API
「iアプリ拡張 API」は、同じ機能を実現するものであっても、API と動作がメーカーに
ゆだねられる API。これは DoJa-2.0 プロファイルから採用されている。この API は、以下
の 2 種類のパッケージを持っている。
○
com.nttdocomo.opt.ui.j3d
○
com.nttdocomo.opt.ui.j3d2
3D グラフィックスを表示するための基本的な機能を備えたパッケージ。このパッケー
ジには、Figure クラスや Texture クラスがある。
3D グラフィックスのより細かい描画制御を行うためのパッケージ。このパッケージに
は、C3Dfigure クラスや C3Dtexture クラスがある。
詳しくは、「API リファランス(iアプリオプション・拡張 API 編)」を参照。
iアプリ基本、オプション、拡張 API の各リファランスについては NTT ドコモのサイトからダ
ウンロードできる。
20
の設定項目
「iα ppliTool」の「ADF 設定ダイアログ」で設定する項目は、全部で22種類ある。そのな
かには入力が必須な「必須キー」と、場合によって必要な「オプショナルキー」がある。
ADF
●
プロファイルと Doja-2.0 プロファイルで共に使う項目
必須キーとあるのは必ず設定しなくてはいけないもの、オプショナルキーは必要に応じて
設定するもの。
DoJa-1.0
○
(必須キー)
実記でダウンロードした時に、ソフト一覧の画面で表示される名前。これは S-JIS で日
本語名を指定できる。入力できる文字数は、最大16バイト。ただし、最大14バイトの
端末もある。
○ AppVer(オプショナルキー)
アプリケーションのバージョンを指定する。最大10バイトで ASCII 文字のみ指定可能
○ PackageURL(必須キー)
JAR ファイルの URL。JAR ファイルと ADF を同じフォルダに置いたときは、JAR フ
ァイルの名前だけ書けばよい。PackageURL はプロジェクト生成時に自動的に入力される。
最大255バイトで ASCII 文字のみ指定可能。
AppName
21
○
AppSize
(必須キー)
JAR ファイルのサイズをバイト単位で指定する。実機では、この値が正確でないと、不
正なファイルとみなされて、ダウンロードすることができない。この値は、ビルド時に自
動的に入力される。
○ Spsize(オプショナルキー)
スクラッチパッドの使用サイズをバイト単位で指定する。省略時は、スクラッチバッド
を使用しないものとする。
○ AppClass(必須キー)
iアプリの本体となるクラスのクラス名を指定する。最大 255 バイトで ASCII 文字の
み指定可能。
○
AppParam
(オプショナルキー)
メインクラスの起動パラメータ。最大 255 バイトで ASCII 文字のみ指定可能。パラメー
タ間はスペースで区切る。
○ LastModified(必須キー)
iアプリの最終更新日を指定する。Java 搭載iモードは、この日付を元に、バージョ
ンアップする必要があるかどうかを判断する。
フォーマット
Dow,DD Mon YYYY HH:MM:SS
(Dow:曜日 DD:日 Mon:月 YYYY:年 HH:分 SS:秒)
これはビルド時に自動的に入力される。
○ UseNetwork(オプショナルキー)
「http」を指定することにより、通信機能の使用を許可する。
○ TargetDevice(オプショナルキー)
ターゲットとなる携帯電話の機種名を指定して、対象機種以外はダウンロードしない
ようにする。最大 128 バイトで、複数存在するときは、コンマ区切りで列挙する。
22
○
(オプショナルキー)
アプリケーションに自動起動を行わせるときの起動タイミングを指定する。
フォーマット
Ih
LaunchAt
hは時間。時間の間隔の起点は、アプリケーションが携帯電話にダウンロードされ
た時刻からとなる。
●
プロファイルのみの項目
○ KvmVer(オプショナルキー)
コンフィギュレーションのバージョンを指定する。指定がない場合はすべてのバージョ
ンで動作することを示す。
フォーマット
CLDC-x.x
DoJa-1.0
は0~9の数字。Doja-1.0 プロファイルでは 1.0 をサポートする。
● DoJa-2.0 プロファイルのみの項目
○ ConfigurationVer(オプショナルキー)
コンフィギュレーションのバージョンを指定する.指定がない場合は、すべてのバージョ
ンで動作することを示す。Doja-2.0 でも KvmVer は使えるが、同時に使用することはでき
ない。
フォーマット
CLDC-x.x
X
は0~9の数字。Doja-2.0 プロファイルでは 1.0 をサポートする
○ ProfileVer(オプショナルキー)
プロファイルのバージョンを指定する。指定がない場合は、すべてのバージョンで動作
することになる。
フォーマット
X
DoJa-x.x
X
は0~9の数字。Doja-2.0 プロファイルでは 1.0 と 2.0 をサポートする
23
○
MyConcierge
(オプショナルキー)
“YES”を指定することにより、待受けアプリとして利用することができる。
○ UseTelephone(オプショナルキー)
“call”を指定することにより、アプリから電話をかけることを許可する。
○ UseBrowser(オプショナルキー)
“launch”を指定することにより、アプリからブラウザを起動することを許可する。
○ LaunchByMail(オプショナルキー)
アプリがメールから起動することを許可する。値は、起動を許可するメールの送信元
メールアドレスを1つだけ ASCII 形式で指定する。これは、さいだい 50 バイト。この
キーの値が、広報一致比較の結果として送信元メールアドレスにすべて含まれていた場
合は、そのメールからアプリケーションを起動することを許可する。また、”any”が
指定されている場合は、送信元メールアドレスの制限は行わない。
後方一致比較とは、任意の文字列が指定した文字列で終わるかどうかを調べること。
前方一致比較はその逆で、指定した文字列で始まるかどうかを調べること。
○
LaunchByBrowser
(オプショナルキー)
アプリがブラウザから起動することを許可する。値には、起動を許可する Web ページ
の URL を ASCII 形式で指定する。これは、最大255バイトである。このキーの値が前
方一致比較の結果としてブラウザで表示中の URL にすべて含まれていた場合、その Web
ページからアプリを起動することを許可する。また、”any”が指定されている時は、URL
の制限は行わない。
○ AllowPushBy(オプショナルキー)
アプリを赤外線ポートから起動することを許可する。値には、以下の形式のパラメータ
を 1 つだけ ASCII 形式で指定する。これは、最大255バイトである。
フォーマット
Irda:<command>
には、アプリの起動を許可する起動コマンドを指定する。
○ AppTrace(オプショナルキー)
“on”を指定することにより、簡単なデバッグ機能を使用できる。キャッチされない例外
によりアプリが以上終了したときに、どの例外によってアプリが終了したかを表示する。
ただし、最大512バイトで、Throwable.printStackTrace()メソッドの結果は出力されな
い。
Command
24
○
○
オプショナルキー)
アプリが前提としている画面サイズを指定する。前提としている画面サイズより大きな
画面の端末で実行する場合は、画面中央に表示されるようになる。
フォーマット
<幅>x<高さ>
DrawArea(
(オプショナルキー)
“YES”を指定することにより、メールとメッセージの受信状態の参照を許可する。
GetSysInfo
25
3.温泉探索ゲームの作成
●ゲーム内容
自分の症状の選択をしていくことによって、今の自分にあった温泉を検索するゲーム。
温泉は作成者が症状に合った温泉質から 8 つ用意してある.
○ 操作方法
決定キー シナリオを進める・選択肢を決定
する
上キー 上の選択肢を選ぶ
下キー 下の選択肢を選ぶ
ソフトキー 終了
この温泉探索ゲームは以下の 2 つのクラスで構成されている。
・ Onsen クラス (Onsen.java)
・ OnsenCanvas クラス (OnsenCanvas.java)
● 画像ファイルの準備
このゲームでは JAR ファイルに含める画像ファイルは 2 種類である。これらのファイルは、
Onsen フォルダ下の res フォルダに置く。
・タイトル
・メッセージウィンドウ
0.gif
120 130
×
1.gif
120 42
×
26
その他にシナリオで使用する画像ファイルが必要になる。これらは JAR ファイルを公開す
るサーバと同じサーバに置く。
0.gif
120 90
×
Niku.gif
120 90
×
Niku2.gif
120 90
×
Kayumi.gif
120 90
×
Fuji.gif
120 90
×
Black.gif
120 90
×
Hifu.gif
120 90
×
Stress.gif
120 90
×
Tou.gif
120 90
×
Itamuro.gif
120 90
×
27
Kinugawa.gif
120 90
×
Chiyo.gif
120 90
×
Nikkoyumoto.gif
120 90
×
Kusatsu.gif
120 90
×
Kappa.gif
120 90
×
Kitaonsen.gif
120 90
×
●テキストファイルの準備
シナリオで使用するテキストファイルが必要である。テキストファイルはシフト JIS で、書式は以
下のようになる。
シナリオファイルの書式
画像ファイル名(エンター)
一行目<Tab>二行目<Tab>三行目(エンター)
・
・
一行目<Tab>二行目<Tab>三行目(エンター)
選択肢1<Tab>選択肢2<Tab>選択肢3(エンター)
ジャンプテキスト1<Tab>ジャンプテキスト2<Tab>ジャンプテキスト3<Tab>(エ
ンター)
シナリオファイルの各項目は改行とタブで区切っている。
改行やタブは画面上ではわかりづらいので、ここでは改行は(エンター)、タブは<Tab>で区切
って記述してある。
実際に作るときにこれらが抜けたり、余計なスペースを入れてしまうと、システムがうまく作動し
ないことがある。
28
1行目には表示する画像のファイル名を指定する。
2行目には最終行の3つ前の行まではシナリオを記述する。1ページには1行全角9文字(半角1
8文字)を最大3行まで表示できる。
最終行の1つ前の行は選択肢を記述する。タブ区切りで最大3つまで。
最終行には選択肢を選択したときに、次に実行するテキストファイルを記述する。
0.txt
0.gif
これからあなたの症 状に合わせてあなた
たいと思います。 質問に答えて下さい
0a.txt
0a.txt
tukare.gif
質問1
疲れを癒したい
1.txt 2.txt
に合った温泉を探し
それでははじめます
何か疾患がある
1.txt
black.gif
最近忙しいのでしょ うか?
では次の質問です。
1a.txt
1a.txt
niku.gif
質問2
その疲れは
肉体的なもの 精神的なもの
3.txt 4.txt
2.txt
black.gif
大丈夫でしょうか? では次の質問です。
2a.txt
29
2a.txt
hifu.gif
質問2
皮膚病である 内臓疾患である
5.txt 6.txt
3.txt
black.gif
ご苦労様です。
では次の質問です。
3a.txt
3a.txt
niku2.gif
質問3
それは
筋肉痛である 神経痛である
7.txt 8.txt
4.txt
black.gif
心のケアは大事です 。
では次の質問です。
4a.txt
4a.txt
stress.gif
質問3
あなたは
ストレスひどい
眠れない
9.txt 10.txt
5.txt
black.gif
かゆいでしょう。
では次の質問
5a.txt
30
5a.txt
kayumi.gif
質問3
水虫だ
11.txt
肌荒れだ
12.txt
6.txt
black.gif
重病でないことを祈 ります。
では次の質問
6a.txt
6a.txt
tou.gif
質問3
尿に糖が混じる
胃腸が痛い
13.txt
14.txt
7.txt
itamuro.gif
筋肉痛に良いのは単 純泉や食塩泉です。
栃木の板室はいかが でしょう。
title
8.txt
fuji.gif
神経痛に良いのは単 純泉や食塩泉です。
富士眺望及元湯はい かがでしょう。
title
9.txt
kinugawa.gif
ストレスが溜まって いるあなたには単純 泉がいいです。
鬼怒川パークホテル ズで疲れを癒してはい かがでしょうか
title
31
10.txt
kusatsu.gif
眠れないあなたには こう泉がいいです。
草津に行ってみては いかがでしょう。
title
11.txt
chiyo.gif
水虫のあなたには酸 性泉がいいです。
群馬の千代の湯にい って早く治して下さ
title
い。
12.txt
kappa.gif
肌が荒れるあなたに は硫黄泉や重曹泉が
栃木の玉川温泉でつ るつるになってくだ
title
いいです。
さい。
13.txt
nikkoyumoto.gif
尿から糖がでるあな たには炭酸水素塩泉
す。日光湯元温泉は いかがでしょう。
title
や硫酸塩泉がいいで
14.txt
kitaonsen.gif
食塩泉や炭酸泉・重 曹泉が合います。
栃木の北温泉旅館が お勧めです。
title
32
●温泉探索ゲームの構成
上記したテキストファイルの配置は下のようになっている。
0.txt
0a.txt
14.txt
2.txt
1.txt
2a.txt
1a.txt
6.txt
5.txt
4.txt
3.txt
6a.txt
5a.txt
4a.txt
3a.txt
13.txt
12.txt
11.txt
10.txt
9.txt
8.txt
7txt
33
import
import
import
import
com.nttdocomo.io.*;
com.nttdocomo.ui.*;
javax.microedition.io.*;
java.io.*;
//温泉キャンバス
final class OnsenCanvas extends Canvas {
private static int event;//イ ント
ベ
行
//実
void exe() {
Graphics g=getGraphics();
int i,j;
MediaImage m;
//システム
ナ
String scenario="title"; //シ リオ
Image[] image=new Image[3];//イメージ
現在
ナ
ァ
行
特別
情報
画面
scenario 変数は、
どのシ リオフ イルを実 しているかを示す
である。
scenario 変数に「title」が表示されている時にだけ、
にタイトル
を表示する。
String url=
//引数
IApplication.getCurrentApp().getArgs()[0];
パラメータ取得
パラメータを取得するためには、Iapplication クラス(com.nttdocomo.ui パッ
ケージ)の getArgs()メソッドを使用する。
今回のプログラムでは AppParam にシナリオファイルと画像ファイルを置く URL
を記述し、それをプログラム中で取得している。
34
マ
//コ ンド
String[] cmd;
//コ ンド
int
cmdPos; //コ ンド位
String[] talk; //トーク
int
talkPos;//トーク位
try {
//
サイズ
g.setColor(g.getColorOfName(g.WHITE));
g.fillRect(0,0,getWidth(),getHeight());
if (getHeight()>=130) {
g.setOrigin((getWidth()-120)/2,(getHeight()-130)/2);
} else {
System.out.println("flag>"+(getHeight()-130));
g.setOrigin((getWidth()-120)/2,getHeight()-130);
}
マ
マ
置
置
画面
ォ
//フ ントサイズ
int ascent=Font.getDefaultFont().getAscent();
if (Font.getDefaultFont().getHeight()>12) {
g.setFont(Font.getFont(Font.SIZE_SMALL));
ascent=Font.getFont(Font.SIZE_SMALL).getAscent();
}
読 込
//イメージ み み
for (i=1;i>=0;i--) {
m=MediaManager.getImage("resource:///"+i+".gif");
m.use();
image[i]=m.getImage();
}
setSoftLabel(SOFT_KEY_2,"終 ");
while (true) {
//タイトル
if (scenario.equals("title")) {
g.drawImage(image[0],0,0);
while (true) {
keyWait();
了
if (event==Display.KEY_SELECT) {
scenario="0.txt";
break;
タイトル画面で決定キーを押すと scenario 変数に、「0.txt」が指
定される。それ以降は、選んだ選択肢のジャンプ先のテキストの
名前が指定される。
35
}
}
}
//メモリの
解放
if (image[2]!=null) image[2].dispose();
System.gc();
メモリの解放
Image クラスや MediaSound クラスのオブジェクト
は、ガーベージコレクションによるメモリの解放は行わ
れないので、dispose()メソッドを呼ぶ必要がある。
ナ
ァ
読 込
//シ リオフ イルの み み
cmd=parseString(
readText(url+scenario),'\n');
cmdPos=0;
image[2]=readImage(url+cmd[0]);
シナリオファイルの読み込み
scenario 変数に指定されているシナリオファイルを読
み込み、さらにそのファイルで指定している画像ファイル
も読み込む。シナリオファイルや画像ファイルの読み込み
が失敗したときには、エラーダイアログを表示してアプリ
を終了させる。
通信機能を使うので、ADF の「UseNetWork」キーに
「http」を指定し、エミュレータの通信先サーバも設定す
る必要がある。
画像 画
//
描
g.lock();
36
g.drawImage(image[2],0,0);
g.drawImage(image[1],0,88);
g.unlock(true);
ナ
//シ リオ
for (j=1;j<cmd.length-2;j++) {
talk =parseString(cmd[j],'\t');
talkPos=0;
event =-222;
while (true) {
//ショート ット
if (event>=0) talkPos=20*talk.length;
カ
画
//描
g.lock();
g.drawImage(image[1],0,88);
g.setColor(g.getColorOfName(g.WHITE));
for (i=0;i<talk.length;i++) {
if (talkPos/20==i) {
g.drawString(talk[i].substring(0,talkPos%20),
6,90+ascent+i*13);
talkPos++;
if (talkPos%20>talk[i].length()) talkPos=(i+1)*20;
} else if (talkPos/20>i) {
g.drawString(talk[i],6,90+ascent+i*13);
}
}
g.unlock(true);
Thread.sleep(10);
ベ
//イ ント
if (talkPos>=20*talk.length) {
keyWait();
break;
}
}
}
//ジャンプ
talk=parseString(cmd[cmd.length-2],'\t');
if (talk.length==1) {
scenario=cmd[cmd.length-1];
continue;
}
//質問
talkPos=0;
while (true) {
37
画
//描
g.lock();
g.drawImage(image[1],0,88);
g.setColor(g.getColorOfName(g.WHITE));
for (i=0;i<3 && cmdPos+i<talk.length;i++) {
if (i==talkPos) {
g.setColor(g.getColorOfRGB(255,130,130));
g.fillRect(6,90+i*13,
talk[i].getBytes().length*6,13);
g.setColor(g.getColorOfName(g.WHITE));
}
g.drawString(talk[i],6,90+ascent+i*13);
}
g.unlock(true);
ベ
//イ ント
keyWait();
if (event==Display.KEY_SELECT) {
talk =parseString(cmd[cmd.length-1],'\t');
scenario=talk[talkPos];
break;
} else if (event==Display.KEY_UP) {
if (--talkPos<0) talkPos=0;
} else if (event==Display.KEY_DOWN) {
if (++talkPos>=talk.length) talkPos=talk.length-1;
}
}
}
} catch (Exception e) {
//例
e.printStackTrace();
Dialog dialog=new Dialog(Dialog.DIALOG_ERROR,"エラー");
dialog.setText("通信エラーです");
dialog.show();
IApplication.getCurrentApp().terminate();
}
外処理
}
ネ
読 込む
// ットからテキストを み
private String readText(String url) throws Exception {
InputStreamReader in=null;
HttpConnection
c =null;
//接続
c=(HttpConnection)Connector.open(url,Connector.READ,true);
c.setRequestMethod(HttpConnection.GET);
c.connect();
38
読 込
// み み
in=new InputStreamReader(c.openInputStream());
StringBuffer sb=new StringBuffer(500);
int i=in.read();
while (i>=0) {
sb.append((char)i);
i=in.read();
}
//切断
in.close();
c.close();
return sb.toString();
}
ネ
// ットから
画像を読み込む
private Image readImage(String url) throws Exception {
MediaImage m=MediaManager.getImage(url);
m.use();
return m.getImage();
}
ネットから画像ファイルを読み込む方法は、JAR ファイルに含め
た画像ファイルを読み込む方法とほとんど同じ。違うのは、
MediaManager クラスの getImage()メソッドに指定する引数を
「url」にすること。
ベ
//イ ント
public void processEvent(int type, int param) {
if (type==Display.KEY_PRESSED_EVENT) {
event=param;
if (event==Display.KEY_SOFT2) {
IApplication.getCurrentApp().terminate();
}
}
}
//キーウェイト
void keyWait() throws Exception {
event=-222;
while (event<0) Thread.sleep(300);
}
39
画
//描
public void paint(Graphics g) {
}
字列を任意の文字で分割
//文
String[] parseString(String str,char sep) {
int i,j,size;
String[] result;
最後
割 字
//
尾に分 文
if (str.equals("")||str.charAt(str.length()-1)!=sep) str+=sep;
//サイズを得る
size=0;
i=str.indexOf(sep);
while (i>=0) {
size++;
i=str.indexOf(sep,i+1);
}
割
//分 する
result=new String[size];
size=0;
j=0;
i=str.indexOf(sep);
while (i>=0) {
result[size++]=str.substring(j,i);
j=i+1;
i=str.indexOf(sep,j);
}
return result;
}
}
文字列を任意の文字で分割
このプログラムでは文字列を任意の文字で分割するので、その処理を
行うための parseString()メソッドを使用する。
はじめに、分割前の文字列の最後尾に分割文字があるかどうかを調べ、
ないときには分割文字を追加する。その後、分割文字の数を調べ、分割
後の文字列の配列を作る。最後に、その配列に分割した文字列をセット
してから返す。
40
● ADF とエミュレータの設定
このゲームでの ADF は次のように設定する。
通信機能を使うには、ADF の「UseNetWork」キーに”http”を指定しておく必要がある。
・
・
・
・
・
・
: 温泉ゲーム
: OnsenGame.jar
: OnsenGame
: http://www.edu.i.hosei.ac.jp/~f00g0422/scenario/
: 自動的に更新
: http
AppName
PackageURL
AppClass
AppParam
LastModified
UseNetWork
ミ レ
設定
選ぶ ネ
設定
次項の図参照
行
元
-ネ
エ ュ ータで通信機能を使ったアプリを実 するときには、ダウンロード サーバがどこに
]
あるかを
しておく必要がある。「i ppliTool」のメ ューの[その他] [ ットワーク
を
と ットワーク
ダイアログが く。
「ADF の URL」に通信 となるサーバを
する。
α
開
ニ
先
指定
設定
41
●実機での実行
ァ
○ ダウンロード用 HTML フ イルの作成
OnsenGame.htm
<OBJECT DECLARE ID=HelloWorld”=DATA=”OnsenGame.jam”
TYPE=”application/x-jam”></OBJECT>
温泉ゲームを<A IJAM=”#OnsenGame”HREF=”error.html”>ダウンロード</A>
error.htm
▼―端末エラー―▼<BR>
願
iアプリ対応の i モードでお いします。<BR>
ァ
ネットにアップロードするのは以下のファイルである。
○ フ イルのアップロード
・
・
・
・
OnsenGame.jar
OnsenGame.jam
OnsenGame.htm
Error.htm
42
おわりに
体
易
今回私は、iアプリソフトを作成したわけだが、作成するにあたってプログラム自 は簡
なものであってもいくつかiアプリ 自の問題があり、それを
するのに が れた。それ
は えば、実 サイズに
があること、機 によって動く動作と動かない動作があること、
フ ントサイズの違いを にしなくてはいけないことなどがあ られる。
私自身それらのことに多くの時 を やしてしまったことが、 うように 作を続けられな
く、自分の
いくものが作れなかったという結果を いたことは
すべきことである。
さらには、プログラムを作る
での
もある。はじめに作成していた、i アプリによる問
題 作成の
において、サンプルプログラムを作るとき 大な を一 に動かそうとして
してしまった。このような 大な のプログラムを動作するときは、 し つ動かすのがプ
ログラ ングをする での基本であるのに、それを
した 動をしたことだ。
これらの、プログラ ングの基本と、iアプリの
を く見てしまうと わぬ
をして
しまうということを、
した。
しかし、これで わっては けないので、 業 も かしら 作をし、今 こそは自分の
のいくものを作り
たいと う。それが自分にプラスになることを って。
例
ォ
行
集
折
満足
過程
ミ
足
限界
気
独
間 費
過程 失敗
膨 量
上
ミ
痛感
終
情
上げ 思
種
招
調整
げ
思
骨 折
製
反省
膨 量 気
挫
少 ず
無視 行
制約 甘
思 失敗
卒 後 何 製
度
満
願
参考文献
徹也
ミ ~準備から配布まで「I
開
~ (日系 )
・ 布留川英一
『iアプリゲームプログラミング』
(毎日コミュニケーションズ)2002
・ アスキー書籍編集部 『i モード Java プログラミング~ネットワーク編』
(アスキー)2001
・ 加来
他 『はじめての i モード Java プログラ ング
アプリ」 発のすべて 』
BP 社 2001
43
44
Fly UP