JAVAプログラミング講座  宇宙のJAVAさん外伝
「 第七銀河の彼方に 」


宇宙のJAVAさん外伝「第七銀河の彼方に」

- 第3話  見果てぬ未来   -


くまがフィールドを歩くプログラム(2)

 

Mr X さて、前回の「くまの歩くプログラム」説明の続きをします。

みゃあ うし君 はーい!

Mr X では、ソースファイル を見てください。
イベント処理 processEvent() 関数からの説明です。

 


// === イベント処置 processEvent() ===
public void processEvent(int type, int param) {
  if (Display.KEY_RELEASED_EVENT == type) {
    if (param == Display.KEY_SOFT1){
      IApplication.getCurrentApp().terminate();
    }
    int ox=x, oy=y;
    if (param == Display.KEY_UP) y--;
    if (param == Display.KEY_DOWN) y++;
    if (param == Display.KEY_RIGHT) x++;
    if (param == Display.KEY_LEFT) x--;
    if(map[x][y]!=1){ x=ox; y=oy; return;}
    if ( x<3 ) x=3;
    if ( x>95 ) x=95;
    if ( y<3 ) y=3;
    if ( y>95 ) y=95;
    repaint();
  }
} // processEvent()

Mr X 携帯のボタンを押したりすると、このイベント関数が呼び出されます。

  if (Display.KEY_RELEASED_EVENT == type) {

もし、携帯のキーが押された場合は・・・

    if (param == Display.KEY_SOFT1){

で、押されたキーがファンクション1( Exit )の場合は・・・

      IApplication.getCurrentApp().terminate();

この iアプリを終了せよ!!!

Mr X この IApplication.getCurrentApp().terminate() は、iアプリを終了させるお決まりの命令です。
覚えといてください。 試験に出ますよ。

Mr X 携帯のボタンが押されて、ファンクションキー1でなかった場合は、次のプログラムが処理されます。

    int ox=x, oy=y;
    if (param == Display.KEY_UP) y--;
    if (param == Display.KEY_DOWN) y++;
    if (param == Display.KEY_RIGHT) x++;
    if (param == Display.KEY_LEFT) x--;
    if(map[x][y]!=1){ x=ox; y=oy; return;}
    if ( x<3 ) x=3;
    if ( x>95 ) x=95;
    if ( y<3 ) y=3;
    if ( y>95 ) y=95;
    repaint();


Mr X 最初に現在のX変数を、OX変数に保存します。
同様にY変数をOY変数に保存します。

で、次は

上が押されていたら、Y変数を1減らすプログラム
下が押されていたら、Y変数を1増やすプログラム
右が押されていたら、X変数を1増やすプログラム
左が押されていたら、X変数を1減らすプログラム

です。

で、X,Y の移動先のマップがもし1(野原)以外だったら!
XとYを保存していた前の座標に戻してやるのです。

これで、X,Y座標は野原以外には入れなくなります。
このような処理で、岩や海には「くまさん」が入れないです。

その後、お決まりの飛び出し防止プログラムで、上下左右からX,Yが飛び出すのを防いでいるわけです。

うし君 あれ? たしかこのマップって、周りは海(map[][]=3)で囲まれてたも〜
無理に座標で飛び出し防止プログラムを作らなくても、主人公のくまさんは飛び出さないんじゃないかも??

Mr X うし君! いい所に気が付きましたね!!
もちろん、この4行の飛び出し防止処理には理由があります!
それは!

みゃあ うし君 

 

Mr X こいつのミスです ↓

やぁ!
爆裂健

 

Mr X という事で、下の4行は意味の無いプログラムです。
消してしまって、かまいません。

    if ( x<3 ) x=3;
    if ( x>95 ) x=95;
    if ( y<3 ) y=3;
    if ( y>95 ) y=95;

Mr X 最後に、再作画 repaint() を行います。
新しいくまさんの座標で、画面を描きます。

Mr X 最後の関数は作画関数 paint() です。
これで、背景マップと主人公のくまを作画しています。

 

// === 作画 paint() ===
public void paint(Graphics g) {

  // GCロック
  g.lock();
  // マップ作画(くまの座標を中心に背景の作画)
  for(int _x=0; _x<5 ;_x++) {
    for(int _y=0; _y<5 ;_y++) {
      g.drawImage( img[map[_x+x-2][_y+y-2]], _x*20, _y*20);
    }
  }
  // くま作画
  if(isK){
    g.drawImage( img[0], 2*20, 2*20);
  } else {
    g.drawImage( img[4], 2*20, 2*20);
  }
  // くま状態変更
  isK = !isK;

  // GCアンロック
  g.unlock(true);
} // paint()

 

Mr X g.lock() 命令で、画面表示をやめます。
その後、画面にいろいろ作画して、最後の g.unlock(true) 命令で、一度に作画されます。
これにより、画面作画最中の見苦しい画面を見せないですみます。
とても便利です。

Mr X 作画は現在の X Y座標を中心に、map[][] の値の背景を描いています(*1)
で、最後に中央に「くまさん」を作画します。
そのとき、isKが真なら img[0](左足を上げているくま画像)を、
偽なら img[4](右足を上げているくま画像)を作画します。

で次に、isK の値を真だったら偽に、偽だったら真に反転させています。
これにより、paint() が呼ばれるたびに、くまさんが足踏みします。

Mr X これで、今回の講座はおしまいです。
いままでのJAVA講座と違い、すでに完成しているプログラムを上から説明していくという新たなスタイルの講義でしたが、どうだったでしょうか?

みゃあ 単に、最初から説明するのが面倒だっただけじゃないのみゃ〜??

Mr X では機会があったら、また Mr X がiアプリ講座を開きますで、ご期待ください。

こんかい紹介したプログラムは、http://birdynet.com/bakuretuken/i/ で公開しています。

503シリーズをお持ちの方は、ダウンロードしてみてください。

 

 

くまがフィールドを歩くプログラム FIN

 

 

(*1) ここら辺をもっと細かく知りたい人は、宇宙のJAVAさん 第弐部 RPGみたいなものを作ろう!を参照してね


宇宙のJAVAさん外伝 (C) BakuretuKen 2001

戻る