第2回 カードゲームをつくってみよう90Xi専用ゲームiアプリ開発講座(3/3 ページ)

» 2004年10月25日 15時25分 公開
[澤橋辰典・武上将樹,ITmedia]
前のページへ 1|2|3       

キー操作をしてみよう!

 ゲームには、描画だけでなく、イベント処理が必要だ。具体的には、ユーザーからのキー入力を受け取り、それに応じた処理をする。

 カードゲームを作る場合、カードをキーで選択しなくてはならない。processEventは、何かキーが押される/離されると、システムが呼ぶメソッドである。

 キーが押された時には、Display.KEY_RELEASED_EVENTが、キーが離された時には、Display.KEY_RELEASED_EVENTが引数paramに代入されて呼ばれるので、何かが押された時にそのキーを取得するプログラムは以下のようになる。

  public void processEvent(int param, int key) {
    if (param == Display.KEY_PRESSED_EVENT) {
      event = key;
    }
  }

 このようにして取得したキーイベントを、メイン処理内で判断し、それぞれの処理を行う。

  for (;;) {
    int add = 0;
    switch(event) {
      case Display.KEY_LEFT:
      add = CARD_COUNT - 1;
      break;
      
      case Display.KEY_RIGHT:
      add = 1;
      break;
      
      case Display.KEY_SELECT:
      select_card = cursolX;
      break;
    }
    cursolX += add;
    cursolX %= CARD_COUNT;
    
    repaint2();
  }

 例えば、左ボタンを押すと、eventにはDisplay.KEY_LEFTが代入されている。その下にそのキーが押されたときに実行したい処理を記述する。

 この例では、左(右)を押すとカーソルを1つ左(右)に動かしている。決定キーを押した場合は、現在のカーソル位置のカードを記憶する。

 repaint2()は、任意のタイミングでpaintメソッドを呼び出すもので、

  static void repaint2() {
    _canvas.paint(_canvas.getGraphics());
  }

 現在のキャンバスのGraphicsオブジェクトを取得し、それを引数として、paintを呼んでいる。

 では、カーソル描画をしてみよう。

  g.setColor(0);
  g.fillRect(15+(cursolX*60), 15, 60, 40);
  
  if (select_card >= 0) {
    g.drawString((select_card+1)+"番のカードを選択", 30, 100);
  }
  
  for (int i=0;i<3;i++) {
    g.drawImage(img[i], 20+(i%3*60), 20);
  }

 Graphics.fillRectで黒く塗りつぶした矩形を描き、その上に画像を描画している。

 このままビルドしてみると、カーソルが移動した跡が残ってしまう。またカーソルを速く動かすと、画面がちらついて見えることがある。

 これを解消するためには、前述のプログラムの前に画面を消去する(全画面を白く塗りつぶす)文を追加する。加えて、すべての描画処理をロックすると、いちいち描画せずに、一回のpaintごとにまとめて描画するようになる。

 画面を背景色(デフォルトは白)で塗りつぶす処理は、

  g.clearRect(0, 0, getWidth(), getHeight());

 getWidth()はその端末の描画可能な画面幅を、getHeight()は画面高を返してくれるので(機種によって値が異なる)、(x,y)=(0,0)〜(画面幅,画面高さ)まで、つまり全画面を消去できる。

 描画をロックするには、以下の2文で描画処理を囲む。

  g.lock();
    …描画処理
  g.unlock(true);

 この間に描画処理を記述することで、画面のチラツキが発生しなくなる。

次回は「遊べるところまで作ってみよう!」

 今回は、文字や矩形や画像を表示し、キーを押すことでカーソルを動かすアプリを作成した。しかし、これではまだゲームとはいえず、まったく遊ぶことができない。

 次回は、乱数やタイマーを使った「遊ぶことができるアプリの作り方」をレクチャーする。

 ここまでのプロジェクト(ソースコードと画像)は、ここからダウンロードできる。zipファイルを解凍してできたフォルダ(src,res)を、Cardプロジェクトのフォルダに上書きすれば、ビルド・実行が可能だ。

 何といっても、ゲームアプリ作成に一番必要なのは、“クリエイティブ魂”だ。講座を読んで、「こんなことができそうだ」と感じたら、ソースを改造したり、付け加えてみたりして、いろいろとチャレンジしてほしい。

筆者紹介──澤橋辰典・武上将樹

 ケータイアプリ(iアプリ/EZアプリ/Vアプリ)のNo1ポータルサイト「アプリ★ゲット」を運営するスパイシーソフトに勤務。

 澤橋は学生時代、iアプリのコンテストでゲームアプリやツールアプリを制作し、入賞経験がある。また、所属していたサークルの後輩に、ものづくりの楽しさやアプリの奥義を授け、その後輩も入賞していることから、自らをiアプリエヴァンジェリスト(伝道者)と呼んでいる。現在も大手企業にOEM提供しているアプリの開発を行っている。

 武上は、イーアクセスとの共同事業「どこでも読メール」や、各社にOEM提供しているアプリメールサービスなどで、主にサーバサイドやデータベースまわりの開発を担当している。ゲームアプリは、もっぱらプレイ専門。

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

アクセストップ10

2026年09月20日 更新
  1. Androidでおサイフケータイを使いたくない理由 初期化で消えないデータと売却時の落とし穴 (2026年09月19日)
  2. フォルダブル歴5年の筆者も驚いた「iPhone Duo」の完成度 ソフトウェアの力で再定義できるか (2026年09月19日)
  3. 「おサイフケータイ」のリセット方法を改めてチェックする(新しめの機種限定) (2026年09月07日)
  4. 出そろった「iPhone 18 Pro」の価格を4キャリアで比較 ソフトバンクが衝撃の安さ、楽天モバイルが異例の施策 (2026年09月13日)
  5. IIJに聞く“eSIMサポート”の裏側 「つながらない」「消した」なぜ起こる? 現場が打つ次の一手 (2026年09月18日)
  6. JR東日本「分かりにくい」新幹線券売機を改善へ なぜ、スマホではなく「駅での最短1分購入」を実現? (2026年07月04日)
  7. 「iPhone 17e」と「iPhone 17」どちらが買いか? 2機種を使い込んで分かった“スペック表にない違い” (2026年04月29日)
  8. iPhone 18 Proに保護フィルムを貼るとFace ID認証できない不具合 原因は“赤外線カメラの位置” (2026年09月19日)
  9. 「iPhone 18 Pro」は何が進化した? 「iPhone 17/17 Pro」とスペックを比較 全て20万円超えの価格が悩ましい (2026年09月10日)
  10. 【3COINS】6600円の「CDプレーヤー」 スマホやUSBメモリの音楽データも再生できる (2026年09月19日)
最新トピックスPR

過去記事カレンダー