第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年07月21日 更新
  1. ダイソーで330円の「人感・明暗センサーLEDバーライト(Type-C)」が意外と便利 1人暮らしの帰宅時や非常灯に便利  (2026年07月18日)
  2. なぜ「060」携帯番号は18カ月あっても延期になったのか? それでも「慌てる必要はない」現状 (2026年07月20日)
  3. 専用充電器はもう不要? 中韓スマホから国内勢まで巻き込む「USB PPS」急速充電の新常識 (2026年07月14日)
  4. 「Pixel 11」は何が変わる? メモリ減少で100ドル前後の値上げも? 出そろったうわさを整理する (2026年07月19日)
  5. JR東日本「分かりにくい」新幹線券売機を改善へ なぜ、スマホではなく「駅での最短1分購入」を実現? (2026年07月04日)
  6. ショップとAIで差別化を図る「ドコモの銀行」――住信SBIネット銀行ユーザーからは戸惑いも (2026年07月19日)
  7. 携帯番号に「060」が採用されるワケ 「電話番号とは何か」を歴史とともに振り返る (2024年10月09日)
  8. iPhoneやApple Watch一斉値上げ 17無印は14万2800円に、17eは10万円超え 加速する中古スマホ特需 (2026年07月18日)
  9. “特典終了”が続く「d払い」「dポイント」のお得さはどう変わるのか これからは「dカード」の利用が得策? (2026年07月17日)
  10. ミドルハイレンジモデルにも水冷搭載 nubiaから「Neo 5 GT Special Edition」登場 (2026年07月19日)
最新トピックスPR

過去記事カレンダー