第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年04月06日 更新
  1. スマホ大型化の裏で高まる「小型音楽プレーヤー」待望論 現役ウォークマンか、“ポストiPod”のiPhone SEか (2026年04月05日)
  2. WAON POINTやAEON Payのキャンペーンまとめ【4月4日最新版】 ポイント10倍多数、1万ポイント還元も (2026年04月04日)
  3. Suica、JRE POINTのキャンペーンまとめ【4月5日最新版】 チャージで最大2万ポイント還元のチャンス (2026年04月05日)
  4. 楽天ペイと楽天ポイントのキャンペーンまとめ【4月3日最新版】 1万〜3万ポイント還元のチャンスあり (2026年04月03日)
  5. ソフトバンクが「今回もやる」とGalaxy S26を月額1円で販売――販売方法を早急に見直さないと撤退を迫られるメーカーも (2026年03月08日)
  6. 皆さん、パソコンやスマホを何で持ち運んでいますか? 私はリュックサックです (2026年04月04日)
  7. 新幹線でも「音漏れ」気にせず映画に没頭 NTTの技術実装で 公共交通機関で初 (2026年04月04日)
  8. LeicaコラボのXiaomiスマホ「Leitzphone」、中国モデルはデザインと名称が異なる (2026年04月05日)
  9. 「小型iPhone SEを復活させて」──手放せない理由SNSで話題 どこが“ちょうどいい”と評価されるのか (2025年11月29日)
  10. 選択肢が増えた「Starlink衛星とスマホの直接通信」 ドコモとauのサービスに違いはある? (2026年04月02日)
最新トピックスPR

過去記事カレンダー

2026年