is = Connector.openInputStream(SP_POS + SP_FIRST_FLG);
flg_first = is.read();
is.close();
|
|
ここに何もデータがなければ、0の値を拾って初めての起動と判断し、サーバから画像データを取得する。取得したらスクラッチパッドにサイズとデータを保存し、スクラッチパッド先頭バイトに1を書き込む。このとき書き込む値は0以外であれば何でもよい。
int image_pos = 0;
//初回起動時
if (flg_first == 0) {
byte[] byteData;
for(int i=0;i<RES_COUNT;i++) {
hc = (HttpConnection)Connector.open(IApp.getSourceURL() + "res/card" + i + ".gif",
Connector.READ, true);
hc.setRequestMethod(HttpConnection.GET);
hc.connect();
image_size[i] = (int)hc.getLength();
is = hc.openInputStream();
byteData = new byte[image_size[i]];
is.read(byteData);
is.close();
hc.close();
dos = Connector.openDataOutputStream(SP_POS + (SP_IMAGE_SIZE+i*4));
dos.writeInt(image_size[i]);
dos.close();
os = Connector.openOutputStream(SP_POS + (SP_IMAGE_DATA+image_pos));
os.write(byteData);
os.close();
image_pos += image_size[i];
}
//データのダウンロードと保存に成功したら起動フラグを立てる
os = Connector.openOutputStream(SP_POS + SP_FIRST_FLG);
os.write(1);
os.close();
} else {
//2回目以降起動時
…
}
|
|
今回の場合、72種類のカード絵柄をまとめて一つのファイルにしたため、描画をする時に32×32ピクセルの絵柄を、1枚ずつ切り出さなくてはならない。この作業を簡易化するため、以下のようにカード番号とX、Y座標を指定することで、カードの枠と該当する箇所の絵柄を描画するメソッドを作成した。
private void drawImageCard(Graphics g, int card, int dx, int dy) {
if (card < 0 || 71 < card) {
return;
}
g.drawImage(img[0], dx, dy);
g.drawImage(img[2], dx+7, dy+30, (card%12)*32, (card/12)*32, 32, 32);
}
|
|
次回より、いよいよ通信対戦を行うためのサーバサイドのプログラミングについて解説していく。ネットワークを利用できるアプリが作れるようになれば、今までとは一味違ったこともできるようになるはずだ。
Copyright © ITmedia, Inc. All Rights Reserved.